45 lines
827 B
C
45 lines
827 B
C
/**
|
|
* @file util.c
|
|
* @author ATShining (1358745329@qq.com)
|
|
* @brief
|
|
* @version 0.1
|
|
* @date 2023-09-29
|
|
*
|
|
* @copyright Copyright (c) 2023
|
|
*
|
|
*/
|
|
#include "types.h"
|
|
|
|
/**
|
|
* @brief 获取x的最低有效位
|
|
*
|
|
* @param x 需要获取最低有效位的数
|
|
* @return int 最低有效位的位置
|
|
*/
|
|
int ffs(int x)
|
|
{
|
|
int ret;
|
|
|
|
__asm__ volatile("clz\t%0, %1"
|
|
: "=r"(ret)
|
|
: "r"(x)
|
|
: "cc");
|
|
ret = (WORD_BITS - 1) - ret;
|
|
return ret;
|
|
}
|
|
/**
|
|
* @brief 获取x的前导零的个数
|
|
*
|
|
* @param x 需要获取前导零的个数的数
|
|
* @return int 前导零的个数
|
|
*/
|
|
int clz(umword_t x)
|
|
{
|
|
int ret;
|
|
|
|
__asm__ volatile("clz\t%0, %1"
|
|
: "=r"(ret)
|
|
: "r"(x)
|
|
: "cc");
|
|
return ret;
|
|
} |