SparcInstrFormats.td revision e33a3ff942d33edfb619867c84b1d4589d3a582d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===- SparcV8InstrFormats.td - SparcV8 Instr Formats ------*- tablegen -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file was developed by the LLVM research group and is distributed under 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the University of Illinois Open Source License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Format #2 instruction classes in the SparcV8 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class F2 : InstV8 { // Format 2 instructions 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bits<3> op2; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<22> imm22; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let op = 0; // op = 0 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{24-22} = op2; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{21-0} = imm22; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specific F2 classes: SparcV8 manual, page 44 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class F2_1<bits<3> op2Val, dag ops, string asmstr> : F2 { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<5> rd; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dag OperandList = ops; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let AsmString = asmstr; 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let op2 = op2Val; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{29-25} = rd; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class F2_2<bits<4> condVal, bits<3> op2Val, dag ops, string asmstr> : F2 { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<4> cond; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bit annul = 0; // currently unused 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dag OperandList = ops; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let AsmString = asmstr; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let cond = condVal; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let op2 = op2Val; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci let Inst{29} = annul; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci let Inst{28-25} = cond; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===// 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Format #3 instruction classes in the SparcV8 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//===----------------------------------------------------------------------===// 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class F3 : InstV8 { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<5> rd; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<6> op3; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<5> rs1; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let op{1} = 1; // Op = 2 or 3 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{29-25} = rd; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{24-19} = op3; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{18-14} = rs1; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Specific F3 classes: SparcV8 manual, page 44 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class F3_1<bits<2> opVal, bits<6> op3val, dag ops, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) string asmstr, list<dag> pattern> : F3 { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<8> asi = 0; // asi not currently used in SparcV8 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bits<5> rs2; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dag OperandList = ops; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) let AsmString = asmstr; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) let Pattern = pattern; 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) let op = opVal; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let op3 = op3val; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{13} = 0; // i field = 0 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) let Inst{12-5} = asi; // address space identifier 79 let Inst{4-0} = rs2; 80} 81 82class F3_2<bits<2> opVal, bits<6> op3val, dag ops, 83 string asmstr, list<dag> pattern> : F3 { 84 bits<13> simm13; 85 86 dag OperandList = ops; 87 let AsmString = asmstr; 88 let Pattern = pattern; 89 90 let op = opVal; 91 let op3 = op3val; 92 93 let Inst{13} = 1; // i field = 1 94 let Inst{12-0} = simm13; 95} 96 97// floating-point 98class F3_3<bits<2> opVal, bits<6> op3val, bits<9> opfval, dag ops, 99 string asmstr> : F3 { 100 bits<5> rs2; 101 102 dag OperandList = ops; 103 let AsmString = asmstr; 104 105 let op = opVal; 106 let op3 = op3val; 107 108 let Inst{13-5} = opfval; // fp opcode 109 let Inst{4-0} = rs2; 110} 111