forked from OSchip/llvm-project
113 lines
3.2 KiB
TableGen
113 lines
3.2 KiB
TableGen
//===- 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;
|
|
}
|