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

James Y Knight jyknight at google.com
Mon Jul 6 09:01:28 PDT 2015


This revision was automatically updated to reflect the committed changes.
Closed by commit rL241460: [Sparc] Add support for flush instruction. (authored by jyknight).

Changed prior to commit:
  http://reviews.llvm.org/D9833?vs=26008&id=29094#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D9833

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

Index: llvm/trunk/test/MC/Sparc/sparc-mem-instructions.s
===================================================================
--- llvm/trunk/test/MC/Sparc/sparc-mem-instructions.s
+++ llvm/trunk/test/MC/Sparc/sparc-mem-instructions.s
@@ -72,3 +72,13 @@
         st %o2, [%g1]
         ! CHECK: sta %o2, [%i0+%l6] 131 ! encoding: [0xd4,0xa6,0x10,0x76]
         sta %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
Index: llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td
===================================================================
--- llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td
+++ llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td
@@ -828,6 +828,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: llvm/trunk/lib/Target/Sparc/SparcInstrAliases.td
===================================================================
--- llvm/trunk/lib/Target/Sparc/SparcInstrAliases.td
+++ llvm/trunk/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))>;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9833.29094.patch
Type: text/x-patch
Size: 2474 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150706/f5b8eff2/attachment.bin>


More information about the llvm-commits mailing list