change the fp comparison instructions to not have %st0 explicitly
authorChris Lattner <sabre@nondot.org>
Sat, 6 Nov 2010 20:55:09 +0000 (20:55 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 6 Nov 2010 20:55:09 +0000 (20:55 +0000)
listed in its asm string, for consistency with the other similar
instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118354 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrFPStack.td
lib/Target/X86/X86InstrInfo.td
test/MC/X86/x86-32-coverage.s
test/MC/X86/x86-32.s
test/MC/X86/x86-64.s

index 0087e4892bb981d0eb923e5789cc9aef30728046..ea27e2de1ed735a877f28920672b1c336c79a717 100644 (file)
@@ -583,16 +583,16 @@ def UCOM_FPPr  : FPI<0xE9, RawFrm,       // cmp ST(0) with ST(1), pop, pop
 
 def UCOM_FIr   : FPI<0xE8, AddRegFrm,     // CC = cmp ST(0) with ST(i)
                     (outs), (ins RST:$reg),
-                    "fucomi\t{$reg, %st(0)|%ST(0), $reg}">, DB;
+                    "fucomi\t$reg">, DB;
 def UCOM_FIPr  : FPI<0xE8, AddRegFrm,     // CC = cmp ST(0) with ST(i), pop
                     (outs), (ins RST:$reg),
-                    "fucomip\t{$reg, %st(0)|%ST(0), $reg}">, DF;
+                    "fucomip\t$reg">, DF;
 }
 
 def COM_FIr : FPI<0xF0, AddRegFrm, (outs), (ins RST:$reg),
-                  "fcomi\t{$reg, %st(0)|%ST(0), $reg}">, DB;
+                  "fcomi\t$reg">, DB;
 def COM_FIPr : FPI<0xF0, AddRegFrm, (outs), (ins RST:$reg),
-                   "fcomip\t{$reg, %st(0)|%ST(0), $reg}">, DF;
+                   "fcomip\t$reg">, DF;
 
 // Floating point flag ops.
 let Defs = [AX] in
index b415b2decb3fa882d05197b1a1abad6a165620ad..fc6d4aa24eeeee2ed0faf647c37295c29f0c8d2c 100644 (file)
@@ -1377,14 +1377,6 @@ def : InstAlias<"clrw $reg", (XOR16rr GR16:$reg, GR16:$reg)>;
 def : InstAlias<"clrl $reg", (XOR32rr GR32:$reg, GR32:$reg)>;
 def : InstAlias<"clrq $reg", (XOR64rr GR64:$reg, GR64:$reg)>;
 
-// The instruction patterns for these instructions were written with st(0)
-// explicitly in the pattern, match the form with implicit st(0).
-// FIXME: Tweak these to work like fadd etc.
-def : InstAlias<"fcomi   $reg", (COM_FIr   RST:$reg)>;
-def : InstAlias<"fcomip  $reg", (COM_FIPr  RST:$reg)>;
-def : InstAlias<"fucomi  $reg", (UCOM_FIr  RST:$reg)>;
-def : InstAlias<"fucomip $reg", (UCOM_FIPr RST:$reg)>;
-
 // Various unary fpstack operations default to operating on on ST1.
 // For example, "fxch" -> "fxch %st(1)"
 def : InstAlias<"faddp",        (ADD_FPrST0  ST1)>;
@@ -1422,6 +1414,11 @@ defm : FpUnaryAlias<"fdiv",   DIV_FST0r>;
 defm : FpUnaryAlias<"fdivp",  DIVR_FPrST0>;
 defm : FpUnaryAlias<"fdivr",  DIVR_FST0r>;
 defm : FpUnaryAlias<"fdivrp", DIV_FPrST0>;
+defm : FpUnaryAlias<"fcomi",   COM_FIr>;
+defm : FpUnaryAlias<"fcomip",  COM_FIPr>;
+defm : FpUnaryAlias<"fucomi",  UCOM_FIr>;
+defm : FpUnaryAlias<"fucomip", UCOM_FIPr>;
+
 
 // Handle "f{mulp,addp} st(0), $op" the same as "f{mulp,addp} $op", since they
 // commute.  We also allow fdivrp/fsubrp even though they don't commute, solely
