aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/PIC16/PIC16InstrFormats.td
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/PIC16/PIC16InstrFormats.td')
-rw-r--r--lib/Target/PIC16/PIC16InstrFormats.td112
1 files changed, 112 insertions, 0 deletions
diff --git a/lib/Target/PIC16/PIC16InstrFormats.td b/lib/Target/PIC16/PIC16InstrFormats.td
new file mode 100644
index 0000000..d4b3ee7
--- /dev/null
+++ b/lib/Target/PIC16/PIC16InstrFormats.td
@@ -0,0 +1,112 @@
+//===- PIC16RegisterInfo.td - PIC16 Register defs ------------*- tblgen -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+// Describe PIC16 instructions format
+//
+// All the possible PIC16 fields are:
+//
+// opcode - operation code.
+// f - 7-bit register file address.
+// d - 1-bit direction specifier
+// k - 8/11 bit literals
+// b - 3 bits bit num specifier
+//
+//===----------------------------------------------------------------------===//
+
+// Generic PIC16 Format
+class PIC16Inst<dag outs, dag ins, string asmstr, list<dag> pattern>
+ : Instruction
+{
+ field bits<14> Inst;
+
+ let Namespace = "PIC16";
+
+ dag OutOperandList = outs;
+ dag InOperandList = ins;
+
+ let AsmString = asmstr;
+ let Pattern = pattern;
+}
+
+
+//===----------------------------------------------------------------------===//
+// Byte Oriented instruction class in PIC16 : <|opcode|d|f|>
+//===----------------------------------------------------------------------===//
+
+class ByteFormat<bits<6> op, 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{7} = d;
+ let Inst{6-0} = f;
+}
+
+//===----------------------------------------------------------------------===//
+// Bit Oriented instruction class in PIC16 : <|opcode|b|f|>
+//===----------------------------------------------------------------------===//
+
+class BitFormat<bits<4> op, 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{9-7} = b;
+ let Inst{6-0} = f;
+}
+
+//===----------------------------------------------------------------------===//
+// Literal Format instruction class in PIC16 : <|opcode|k|>
+//===----------------------------------------------------------------------===//
+
+class LiteralFormat<bits<6> op, dag outs, dag ins, string asmstr,
+ list<dag> pattern>
+ : PIC16Inst<outs, ins, asmstr, pattern>
+{
+ bits<8> k;
+
+
+ let Inst{13-8} = op;
+
+ let Inst{7-0} = k;
+}
+
+//===----------------------------------------------------------------------===//
+// Control Format instruction class in PIC16 : <|opcode|k|>
+//===----------------------------------------------------------------------===//
+
+class ControlFormat<bits<3> op, dag outs, dag ins, string asmstr,
+ list<dag> pattern>
+ :PIC16Inst<outs, ins, asmstr, pattern>
+{
+ bits<11> k;
+
+
+ let Inst{13-11} = op;
+
+ 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;
+}