MipsSubtarget.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- MipsSubtarget.h - Define Subtarget for the Mips ---------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file declares the Mips specific subclass of TargetSubtargetInfo. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef MIPSSUBTARGET_H 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MIPSSUBTARGET_H 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/MC/MCInstrItineraries.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/Support/ErrorHandling.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "llvm/Target/TargetSubtargetInfo.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GET_SUBTARGETINFO_HEADER 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MipsGenSubtargetInfo.inc" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace llvm { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StringRef; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MipsTargetMachine; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass MipsSubtarget : public MipsGenSubtargetInfo { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void anchor(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // NOTE: O64 will not be supported. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum MipsABIEnum { 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) UnknownABI, O32, N32, N64, EABI 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum MipsArchEnum { Mips32, Mips32r2, Mips4, Mips64, Mips64r2 }; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mips architecture version 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsArchEnum MipsArchVersion; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mips supported ABIs 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MipsABIEnum MipsABI; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IsLittle - The target is Little Endian 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsLittle; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IsSingleFloat - The target only supports single precision float 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // point operations. This enable the target to use all 32 32-bit 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // floating point registers instead of only using even ones. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsSingleFloat; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IsFP64bit - The target processor has 64-bit floating point registers. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFP64bit; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IsFP64bit - General-purpose registers are 64 bits wide 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsGP64bit; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasVFPU - Processor has a vector floating point unit. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasVFPU; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CPU supports cnMIPS (Cavium Networks Octeon CPU). 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasCnMips; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // isLinux - Target system is Linux. Is false we consider ELFOS for now. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsLinux; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UseSmallSection - Small section is used. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UseSmallSection; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// Features related to the presence of specific instructions. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasSEInReg - SEB and SEH (signext in register) instructions. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasSEInReg; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasCondMov - Conditional mov (MOVZ, MOVN) instructions. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasCondMov; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasSwap - Byte and half swap instructions. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasSwap; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasBitCount - Count leading '1' and '0' bits. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasBitCount; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasFPIdx -- Floating point indexed load/store instructions. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasFPIdx; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InMips16 -- can process Mips16 instructions 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool InMips16Mode; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mips16 hard float 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool InMips16HardFloat; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PreviousInMips16 -- the function we just processed was in Mips 16 Mode 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool PreviousInMips16Mode; 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // InMicroMips -- can process MicroMips instructions 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool InMicroMipsMode; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasDSP, HasDSPR2 -- supports DSP ASE. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasDSP, HasDSPR2; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow mixed Mips16 and Mips32 in one source file 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool AllowMixed16_32; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Optimize for space by compiling all functions as Mips 16 unless 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it needs floating point. Functions needing floating point are 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // compiled as Mips32 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Os16; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HasMSA -- supports MSA ASE. 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool HasMSA; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstrItineraryData InstrItins; 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Relocation Model 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Reloc::Model RM; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We can override the determination of whether we are in mips16 mode 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as from the command line 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum {NoOverride, Mips16Override, NoMips16Override} OverrideMode; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsTargetMachine *TM; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Triple TargetTriple; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool enablePostRAScheduler(CodeGenOpt::Level OptLevel, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AntiDepBreakMode& Mode, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegClassVector& CriticalPathRCs) const; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// Only O32 and EABI supported right now. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isABI_EABI() const { return MipsABI == EABI; } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isABI_N64() const { return MipsABI == N64; } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isABI_N32() const { return MipsABI == N32; } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isABI_O32() const { return MipsABI == O32; } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned getTargetABI() const { return MipsABI; } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// This constructor initializes the data members to match that 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// of the specified triple. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsSubtarget(const std::string &TT, const std::string &CPU, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string &FS, bool little, Reloc::Model RM, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsTargetMachine *TM); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// ParseSubtargetFeatures - Parses features string setting specified 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// subtarget options. Definition of function is auto generated by tblgen. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hasMips32() const { return MipsArchVersion >= Mips32; } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hasMips32r2() const { return MipsArchVersion == Mips32r2 || 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsArchVersion == Mips64r2; } 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool hasMips64() const { return MipsArchVersion >= Mips64; } 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool hasMips64r2() const { return MipsArchVersion == Mips64r2; } 15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool hasCnMips() const { return HasCnMips; } 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isLittle() const { return IsLittle; } 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isFP64bit() const { return IsFP64bit; } 16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isNotFP64bit() const { return !IsFP64bit; } 16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isGP64bit() const { return IsGP64bit; } 16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isGP32bit() const { return !IsGP64bit; } 16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isSingleFloat() const { return IsSingleFloat; } 16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool isNotSingleFloat() const { return !IsSingleFloat; } 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool hasVFPU() const { return HasVFPU; } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool inMips16Mode() const { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (OverrideMode) { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NoOverride: 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return InMips16Mode; 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case Mips16Override: 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case NoMips16Override: 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) llvm_unreachable("Unexpected mode"); 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool inMips16ModeDefault() const { 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return InMips16Mode; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool inMips16HardFloat() const { 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return inMips16Mode() && InMips16HardFloat; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool inMicroMipsMode() const { return InMicroMipsMode; } 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool hasDSP() const { return HasDSP; } 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool hasDSPR2() const { return HasDSPR2; } 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool hasMSA() const { return HasMSA; } 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool isLinux() const { return IsLinux; } 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool useSmallSection() const { return UseSmallSection; } 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool hasStandardEncoding() const { return !inMips16Mode(); } 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool mipsSEUsesSoftFloat() const; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool enableLongBranchPass() const { 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return hasStandardEncoding() || allowMixed16_32(); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /// Features related to the presence of specific instructions. 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool hasSEInReg() const { return HasSEInReg; } 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool hasCondMov() const { return HasCondMov; } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hasSwap() const { return HasSwap; } 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool hasBitCount() const { return HasBitCount; } 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool hasFPIdx() const { return HasFPIdx; } 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool hasExtractInsert() const { return !inMips16Mode() && hasMips32r2(); } 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allowMixed16_32() const { return inMips16ModeDefault() | 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AllowMixed16_32;} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool os16() const { return Os16;}; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool isNotTargetNaCl() const { return !TargetTriple.isOSNaCl(); } 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// for now constant islands are on for the whole compilation unit but we only 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// really use them if in addition we are in mips16 mode 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static bool useConstantIslands(); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned stackAlignment() const { return hasMips64() ? 16 : 8; } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Grab relocation model 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Reloc::Model getRelocationModel() const {return RM;} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Reset the subtarget for the Mips target. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void resetSubtarget(MachineFunction *MF); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // End llvm namespace 232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)