aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/Sparc/SparcInstrInfo.td
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/Sparc/SparcInstrInfo.td')
-rw-r--r--lib/Target/Sparc/SparcInstrInfo.td68
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/Target/Sparc/SparcInstrInfo.td b/lib/Target/Sparc/SparcInstrInfo.td
new file mode 100644
index 0000000000..1d7d973e41
--- /dev/null
+++ b/lib/Target/Sparc/SparcInstrInfo.td
@@ -0,0 +1,68 @@
+//===- SparcV8Instrs.td - Target Description for SparcV8 Target -----------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file describes the SparcV8 instructions in TableGen format.
+//
+//===----------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+// Instruction format superclass
+//===----------------------------------------------------------------------===//
+
+class InstV8 : Instruction { // SparcV8 instruction baseline
+ field bits<32> Inst;
+
+ let Namespace = "V8";
+
+ bits<2> op;
+ let Inst{31-30} = op; // Top two bits are the 'op' field
+
+ // Bit attributes specific to SparcV8 instructions
+ bit isPasi = 0; // Does this instruction affect an alternate addr space?
+ bit isPrivileged = 0; // Is this a privileged instruction?
+}
+
+include "SparcV8InstrInfo_F2.td"
+include "SparcV8InstrInfo_F3.td"
+
+//===----------------------------------------------------------------------===//
+// Instructions
+//===----------------------------------------------------------------------===//
+
+// Pseudo instructions.
+def PHI : InstV8 {
+ let Name = "PHI";
+}
+def ADJCALLSTACKDOWN : InstV8 {
+ let Name = "ADJCALLSTACKDOWN";
+}
+def ADJCALLSTACKUP : InstV8 {
+ let Name = "ADJCALLSTACKUP";
+}
+
+// Section B.20: SAVE and RESTORE - p117
+def SAVEr : F3_1<2, 0b111100, "save">; // save r, r, r
+def SAVEi : F3_2<2, 0b111100, "save">; // save r, i, r
+def RESTOREr : F3_1<2, 0b111101, "restore">; // restore r, r, r
+def RESTOREi : F3_2<2, 0b111101, "restore">; // restore r, i, r
+
+// Section B.24: Call and Link - p125
+// This is the only Format 1 instruction
+def CALL : InstV8 {
+ bits<30> disp;
+
+ let op = 1;
+ let Inst{29-0} = disp;
+ let Name = "call";
+}
+
+// Section B.25: Jump and Link - p126
+def JMPLr : F3_1<2, 0b111000, "jmpl">; // jmpl [rs1+rs2], rd
+def JMPLi : F3_2<2, 0b111000, "jmpl">; // jmpl [rs1+imm], rd
+