我正在尝试使用“aligned(16)”属性将函数字节对齐到 16 字节边界。我做了以下事情:void __attribute__((aligned(16))) function() { }
(来源:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)
但是当我编译时(gcc foo.c;没有使用 makefile 或链接器脚本),我收到以下错误:
FOO.c:99:错误:可能未为“函数”指定对齐方式
我也尝试对齐到 4、8、32 等,但错误仍然相同。
我需要它来调整基于 powerpc 的处理器的中断服务例程。这样做的正确方法是什么?
根据我的回答改编这个海湾合作委员会问题 https://stackoverflow.com/questions/4071690/tell-gcc-to-specifically-unroll-a-loop/14251545#14251545,你可以尝试使用#pragma指令,像这样:
#pragma GCC push_options
#pragma GCC optimize ("align-functions=16")
//add 5 to each element of the int array.
void add5(int a[20]) {
int i = 19;
for(; i > 0; i--) {
a[i] += 5;
}
}
#pragma GCC pop_options
The #pragma push_options
and pop_options
宏用于控制范围optimize
杂注的效果。有关这些宏的更多详细信息,请参阅GCC docs http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Function-Specific-Option-Pragmas.html#Function-Specific-Option-Pragmas.
或者,如果您愿意GCC's 属性语法 http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html,您应该能够执行以下操作:
//add 5 to each element of the int array.
__attribute__((optimize("align-functions=16")))
void add5(int a[20]) {
int i = 19;
for(; i > 0; i--) {
a[i] += 5;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)