在我们的嵌入式架构中,我们有一个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
选项的用途吗?
需要了解更多c/c++开发分享如何使用GCC对齐C for-loop体?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享如何使用GCC对齐C for-loop体?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979144.html