1fc77014f24b60e2150e17cd87bb04280757e1a65Jia Liu//===-- MipsBaseInfo.h - Top level definitions for MIPS MC ------*- C++ -*-===// 291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// 391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// The LLVM Compiler Infrastructure 491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// 591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// This file is distributed under the University of Illinois Open Source 691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// License. See LICENSE.TXT for details. 791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// 891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka//===----------------------------------------------------------------------===// 991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// 1091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// This file contains small standalone helper functions and enum definitions for 1191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// the Mips target useful for the compiler back-end and the MC libraries. 1291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka// 1391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka//===----------------------------------------------------------------------===// 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSBASEINFO_H 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSBASEINFO_H 1691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka 17d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka#include "MipsFixupKinds.h" 1891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#include "MipsMCTargetDesc.h" 19d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka#include "llvm/MC/MCExpr.h" 2091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#include "llvm/Support/DataTypes.h" 2191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#include "llvm/Support/ErrorHandling.h" 2291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka 2391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanakanamespace llvm { 2447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 2547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes/// MipsII - This namespace holds all of the target specific flags that 2647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes/// instruction info tracks. 2747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes/// 2847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopesnamespace MipsII { 2947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// Target Operand Flag enum. 3047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes enum TOF { 3147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes //===------------------------------------------------------------------===// 3247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Mips Specific MachineOperand flags. 3347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 3447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_NO_FLAG, 3547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar /// MO_GOT - Represents the offset into the global offset table at which 3747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// the address the relocation entry symbol resides during execution. 3847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT, 3947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 4047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_GOT_CALL - Represents the offset into the global offset table at 4147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// which the address of a call site relocation entry symbol resides 4247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// during execution. This is different from the above since this flag 4347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// can only be present in call instructions. 4447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_CALL, 4547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 4647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_GPREL - Represents the offset from the current gp value to be used 4747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// for the relocatable object file being produced. 4847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GPREL, 4947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 5047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_ABS_HI/LO - Represents the hi or low part of an absolute symbol 5147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// address. 5247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_ABS_HI, 5347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_ABS_LO, 5447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 5547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_TLSGD - Represents the offset into the global offset table at which 5647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // the module ID and TSL block offset reside during execution (General 5747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Dynamic TLS). 5847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_TLSGD, 5947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 603faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka /// MO_TLSLDM - Represents the offset into the global offset table at which 613faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka // the module ID and TSL block offset reside during execution (Local 623faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka // Dynamic TLS). 633faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka MO_TLSLDM, 643faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka MO_DTPREL_HI, 653faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka MO_DTPREL_LO, 663faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka 6747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_GOTTPREL - Represents the offset from the thread pointer (Initial 6847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Exec TLS). 6947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOTTPREL, 7047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 7147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_TPREL_HI/LO - Represents the hi and low part of the offset from 7247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // the thread pointer (Local Exec TLS). 7347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_TPREL_HI, 7447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_TPREL_LO, 7547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 7647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // N32/64 Flags. 7747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GPOFF_HI, 7847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GPOFF_LO, 7947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_DISP, 8047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_PAGE, 81b22c9289b0dd8255f63038e9bb8229111eb082aeAkira Hatanaka MO_GOT_OFST, 82b22c9289b0dd8255f63038e9bb8229111eb082aeAkira Hatanaka 83ec5e97f5c874a82aa995cffee8c5592c6689ffb4Akira Hatanaka /// MO_HIGHER/HIGHEST - Represents the highest or higher half word of a 84ec5e97f5c874a82aa995cffee8c5592c6689ffb4Akira Hatanaka /// 64-bit symbol address. 85b22c9289b0dd8255f63038e9bb8229111eb082aeAkira Hatanaka MO_HIGHER, 8626e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka MO_HIGHEST, 8726e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka 8826e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka /// MO_GOT_HI16/LO16, MO_CALL_HI16/LO16 - Relocations used for large GOTs. 8926e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka MO_GOT_HI16, 9026e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka MO_GOT_LO16, 9126e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka MO_CALL_HI16, 9226e6ad7b290abd4e5dcae1c6fbd5cae77a4beffeAkira Hatanaka MO_CALL_LO16 9347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes }; 9447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 9547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes enum { 9647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes //===------------------------------------------------------------------===// 9747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Instruction encodings. These are the standard/most common forms for 9847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Mips instructions. 9947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // 10047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 10147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Pseudo - This represents an instruction that is a pseudo instruction 10247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // or one that has not been implemented yet. It is illegal to code generate 10347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // it, but tolerated for intermediate implementation stages. 10447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes Pseudo = 0, 10547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 10647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmR - This form is for instructions of the format R. 10747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmR = 1, 10847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmI - This form is for instructions of the format I. 10947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmI = 2, 11047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmJ - This form is for instructions of the format J. 11147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmJ = 3, 11247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmFR - This form is for instructions of the format FR. 11347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmFR = 4, 11447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmFI - This form is for instructions of the format FI. 11547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmFI = 5, 11647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmOther - This form is for instructions that have no specific format. 11747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmOther = 6, 11847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 119de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar FormMask = 15, 120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar /// IsCTI - Instruction is a Control Transfer Instruction. 121de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar IsCTI = 1 << 4, 122de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar /// HasForbiddenSlot - Instruction has a forbidden slot. 123de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar HasForbiddenSlot = 1 << 5 124de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 12547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes }; 12647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes} 12791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka} 12891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka 12991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#endif 130