SparcInstrFormats.td revision dc6938ac23f49c35ac551b6f5541e926a357de1b
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//===- SparcV8InstrFormats.td - SparcV8 Instr Formats ------*- tablegen -*-===// 2a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// The LLVM Compiler Infrastructure 4a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// This file was developed by the LLVM research group and is distributed under 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// the University of Illinois Open Source License. See LICENSE.TXT for details. 7a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// 8a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org//===----------------------------------------------------------------------===// 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 10314e9b3ba0b950b99e4d11e3302933014c35c3edreed@google.com//===----------------------------------------------------------------------===// 11a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// Format #2 instruction classes in the SparcV8 12a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org//===----------------------------------------------------------------------===// 13a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 14fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.comclass F2 : InstV8 { // Format 2 instructions 15a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<3> op2; 167453d0e450917209871c7ea54132bb5c18c7e2d3reed@google.com bits<22> imm22; 17b14ef7315afafc5082791b7c49213ef99f3275cbepoger@google.com let op = 0; // op = 0 18b14ef7315afafc5082791b7c49213ef99f3275cbepoger@google.com let Inst{24-22} = op2; 197453d0e450917209871c7ea54132bb5c18c7e2d3reed@google.com let Inst{21-0} = imm22; 20a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org} 21a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 22a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// Specific F2 classes: SparcV8 manual, page 44 23a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// 24a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.orgclass F2_1<bits<3> op2Val, dag ops, string asmstr> : F2 { 25a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<5> rd; 26a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 27a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org dag OperandList = ops; 28a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let AsmString = asmstr; 29fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com 30fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com let op2 = op2Val; 31fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com 32a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{29-25} = rd; 33fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com} 34a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 35c7a38f38c938a9828af0a53040e3f27079c67da5vandebo@chromium.orgclass F2_2<bits<4> condVal, bits<3> op2Val, string name> : F2 { 36c7a38f38c938a9828af0a53040e3f27079c67da5vandebo@chromium.org bits<4> cond; 37c7a38f38c938a9828af0a53040e3f27079c67da5vandebo@chromium.org bit annul = 0; // currently unused 387453d0e450917209871c7ea54132bb5c18c7e2d3reed@google.com 39a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let cond = condVal; 40a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op2 = op2Val; 41a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Name = name; 42a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 43a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{29} = annul; 44a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{28-25} = cond; 45a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org} 46a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 47a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org//===----------------------------------------------------------------------===// 48a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// Format #3 instruction classes in the SparcV8 49a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org//===----------------------------------------------------------------------===// 50a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 51a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.orgclass F3 : InstV8 { 52a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<5> rd; 53a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<6> op3; 54a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<5> rs1; 55a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op{1} = 1; // Op = 2 or 3 56a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{29-25} = rd; 57a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{24-19} = op3; 58ee34e35c8cefb5b384b34e4eb5ef8cb82774e5a0vandebo@chromium.org let Inst{18-14} = rs1; 59a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org} 60a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 61a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// Specific F3 classes: SparcV8 manual, page 44 62a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// 63a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.orgclass F3_1<bits<2> opVal, bits<6> op3val, dag ops, string asmstr> : F3 { 647fa2a65c0cfc714364490cb715171461143024e0reed@google.com bits<8> asi = 0; // asi not currently used in SparcV8 65a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<5> rs2; 66a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 67a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org dag OperandList = ops; 68a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let AsmString = asmstr; 69a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 70a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op = opVal; 71a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op3 = op3val; 72a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 73a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{13} = 0; // i field = 0 74a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{12-5} = asi; // address space identifier 75a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{4-0} = rs2; 76a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org} 77ee34e35c8cefb5b384b34e4eb5ef8cb82774e5a0vandebo@chromium.org 78ee34e35c8cefb5b384b34e4eb5ef8cb82774e5a0vandebo@chromium.orgclass F3_2<bits<2> opVal, bits<6> op3val, dag ops, string asmstr> : F3 { 79a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<13> simm13; 80a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 81a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org dag OperandList = ops; 82a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let AsmString = asmstr; 83a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 84a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op = opVal; 85a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op3 = op3val; 867fa2a65c0cfc714364490cb715171461143024e0reed@google.com 87a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{13} = 1; // i field = 1 88a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{12-0} = simm13; 89a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org} 90a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 91a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org// floating-point 92a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.orgclass F3_3<bits<2> opVal, bits<6> op3val, bits<9> opfval, dag ops, 93a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org string asmstr> : F3 { 94a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org bits<5> rs2; 95a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 96a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org dag OperandList = ops; 97a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let AsmString = asmstr; 98ee34e35c8cefb5b384b34e4eb5ef8cb82774e5a0vandebo@chromium.org 99a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op = opVal; 100a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let op3 = op3val; 101a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org 102a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{13-5} = opfval; // fp opcode 103a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org let Inst{4-0} = rs2; 104a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org} 105a09ef977b6799f01cd3fd64725fb3069da8be4bcvandebo@chromium.org