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,这个坑真是的不小啊。算是学习了。

RISC-V踩坑记----__builtin_clz((x)库函数的应用的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  3. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  4. vue踩坑记

    vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...

  5. Spark踩坑记:Spark Streaming+kafka应用及调优

    前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...

  6. iOS自动化打包上传的踩坑记

    http://www.cocoachina.com/ios/20160624/16811.html 很久以前就看了很多关于iOS自动打包ipa的文章, 看着感觉很简单, 但是因为一直没有AppleDe ...

  7. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  8. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  9. djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记

    情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...

  10. HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

    HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...

随机推荐

  1. nodejs 使用官方oracledb库连接数据库 教程

    https://www.cnblogs.com/rysinal/p/7779055.html 导读 linux下安装使用 gcc安装 nodejs安装 oracle客户端安装 npm安装oracled ...

  2. 25. pt-slave-restart

    pt-slave-restart -h 192.168.100.103 -P 3306 -u admin -p admin \--error-numbers 1032 set global slave ...

  3. day 8:open文件和with的使用

    本节内容: 1,open打开文件后的几种操作 2,with和open的连用 3,flush的使用 1:open 1)r权限 f = open("D:\\auto\project\\fulls ...

  4. “天龙八步”细说浏览器输入URL后发生了什么

    本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接: 7.浏览器解析HTML: 8.浏览器布局渲染: 总结 输 ...

  5. select 的选中问题

    function bind(pageIndex) { if (getQueryString("_status") == "3") {//从首页中慢病管理人数进入 ...

  6. 数据统计 任务的一点感想 , sql 使用中的坑。

    需求: 多张表(个数不定,需求不是非常明确,只有一个大致需求)根据业务需求统计出一些数据 (按天统计,数据有多条校验规则)进行上传. 注意: 校验数据是否正确是需要第三放来反馈的,而且第三方的测试环境 ...

  7. STC项目风险分析

    一.引言 由于项目的实现具有不确定性,所以每个项目都是存在风险的. 项目实现过程中的复杂性以及项目内外许多变化的因素,都会造成项目实现过程中的风险. 如果不能对项目的风险进行很好的分析和管理,那么项目 ...

  8. ----regular expression in js----

    正则表达式:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式. 搜索模式可用于文本搜索和文本替换. ...

  9. 学习python importlib的导入机制

    1. Importer协议 协议涉及两个对象: Finder 和 loader 1. Finder 实现了方法: finder.find_module(fullname, path=None) 返回一 ...

  10. 防止用户重发发生ajax请求

    1.前端限制 点击提交后,将该元素禁用,等待请求结束后再次释放(解除禁用). 可以使用ajax中的 success 请求成功后的回调函数进行按钮释放. 2.防抖动 暴力连续点击按钮,可以通过闭包里的  ...