[PATCH] [Sparc] Add support for flush instruction.

James Y Knight jyknight at google.com
Mon May 18 13:44:43 PDT 2015


http://reviews.llvm.org/D9833

Files:
  lib/Target/Sparc/SparcInstrAliases.td
  lib/Target/Sparc/SparcInstrInfo.td
  test/MC/Sparc/sparc-mem-instructions.s

Index: lib/Target/Sparc/SparcInstrAliases.td
===================================================================
--- lib/Target/Sparc/SparcInstrAliases.td
+++ lib/Target/Sparc/SparcInstrAliases.td
@@ -306,6 +306,9 @@
 // mov simm13, rd -> or %g0, simm13, rd
 def : InstAlias<"mov $simm13, $rd", (ORri IntRegs:$rd, G0, i32imm:$simm13)>;
 
+// flush -> flush %g0
+def : InstAlias<"flush", (FLUSH), 0>;
+
 // set value, rd
 // (turns into a sequence of sethi+or, depending on the value)
 // def : InstAlias<"set $val, $rd", (ORri IntRegs:$rd, (SETHIi (HI22 imm:$val)), (LO10 imm:$val))>;
Index: lib/Target/Sparc/SparcInstrInfo.td
===================================================================
--- lib/Target/Sparc/SparcInstrInfo.td
+++ lib/Target/Sparc/SparcInstrInfo.td
@@ -834,6 +834,20 @@
   def UNIMP : F2_1<0b000, (outs), (ins i32imm:$imm22),
                   "unimp $imm22", []>;
 
+// Section B.32 - Flush Instruction Memory
+let rd = 0 in {
+  def FLUSHrr : F3_1<2, 0b111011, (outs), (ins MEMrr:$addr),
+                       "flush $addr", []>;
+  def FLUSHri : F3_2<2, 0b111011, (outs), (ins MEMri:$addr),
+                       "flush $addr", []>;
+
+  // The no-arg FLUSH is only here for the benefit of the InstAlias
+  // "flush", which cannot seem to use FLUSHrr, due to the inability
+  // to construct a MEMrr with fixed G0 registers.
+  let rs1 = 0, rs2 = 0 in
+    def FLUSH   : F3_1<2, 0b111011, (outs), (ins), "flush %g0", []>;
+}
+
 // Section B.33 - Floating-point Operate (FPop) Instructions
 
 // Convert Integer to Floating-point Instructions, p. 141
Index: test/MC/Sparc/sparc-mem-instructions.s
===================================================================
--- test/MC/Sparc/sparc-mem-instructions.s
+++ test/MC/Sparc/sparc-mem-instructions.s
@@ -90,3 +90,13 @@
         std %o2, [%g1]
         ! CHECK: stda %o2, [%i0+%l6] 131 ! encoding: [0xd4,0xbe,0x10,0x76]
         stda %o2, [%i0 + %l6] 131
+
+        ! CHECK:  flush %g1+%g2         ! encoding: [0x81,0xd8,0x40,0x02]
+        flush %g1 + %g2
+        ! CHECK:  flush %g1+8           ! encoding: [0x81,0xd8,0x60,0x08]
+        flush %g1 + 8
+        ! CHECK:  flush %g1             ! encoding: [0x81,0xd8,0x40,0x00]
+        flush %g1
+        ! Not specified in manual, but accepted by gas.
+        ! CHECK:  flush %g0             ! encoding: [0x81,0xd8,0x00,0x00]
+        flush

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9833.26008.patch
Type: text/x-patch
Size: 2378 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150518/9ce48731/attachment.bin>


More information about the llvm-commits mailing list