//===- AlphaInstrFormats.td - Alpha Instruction Formats ----*- tablegen -*-===// // // The LLVM Compiler Infrastructure // // This file was developed by the LLVM research group and is distributed under // the University of Illinois Open Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // //===----------------------------------------------------------------------===// //3.3: //Memory //Branch //Operate //Floating-point //PALcode def u8imm : Operand; def s14imm : Operand; def s16imm : Operand; def s21imm : Operand; def s64imm : Operand; //===----------------------------------------------------------------------===// // Instruction format superclass //===----------------------------------------------------------------------===// // Alpha instruction baseline class InstAlphaAlt op, string asmstr> : Instruction { field bits<32> Inst; let Namespace = "Alpha"; let AsmString = asmstr; let Inst{31-26} = op; } class InstAlpha op, dag OL, string asmstr> : InstAlphaAlt { // Alpha instruction baseline let OperandList = OL; } //3.3.1 class MForm opcode, bit store, bit load, string asmstr, list pattern> : InstAlphaAlt { let Pattern = pattern; let isStore = store; let isLoad = load; bits<5> Ra; bits<16> disp; bits<5> Rb; let Inst{25-21} = Ra; let Inst{20-16} = Rb; let Inst{15-0} = disp; } class MFormAlt opcode, string asmstr> : InstAlphaAlt { bits<5> Ra; bits<16> disp; bits<5> Rb; let Inst{25-21} = Ra; let Inst{20-16} = Rb; let Inst{15-0} = disp; } class MfcForm opcode, bits<16> fc, string asmstr> : InstAlpha { bits<5> Ra; bits<5> Rb; let Inst{25-21} = Ra; let Inst{20-16} = Rb; let Inst{15-0} = fc; } class MbrForm opcode, bits<2> TB, dag OL, string asmstr> : InstAlpha { bits<5> Ra; bits<5> Rb; bits<14> disp; let Inst{25-21} = Ra; let Inst{20-16} = Rb; let Inst{15-14} = TB; let Inst{13-0} = disp; } //3.3.2 let isBranch = 1, isTerminator = 1 in class BForm opcode, string asmstr> : InstAlpha { bits<5> Ra; bits<21> disp; let Inst{25-21} = Ra; let Inst{20-0} = disp; } def target : Operand {} let isBranch = 1, isTerminator = 1 in class BFormD opcode, string asmstr, list pattern> : InstAlpha { let Pattern = pattern; bits<5> Ra; bits<21> disp; let Inst{25-21} = Ra; let Inst{20-0} = disp; } let isBranch = 1, isTerminator = 1 in class BFormDG opcode, string asmstr, list pattern> : InstAlpha { let Pattern = pattern; bits<5> Ra; bits<21> disp; let Inst{25-21} = Ra; let Inst{20-0} = disp; } let isBranch = 1, isTerminator = 1 in class FBForm opcode, string asmstr, list pattern> : InstAlpha { let Pattern = pattern; bits<5> Ra; bits<21> disp; let Inst{25-21} = Ra; let Inst{20-0} = disp; } //3.3.3 class OForm opcode, bits<7> fun, string asmstr, list pattern> : InstAlpha { let Pattern = pattern; bits<5> Rc; bits<5> Ra; bits<5> Rb; bits<7> Function = fun; let Inst{25-21} = Ra; let Inst{20-16} = Rb; let Inst{15-13} = 0; let Inst{12} = 0; let Inst{11-5} = Function; let Inst{4-0} = Rc; } class OForm2 opcode, bits<7> fun, string asmstr, list pattern> : InstAlpha { let Pattern = pattern; bits<5> Rc; bits<5> Rb; bits<7> Function = fun; let Inst{25-21} = 31; let Inst{20-16} = Rb; let Inst{15-13} = 0; let Inst{12} = 0; let Inst{11-5} = Function; let Inst{4-0} = Rc; } class OForm4 opcode, bits<7> fun, string asmstr, list pattern> : InstAlphaAlt { let Pattern = pattern; bits<5> Rc; bits<5> Rb; bits<5> Ra; bits<7> Function = fun; let isTwoAddress = 1; let Inst{25-21} = Ra; let Inst{20-16} = Rb; let Inst{15-13} = 0; let Inst{12} = 0; let Inst{11-5} = Function; let Inst{4-0} = Rc; } class OFormL opcode, bits<7> fun, string asmstr, list pattern> : InstAlpha { let Pattern = pattern; bits<5> Rc; bits<5> Ra; bits<8> LIT; bits<7> Function = fun; let Inst{25-21} = Ra; let Inst{20-13} = LIT; let Inst{12} = 1; let Inst{11-5} = Function; let Inst{4-0} = Rc; } class OForm4L opcode, bits<7> fun, string asmstr> : InstAlpha { bits<5> Rc; bits<8> LIT; bits<5> Ra; bits<7> Function = fun; let isTwoAddress = 1; let Inst{25-21} = Ra; let Inst{20-13} = LIT; let Inst{12} = 1; let Inst{11-5} = Function; let Inst{4-0} = Rc; } //3.3.4 class FPForm opcode, bits<11> fun, string asmstr, list pattern> : InstAlphaAlt { let Pattern = pattern; bits<5> Fc; bits<5> Fa; bits<5> Fb; bits<11> Function = fun; let Inst{25-21} = Fa; let Inst{20-16} = Fb; let Inst{15-5} = Function; let Inst{4-0} = Fc; } //3.3.5 class PALForm opcode, dag OL, string asmstr> : InstAlpha { bits<26> Function; let Inst{25-0} = Function; } // Pseudo instructions. class PseudoInstAlpha pattern> : InstAlpha<0, OL, nm> { let Pattern = pattern; }