RISC-V踩坑记----__builtin_clz((x)库函数的应用
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)库函数的应用的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- vue踩坑记
vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...
- Spark踩坑记:Spark Streaming+kafka应用及调优
前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...
- iOS自动化打包上传的踩坑记
http://www.cocoachina.com/ios/20160624/16811.html 很久以前就看了很多关于iOS自动打包ipa的文章, 看着感觉很简单, 但是因为一直没有AppleDe ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记
情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
随机推荐
- C/C++字符串函数使用整理
#strlen+功能:求字符串长度.+说明:strlen(a) 函数类型常为int,返回字符串长度大小,参数为字符数组名,也可为字符串和指向字符串的指针.+使用样例: char a[ ]={" ...
- 使用PYTHON完成排序(堆排序)
class HeapStructure: def __init__(self, ls): self.ls = ls def shift_up(self, index): # 上移使符合堆要求 if i ...
- Java程序简介
---恢复内容开始--- java程序的基本构成: HelloDate.java package 语句 import 语句 类定义 -class 一个文件只能有一个public 类 (与文件同名) 类 ...
- rsync @ERROR: auth failed on module backup 解决思路及附录rsync常见问题及解决办法
昨晚小版本上线,使用rsync往服务器上传文件时,client报如下异常: @ERROR: auth failed on module backup rsync error: error starti ...
- 离线eclipse添加web工程
下载了eclipse,先写的后台程序,后来写前台程序的时候发现没有 新建->web dynamic project,如下方式添加: 帮助->安装新软件,在work with中选择版本对应的 ...
- mongodb分组排序
@Override public MessageDto getCheckInMembersByFlight(String fltDt, String fltNr, String channel,Str ...
- docker私库Harbor部署(转载)
系统环境 centos7.3docker-ce docker version: 18.03.0docker-compose version: 1.21.0 Install Docker CE 安装依赖 ...
- JDK工具 javap
javap -c [ClassName] 编译为汇编语言
- Promise注意点
一. Promise API 概述 var p = new Promise( function(resolve,reject){ // resolve(..) 用于决议 / 完成这个 promise ...
- 将Paul替换成Ringo
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...