-//===- 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;
//===----------------------------------------------------------------------===//
// 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;
//===----------------------------------------------------------------------===//
// 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;
}
// 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;
}