arm - ARM 上的 LSB 到 MSB 位反转

标签 arm bit-manipulation neon

我需要用 LSB 而不是 MSB 中的每个字节反转 YUV 图像。我已阅读 Best Algorithm for Bit Reversal ( from MSB->LSB to LSB->MSB) in C但我想做一些 ARM 优化的事情。

int8 *image;
for(i = 0; i < size; i++) {
    image[i] = reversebit8(image[i]); //Use the lookup mechanism
}

当我控制图像格式(两字节 YUYV 或任何排列)时,我可以反转 16 位:
int16 *image;
for(i = 0; i < size / 2; i++) {
    image[i] = reversebit16(image[i]);
}

图像从 YUYV LSB 到 UYVY MSB。甚至是 32 位:
int32 *image;
for(i = 0; i < size / 4; i++) {
    image[i] = reversebit32(image[i]);
}

图像从 YUYV LSB 到 VYUY MSB。

问:我怎样才能以优化的方式为 ARM 做到这一点?霓虹也不错。

我认为那些说明http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0100a/armasm_cihjgdid.htm可能有用。

最佳答案

ARM RBIT指令做你想要的。编写一个循环,在每个对齐的 4 字节值上调用它。

A8.6.134 RBIT
Reverse Bits reverses the bit order in a 32-bit register. Encoding T1 ARMv6T2, ARMv7

RBIT<c> <Rd>,<Rm>

if ConditionPassed() then
   EncodingSpecificOperations(); bits(32) result;
   for i = 0 to 31 do
      result<31-i> = R[m]<i>;
   R[d] = result;

关于arm - ARM 上的 LSB 到 MSB 位反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436466/

相关文章:

c - 按位移位字符数组

c++ - 如何从文件中连续读取 N 个字节直到 EOF

android - 如何将 rust 代码编译并链接到 android apk 打包的应用程序中

linux - 用于 RHEL 的 gdb-multiarch

ios - 编译包含arm64的cocos2d-iphone v2.x

c - 如何使用 Neon SIMD 将无符号字符转换为有符号整数

image-processing - 二进制图像上的快速像素计数 - ARM neon 内在函数 - iOS Dev

encryption - 使用cryptodev引擎和硬件加速器的openssl速度测试导致虚假的计时结果

c - 了解 C 中的 unsigned char 左旋转

c++ - 构建使用 Eigen 的项目时出现编译器错误,Eigen 是线性代数的 C++ 模板库