From: Rafael Espindola Date: Tue, 17 Oct 2006 13:36:07 +0000 (+0000) Subject: add FSTD and FSTS X-Git-Tag: android-x86-6.0-r1~1003^2~40195 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f621abca9e423bd32a85519bc0b0b249807b2571;p=android-x86%2Fexternal-llvm.git add FSTD and FSTS git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30996 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index e427050440a..ff9d9e7a036 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -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)>; diff --git a/lib/Target/ARM/README.txt b/lib/Target/ARM/README.txt index 9e846565c83..3f0e4f951d6 100644 --- a/lib/Target/ARM/README.txt +++ b/lib/Target/ARM/README.txt @@ -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 ---------------------------------------------------------- diff --git a/test/CodeGen/ARM/fp.ll b/test/CodeGen/ARM/fp.ll index 512f1dc15ca..510adc3ebf8 100644 --- a/test/CodeGen/ARM/fp.ll +++ b/test/CodeGen/ARM/fp.ll @@ -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 +}