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/p/9936807.html

RISC-V踩坑记----__builtin_clz((x)库函数的应用相关推荐

  1. go nil json.marshal 完是null_字节跳动踩坑记#3:Go服务灵异panic

    这个坑比较新鲜,刚填完,还冒着冷气. - 1 - 在字节跳动,我们服务的所有 log 都通过统一的日志库采集到流式日志服务.落地 ES 集群,配上字节云超(sang)级(xin)强(bing)大(ku ...

  2. 微信公众号服务器配置但没有回调,微信公众号 “服务器配置” 踩坑记

    前言 今天工作的时候,碰到一个极其无语的关于微信公众号的坑,为此,我语言攻击了腾讯的机器人客服.然而并没有卵用...万万没想到,我还是解决了这个问题,并记录下踩坑经历,希望能帮到一些朋友吧. 背景 今 ...

  3. spug上线服务踩坑记

    spug是一款优秀的自动化运维平台,  这让我们想自动化又向前迈了一步. 在过程中遇到的问题,记录在这里供各位看官参考. 目录 一.远程执行命令问题 二.软连接的问题 三.jdk 版本问题 四.ssh ...

  4. GoDB开发踩坑记(代码实现)

    前言 之前写了一篇GoDB开发踩坑记但是内容有些不全,所以来补充一下.所以没看过GoDB开发踩坑记的可以先看一下那篇文章. 正文 golang encode_josn--把map[string]int ...

  5. Go 语言踩坑记——panic 与 recover

    题记 Go 语言自发布以来,一直以高性能.高并发著称.因为标准库提供了 http 包,即使刚学不久的程序员,也能轻松写出 http 服务程序. 不过,任何事情都有两面性.一门语言,有它值得骄傲的优点, ...

  6. python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django

    <>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...

  7. 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题

    ❝ 本系列每篇文章都是从一些实际的 case 出发,分析一些生产环境中经常会遇到的问题,抛砖引玉,以帮助小伙伴们解决一些实际问题.本文介绍 Flink 时间以及时区问题,分析了在天级别的窗口时会遇到的 ...

  8. Spring @Transactional踩坑记

    @Transactional踩坑记 总述 ​ Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务 ...

  9. 服务器重新部署踩坑记

    服务器重新部署踩坑记 Intro 之前的服务器是 Ubuntu 18.04 ,上周周末想升级一下服务器系统,从 18.04 升级到 20.04,结果升级升挂了... 后来 SSH 始终连不上,索性删除 ...

  10. IdentityServer 部署踩坑记

    IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...

最新文章

  1. Java 8 - 数值流Numberic Stream
  2. Hibernate关键字inverse和cascade
  3. 指针嵌套指针 拷贝_C++智能指针小结
  4. 事务超时时间无效_阿里分布式事务组件 fescar/seata 对 XA 2PC 的改进及其设计思想...
  5. mysql远程访问时间长无反应_远程MySQL访问需要很长时间
  6. 基于消息队列的日志组件
  7. java 程序流程控制知识点_JAVA基础知识点梳理三:流程控制语句
  8. ubuntu创建php文件,ubuntu系统创建桌面快捷方式的方法
  9. 解决mac上每次升级nodejs都要重新安装扩展包的问题
  10. Application Request Routing (ARR) TIME OUT 502
  11. Biztalk中使用SQL适配器获取数据并用web服务发布的例子
  12. clickhouse时间日期函数
  13. Qt_MsgBox 非常简单 自定义实现类似QMessageBox的弹窗 静态调用
  14. 能源消耗总量计算公式_七、能源统计(21)
  15. ACER 4750G开机卡在LOGO解决办法
  16. jsp js弹出网页对话框
  17. V-Ray for SketchUp破解版(SketchUp渲染插件)
  18. C语言学习方法、学习平台及项目推荐
  19. 小程序 侧边栏(导航)滑动
  20. 2022 年值得关注的 8 个人工智能趋势

热门文章

  1. Jaxb annotation使用
  2. 浅谈Java中的hashcode方法
  3. 实验3 --俄罗斯方块 with 20135335郝爽
  4. Visual Studio 的码云扩展 V1.0.85 发布
  5. 深解微服务架构:从过去,到未来
  6. 使用vsftp作为集群的yum仓库
  7. 东网科技荣膺2016中国大数据最佳实践奖
  8. 对于频繁的写数据处理方式
  9. 【VBA编程】10.自定义集合
  10. Hive hang without response