編集:
これは私が以前に経験した本当のバグであり、 MichaelBurrが提案したように_mm_malloc
ステートメントを変更することによって以下に再現しました。
SO.exeの0x00415116で未処理の例外:0xC0000005:アクセス違反の読み取り場所0xffffffff。
ラインでlabel: movdqa xmm0, xmmword ptr [t1+eax]
私は動的に割り当てようとしていますt1
、t2
そしてこのチュートリアルによれば、私は以下を使用しました_mm_malloc
:
#include <emmintrin.h>
int main(int argc, char* argv[])
{
int *t1, *t2;
const int n = 100000;
t1 = (int*)_mm_malloc(n*sizeof(int),16);
t2 = (int*)_mm_malloc(n*sizeof(int),16);
__m128i mul1, mul2;
for (int j = 0; j < n; j++)
{
t1[j] = j;
t2[j] = (j+1);
} // set temporary variables to random values
_asm
{
mov eax, 0
label: movdqa xmm0, xmmword ptr [t1+eax]
movdqa xmm1, xmmword ptr [t2+eax]
pmuludq xmm0, xmm1
movdqa mul1, xmm0
movdqa xmm0, xmmword ptr [t1+eax]
pshufd xmm0, xmm0, 05fh
pshufd xmm1, xmm1, 05fh
pmuludq xmm0, xmm1
movdqa mul2, xmm0
add eax, 16
cmp eax, 100000
jnge label
}
_mm_free(t1);
_mm_free(t2);
return 0;
}