BR 2030823: Problem with the 256-bit FMA instructions
authorH. Peter Anvin <hpa@zytor.com>
Wed, 13 Aug 2008 23:25:08 +0000 (16:25 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 13 Aug 2008 23:25:08 +0000 (16:25 -0700)
Fix the 256-bit FMA instructions per bug report.

insns.dat
test/br2030823.asm [new file with mode: 0644]

index 9a2e395..0357130 100644 (file)
--- a/insns.dat
+++ b/insns.dat
@@ -3247,40 +3247,40 @@ PCLMULQDQ       xmmreg,xmmrm,imm                [rmi:   66 0f 3a 44 /r ib]                      SSE,SANDYBRIDGE,SO
 ; Sandybridge is probably wrong for these...
 VFMADDPD       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 69 /r /is4]      FMA,SANDYBRIDGE,SO
 VFMADDPD       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 69 /r /is4]      FMA,SANDYBRIDGE,SO
-VFMADDPD       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 69 /r /is4]      FMA,SANDYBRIDGE,SY
-VFMADDPD       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 69 /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDPD       ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 69 /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDPD       ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 69 /r /is4]      FMA,SANDYBRIDGE,SY
 VFMADDPS       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 68 /r /is4]      FMA,SANDYBRIDGE,SO
 VFMADDPS       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 68 /r /is4]      FMA,SANDYBRIDGE,SO
-VFMADDPS       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 68 /r /is4]      FMA,SANDYBRIDGE,SY
-VFMADDPS       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 68 /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDPS       ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 68 /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDPS       ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 68 /r /is4]      FMA,SANDYBRIDGE,SY
 VFMADDSD       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 6b /r /is4]      FMA,SANDYBRIDGE,SQ
 VFMADDSD       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 6b /r /is4]      FMA,SANDYBRIDGE,SQ
 VFMADDSS       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 6a /r /is4]      FMA,SANDYBRIDGE,SD
 VFMADDSS       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 6a /r /is4]      FMA,SANDYBRIDGE,SD
 VFMADDSUBPD    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 5d /r /is4]      FMA,SANDYBRIDGE,SO
 VFMADDSUBPD    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 5d /r /is4]      FMA,SANDYBRIDGE,SO
-VFMADDSUBPD    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5d /r /is4]      FMA,SANDYBRIDGE,SY
-VFMADDSUBPD    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5d /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDSUBPD    ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5d /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDSUBPD    ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5d /r /is4]      FMA,SANDYBRIDGE,SY
 VFMADDSUBPS    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 5c /r /is4]      FMA,SANDYBRIDGE,SO
 VFMADDSUBPS    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 5c /r /is4]      FMA,SANDYBRIDGE,SO
-VFMADDSUBPS    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5c /r /is4]      FMA,SANDYBRIDGE,SY
-VFMADDSUBPS    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5c /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDSUBPS    ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5c /r /is4]      FMA,SANDYBRIDGE,SY
+VFMADDSUBPS    ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5c /r /is4]      FMA,SANDYBRIDGE,SY
 VFMSUBADDPD    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 5f /r /is4]      FMA,SANDYBRIDGE,SO
 VFMSUBADDPD    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 5f /r /is4]      FMA,SANDYBRIDGE,SO
-VFMSUBADDPD    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5f /r /is4]      FMA,SANDYBRIDGE,SY
-VFMSUBADDPD    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5f /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBADDPD    ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5f /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBADDPD    ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5f /r /is4]      FMA,SANDYBRIDGE,SY
 VFMSUBADDPS    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 5e /r /is4]      FMA,SANDYBRIDGE,SO
 VFMSUBADDPS    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 5e /r /is4]      FMA,SANDYBRIDGE,SO
-VFMSUBADDPS    xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5e /r /is4]      FMA,SANDYBRIDGE,SY
-VFMSUBADDPS    xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5e /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBADDPS    ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 5e /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBADDPS    ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 5e /r /is4]      FMA,SANDYBRIDGE,SY
 VFMSUBPD       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 6d /r /is4]      FMA,SANDYBRIDGE,SO
 VFMSUBPD       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 6d /r /is4]      FMA,SANDYBRIDGE,SO
-VFMSUBPD       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 6d /r /is4]      FMA,SANDYBRIDGE,SY
-VFMSUBPD       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 6d /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBPD       ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 6d /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBPD       ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 6d /r /is4]      FMA,SANDYBRIDGE,SY
 VFMSUBPS       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 6c /r /is4]      FMA,SANDYBRIDGE,SO
 VFMSUBPS       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 6c /r /is4]      FMA,SANDYBRIDGE,SO
-VFMSUBPS       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.256.66.0f3a.w0 6c /r /is4]      FMA,SANDYBRIDGE,SY
-VFMSUBPS       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.256.66.0f3a.w1 6c /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBPS       ymmreg,ymmreg,ymmrm,ymmreg      [rsmv:  vex.nds.256.66.0f3a.w0 6c /r /is4]      FMA,SANDYBRIDGE,SY
+VFMSUBPS       ymmreg,ymmreg,ymmreg,ymmrm      [rsvm:  vex.nds.256.66.0f3a.w1 6c /r /is4]      FMA,SANDYBRIDGE,SY
 VFMSUBSD       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 6f /r /is4]      FMA,SANDYBRIDGE,SQ
 VFMSUBSD       xmmreg,xmmreg,xmmreg,xmmrm      [rsvm:  vex.nds.128.66.0f3a.w1 6f /r /is4]      FMA,SANDYBRIDGE,SQ
 VFMSUBSS       xmmreg,xmmreg,xmmrm,xmmreg      [rsmv:  vex.nds.128.66.0f3a.w0 6e /r /is4]      FMA,SANDYBRIDGE,SD
diff --git a/test/br2030823.asm b/test/br2030823.asm
new file mode 100644 (file)
index 0000000..f70e31b
--- /dev/null
@@ -0,0 +1,5 @@
+       bits 64
+       VFMADDPD xmm0, xmm1, [0], xmm3
+       VFMADDPD xmm0, xmm1, xmm2, [0]
+       VFMADDPD ymm0, ymm1, [0], ymm3
+       VFMADDPD ymm0, ymm1, ymm2, [0]
\ No newline at end of file