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