From 53a3c687dd2185562ab0584d97edc2968bba9f1b Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Sun, 2 Sep 2007 16:37:03 +0000 Subject: [PATCH] Fix some MMX/SSE irregularities which interact with the 64-bit support --- insns.dat | 24 ++++++++++++------------ test/mmxsize.asm | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 test/mmxsize.asm diff --git a/insns.dat b/insns.dat index 0153726..bd89c03 100644 --- a/insns.dat +++ b/insns.dat @@ -718,22 +718,18 @@ MOV mem,imm16 \320\300\1\xC7\200\31 8086,SM MOV mem,imm32 \321\300\1\xC7\200\41 386,SM MOVD mmxreg,mem \301\2\x0F\x6E\110 PENT,MMX,SD MOVD mmxreg,reg32 \2\x0F\x6E\110 PENT,MMX -MOVD mmxreg,reg64 \2\x0F\x6E\110 X64,MMX MOVD mem,mmxreg \300\2\x0F\x7E\101 PENT,MMX,SD MOVD reg32,mmxreg \2\x0F\x7E\101 PENT,MMX -MOVD reg64,mmxreg \2\x0F\x7E\101 X64,MMX MOVD xmmreg,mem \320\301\2\x0F\x6E\110 X64,SD MOVD xmmreg,reg32 \320\2\x0F\x6E\110 X64 -MOVD xmmreg,reg64 \320\2\x0F\x6E\110 X64 MOVD mem,xmmreg \320\300\2\x0F\x7E\101 X64,SD MOVD reg32,xmmreg \320\2\x0F\x7E\101 X64,SSE -MOVD reg64,xmmreg \320\2\x0F\x7E\101 X64,SSE -MOVMSKPD reg32,xmmreg \320\2\x0F\x50\101 X64,SSE -MOVMSKPS reg32,xmmreg \2\x0F\x50\101 X64,SSE -MOVQ mmxreg,mem \301\2\x0F\x6F\110 PENT,MMX,SM +MOVQ mmxreg,mem \301\2\x0F\x6F\110 PENT,MMX,SQ MOVQ mmxreg,mmxreg \2\x0F\x6F\110 PENT,MMX -MOVQ mem,mmxreg \300\2\x0F\x7F\101 PENT,MMX,SM +MOVQ mem,mmxreg \300\2\x0F\x7F\101 PENT,MMX,SQ MOVQ mmxreg,mmxreg \2\x0F\x7F\101 PENT,MMX +MOVQ mmxreg,rm64 \2\x0F\x6E\110 X64,MMX +MOVQ rm64,mmxreg \2\x0F\x7E\101 X64,MMX MOVSB void \1\xA4 8086 MOVSD void \321\1\xA5 386 MOVSQ void \324\1\xA5 X64 @@ -1474,6 +1470,7 @@ MOVLPS xmmreg,mem \301\2\x0F\x12\110 KATMAI,S MOVLPS mem,xmmreg \300\2\x0F\x13\101 KATMAI,SSE MOVHLPS xmmreg,xmmreg \2\x0F\x12\110 KATMAI,SSE MOVMSKPS reg32,xmmreg \2\x0F\x50\110 KATMAI,SSE +MOVMSKPS reg64,xmmreg \324\2\x0F\x50\110 X64,SSE MOVNTPS mem,xmmreg \300\2\x0F\x2B\101 KATMAI,SSE MOVSS xmmreg,mem \301\333\2\x0F\x10\110 KATMAI,SSE MOVSS mem,xmmreg \300\333\2\x0F\x11\101 KATMAI,SSE @@ -1585,8 +1582,8 @@ MFENCE void \3\x0F\xAE\xF0 WILLAMET ; Willamette MMX instructions (SSE2 SIMD Integer Instructions) MOVD xmmreg,reg32 \366\2\x0F\x6E\110 WILLAMETTE,SSE2 MOVD reg32,xmmreg \366\2\x0F\x7E\101 WILLAMETTE,SSE2 -MOVD mem,xmmreg \300\366\2\x0F\x7E\101 WILLAMETTE,SSE2 -MOVD xmmreg,mem \301\366\2\x0F\x6E\110 WILLAMETTE,SSE2 +MOVD mem,xmmreg \300\366\2\x0F\x7E\101 WILLAMETTE,SSE2,SD +MOVD xmmreg,mem \301\366\2\x0F\x6E\110 WILLAMETTE,SSE2,SD MOVDQA xmmreg,xmmreg \366\2\x0F\x6F\110 WILLAMETTE,SSE2 MOVDQA mem,xmmreg \300\366\2\x0F\x7F\101 WILLAMETTE,SSE2,SM MOVDQA xmmreg,mem \301\366\2\x0F\x6F\110 WILLAMETTE,SSE2,SM @@ -1598,8 +1595,10 @@ MOVDQU xmmreg,xmmreg \333\2\x0F\x7F\110 WILLAMET MOVDQ2Q mmxreg,xmmreg \3\xF2\x0F\xD6\110 WILLAMETTE,SSE2 MOVQ xmmreg,xmmreg \333\2\x0F\x7E\110 WILLAMETTE,SSE2 MOVQ xmmreg,xmmreg \366\2\x0F\xD6\110 WILLAMETTE,SSE2 -MOVQ mem,xmmreg \300\366\2\x0F\xD6\101 WILLAMETTE,SSE2 -MOVQ xmmreg,mem \301\333\2\x0F\x7E\110 WILLAMETTE,SSE2 +MOVQ mem,xmmreg \300\366\2\x0F\xD6\101 WILLAMETTE,SSE2,SQ +MOVQ xmmreg,mem \301\333\2\x0F\x7E\110 WILLAMETTE,SSE2,SQ +MOVQ xmmreg,rm64 \366\324\2\x0F\x6E\110 X64,SSE2 +MOVQ rm64,xmmreg \366\324\2\x0F\x7E\101 X64,SSE2 MOVQ2DQ xmmreg,mmxreg \333\2\x0F\xD6\110 WILLAMETTE,SSE2 PACKSSWB xmmreg,xmmreg \366\2\x0F\x63\110 WILLAMETTE,SSE2 PACKSSWB xmmreg,mem \301\366\2\x0F\x63\110 WILLAMETTE,SSE2,SM @@ -1846,6 +1845,7 @@ MOVHPD xmmreg,mem \301\366\2\x0F\x16\110 WILLAMET MOVLPD mem,xmmreg \300\366\2\x0F\x13\101 WILLAMETTE,SSE2 MOVLPD xmmreg,mem \301\366\2\x0F\x12\110 WILLAMETTE,SSE2 MOVMSKPD reg32,xmmreg \366\2\x0F\x50\110 WILLAMETTE,SSE2 +MOVMSKPD reg64,xmmreg \366\324\2\x0F\x50\110 X64,SSE2 MOVSD xmmreg,xmmreg \3\xF2\x0F\x10\110 WILLAMETTE,SSE2 MOVSD xmmreg,xmmreg \3\xF2\x0F\x11\110 WILLAMETTE,SSE2 MOVSD mem,xmmreg \300\3\xF2\x0F\x11\101 WILLAMETTE,SSE2 diff --git a/test/mmxsize.asm b/test/mmxsize.asm new file mode 100644 index 0000000..59fc470 --- /dev/null +++ b/test/mmxsize.asm @@ -0,0 +1,36 @@ + bits 32 + movd mm0,eax + movd mm0,[foo] + movq mm0,[foo] + movd mm0,dword [foo] + movq mm0,qword [foo] + movmskps eax,xmm1 + movmskpd eax,xmm1 + nop + movd xmm0,eax + movd xmm0,[foo] + movq xmm0,[foo] + movd xmm0,dword [foo] + movq xmm0,qword [foo] + nop + + bits 64 + movd mm0,eax + movq mm0,[foo] + movd mm0,dword [foo] + movq mm0,qword [foo] + movq mm0,rax + movmskps eax,xmm1 + movmskpd eax,xmm1 + nop + movd xmm0,eax + movq xmm0,[foo] + movd xmm0,dword [foo] + movq xmm0,qword [foo] + movq xmm0,rax + movmskps rax,xmm1 + movmskpd rax,xmm1 + nop + + section .bss +foo resq 1 -- 2.7.4