Files
mkrtos-real/mkrtos_knl/knl/util.c
2024-09-17 11:38:12 +08:00

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;
}