//===- SystemZInstrFormats.td - SystemZ Instruction Formats ----*- tablegen -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // Format specifies the encoding used by the instruction. This is part of the // ad-hoc solution used to emit machine instruction encodings by our machine // code emitter. class Format<bits<5> val> { bits<5> Value = val; } def Pseudo : Format<0>; def EForm : Format<1>; def IForm : Format<2>; def RIForm : Format<3>; def RIEForm : Format<4>; def RILForm : Format<5>; def RISForm : Format<6>; def RRForm : Format<7>; def RREForm : Format<8>; def RRFForm : Format<9>; def RRRForm : Format<10>; def RRSForm : Format<11>; def RSForm : Format<12>; def RSIForm : Format<13>; def RSILForm : Format<14>; def RSYForm : Format<15>; def RXForm : Format<16>; def RXEForm : Format<17>; def RXFForm : Format<18>; def RXYForm : Format<19>; def SForm : Format<20>; def SIForm : Format<21>; def SILForm : Format<22>; def SIYForm : Format<23>; def SSForm : Format<24>; def SSEForm : Format<25>; def SSFForm : Format<26>; class InstSystemZ<bits<16> op, Format f, dag outs, dag ins> : Instruction { let Namespace = "SystemZ"; bits<16> Opcode = op; Format Form = f; bits<5> FormBits = Form.Value; dag OutOperandList = outs; dag InOperandList = ins; } class I8<bits<8> op, Format f, dag outs, dag ins, string asmstr, list<dag> pattern> : InstSystemZ<0, f, outs, ins> { let Opcode{0-7} = op; let Opcode{8-15} = 0; let Pattern = pattern; let AsmString = asmstr; } class I12<bits<12> op, Format f, dag outs, dag ins, string asmstr, list<dag> pattern> : InstSystemZ<0, f, outs, ins> { let Opcode{0-11} = op; let Opcode{12-15} = 0; let Pattern = pattern; let AsmString = asmstr; } class I16<bits<16> op, Format f, dag outs, dag ins, string asmstr, list<dag> pattern> : InstSystemZ<op, f, outs, ins> { let Pattern = pattern; let AsmString = asmstr; } class RRI<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I8<op, RRForm, outs, ins, asmstr, pattern>; class RII<bits<12> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I12<op, RIForm, outs, ins, asmstr, pattern>; class RILI<bits<12> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I12<op, RILForm, outs, ins, asmstr, pattern>; class RREI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I16<op, RREForm, outs, ins, asmstr, pattern>; class RXI<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I8<op, RXForm, outs, ins, asmstr, pattern> { let AddedComplexity = 1; } class RXYI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I16<op, RXYForm, outs, ins, asmstr, pattern>; class RSI<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I8<op, RSForm, outs, ins, asmstr, pattern> { let AddedComplexity = 1; } class RSYI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I16<op, RSYForm, outs, ins, asmstr, pattern>; class SII<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I8<op, SIForm, outs, ins, asmstr, pattern> { let AddedComplexity = 1; } class SIYI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I16<op, SIYForm, outs, ins, asmstr, pattern>; class SILI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern> : I16<op, SILForm, outs, ins, asmstr, pattern>; //===----------------------------------------------------------------------===// // Pseudo instructions //===----------------------------------------------------------------------===// class Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern> : InstSystemZ<0, Pseudo, outs, ins> { let Pattern = pattern; let AsmString = asmstr; }