RISC-V踩坑记----__builtin_clz((x)库函数的应用
2024-09-10 05:02:58
RISC-V的确是个好东西,可是,免费的东西往往需要付出代价才能得到了,最近遇到了一个算法中的问题,追了好久,最终追到了这个库函数中,没想到,这个库函数居然还隐藏着一些猫腻。值得记下来啊。
首先上一个在X86平台下的例子:
1 #include <stdio.h>
/* Position of the most significant bit of x */
#define gap8_fl1(x) (31 - __builtin_clz((x))) static int array[32];
int main()
{
int test = 0xFFFFF00; while(test > 0)
{
test = test>>1;
printf("test:%x gap8:%d \n",test,gap8_fl1(test));
} return 0;
}
~
这个是编译器的库函数,表示要获取你输入参数的位数。
测试结果:
test:7ffff80 gap8:26
test:3ffffc0 gap8:25
test:1ffffe0 gap8:24
test:fffff0 gap8:23
test:7ffff8 gap8:22
test:3ffffc gap8:21
test:1ffffe gap8:20
test:fffff gap8:19
test:7ffff gap8:18
test:3ffff gap8:17
test:1ffff gap8:16
test:ffff gap8:15
test:7fff gap8:14
test:3fff gap8:13
test:1fff gap8:12
test:fff gap8:11
test:7ff gap8:10
test:3ff gap8:9
test:1ff gap8:8
test:ff gap8:7
test:7f gap8:6
test:3f gap8:5
test:1f gap8:4
test:f gap8:3
test:7 gap8:2
test:3 gap8:1
test:1 gap8:0
test:0 gap8:0
让我们再看一下在RISC-V平台下的打印:
test:7ffff80 gap8:26
test:3ffffc0 gap8:25
test:1ffffe0 gap8:24
test:fffff0 gap8:23
test:7ffff8 gap8:22
test:3ffffc gap8:21
test:1ffffe gap8:20
test:fffff gap8:19
test:7ffff gap8:18
test:3ffff gap8:17
test:1ffff gap8:16
test:ffff gap8:15
test:7fff gap8:14
test:3fff gap8:13
test:1fff gap8:12
test:fff gap8:11
test:7ff gap8:10
test:3ff gap8:9
test:1ff gap8:8
test:ff gap8:7
test:7f gap8:6
test:3f gap8:5
test:1f gap8:4
test:f gap8:3
test:7 gap8:2
test:3 gap8:1
test:1 gap8:0
test:0 gap8:32
这里就有一个差别,就是当x等于0的时候,__builtin_clz((x)的值在risc-v中居然是-1,这个坑真是的不小啊。算是学习了。
最新文章
- Java中使用IO流实现大文件的分裂与合并
- Jquery实现花瓣随机飘落(收藏自慕课网)
- Java多线程理解
- 如何用参数化SQL语句污染你的计划缓存
- lighttpd fastcgi的搭建
- java大数处理
- PHP初入,div知识点整理(特效&;字体等元素的使用整理)
- 《通过C#学Proto.Actor模型》之Behaviors
- vue+cordova插件使用,bluetoothSerial.connect()连接失败
- java之搭建webservice服务端
- java 子类父类相互转换
- JS中点击事件冒泡阻止
- R语言绘制带errorbar 的柱状图
- result源码
- 让WIN7桌面显示IE图标
- 将hive的hql执行结果保存到变量中
- python signal
- XSS与CSRF两种跨站攻击总结
- React 同构思想
- Ubuntu设置中文-以及-安装拼音输入法