【发布时间】:2010-12-16 04:59:00
【问题描述】:
这个问题让我有点抓狂。代码似乎是segmentation faulting 没有充分的理由:
#define MULT_FLOAT4(X, Y) ({ \
asm volatile ( \
"movups (%0), %%xmm0\n\t" \
"mulps (%1), %%xmm0\n\t" \
"movups %%xmm0, (%1)" \
:: "r" (X), "r" (Y)); })
int main(void)
{
int before;
float a[4] = { 10, 20, 30, 40 };
float b[4] = { 0.1, 0.1, 0.1, 0.1 };
/* Segmentation faults if I uncomment this line below, otherwise works fine. Why?? */
int after;
MULT_FLOAT4(a, b);
return 0;
}
请注意,只要我定义了“之前”和“之后”变量,它就会出现分段错误。如果我只有“之前”或“之后”,那么它工作正常。
我使用的是 Ubuntu Hardy (8.04),GCC 版本 4.2.4 (Ubuntu 4.2.4-1ubuntu4)。 Linux 内核:2.6.24-16-generic。
【问题讨论】:
标签: gcc assembly segmentation-fault inline-assembly