C-是否可以强迫GCC输出我在没有内联装配的情况下给它的确切的位指令



我已经编写了看起来像这样的代码:

char* xor_and_print(byte arr[], size_t buffSize, byte key)
{
    size_t i;
    for(i = 0; i < buffSize; i++)
    {
        printf("%c", (arr[i] & ~key) | (key & ~arr[i]));
    }
    putchar('n');
}

这是一个XOR操作,被吹入更多说明中。我正在使用GCC-6.3.0。即使我使用-O0标志编译,GCC也将其转换为拆卸中的一个xor指令。是否有可能将其胁迫写入标志的特定ASM指令,或者我必须使用内联汇编语言?

使用volatile应避免此优化:

for(i = 0; i < buffSize; i++)
{
    byte volatile b = arr[i];
    printf("%c", (b & ~key) | (key & ~b));
}

,但它也将保持不优化的优化水平。

相关内容

  • 没有找到相关文章

最新更新