assembly 将位掩码拆分为设置位上的子掩码

68de4m5k  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一个掩码,有少量的设置位,只有3或4位。掩码可以高达64位,但让我们举一个简短的例子-10100101我想生成的掩码在设置位停止,但包括较低的位,直到前一个停止位:

00000001
00000110
00111000
11000000

我可以在一个循环中做到这一点,方法是隔离最低位,并将这些位添加到其右侧((x & -x) << 1) - 1,然后使用异或删除前一个掩码。
问题是,在不使用swar或simd循环的情况下,是否可以更高效地并行执行?

ktecyv1j

ktecyv1j1#

服用和用途:

#include <stdio.h>
   #include <stdint.h>
   void main() {
     int32_t val = 0xa5; // input value
     int32_t sum = 0, mask;
     while(val != 0) {
         mask = (val - 1) ^ val;
         printf("Mask-out is: %x\n", mask ^ sum);
         sum  =  mask;
         val &= ~mask;
     }
   }

相关问题