diff options
Diffstat (limited to 'lib/Target/PIC16/PIC16InstrFormats.td')
-rw-r--r-- | lib/Target/PIC16/PIC16InstrFormats.td | 112 |
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; +} |