Add register-reuse to frame-index register scavenging. When a target uses
[oota-llvm.git] / lib / Target / PIC16 / PIC16InstrFormats.td
index d4b3ee7328e57aad7864866d91799f23e3070475..e213ea847fc826833f3943704aca46b90a25f1c1 100644 (file)
@@ -1,4 +1,4 @@
-//===- PIC16RegisterInfo.td - PIC16 Register defs ------------*- tblgen -*-===//
+//===- PIC16InstrFormats.td - PIC16 Instruction Formats-------*- tblgen -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
 //===----------------------------------------------------------------------===//
 
 // Generic PIC16 Format
+// PIC16 Instructions are 14-bit wide.
+
+// FIXME: Add Cooper Specific Formats if any.
+
 class PIC16Inst<dag outs, dag ins, string asmstr, list<dag> pattern>
-       : Instruction 
-{
+  : Instruction {
   field bits<14> Inst;
 
   let Namespace = "PIC16";
-
   dag OutOperandList = outs;
-  dag InOperandList  = ins;
-
-  let AsmString   = asmstr;
-  let Pattern     = pattern;
+  dag InOperandList = ins;
+  let AsmString = asmstr;
+  let Pattern = pattern;
 }
 
 
 //===----------------------------------------------------------------------===//
 // Byte Oriented instruction class in PIC16 : <|opcode|d|f|>
+// opcode = 6 bits.
+// d = direction = 1 bit.
+// f = file register address = 7 bits.
 //===----------------------------------------------------------------------===//
 
-class ByteFormat<bits<6> op, dag outs, dag ins, string asmstr,
-                list<dag> pattern>
-       :PIC16Inst<outs, ins, asmstr, pattern> 
-{
+class ByteFormat<bits<6> opcode, dag outs, dag ins, string asmstr,
+                 list<dag> pattern>
+  :PIC16Inst<outs, ins, asmstr, pattern> {
   bits<1>  d;
   bits<7>  f;
 
-  let Inst{13-8} = op;
+  let Inst{13-8} = opcode;
 
   let Inst{7} = d;
   let Inst{6-0} = f; 
@@ -55,15 +58,18 @@ class ByteFormat<bits<6> op, dag outs, dag ins, string asmstr,
 
 //===----------------------------------------------------------------------===//
 // Bit Oriented instruction class in PIC16 : <|opcode|b|f|>
+// opcode = 4 bits.
+// b = bit specifier = 3 bits.
+// f = file register address = 7 bits.
 //===----------------------------------------------------------------------===//
 
-class BitFormat<bits<4> op, dag outs, dag ins, string asmstr, list<dag> pattern>
-         : PIC16Inst<outs, ins, asmstr, pattern> 
-{
+class BitFormat<bits<4> opcode, dag outs, dag ins, string asmstr, 
+                list<dag> pattern>
+  : PIC16Inst<outs, ins, asmstr, pattern> {
   bits<3>  b;
   bits<7>  f;
 
-  let Inst{13-10} = op;
+  let Inst{13-10} = opcode;
 
   let Inst{9-7} = b;
   let Inst{6-0} = f; 
@@ -71,32 +77,32 @@ class BitFormat<bits<4> op, dag outs, dag ins, string asmstr, list<dag> pattern>
 
 //===----------------------------------------------------------------------===//
 // Literal Format instruction class in PIC16 : <|opcode|k|>
+// opcode = 6 bits
+// k = literal = 8 bits
 //===----------------------------------------------------------------------===//
 
-class LiteralFormat<bits<6> op, dag outs, dag ins, string asmstr, 
-                   list<dag> pattern>
-       : PIC16Inst<outs, ins, asmstr, pattern> 
-{
+class LiteralFormat<bits<6> opcode, dag outs, dag ins, string asmstr, 
+                    list<dag> pattern>
+  : PIC16Inst<outs, ins, asmstr, pattern> {
   bits<8> k;
-
   
-  let Inst{13-8} = op;
+  let Inst{13-8} = opcode;
 
   let Inst{7-0} = k; 
 }
 
 //===----------------------------------------------------------------------===//
 // Control Format instruction class in PIC16 : <|opcode|k|>
+// opcode = 3 bits.
+// k = jump address = 11 bits.
 //===----------------------------------------------------------------------===//
 
-class ControlFormat<bits<3> op, dag outs, dag ins, string asmstr, 
-                   list<dag> pattern>
-       :PIC16Inst<outs, ins, asmstr, pattern> 
-{
+class ControlFormat<bits<3> opcode, dag outs, dag ins, string asmstr, 
+                    list<dag> pattern>
+  : PIC16Inst<outs, ins, asmstr, pattern> {
   bits<11> k;
 
-  
-  let Inst{13-11} = op;
+  let Inst{13-11} = opcode;
 
   let Inst{10-0} = k; 
 }
@@ -105,8 +111,7 @@ class ControlFormat<bits<3> op, dag outs, dag ins, string asmstr,
 // Pseudo instruction class in PIC16
 //===----------------------------------------------------------------------===//
 
-class Pseudo<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern>:
-      PIC16Inst<outs, ins, asmstr, pattern>
-{
-   let Inst{13-6} = op;
+class Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern>
+  : PIC16Inst<outs, ins, asmstr, pattern> {
+   let Inst{13-6} = 0;
 }