1320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola//===-- MipsTargetStreamer.h - Mips Target Streamer ------------*- C++ -*--===// 2320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// 3320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// The LLVM Compiler Infrastructure 4320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// 5320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// This file is distributed under the University of Illinois Open Source 6320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// License. See LICENSE.TXT for details. 7320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// 8320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola//===----------------------------------------------------------------------===// 9320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 10320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#ifndef MIPSTARGETSTREAMER_H 11320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#define MIPSTARGETSTREAMER_H 12320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 134c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter#include "llvm/MC/MCELFStreamer.h" 14320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#include "llvm/MC/MCStreamer.h" 15cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "MCTargetDesc/MipsABIFlagsSection.h" 16320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 17320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindolanamespace llvm { 18e40e68add7f17f6ad5cd5e85ea44b149f6935147Eric Christopher 19cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesstruct MipsABIFlagsSection; 20cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 21cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass MipsTargetStreamer : public MCTargetStreamer { 22320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindolapublic: 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MipsTargetStreamer(MCStreamer &S); 24cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetMicroMips(); 25cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetNoMicroMips(); 26cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetMips16(); 27cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetNoMips16(); 28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 29cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetReorder(); 30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetNoReorder(); 31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetMacro(); 32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetNoMacro(); 33cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetAt(); 34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetNoAt(); 35cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveEnd(StringRef Name); 36cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveEnt(const MCSymbol &Symbol); 38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveAbiCalls(); 39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveNaN2008(); 40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveNaNLegacy(); 41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveOptionPic0(); 42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveOptionPic2(); 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFrame(unsigned StackReg, unsigned StackSize, 44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned ReturnReg); 45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff); 46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetMips32R2(); 49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetMips64(); 50cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetMips64R2(); 51cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetDsp(); 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // PIC support 54cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveCpload(unsigned RegNo); 55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines virtual void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, 56cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines const MCSymbol &Sym, bool IsReg); 57cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 58cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines /// Emit a '.module fp=value' directive using the given values. 59cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines /// Updates the .MIPS.abiflags section 60cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveModuleFP(MipsABIFlagsSection::FpABIKind Value, 61cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines bool Is32BitABI) { 62cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ABIFlagsSection.setFpABI(Value, Is32BitABI); 63cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 64cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 65cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines /// Emit a '.module fp=value' directive using the current values of the 66cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines /// .MIPS.abiflags section. 67cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitDirectiveModuleFP() { 68cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines emitDirectiveModuleFP(ABIFlagsSection.getFpABI(), 69cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ABIFlagsSection.Is32BitABI); 70cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 71cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 72cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveModuleOddSPReg(bool Enabled, bool IsO32ABI); 73cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value){}; 74cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void emitMipsAbiFlags(){}; 75cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void setCanHaveModuleDir(bool Can) { canHaveModuleDirective = Can; } 76cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines bool getCanHaveModuleDir() { return canHaveModuleDirective; } 77cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 78cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // This method enables template classes to set internal abi flags 79cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // structure values. 80cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines template <class PredicateLibrary> 81cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void updateABIInfo(const PredicateLibrary &P) { 82cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ABIFlagsSection.setAllFromPredicates(P); 83cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 84cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 85cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines MipsABIFlagsSection &getABIFlagsSection() { return ABIFlagsSection; } 86cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 87cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesprotected: 88cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines MipsABIFlagsSection ABIFlagsSection; 89cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 90cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesprivate: 91cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines bool canHaveModuleDirective; 92320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola}; 934c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter 944c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter// This part is for ascii assembly output 954c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterclass MipsTargetAsmStreamer : public MipsTargetStreamer { 96a87a147ee7bb9adb4caea631ff0ba7e66bb9b0b5Bill Wendling formatted_raw_ostream &OS; 97a87a147ee7bb9adb4caea631ff0ba7e66bb9b0b5Bill Wendling 984c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterpublic: 9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); 100dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMicroMips() override; 101dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoMicroMips() override; 102dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips16() override; 103dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoMips16() override; 104dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetReorder() override; 106dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoReorder() override; 107dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMacro() override; 108dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoMacro() override; 109dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetAt() override; 110dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoAt() override; 111dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveEnd(StringRef Name) override; 112dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 113dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveEnt(const MCSymbol &Symbol) override; 114dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveAbiCalls() override; 115dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveNaN2008() override; 116dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveNaNLegacy() override; 117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveOptionPic0() override; 118dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveOptionPic2() override; 119dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitFrame(unsigned StackReg, unsigned StackSize, 120dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines unsigned ReturnReg) override; 121dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override; 122dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override; 123dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 124dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips32R2() override; 125dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips64() override; 126dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips64R2() override; 127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetDsp() override; 128dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 129dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // PIC support 130dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines virtual void emitDirectiveCpload(unsigned RegNo); 131dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, 132dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSymbol &Sym, bool IsReg) override; 133cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 134cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // ABI Flags 135cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitDirectiveModuleFP(MipsABIFlagsSection::FpABIKind Value, 136cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines bool Is32BitABI) override; 137cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitDirectiveModuleOddSPReg(bool Enabled, bool IsO32ABI) override; 138cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value) override; 139cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitMipsAbiFlags() override; 1404c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter}; 1414c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter 1424c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter// This part is for ELF object output 1434c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterclass MipsTargetELFStreamer : public MipsTargetStreamer { 14436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool MicroMipsEnabled; 14536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const MCSubtargetInfo &STI; 14636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool Pic; 14736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1484c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterpublic: 14936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool isMicroMipsEnabled() const { return MicroMipsEnabled; } 1504c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter MCELFStreamer &getStreamer(); 15136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI); 15236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 153dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitLabel(MCSymbol *Symbol) override; 154dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override; 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void finish() override; 15636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 157dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMicroMips() override; 158dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoMicroMips() override; 159dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips16() override; 160dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoMips16() override; 161dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 162dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetReorder() override; 163dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoReorder() override; 164dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMacro() override; 165dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoMacro() override; 166dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetAt() override; 167dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetNoAt() override; 168dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveEnd(StringRef Name) override; 169dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 170dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveEnt(const MCSymbol &Symbol) override; 171dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveAbiCalls() override; 172dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveNaN2008() override; 173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveNaNLegacy() override; 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveOptionPic0() override; 175dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveOptionPic2() override; 176dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitFrame(unsigned StackReg, unsigned StackSize, 177dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines unsigned ReturnReg) override; 178dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override; 179dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override; 180dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 181dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips32R2() override; 182dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips64() override; 183dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetMips64R2() override; 184dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveSetDsp() override; 185dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 186dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // PIC support 187dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines virtual void emitDirectiveCpload(unsigned RegNo); 188dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, 189dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSymbol &Sym, bool IsReg) override; 190dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 191cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // ABI Flags 192cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitDirectiveModuleOddSPReg(bool Enabled, bool IsO32ABI) override; 193cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines void emitMipsAbiFlags() override; 194cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 195dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesprotected: 196dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool isO32() const { return STI.getFeatureBits() & Mips::FeatureO32; } 197dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool isN32() const { return STI.getFeatureBits() & Mips::FeatureN32; } 198dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool isN64() const { return STI.getFeatureBits() & Mips::FeatureN64; } 1994c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter}; 200320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola} 201320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#endif 202