gpt4 book ai didi

c - 这是使用 -falign-loops 选项时的 GCC 错误吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:27 25 4
gpt4 key购买 nike

我正在使用这个选项来优化我们嵌入式架构中的 for 循环 (here)。但是,我注意到当对齐需要添加多个 nop 指令时,编译器会生成一个 nop 后跟尽可能多的零( 0000).

我怀疑这是我们编译器中的错误,但有人可以确认这不是 GCC 中的错误吗?

这是一个代码片段:

    __asm__ volatile("nop");  
__asm__ volatile("nop");

for (j0=0; j0<N; j0+=4)
{
c[j0+ 0] = a[j0+ 0] + b[j0+ 0];
c[j0+ 1] = a[j0+ 1] + b[j0+ 1];
c[j0+ 2] = a[j0+ 2] + b[j0+ 2];
c[j0+ 3] = a[j0+ 3] + b[j0+ 3];
}

使用 -falign-loops=8(或任何与您的体系结构相关且超过所需最小对齐方式的数字)进行编译。您可以根据需要添加或删除 __asm__ 行以生成未对齐的循环体。

最佳答案

使用 gcc -S -o foo.s foo.c 生成汇编输出而不汇编它。我怀疑您会在 asm 中看到 .balign.p2align 指令。假设这个指令是为了工作,我认为它是汇编器中的一个错误。您也可能有意或无意地将代码放在非默认部分(即不是 .text)(例如放错位置的 .data.section 在其他一些内联 asm 中);通常,汇编器为包含代码的部分填充适当大小和数量的 nop 指令,为包含数据的部分填充 0 字节。

关于c - 这是使用 -falign-loops 选项时的 GCC 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com