zoukankan      html  css  js  c++  java
  • 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 
    ",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,这个坑真是的不小啊。算是学习了。

  • 相关阅读:
    vue简单 tabbar封装
    Vue自定义指令实例(实时时间转换指令)
    flutter-搜索条
    flutter-保持页面的效果
    flutter-毛玻璃的效果(很消耗性能)
    flutter-路由跳转动画效果(渐隐渐现,缩放效果,旋转缩放)
    flutter-底部导航&不规则导航
    flutter-异步请求选择回来的方法
    flutter-一般页面导航和返回(传递和接收参数)
    flutter-卡片组件布局
  • 原文地址:https://www.cnblogs.com/dylancao/p/9936807.html
Copyright © 2011-2022 走看看