[PATCH] ARM: provide VFP aliases for pre-V6 mnemonics
Saleem Abdulrasool
compnerd at compnerd.org
Sat Dec 28 23:18:29 PST 2013
Hi rengolin, t.p.northover, logan,
In order to provide compatibility with the GNU assembler, provide aliases for
pre-UAL mnemonics for floating point operations.
http://llvm-reviews.chandlerc.com/D2490
Files:
lib/Target/ARM/ARMInstrVFP.td
test/MC/ARM/vfp-aliases.s
Index: lib/Target/ARM/ARMInstrVFP.td
===================================================================
--- lib/Target/ARM/ARMInstrVFP.td
+++ lib/Target/ARM/ARMInstrVFP.td
@@ -207,6 +207,27 @@
def : MnemonicAlias<"vldm", "vldmia">;
def : MnemonicAlias<"vstm", "vstmia">;
+// FLDM/FSTM - Load / Store multiple single / double precision registers for
+// pre-ARMv6 cores.
+// These instructions are deprecated!
+def : MnemonicAlias<"fldmias", "vldmia">;
+def : MnemonicAlias<"fldmdbs", "vldmdb">;
+def : MnemonicAlias<"fldmeas", "vldmdb">;
+def : MnemonicAlias<"fldmfds", "vldmia">;
+def : MnemonicAlias<"fldmiad", "vldmia">;
+def : MnemonicAlias<"fldmdbd", "vldmdb">;
+def : MnemonicAlias<"fldmead", "vldmdb">;
+def : MnemonicAlias<"fldmfdd", "vldmia">;
+
+def : MnemonicAlias<"fstmias", "vstmia">;
+def : MnemonicAlias<"fstmdbs", "vstmdb">;
+def : MnemonicAlias<"fstmeas", "vstmia">;
+def : MnemonicAlias<"fstmfds", "vstmdb">;
+def : MnemonicAlias<"fstmiad", "vstmia">;
+def : MnemonicAlias<"fstmdbd", "vstmdb">;
+def : MnemonicAlias<"fstmead", "vstmia">;
+def : MnemonicAlias<"fstmfdd", "vstmdb">;
+
def : InstAlias<"vpush${p} $r", (VSTMDDB_UPD SP, pred:$p, dpr_reglist:$r)>,
Requires<[HasVFP2]>;
def : InstAlias<"vpush${p} $r", (VSTMSDB_UPD SP, pred:$p, spr_reglist:$r)>,
@@ -247,14 +268,20 @@
AXXI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, dpr_reglist:$regs, variable_ops),
IndexModeUpd, !strconcat(asm, "dbx${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
let Inst{24-23} = 0b10; // Decrement Before
- let Inst{21} = 1;
+ let Inst{21} = 1; // Writeback
let Inst{20} = L_bit;
}
}
defm FLDM : vfp_ldstx_mult<"fldm", 1>;
defm FSTM : vfp_ldstx_mult<"fstm", 0>;
+def : MnemonicAlias<"fldmeax", "fldmdbx">;
+def : MnemonicAlias<"fldmfdx", "fldmiax">;
+
+def : MnemonicAlias<"fstmeax", "fstmiax">;
+def : MnemonicAlias<"fstmfdx", "fstmdbx">;
+
//===----------------------------------------------------------------------===//
// FP Binary Operations.
//
Index: test/MC/ARM/vfp-aliases.s
===================================================================
--- /dev/null
+++ test/MC/ARM/vfp-aliases.s
@@ -0,0 +1,43 @@
+@ RUN: llvm-mc -triple armv7-eabi -filetype asm -o - %s | FileCheck %s
+
+ .syntax unified
+ .fpu neon
+
+ .type aliases,%function
+aliases:
+ fstmfdd sp!, {d0}
+ fstmead sp!, {d0}
+ fstmdbd sp!, {d0}
+ fstmiad sp!, {d0}
+ fstmfds sp!, {s0}
+ fstmeas sp!, {s0}
+ fstmdbs sp!, {s0}
+ fstmias sp!, {s0}
+
+ fldmias sp!, {s0}
+ fldmdbs sp!, {s0}
+ fldmeas sp!, {s0}
+ fldmfds sp!, {s0}
+ fldmiad sp!, {d0}
+ fldmdbd sp!, {d0}
+ fldmead sp!, {d0}
+ fldmfdd sp!, {d0}
+
+@ CHECK-LABEL: aliases
+@ CHECK: vpush {d0}
+@ CHECK: vstmia sp!, {d0}
+@ CHECK: vpush {d0}
+@ CHECK: vstmia sp!, {d0}
+@ CHECK: vpush {s0}
+@ CHECK: vstmia sp!, {s0}
+@ CHECK: vpush {s0}
+@ CHECK: vstmia sp!, {s0}
+@ CHECK: vpop {s0}
+@ CHECK: vldmdb sp!, {s0}
+@ CHECK: vldmdb sp!, {s0}
+@ CHECK: vpop {s0}
+@ CHECK: vpop {d0}
+@ CHECK: vldmdb sp!, {d0}
+@ CHECK: vldmdb sp!, {d0}
+@ CHECK: vpop {d0}
+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D2490.1.patch
Type: text/x-patch
Size: 3182 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131228/c7fabaf1/attachment.bin>
More information about the llvm-commits
mailing list