如何使用GCC对齐C for-loop体?

在我们的嵌入式架构中,我们有一个64位IAB(指令对齐缓冲器)。 为了优化获取序列,需要循环体开始与8字节边界对齐。

使用.balign指令很容易在汇编中实现这一点,但我找不到一个会暗示C编译器对齐代码的语法。

尝试在带有.balign指令的内联汇编的for循环之前不起作用,因为它对齐for循环prolog(设置)而不是循环体本身。

asm()行位于循环内部的情况下,将nop -s添加到循环体中,这需要花费宝贵的周期。

编辑1:假设代码:

  __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]; } 

我希望第一个c=a+b与8字节地址对齐。 我可以在初步编译后添加类似上面的nop -s,但这是一个特殊的解决方案,它会破坏第一个代码更改。

编辑2:感谢@R ..,解决方案是使用-falign-loops=8编译器选项。

嗯,这不是GCC的-falign-loops选项的用途吗?