131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- HexagonBaseInfo.h - Top level definitions for Hexagon --*- C++ -*--===// 2c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// 3c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// The LLVM Compiler Infrastructure 4c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// 5c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// This file is distributed under the University of Illinois Open Source 6c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// License. See LICENSE.TXT for details. 7c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// 8c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon//===----------------------------------------------------------------------===// 9c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// 10c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// This file contains small standalone helper functions and enum definitions for 11c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// the Hexagon target useful for the compiler back-end and the MC libraries. 12c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// As such, it deliberately does not include references to LLVM core 13c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// code gen types, passes, etc.. 14c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon// 15c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon//===----------------------------------------------------------------------===// 16c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 17c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon#ifndef HEXAGONBASEINFO_H 18c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon#define HEXAGONBASEINFO_H 19c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 20383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma#include "HexagonMCTargetDesc.h" 21383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma#include "llvm/Support/ErrorHandling.h" 22383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma 23c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoonnamespace llvm { 24c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 25c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon/// HexagonII - This namespace holds all of the target specific flags that 26c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon/// instruction info tracks. 27c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon/// 28c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoonnamespace HexagonII { 29d410eaba04211d53a523a518a5e315eb24c1072fChandler Carruth // *** The code below must match HexagonInstrFormat*.td *** // 300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande 3126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Insn types. 3226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // *** Must match HexagonInstrFormat*.td *** 3326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande enum Type { 34383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypePSEUDO = 0, 35383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeALU32 = 1, 36383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeCR = 2, 37383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeJR = 3, 38383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeJ = 4, 39383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeLD = 5, 40383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeST = 6, 41383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeSYSTEM = 7, 42383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeXTYPE = 8, 43383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeMEMOP = 9, 44383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeNV = 10, 45383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypePREFIX = 30, // Such as extenders. 46383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma TypeENDLOOP = 31 // Such as end of a HW loop. 4726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande }; 4826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 49cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma enum SubTarget { 50cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma HasV2SubT = 0xf, 51cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma HasV2SubTOnly = 0x1, 52cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma NoV2SubT = 0x0, 53cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma HasV3SubT = 0xe, 54cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma HasV3SubTOnly = 0x2, 55cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma NoV3SubT = 0x1, 56cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma HasV4SubT = 0xc, 57cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma NoV4SubT = 0x3, 58cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma HasV5SubT = 0x8, 59cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma NoV5SubT = 0x7 60cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma }; 6126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 62cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma enum AddrMode { 63cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma NoAddrMode = 0, // No addressing mode 64cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma Absolute = 1, // Absolute addressing mode 65cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma AbsoluteSet = 2, // Absolute set addressing mode 66cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma BaseImmOffset = 3, // Indirect with offset 67cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma BaseLongOffset = 4, // Indirect with long offset 688cc93593cdfaa02f661c2bed96b7893c4f250b1eJyotsna Verma BaseRegOffset = 5, // Indirect with register offset 698cc93593cdfaa02f661c2bed96b7893c4f250b1eJyotsna Verma PostInc = 6 // Post increment addressing mode 70cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma }; 7126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 72383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma enum MemAccessSize { 73383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma NoMemAccess = 0, // Not a memory acces instruction. 74383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma ByteAccess = 1, // Byte access instruction (memb). 75383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma HalfWordAccess = 2, // Half word access instruction (memh). 763f4f420ab7acb10221ba971543a7eed5489fb626Robert Wilhelm WordAccess = 3, // Word access instruction (memw). 77383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma DoubleWordAccess = 4 // Double word access instruction (memd) 78383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma }; 79383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma 80c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon // MCInstrDesc TSFlags 8126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // *** Must match HexagonInstrFormat*.td *** 82c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon enum { 8326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // This 5-bit field describes the insn type. 8426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande TypePos = 0, 8526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande TypeMask = 0x1f, 8626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 8726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Solo instructions. 8826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SoloPos = 5, 8926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SoloMask = 0x1, 90dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Packed only with A or X-type instructions. 91dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SoloAXPos = 6, 92dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SoloAXMask = 0x1, 93dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Only A-type instruction in first slot or nothing. 94dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SoloAin1Pos = 7, 95dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SoloAin1Mask = 0x1, 96c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 97c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon // Predicated instructions. 98dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PredicatedPos = 8, 99cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma PredicatedMask = 0x1, 100dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PredicatedFalsePos = 9, 101383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma PredicatedFalseMask = 0x1, 102dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PredicatedNewPos = 10, 103cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma PredicatedNewMask = 0x1, 104dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PredicateLatePos = 11, 105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PredicateLateMask = 0x1, 106cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma 107383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma // New-Value consumer instructions. 108dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines NewValuePos = 12, 109383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma NewValueMask = 0x1, 110383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma // New-Value producer instructions. 111dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines hasNewValuePos = 13, 112383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma hasNewValueMask = 0x1, 113383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma // Which operand consumes or produces a new value. 114dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines NewValueOpPos = 14, 115383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma NewValueOpMask = 0x7, 116383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma // Stores that can become new-value stores. 117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines mayNVStorePos = 17, 118cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma mayNVStoreMask = 0x1, 119383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma // New-value store instructions. 120dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines NVStorePos = 18, 121cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma NVStoreMask = 0x1, 122dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Loads that can become current-value loads. 123dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines mayCVLoadPos = 19, 124dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines mayCVLoadMask = 0x1, 125dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Current-value load instructions. 126dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines CVLoadPos = 20, 127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines CVLoadMask = 0x1, 128cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma 129cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma // Extendable insns. 130dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtendablePos = 21, 131cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma ExtendableMask = 0x1, 132cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma // Insns must be extended. 133dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtendedPos = 22, 134cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma ExtendedMask = 0x1, 135cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma // Which operand may be extended. 136dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtendableOpPos = 23, 137cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma ExtendableOpMask = 0x7, 138cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma // Signed or unsigned range. 139dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtentSignedPos = 26, 140cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma ExtentSignedMask = 0x1, 141cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma // Number of bits of range before extending operand. 142dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtentBitsPos = 27, 143cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma ExtentBitsMask = 0x1f, 144dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Alignment power-of-two before extending operand. 145dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtentAlignPos = 32, 146dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ExtentAlignMask = 0x3, 147cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma 148cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma // Valid subtargets 149dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines validSubTargetPos = 34, 150cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma validSubTargetMask = 0xf, 151cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma 152383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma // Addressing mode for load/store instructions. 153dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AddrModePos = 40, 154383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma AddrModeMask = 0x7, 155dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Access size for load/store instructions. 156dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MemAccessSizePos = 43, 157dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MemAccesSizeMask = 0x7, 158dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 159dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Branch predicted taken. 160dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines TakenPos = 47, 161dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines TakenMask = 0x1, 162cb02fa9d7f9058ec2efae39335cf559f1607893eJyotsna Verma 163dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Floating-point instructions. 164dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines FPPos = 48, 165dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines FPMask = 0x1 166383c6fc458ebd2bb7748483de56a97b68f3a9f2dJyotsna Verma }; 167c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 168b9f69a41fcb2b38a8aa104b24108acccc657bc38Sirish Pande // *** The code above must match HexagonInstrFormat*.td *** // 169c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 170ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma // Hexagon specific MO operand flag mask. 171ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma enum HexagonMOTargetFlagVal { 172ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma //===------------------------------------------------------------------===// 173ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma // Hexagon Specific MachineOperand flags. 174ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma MO_NO_FLAG, 175ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma 176ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma HMOTF_ConstExtended = 1, 177ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma 178ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma /// MO_PCREL - On a symbol operand, indicates a PC-relative relocation 179ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma /// Used for computing a global address for PIC compilations 180ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma MO_PCREL, 181ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma 182ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma /// MO_GOT - Indicates a GOT-relative relocation 183ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma MO_GOT, 184ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma 185ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma // Low or high part of a symbol. 186ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma MO_LO16, MO_HI16, 187ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma 188ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma // Offset from the base of the SDA. 189ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma MO_GPREL 190ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma }; 191ef94c6c85eed42d16fde51ee4415d27bb281a2caJyotsna Verma 192c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon} // End namespace HexagonII. 193c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 194c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon} // End namespace llvm. 195c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon 196c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon#endif 197