add FSTD and FSTS
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 17 Oct 2006 13:36:07 +0000 (13:36 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 17 Oct 2006 13:36:07 +0000 (13:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30996 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/README.txt
test/CodeGen/ARM/fp.ll

index e427050440a01617cecdd0930df0acb5355ceb07..ff9d9e7a0367cd2e06d3bad4c2a06e01a6750278 100644 (file)
@@ -286,13 +286,22 @@ def FDIVD   : DFPBinOp<"fdivd", fdiv>;
 
 // Floating Point Load
 def FLDS  : InstARM<(ops FPRegs:$dst, IntRegs:$addr),
-                     "flds $dst, $addr",
+                     "flds $dst, [$addr]",
                      [(set FPRegs:$dst, (load IntRegs:$addr))]>;
 
 def FLDD  : InstARM<(ops DFPRegs:$dst, IntRegs:$addr),
-                     "fldd $dst, $addr",
+                     "fldd $dst, [$addr]",
                      [(set DFPRegs:$dst, (load IntRegs:$addr))]>;
 
+// Floating Point Store
+def FSTS    : InstARM<(ops FPRegs:$src, IntRegs:$addr),
+                       "fsts $src, [$addr]",
+                       [(store FPRegs:$src, IntRegs:$addr)]>;
+
+def FSTD    : InstARM<(ops DFPRegs:$src, IntRegs:$addr),
+                       "fstd $src, [$addr]",
+                       [(store DFPRegs:$src, IntRegs:$addr)]>;
+
 def : Pat<(ARMcall tglobaladdr:$dst),
           (bl tglobaladdr:$dst)>;
 
index 9e846565c83f3b5024ff49f7e85c4b8ec12cae04..3f0e4f951d6f200707260fe62882aa0848af9556 100644 (file)
@@ -29,7 +29,7 @@ add r0, r1, r0
 
 ----------------------------------------------------------
 
-add an offset to FLDS/FLDD addressing mode
+add an offset to FLDS/FLDD/FSTD/FSTS addressing mode
 
 ----------------------------------------------------------
 
index 512f1dc15ca4d412b998b97749fc352803748135..510adc3ebf81fd3f433fc9dbfbecfa7224707b84 100644 (file)
@@ -1,12 +1,14 @@
 ; RUN: llvm-as < %s | llc -march=arm &&
-; RUN: llvm-as < %s | llc -march=arm | grep fmsr  | wc -l | grep 4 &&
+; RUN: llvm-as < %s | llc -march=arm | grep fmsr  | wc -l | grep 5 &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fsitos &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fmrs &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fsitod &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fmrrd | wc -l | grep 5 &&
-; RUN: llvm-as < %s | llc -march=arm | grep fmdrr | wc -l | grep 2 &&
+; RUN: llvm-as < %s | llc -march=arm | grep fmdrr | wc -l | grep 3 &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fldd &&
 ; RUN: llvm-as < %s | llc -march=arm | grep flds &&
+; RUN: llvm-as < %s | llc -march=arm | grep fstd &&
+; RUN: llvm-as < %s | llc -march=arm | grep fsts &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fuitod &&
 ; RUN: llvm-as < %s | llc -march=arm | grep fuitos &&
 ; RUN: llvm-as < %s | llc -march=arm | grep ".word.*1065353216"
@@ -60,3 +62,15 @@ entry:
 
 declare void %f4(double)
 declare double %f5()
+
+void %f6(float %a, float* %b) {
+entry:
+       store float %a, float* %b
+       ret void
+}
+
+void %f7(double %a, double* %b) {
+entry:
+       store double %a, double* %b
+       ret void
+}