RISC-V的确是个好东西,可是,免费的东西往往需要付出代价才能得到了,最近遇到了一个算法中的问题,追了好久,最终追到了这个库函数中,没想到,这个库函数居然还隐藏着一些猫腻。值得记下来啊。
首先上一个在X86平台下的例子:
1 #include <stdio.h>
2 /* Position of the most significant bit of x */ 3 #define gap8_fl1(x) (31 - __builtin_clz((x))) 4 5 static int array[32]; 6 int main() 7 { 8 int test = 0xFFFFF00; 9 10 while(test > 0) 11 { 12 test = test>>1; 13 printf("test:%x gap8:%d \n",test,gap8_fl1(test)); 14 } 21 22 return 0; 23 } 24 ~
这个是编译器的库函数,表示要获取你输入参数的位数。
测试结果:
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,这个坑真是的不小啊。算是学习了。
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
分类:
RISC-V platform
标签:
GDB RISC-v
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战