//==- HexagonInstrFormats.td - Hexagon Instruction Formats --*- tablegen -*-==// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// //----------------------------------------------------------------------------// // Hexagon Intruction Flags + // // *** Must match HexagonBaseInfo.h *** //----------------------------------------------------------------------------// //----------------------------------------------------------------------------// // Intruction Class Declaration + //----------------------------------------------------------------------------// class InstHexagon pattern, string cstr, InstrItinClass itin> : Instruction { field bits<32> Inst; let Namespace = "Hexagon"; dag OutOperandList = outs; dag InOperandList = ins; let AsmString = asmstr; let Pattern = pattern; let Constraints = cstr; let Itinerary = itin; // *** The code below must match HexagonBaseInfo.h *** // Predicated instructions. bits<1> isPredicated = 0; let TSFlags{1} = isPredicated; // *** The code above must match HexagonBaseInfo.h *** } //----------------------------------------------------------------------------// // Intruction Classes Definitions + //----------------------------------------------------------------------------// // LD Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class LDInst pattern> : InstHexagon { bits<5> rd; bits<5> rs; bits<13> imm13; } // LD Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class LDInstPost pattern, string cstr> : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; bits<13> imm13; } // ST Instruction Class in V2/V3 can take SLOT0 only. // ST Instruction Class in V4 can take SLOT0 & SLOT1. // Definition of the instruction class CHANGED from V2/V3 to V4. class STInst pattern> : InstHexagon { bits<5> rd; bits<5> rs; bits<13> imm13; } // ST Instruction Class in V2/V3 can take SLOT0 only. // ST Instruction Class in V4 can take SLOT0 & SLOT1. // Definition of the instruction class CHANGED from V2/V3 to V4. class STInstPost pattern, string cstr> : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; bits<13> imm13; } // ALU32 Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class ALU32Type pattern> : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; bits<16> imm16; bits<16> imm16_2; } // ALU64 Instruction Class in V2/V3. // XTYPE Instruction Class in V4. // Definition of the instruction class NOT CHANGED. // Name of the Instruction Class changed from ALU64 to XTYPE from V2/V3 to V4. class ALU64Type pattern> : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; bits<16> imm16; bits<16> imm16_2; } // M Instruction Class in V2/V3. // XTYPE Instruction Class in V4. // Definition of the instruction class NOT CHANGED. // Name of the Instruction Class changed from M to XTYPE from V2/V3 to V4. class MInst pattern> : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; } // M Instruction Class in V2/V3. // XTYPE Instruction Class in V4. // Definition of the instruction class NOT CHANGED. // Name of the Instruction Class changed from M to XTYPE from V2/V3 to V4. class MInst_acc pattern, string cstr> : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; } // S Instruction Class in V2/V3. // XTYPE Instruction Class in V4. // Definition of the instruction class NOT CHANGED. // Name of the Instruction Class changed from S to XTYPE from V2/V3 to V4. class SInst pattern> //: InstHexagon { : InstHexagon { // : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; } // S Instruction Class in V2/V3. // XTYPE Instruction Class in V4. // Definition of the instruction class NOT CHANGED. // Name of the Instruction Class changed from S to XTYPE from V2/V3 to V4. class SInst_acc pattern, string cstr> : InstHexagon { // : InstHexagon { // : InstHexagon { bits<5> rd; bits<5> rs; bits<5> rt; } // J Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class JType pattern> : InstHexagon { bits<16> imm16; } // JR Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class JRType pattern> : InstHexagon { bits<5> rs; bits<5> pu; // Predicate register } // CR Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class CRInst pattern> : InstHexagon { bits<5> rs; bits<10> imm10; } class Pseudo pattern> : InstHexagon; //----------------------------------------------------------------------------// // Intruction Classes Definitions - //----------------------------------------------------------------------------// // // ALU32 patterns //. class ALU32_rr pattern> : ALU32Type { } class ALU32_ir pattern> : ALU32Type { let rt{0-4} = 0; } class ALU32_ri pattern> : ALU32Type { let rt{0-4} = 0; } class ALU32_ii pattern> : ALU32Type { let rt{0-4} = 0; } // // ALU64 patterns. // class ALU64_rr pattern> : ALU64Type { } // J Type Instructions. class JInst pattern> : JType { } // JR type Instructions. class JRInst pattern> : JRType { } // Post increment ST Instruction. class STInstPI pattern, string cstr> : STInstPost { let rt{0-4} = 0; } // Post increment LD Instruction. class LDInstPI pattern, string cstr> : LDInstPost { let rt{0-4} = 0; } //===----------------------------------------------------------------------===// // V4 Instruction Format Definitions + //===----------------------------------------------------------------------===// include "HexagonInstrFormatsV4.td" //===----------------------------------------------------------------------===// // V4 Instruction Format Definitions + //===----------------------------------------------------------------------===//