2
這個問題讓我有點瘋狂。該代碼似乎segmentation faulting沒有很好的理由:,只要我有兩個「之前」和「之後」的變量是分段錯誤定義使用SSE指令時導致此分段錯誤的原因是什麼?
#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-通用。
嗯,我認爲movups是爲未對齊的數據 - 和movaps是爲了對齊? :) – horseyguy 2009-11-13 11:58:00
它的工作原理!謝謝! ...雖然即時通訊仍然困惑,爲什麼它是在使用movups專門用於未對齊的數據時的segfaulting? – horseyguy 2009-11-13 14:32:08
這是試圖訪問b的mulps。 gdb應該能夠顯示哪條指令觸發段錯誤。 – 2009-11-13 15:56:17