diff options
Diffstat (limited to 'lib/Target/IA64/IA64InstrFormats.td')
-rw-r--r-- | lib/Target/IA64/IA64InstrFormats.td | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/Target/IA64/IA64InstrFormats.td b/lib/Target/IA64/IA64InstrFormats.td new file mode 100644 index 000000000000..c465880d3e1a --- /dev/null +++ b/lib/Target/IA64/IA64InstrFormats.td @@ -0,0 +1,80 @@ +//===- IA64InstrFormats.td - IA64 Instruction Formats --*- tablegen -*-=// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// - Warning: the stuff in here isn't really being used, so is mostly +// junk. It'll get fixed as the JIT gets built. +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// Instruction format superclass +//===----------------------------------------------------------------------===// + +class InstIA64<bits<4> op, dag OOL, dag IOL, string asmstr> : Instruction { + // IA64 instruction baseline + field bits<41> Inst; + let Namespace = "IA64"; + let OutOperandList = OOL; + let InOperandList = IOL; + let AsmString = asmstr; + + let Inst{40-37} = op; +} + +//"Each Itanium instruction is categorized into one of six types." +//We should have: +// A, I, M, F, B, L+X + +class AForm<bits<4> opcode, bits<6> qpReg, dag OOL, dag IOL, string asmstr> : + InstIA64<opcode, OOL, IOL, asmstr> { + + let Inst{5-0} = qpReg; +} + +class AForm_DAG<bits<4> opcode, bits<6> qpReg, dag OOL, dag IOL, string asmstr, + list<dag> pattern> : + InstIA64<opcode, OOL, IOL, asmstr> { + + let Pattern = pattern; + let Inst{5-0} = qpReg; +} + +let isBranch = 1, isTerminator = 1 in +class BForm<bits<4> opcode, bits<6> x6, bits<3> btype, dag OOL, dag IOL, string asmstr> : + InstIA64<opcode, OOL, IOL, asmstr> { + + let Inst{32-27} = x6; + let Inst{8-6} = btype; +} + +class MForm<bits<4> opcode, bits<6> x6, dag OOL, dag IOL, string asmstr> : + InstIA64<opcode, OOL, IOL, asmstr> { + bits<7> Ra; + bits<7> Rb; + bits<16> disp; + + let Inst{35-30} = x6; +// let Inst{20-16} = Rb; + let Inst{15-0} = disp; +} + +class RawForm<bits<4> opcode, bits<26> rest, dag OOL, dag IOL, string asmstr> : + InstIA64<opcode, OOL, IOL, asmstr> { + let Inst{25-0} = rest; +} + +// Pseudo instructions. +class PseudoInstIA64<dag OOL, dag IOL, string nm> : InstIA64<0, OOL, IOL, nm> { +} + +class PseudoInstIA64_DAG<dag OOL, dag IOL, string nm, list<dag> pattern> + : InstIA64<0, OOL, IOL, nm> { + let Pattern = pattern; +} + |