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//===----------------------------------------------------------------------===// 1491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#ifndef MIPSBASEINFO_H 1591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#define 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 36e3d3572e282733bd7aa5ac14115ed0804174e426Bruno Cardoso Lopes /// MO_GOT16 - Represents the offset into the global offset table at which 3747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// the address the relocation entry symbol resides during execution. 38e3d3572e282733bd7aa5ac14115ed0804174e426Bruno Cardoso Lopes MO_GOT16, 3947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT, 4047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 4147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_GOT_CALL - Represents the offset into the global offset table at 4247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// which the address of a call site relocation entry symbol resides 4347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// during execution. This is different from the above since this flag 4447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// can only be present in call instructions. 4547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_CALL, 4647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 4747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_GPREL - Represents the offset from the current gp value to be used 4847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// for the relocatable object file being produced. 4947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GPREL, 5047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 5147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_ABS_HI/LO - Represents the hi or low part of an absolute symbol 5247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// address. 5347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_ABS_HI, 5447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_ABS_LO, 5547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 5647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_TLSGD - Represents the offset into the global offset table at which 5747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // the module ID and TSL block offset reside during execution (General 5847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Dynamic TLS). 5947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_TLSGD, 6047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 613faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka /// MO_TLSLDM - Represents the offset into the global offset table at which 623faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka // the module ID and TSL block offset reside during execution (Local 633faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka // Dynamic TLS). 643faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka MO_TLSLDM, 653faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka MO_DTPREL_HI, 663faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka MO_DTPREL_LO, 673faac0a78c7a70d3dcd2af102a132bb9da2d639cAkira Hatanaka 6847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_GOTTPREL - Represents the offset from the thread pointer (Initial 6947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Exec TLS). 7047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOTTPREL, 7147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 7247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// MO_TPREL_HI/LO - Represents the hi and low part of the offset from 7347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // the thread pointer (Local Exec TLS). 7447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_TPREL_HI, 7547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_TPREL_LO, 7647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 7747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // N32/64 Flags. 7847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GPOFF_HI, 7947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GPOFF_LO, 8047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_DISP, 8147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_PAGE, 8247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes MO_GOT_OFST 8347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes }; 8447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 8547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes enum { 8647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes //===------------------------------------------------------------------===// 8747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Instruction encodings. These are the standard/most common forms for 8847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Mips instructions. 8947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // 9047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 9147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // Pseudo - This represents an instruction that is a pseudo instruction 9247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // or one that has not been implemented yet. It is illegal to code generate 9347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes // it, but tolerated for intermediate implementation stages. 9447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes Pseudo = 0, 9547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 9647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmR - This form is for instructions of the format R. 9747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmR = 1, 9847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmI - This form is for instructions of the format I. 9947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmI = 2, 10047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmJ - This form is for instructions of the format J. 10147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmJ = 3, 10247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmFR - This form is for instructions of the format FR. 10347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmFR = 4, 10447b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmFI - This form is for instructions of the format FI. 10547b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmFI = 5, 10647b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes /// FrmOther - This form is for instructions that have no specific format. 10747b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FrmOther = 6, 10847b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 10947b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes FormMask = 15 11047b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes }; 11147b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes} 11247b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 11347b92f3d8362518596d57269dc53d985bc13323aBruno Cardoso Lopes 11491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka/// getMipsRegisterNumbering - Given the enum value for some register, 11591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka/// return the number that it corresponds to. 11691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanakainline static unsigned getMipsRegisterNumbering(unsigned RegEnum) 11791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka{ 11891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka switch (RegEnum) { 11991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::ZERO: case Mips::ZERO_64: case Mips::F0: case Mips::D0_64: 12091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D0: 12191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 0; 12291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::AT: case Mips::AT_64: case Mips::F1: case Mips::D1_64: 12391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 1; 12491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::V0: case Mips::V0_64: case Mips::F2: case Mips::D2_64: 12591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D1: 12691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 2; 12791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::V1: case Mips::V1_64: case Mips::F3: case Mips::D3_64: 12891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 3; 12991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::A0: case Mips::A0_64: case Mips::F4: case Mips::D4_64: 13091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D2: 13191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 4; 13291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::A1: case Mips::A1_64: case Mips::F5: case Mips::D5_64: 13391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 5; 13491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::A2: case Mips::A2_64: case Mips::F6: case Mips::D6_64: 13591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D3: 13691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 6; 13791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::A3: case Mips::A3_64: case Mips::F7: case Mips::D7_64: 13891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 7; 13991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T0: case Mips::T0_64: case Mips::F8: case Mips::D8_64: 14091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D4: 14191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 8; 14291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T1: case Mips::T1_64: case Mips::F9: case Mips::D9_64: 14391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 9; 14491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T2: case Mips::T2_64: case Mips::F10: case Mips::D10_64: 14591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D5: 14691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 10; 14791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T3: case Mips::T3_64: case Mips::F11: case Mips::D11_64: 14891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 11; 14991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T4: case Mips::T4_64: case Mips::F12: case Mips::D12_64: 15091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D6: 15191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 12; 15291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T5: case Mips::T5_64: case Mips::F13: case Mips::D13_64: 15391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 13; 15491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T6: case Mips::T6_64: case Mips::F14: case Mips::D14_64: 15591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D7: 15691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 14; 15791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T7: case Mips::T7_64: case Mips::F15: case Mips::D15_64: 15891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 15; 15991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S0: case Mips::S0_64: case Mips::F16: case Mips::D16_64: 16091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D8: 16191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 16; 16291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S1: case Mips::S1_64: case Mips::F17: case Mips::D17_64: 16391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 17; 16491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S2: case Mips::S2_64: case Mips::F18: case Mips::D18_64: 16591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D9: 16691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 18; 16791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S3: case Mips::S3_64: case Mips::F19: case Mips::D19_64: 16891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 19; 16991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S4: case Mips::S4_64: case Mips::F20: case Mips::D20_64: 17091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D10: 17191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 20; 17291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S5: case Mips::S5_64: case Mips::F21: case Mips::D21_64: 17391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 21; 17491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S6: case Mips::S6_64: case Mips::F22: case Mips::D22_64: 17591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D11: 17691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 22; 17791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::S7: case Mips::S7_64: case Mips::F23: case Mips::D23_64: 17891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 23; 17991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T8: case Mips::T8_64: case Mips::F24: case Mips::D24_64: 18091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D12: 18191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 24; 18291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::T9: case Mips::T9_64: case Mips::F25: case Mips::D25_64: 18391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 25; 18491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::K0: case Mips::K0_64: case Mips::F26: case Mips::D26_64: 18591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D13: 18691d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 26; 18791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::K1: case Mips::K1_64: case Mips::F27: case Mips::D27_64: 18891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 27; 18991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::GP: case Mips::GP_64: case Mips::F28: case Mips::D28_64: 19091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::D14: 19191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 28; 19291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::SP: case Mips::SP_64: case Mips::F29: case Mips::D29_64: 1932bcc789a9d730cc0b5ae403fedf5565fe40dd577Bruno Cardoso Lopes case Mips::HWR29: 19491d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 29; 19591d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::FP: case Mips::FP_64: case Mips::F30: case Mips::D30_64: 196bb481f882093fb738d2bb15610c79364bada5496Jia Liu case Mips::D15: 19791d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 30; 19891d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka case Mips::RA: case Mips::RA_64: case Mips::F31: case Mips::D31_64: 19991d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka return 31; 20091d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka default: llvm_unreachable("Unknown register number!"); 20191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka } 20291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka} 203d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 204d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanakainline static std::pair<const MCSymbolRefExpr*, int64_t> 205d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira HatanakaMipsGetSymAndOffset(const MCFixup &Fixup) { 206d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka MCFixupKind FixupKind = Fixup.getKind(); 207d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 208d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka if ((FixupKind < FirstTargetFixupKind) || 209d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka (FixupKind >= MCFixupKind(Mips::LastTargetFixupKind))) 210d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka return std::make_pair((const MCSymbolRefExpr*)0, (int64_t)0); 211d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 212d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka const MCExpr *Expr = Fixup.getValue(); 213d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka MCExpr::ExprKind Kind = Expr->getKind(); 214d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 215d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka if (Kind == MCExpr::Binary) { 216d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka const MCBinaryExpr *BE = static_cast<const MCBinaryExpr*>(Expr); 217d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka const MCExpr *LHS = BE->getLHS(); 218d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(BE->getRHS()); 219d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 220d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka if ((LHS->getKind() != MCExpr::SymbolRef) || !CE) 221d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka return std::make_pair((const MCSymbolRefExpr*)0, (int64_t)0); 222d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 223d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka return std::make_pair(cast<MCSymbolRefExpr>(LHS), CE->getValue()); 224d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka } 225d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 226d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka if (Kind != MCExpr::SymbolRef) 227d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka return std::make_pair((const MCSymbolRefExpr*)0, (int64_t)0); 228d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka 229d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka return std::make_pair(cast<MCSymbolRefExpr>(Expr), 0); 230d7edf7edd4bdd372a6fc2582632ffe6fa935f980Akira Hatanaka} 23191d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka} 23291d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka 23391d2cc9cdd5f5c5fa89b4efa75217c96cbd38356Akira Hatanaka#endif 234