You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于C内联__asm()的最小32位位反转实现及优化问询

32位位反转的最小代码体积优化方案

现有内联汇编实现(23字节)

这是最初实现的23字节内联汇编版本,通过字节交换和位掩码操作完成反转:

uint32_t reverse_bits_23b(uint32_t x) {
    __asm__(
        "movl %0, %%eax\n"
        "bswap %%eax\n"
        "movl %%eax, %%ebx\n"
        "shrl $16, %%eax\n"
        "andl $0x00FF00FF, %%ebx\n"
        "andl $0xFF00FF00, %%eax\n"
        "shrl $8, %%ebx\n"
        "shll $8, %%eax\n"
        "orl %%ebx, %%eax\n"
        "movl %%eax, %0\n"
        : "=r"(x)
        : "0"(x)
        : "%eax", "%ebx"
    );
    return x;
}

优化后的13字节内联汇编版本

通过精简指令序列(使用bswap、循环移位和字节交换指令),将汇编代码压缩至13字节:

uint32_t reverse_bits_13b(uint32_t x) {
    __asm__(
        "bswap %0\n"
        "mov $4, %%cl\n"
        "ror %cl, %0\n"
        "xchgb %h0, %b0\n"
        "rorw $2, %0\n"
        "xchgb %h0, %b0\n"
        "rorw $1, %0\n"
        "xchgb %h0, %b0\n"
        : "=r"(x)
        : "0"(x)
        : "%cl"
    );
    return x;
}

进一步缩减体积的其他方案

1. 编译器内建函数

利用编译器原生内建函数,代码最简洁且编译后生成最优机器码:

  • GCC/Clang:直接调用__builtin_bitreverse32(x),仅一行C代码,编译后会根据目标架构生成最小体积的指令序列(如ARM下直接生成rbit指令)。
  • MSVC:新版本支持__builtin_bitreverse32,或使用_rotr组合位操作实现。

2. 专用架构汇编指令

针对特定架构的专用指令,能实现极致的体积压缩:

  • ARM架构:使用rbit指令,仅4字节机器码:
    uint32_t reverse_bits_arm(uint32_t x) {
        __asm__("rbit %0, %0" : "=r"(x) : "0"(x));
        return x;
    }
    
  • x86-64(BMI2扩展):使用pdep指令配合全1掩码,实现紧凑反转:
    uint32_t reverse_bits_bmi2(uint32_t x) {
        __asm__("pdep %0, %1, %0" : "=r"(x) : "0"(0xFFFFFFFF), "1"(x));
        return x;
    }
    

3. 原生C紧凑实现

采用分治思想的原生C代码,编译后体积接近手动汇编,且跨平台性更好:

uint32_t reverse_bits_c(uint32_t x) {
    x = (x >> 16) | (x << 16);
    x = ((x >> 8) & 0x00FF00FF) | ((x << 8) & 0xFF00FF00);
    x = ((x >> 4) & 0x0F0F0F0F) | ((x << 4) & 0xF0F0F0F0);
    x = ((x >> 2) & 0x33333333) | ((x << 2) & 0xCCCCCCCC);
    x = ((x >> 1) & 0x55555555) | ((x << 1) & 0xAAAAAAAA);
    return x;
}

内容的提问来源于stack exchange,提问作者vengy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:53:33