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

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整蛊偷快递的家伙!不愧是 NASA 工程师

分享个有意思的新闻给大家&#xff0c;一笑之余&#xff0c;也可以学习下文中主角的理工科思维。不知道你有木有过。。快递包裹被别人偷走的经历&#xff1f;&#xff1f;包裹历经波折终于到了家门口&#xff0c;结果。。却被人给顺走了&#xff01;&#xff01;报警&#xff1…

dns 320 linux,linux 下 dns服务器(三 配置篇)

如何设置一个caching only域名服务器1 设置所谓caching only域名服务器是指一个服务器运行有n a m e d进程&#xff0c;但是并不对任何域(区)的域名信息具有授权&#xff0c;也就是并不向外提供本域的域名匹配信息&#xff0c;不负责I n t e r n e t上对本组织域名解析的应答&…

图解Cisco Packet Tracert之利用TFTP来升级路由器的IOS

对于我们这些学生来说&#xff0c;如果是自学的朋友来说&#xff0c;想摸到真机那实在是太难了&#xff0c;说去买一台呢&#xff1f;买来又没有多大作用&#xff0c;利用dynamips来模拟呢&#xff0c;他本来就是加载的IOS&#xff0c;在flash里面又没有IOS&#xff0c;这时候那…

终于用上gcc-4.1编译的系统了

终于用上gcc-4.1编译的系统了 把PHP、APACHE2、MYSQL又配好了。数据还是原来的数据。posted on 2006-05-19 07:35 浙林龙哥 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/huqingyu/archive/2006/05/19/403972.html

Android中的动画有哪几类?各自的特点和区别是什么?

在 android.view.animation包中有四种基本的动画 &#xff0c;透明&#xff0f;伸缩&#xff0f;移动&#xff0f;旋转。动画类型Android的animation由四种类型组成XML中alpha渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转…

不指导,一起学习

不敢说指导&#xff0c;只能说以自己的观点来说下这个事情。年前的时候&#xff0c;我一个朋友的朋友也想学电子方面的技术&#xff0c;他毕业后做汽修工作&#xff0c;但是没做多久没离职了&#xff0c;之后在工厂上班一段时间&#xff0c;最近两年帮亲戚一起打理一些生意上的…

linux按键检测结束,关于Linux下按键的检测

写这篇博客是因为自己想做一个fc模拟器&#xff0c;核心代码(6502和ppu的模拟代码)用的原子开发板的代码&#xff0c;人家是从pc向单片机移植&#xff0c;我是反过来了&#xff0c;不过因为写的不错&#xff0c;用函数指针代替了switch方法可以学习一下&#xff0c;so就用了它的…

(翻译)Tricks of the windows game programming Gurus(Windows游戏大师之路) --- 前言(作者:ANDRE LAMOTHE 1999)...

前言&#xff1a;在一篇零编程学习游戏编程的文章文章中提及此书&#xff0c;而且书评很不错&#xff0c;在当时反响很剧烈。因此下了个PDF版的慢慢学习。虽然接触游戏编程很久&#xff0c;玩的五花八门的游戏也有很多&#xff0c;但真正完成的游戏只有一个扫雷游戏。文章中建议…

C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置

先看几个概念&#xff1a; 1、bss是英文block started by symbol的简称&#xff0c;通常是指用来存放程序中未初始化的全局变量的一块内存区域&#xff0c;在程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定&#xff0c;用户应…

如何阅读3,500万个博客?

博客至今已经出现5年了&#xff0c;目前这股热潮正在愈演愈烈。博客又叫网络日志&#xff0c;现在已经非常普及&#xff1b;跟踪3,500多万个博客的Technorati Inc.称&#xff0c;博客的总数量每6个月就增加一倍。这就带来了一个问题&#xff1a;如何从浩如烟海的信息中找到想要…

u-boot与bootloader及其区别

Bootloader比Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道&#xff0c;windows开机时会首先加载bios&#xff0c;然后是系统内核&#xff0c;最后启动完毕。那么bootloader就相当于手机的bios&#xff0c;它在手机启动的时候根据基带初始化硬件&#xff0c;然后…

assets目录与res/raw目录下文件的区别

assets目录与res/raw目录下文件的区别 assets目录下的文件不会被编译成二进制&#xff0c;直接被打包到apk中。 assets目录中的文件不会在R.Java中建立索引。 assets目录下的文件需借助AssetManager访问。 assets目录下可以建立自己的子目录。 res/raw目录下的文件会被编译成二…

linux gdb 忽略信号,linux gdb调试基本命令

近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令&#xff0c;希望能帮到大家。linux gdb调试基本命令1.启动调试前置条件&#xff1a;编译生成执行码时带上 -g&#xff0c;如果使用Makefile&#x…

Adobe Dreamweaver 添加库、标签和属性

您可以在 Dreamweaver 中使用标签库编辑器添加标签库&#xff0c;并将标签和属性添加到标签库中。 添加一个标签库在标签库编辑器&#xff08;“编辑”>“标签库”&#xff09;中&#xff0c;单击加号 () 按钮&#xff0c;然后选择“新建标签库”。在“库名称”框中&#xf…

白话debounce和throttle

遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件&#xff0c;如果不进行性能的优化&#xff0c;就可能会出现页面卡顿的现象&#xff0c;比如&#xff1a; 鼠标事件&#xff1a;mousemove(拖曳)/mouseover(划过)/mouseWheel(滚屏)键盘事件&#xff1a;keypress(基于…

Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)

Windows平台下使用Active Directory对Subversion进行权限控制&#xff08;非完美解决方案&#xff09; Windows平台下使用Active Directory对Subversion进行权限控制&#xff08;非完美解决方案&#xff09; 目前网上找到的Subversion的配置说明中&#xff0c;关于用户权限控制…

wireshark抓包工具的使用及分析

前段时间看到群里在讨论Wireshark抓包工具&#xff0c;想写一篇使用笔记但一直没来得及写&#xff0c;本篇就通过实例来分享wireshark抓包工具的使用。Wireshark简介 Wireshark 是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包&#xff0c;并尽可能显示出最为详…

EventLoop笔记

node环境 Event Loop各阶段&#xff1a; - timers 阶段&#xff1a;这个阶段执行 setTimeout 和 setInterval 的回调函数。- I/O callbacks 阶段&#xff1a;不在 timers 阶段、close callbacks 阶段和 check 阶段这三个阶段执行的回调&#xff0c;都由此阶段负责&#xff0c…

如何实现android和服务器长连接呢?推送消息的原理

转载地址&#xff1a;http://blog.csdn.net/q376420785/article/details/8653958 前言&#xff1a;现在的大多数移动端应用都有实时得到消息的能力&#xff0c;简单来说&#xff0c;有发送消息的主动权和接受消息的被动权。例如&#xff1a;微信&#xff0c;QQ&#xff0c;天气…

linux入门系统那个好,初学Linux哪个发行版本好?这些更合适!

Linux是非常受欢迎的技术&#xff0c;现在很多人都开始转行学习Linux&#xff0c;不过大家都知道Linux发行版本众多&#xff0c;在学习的时候我该选择哪个发行版本呢?为大家介绍一下。其实在挑选Linux发行版本之前&#xff0c;我们首先要根据自己的需求决定。如果抱着试试的心…