ysa*_*sap 12 c gcc for-loop alignment memory-alignment
在我们的嵌入式架构中,我们有一个64位IAB(指令对齐缓冲器).为了优化获取序列,需要循环体开始与8字节边界对齐.
使用该.balign指令很容易在汇编中实现这一点,但我找不到一个会暗示C编译器对齐代码的语法.
尝试在for循环与内联汇编之前使用该.balign指令不起作用,因为它对齐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];
}
Run Code Online (Sandbox Code Playgroud)
我希望第一个c=a+b与8字节地址对齐.我可以nop在初步编译后添加类似上面的-s,但这是一个特殊的解决方案,它会破坏第一个代码更改.
编辑2:感谢@R ..,解决方案是使用-falign-loops=8编译器选项.