c/c++语言开发共享如何使用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选项的用途吗?

    需要了解更多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

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