Add another non-commutable instruction that gas accepts commuted forms for.
authorNick Lewycky <nicholas@mxc.ca>
Thu, 30 Dec 2010 22:10:49 +0000 (22:10 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Thu, 30 Dec 2010 22:10:49 +0000 (22:10 +0000)
Fixes PR8861.

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

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

index 761e9ccb6c6a95edc633806cd8de11c0664b41d4..f9c0a7bbfb3856b1ccf2cc167143d92d80bcb457 100644 (file)
@@ -1465,14 +1465,15 @@ defm : FpUnaryAlias<"fucompi",  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
-// because gas supports it.
+// commute.  We also allow fdiv[r]p/fsubrp even though they don't commute,
+// solely because gas supports it.
 def : InstAlias<"faddp %st(0), $op", (ADD_FPrST0 RST:$op)>;
 def : InstAlias<"fmulp %st(0), $op", (MUL_FPrST0 RST:$op)>;
 def : InstAlias<"fsubrp %st(0), $op", (SUB_FPrST0 RST:$op)>;
+def : InstAlias<"fdivp %st(0), $op", (DIVR_FPrST0 RST:$op)>;
 def : InstAlias<"fdivrp %st(0), $op", (DIV_FPrST0 RST:$op)>;
 
-// We accepts "fnstsw %eax" even though it only writes %ax.
+// We accept "fnstsw %eax" even though it only writes %ax.
 def : InstAlias<"fnstsw %eax", (FNSTSW8r)>;
 def : InstAlias<"fnstsw %al" , (FNSTSW8r)>;
 def : InstAlias<"fnstsw"     , (FNSTSW8r)>;
index 5375919d55bd238382bdbd4c467192a1067f49b9..2eb2aded6ac8d4035b2cb19423129a14e935757d 100644 (file)
@@ -504,6 +504,10 @@ fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
 
+// also PR8861
+fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1]
+fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1]
+
 
 movl   foo(%rip), %eax
 // CHECK: movl foo(%rip), %eax