index 66e5c38d99672225f993d540cbe9aeeedef408a0..7524313c8820e7f2da76cd03a908424bb73971a9 100644 (file)
 // CHECK:  encoding: [0xdb,0xda]
                fcmovnu %st(2),%st
 
-// CHECK: fcomi        %st(2), %st(0)
+// CHECK: fcomi        %st(2)
 // CHECK:  encoding: [0xdb,0xf2]
                fcomi   %st(2),%st
 
-// CHECK: fucomi       %st(2), %st(0)
+// CHECK: fucomi       %st(2)
 // CHECK:  encoding: [0xdb,0xea]
                fucomi  %st(2),%st
 
-// CHECK: fcomip       %st(2), %st(0)
+// CHECK: fcomip       %st(2)
 // CHECK:  encoding: [0xdf,0xf2]
                fcomip  %st(2),%st
 
-// CHECK: fucomip      %st(2), %st(0)
+// CHECK: fucomip      %st(2)
 // CHECK:  encoding: [0xdf,0xea]
                fucomip %st(2),%st
 
 // CHECK:      fcmovnu %st(2), %st(0)
                fcmovnu %st(2),%st
 
-// CHECK:      fcomi   %st(2), %st(0)
+// CHECK:      fcomi   %st(2)
                fcomi   %st(2),%st
 
-// CHECK:      fucomi  %st(2), %st(0)
+// CHECK:      fucomi  %st(2)
                fucomi  %st(2),%st
 
-// CHECK:      fcomip  %st(2), %st(0)
+// CHECK:      fcomip  %st(2)
                fcomip  %st(2),%st
 
-// CHECK:      fucomip %st(2), %st(0)
+// CHECK:      fucomip %st(2)
                fucomip %st(2),%st
 
 // CHECK:      movnti  %ecx, 3735928559(%ebx,%ecx,8)
index 41876333a6b423e3ca5c5c44dd9eb8850894a9f0..c6e269c96b6c761406ba8443f6b84d618581feae 100644 (file)
@@ -708,27 +708,27 @@ pshufw $90, %mm4, %mm0
 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
                sidtl   4(%eax)
 
-// CHECK: fcomip       %st(2), %st(0)
+// CHECK: fcomip       %st(2)
 // CHECK:  encoding: [0xdf,0xf2]
                fcompi  %st(2),%st
 
-// CHECK: fcomip       %st(2), %st(0)
+// CHECK: fcomip       %st(2)
 // CHECK:  encoding: [0xdf,0xf2]
                fcompi  %st(2)
 
-// CHECK: fcomip       %st(1), %st(0)
+// CHECK: fcomip       %st(1)
 // CHECK:  encoding: [0xdf,0xf1]
                fcompi
 
-// CHECK: fucomip      %st(2), %st(0)
+// CHECK: fucomip      %st(2)
 // CHECK:  encoding: [0xdf,0xea]
                fucompi %st(2),%st
 
-// CHECK: fucomip      %st(2), %st(0)
+// CHECK: fucomip      %st(2)
 // CHECK:  encoding: [0xdf,0xea]
                fucompi %st(2)
 
-// CHECK: fucomip      %st(1), %st(0)
+// CHECK: fucomip      %st(1)
 // CHECK:  encoding: [0xdf,0xe9]
                fucompi
 
index 84609dcee751ecfcf55709729aa5a3faf0e8012b..87b38cf7174047a5b3fca4bd90376cb164b7129f 100644 (file)
@@ -261,11 +261,11 @@ fmulp
 fdivp
 fdivrp
 
-// CHECK: fcomi        %st(1), %st(0)
-// CHECK: fcomi        %st(2), %st(0)
-// CHECK: fucomi       %st(1), %st(0)
-// CHECK: fucomi       %st(2), %st(0)
-// CHECK: fucomi       %st(2), %st(0)
+// CHECK: fcomi        %st(1)
+// CHECK: fcomi        %st(2)
+// CHECK: fucomi       %st(1)
+// CHECK: fucomi       %st(2)
+// CHECK: fucomi       %st(2)
 
 fcomi
 fcomi  %st(2)