]> granicus.if.org Git - yasm/commitdiff
Fix register fields on FMA instructions.
authorPeter Johnson <peter@tortall.net>
Tue, 22 Apr 2008 05:41:11 +0000 (05:41 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 22 Apr 2008 05:41:11 +0000 (05:41 -0000)
The FMA instructions swap VEX.vvvv and imm8[7:4] as compared to other AVX
instructions.

Reported by: nasm64developer@users.sf.net

svn path=/trunk/yasm/; revision=2071

modules/arch/x86/gen_x86_insn.py
modules/arch/x86/tests/fma.hex

index ef19a408aa790e3720b60c8681708640a06849a8..e52ca64191b319a90725d5b9494e073773dc50c3 100755 (executable)
@@ -6374,9 +6374,9 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-              Operand(type="SIMDReg", size=128, dest="VEX"),
+              Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
               Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"),
-              Operand(type="SIMDReg", size=128, dest="VEXImmSrc")])
+              Operand(type="SIMDReg", size=128, dest="VEX")])
 add_group("fma_128_256",
     cpu=["FMA"],
     modifiers=["Op2Add"],
@@ -6385,8 +6385,8 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-              Operand(type="SIMDReg", size=128, dest="VEX"),
               Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
+              Operand(type="SIMDReg", size=128, dest="VEX"),
               Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")])
 add_group("fma_128_256",
     cpu=["FMA"],
@@ -6396,9 +6396,9 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=256, dest="Spare"),
-              Operand(type="SIMDReg", size=256, dest="VEX"),
+              Operand(type="SIMDReg", size=256, dest="VEXImmSrc"),
               Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"),
-              Operand(type="SIMDReg", size=256, dest="VEXImmSrc")])
+              Operand(type="SIMDReg", size=256, dest="VEX")])
 add_group("fma_128_256",
     cpu=["FMA"],
     modifiers=["Op2Add"],
@@ -6407,8 +6407,8 @@ add_group("fma_128_256",
     prefix=0x66,
     opcode=[0x0F, 0x3A, 0x00],
     operands=[Operand(type="SIMDReg", size=256, dest="Spare"),
-              Operand(type="SIMDReg", size=256, dest="VEX"),
               Operand(type="SIMDReg", size=256, dest="VEXImmSrc"),
+              Operand(type="SIMDReg", size=256, dest="VEX"),
               Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")])
 
 add_insn("vfmaddpd", "fma_128_256", modifiers=[0x69])
@@ -6433,9 +6433,9 @@ for sz in [32, 64]:
         prefix=0x66,
         opcode=[0x0F, 0x3A, 0x00],
         operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-                  Operand(type="SIMDReg", size=128, dest="VEX"),
+                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
                   Operand(type="SIMDReg", size=128, dest="EA"),
-                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc")])
+                  Operand(type="SIMDReg", size=128, dest="VEX")])
     add_group("fma_128_m%d" % sz,
         cpu=["FMA"],
         modifiers=["Op2Add"],
@@ -6444,9 +6444,9 @@ for sz in [32, 64]:
         prefix=0x66,
         opcode=[0x0F, 0x3A, 0x00],
         operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-                  Operand(type="SIMDReg", size=128, dest="VEX"),
+                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
                   Operand(type="Mem", size=sz, relaxed=True, dest="EA"),
-                  Operand(type="SIMDReg", size=128, dest="VEXImmSrc")])
+                  Operand(type="SIMDReg", size=128, dest="VEX")])
     add_group("fma_128_m%d" % sz,
         cpu=["FMA"],
         modifiers=["Op2Add"],
@@ -6455,8 +6455,8 @@ for sz in [32, 64]:
         prefix=0x66,
         opcode=[0x0F, 0x3A, 0x00],
         operands=[Operand(type="SIMDReg", size=128, dest="Spare"),
-                  Operand(type="SIMDReg", size=128, dest="VEX"),
                   Operand(type="SIMDReg", size=128, dest="VEXImmSrc"),
+                  Operand(type="SIMDReg", size=128, dest="VEX"),
                   Operand(type="Mem", size=sz, relaxed=True, dest="EA")])
 
 add_insn("vfmaddsd", "fma_128_m64", modifiers=[0x6B])
index a1193179e5e70578c8ec1152f4906204c1a56c4d..7f51092adb8b6d84082412a875c85972765e5840 100644 (file)
 c4 
 e3 
-7
+6
 69 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 69 
 00 
-2
+1
 c4 
 e3 
-f1 
+e9 
 69 
 00 
-2
+1
 c4 
 e3 
-7
+6
 69 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-7
+6
 69 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 69 
 00 
-2
+1
 c4 
 e3 
-f5 
+ed 
 69 
 00 
-2
+1
 c4 
 e3 
-7
+6
 68 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 68 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 68 
 00 
-2
+1
 c4 
 e3 
-7
+6
 68 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 68 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 68 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6b 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6b 
 00 
-3
+1
 c4 
 e3 
-7
+6
 6b 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6b 
 00 
-2
+1
 c4 
 e3 
-f1 
+e9 
 6b 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6a 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6a 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6a 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5d 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 5d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5d 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 5d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5c 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 5c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 5c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 5c 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 5c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6d 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6d 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 6d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6c 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6c 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 6c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6f 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6f 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6f 
 00 
-2
+1
 c4 
 e3 
-7
+6
 6e 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 6e 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 6e 
 00 
-2
+1
 c4 
 e3 
-7
+6
 79 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 79 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 79 
 00 
-2
+1
 c4 
 e3 
-7
+6
 79 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 79 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 79 
 00 
-2
+1
 c4 
 e3 
-7
+6
 78 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 78 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 78 
 00 
-2
+1
 c4 
 e3 
-7
+6
 78 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 78 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 78 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7b 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7b 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7b 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7a 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7a 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7a 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7d 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7d 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7d 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 7d 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7c 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7c 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7c 
 00 
-3
+1
 c4 
 e3 
-f5 
+ed 
 7c 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7f 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7f 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7f 
 00 
-2
+1
 c4 
 e3 
-7
+6
 7e 
 c2 
-3
+1
 c4 
 e3 
-7
+6
 7e 
 00 
-3
+1
 c4 
 e3 
-f1 
+e9 
 7e 
 00 
-2
+1