[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