MipsRegisterInfo.cpp revision 96601ca332ab388754ca4673be8973396fea2ddd
19b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org//===-- MipsRegisterInfo.cpp - MIPS Register Information -== --------------===//
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//
39b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org//                     The LLVM Compiler Infrastructure
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// This file is distributed under the University of Illinois Open Source
69b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org// License. See LICENSE.TXT for details.
79b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org//
86112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org//===----------------------------------------------------------------------===//
99b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org//
10f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org// This file contains the MIPS implementation of the TargetRegisterInfo class.
119b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org//
1248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org//===----------------------------------------------------------------------===//
1348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org
146112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org#define DEBUG_TYPE "mips-reg-info"
1548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org
1648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "MipsRegisterInfo.h"
17b24f89353ed7a45b27ab0ffc69c222b81bbf87c3commit-bot@chromium.org#include "Mips.h"
1848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "MipsAnalyzeImmediate.h"
1948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "MipsInstrInfo.h"
2048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "MipsSubtarget.h"
2148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "MipsMachineFunction.h"
2248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/Constants.h"
2348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/DebugInfo.h"
2448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/Type.h"
2548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/CodeGen/ValueTypes.h"
2648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/CodeGen/MachineInstrBuilder.h"
2748543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/CodeGen/MachineFunction.h"
28b24f89353ed7a45b27ab0ffc69c222b81bbf87c3commit-bot@chromium.org#include "llvm/CodeGen/MachineFrameInfo.h"
29b24f89353ed7a45b27ab0ffc69c222b81bbf87c3commit-bot@chromium.org#include "llvm/Target/TargetFrameLowering.h"
30b24f89353ed7a45b27ab0ffc69c222b81bbf87c3commit-bot@chromium.org#include "llvm/Target/TargetMachine.h"
31b24f89353ed7a45b27ab0ffc69c222b81bbf87c3commit-bot@chromium.org#include "llvm/Target/TargetOptions.h"
3248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/Target/TargetInstrInfo.h"
3325adce81ce24702174ede33445c414a8d21d8a23vandebo@chromium.org#include "llvm/Support/CommandLine.h"
3448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/Support/Debug.h"
3548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/Support/ErrorHandling.h"
3648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/Support/raw_ostream.h"
3748543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/ADT/BitVector.h"
3848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "llvm/ADT/STLExtras.h"
3948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org
4048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#define GET_REGINFO_TARGET_DESC
4148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "MipsGenRegisterInfo.inc"
423b416216d1e90cb8b1bba41bb95806fe2d40da88vandebo@chromium.org
433b416216d1e90cb8b1bba41bb95806fe2d40da88vandebo@chromium.orgusing namespace llvm;
443b416216d1e90cb8b1bba41bb95806fe2d40da88vandebo@chromium.org
456112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orgMipsRegisterInfo::MipsRegisterInfo(const MipsSubtarget &ST,
466112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org                                   const TargetInstrInfo &tii)
47769fa6a013baca6d7404e2bf096a34a7e3635fa5ctguil@chromium.org  : MipsGenRegisterInfo(Mips::RA), Subtarget(ST), TII(tii) {}
4848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org
4948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.orgunsigned MipsRegisterInfo::getPICCallReg() { return Mips::T9; }
5048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org
5148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org//===----------------------------------------------------------------------===//
5248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org// Callee Saved Registers methods
5348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org//===----------------------------------------------------------------------===//
5448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org
559b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org/// Mips Callee Saved Registers
56f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.comconst uint16_t* MipsRegisterInfo::
576112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orggetCalleeSavedRegs(const MachineFunction *MF) const {
58f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com  if (Subtarget.isSingleFloat())
596112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org    return CSR_SingleFloatOnly_SaveList;
60918352f86e939fe042495aad4f5ff33c4ecec9edvandebo@chromium.org  else if (!Subtarget.hasMips64())
61f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com    return CSR_O32_SaveList;
626112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  else if (Subtarget.isABI_N32())
636112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org    return CSR_N32_SaveList;
646112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
656112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  assert(Subtarget.isABI_N64());
666addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com  return CSR_N64_SaveList;
676addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com}
686addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.com
696addb1930013ebb2f984045141650fd7afcfa90fedisonn@google.comconst uint32_t*
709b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgMipsRegisterInfo::getCallPreservedMask(CallingConv::ID) const {
719b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  if (Subtarget.isSingleFloat())
729b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    return CSR_SingleFloatOnly_RegMask;
739b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  else if (!Subtarget.hasMips64())
749b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    return CSR_O32_RegMask;
759b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  else if (Subtarget.isABI_N32())
769b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    return CSR_N32_RegMask;
779b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
7848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org  assert(Subtarget.isABI_N64());
799b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  return CSR_N64_RegMask;
809b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org}
819b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
829b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgBitVector MipsRegisterInfo::
839b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orggetReservedRegs(const MachineFunction &MF) const {
849b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  static const uint16_t ReservedCPURegs[] = {
85b83f6c3cbdabc14d8290b00d9f38ba59bf6719a1mtklein    Mips::ZERO, Mips::AT, Mips::K0, Mips::K1, Mips::SP
86b83f6c3cbdabc14d8290b00d9f38ba59bf6719a1mtklein  };
879b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
889b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  static const uint16_t ReservedCPU64Regs[] = {
899b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    Mips::ZERO_64, Mips::AT_64, Mips::K0_64, Mips::K1_64, Mips::SP_64
909b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  };
919b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
921771cbf43d9a1334e3d870c635b4215bb888dd98digit@google.com  BitVector Reserved(getNumRegs());
931771cbf43d9a1334e3d870c635b4215bb888dd98digit@google.com  typedef TargetRegisterClass::const_iterator RegIter;
949b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
959b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org  for (unsigned I = 0; I < array_lengthof(ReservedCPURegs); ++I)
969b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    Reserved.set(ReservedCPURegs[I]);
979b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
98b83f6c3cbdabc14d8290b00d9f38ba59bf6719a1mtklein  if (Subtarget.hasMips64()) {
99f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com    for (unsigned I = 0; I < array_lengthof(ReservedCPU64Regs); ++I)
100f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com      Reserved.set(ReservedCPU64Regs[I]);
1019b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
102f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com    // Reserve all registers in AFGR64.
103f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com    for (RegIter Reg = Mips::AFGR64RegClass.begin(),
1049b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org         EReg = Mips::AFGR64RegClass.end(); Reg != EReg; ++Reg)
1059b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org      Reserved.set(*Reg);
106f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com  } else {
1079b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    // Reserve all registers in CPU64Regs & FGR64.
1089b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org    for (RegIter Reg = Mips::CPU64RegsRegClass.begin(),
1099b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org         EReg = Mips::CPU64RegsRegClass.end(); Reg != EReg; ++Reg)
1109b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org      Reserved.set(*Reg);
11119e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org
11219e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org    for (RegIter Reg = Mips::FGR64RegClass.begin(),
113b83f6c3cbdabc14d8290b00d9f38ba59bf6719a1mtklein         EReg = Mips::FGR64RegClass.end(); Reg != EReg; ++Reg)
11419e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org      Reserved.set(*Reg);
11519e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  }
11619e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org
11719e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  // Reserve FP if this function should have a dedicated frame pointer register.
118d96d17b9c113ac694138224249ff2ce643e961ddvandebo@chromium.org  if (MF.getTarget().getFrameLowering()->hasFP(MF)) {
11919e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org    Reserved.set(Mips::FP);
120c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com    Reserved.set(Mips::FP_64);
121c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com  }
12219e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org
12319e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  // Reserve hardware registers.
124d96d17b9c113ac694138224249ff2ce643e961ddvandebo@chromium.org  Reserved.set(Mips::HWR29);
125d96d17b9c113ac694138224249ff2ce643e961ddvandebo@chromium.org  Reserved.set(Mips::HWR29_64);
12619e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org
12719e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  // Reserve RA if in mips16 mode.
128c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com  if (Subtarget.inMips16Mode()) {
12919e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org    Reserved.set(Mips::RA);
13019e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org    Reserved.set(Mips::RA_64);
13119e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  }
13219e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org
13319e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  // Reserve GP if small section is used.
13419e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  if (Subtarget.useSmallSection()) {
13519e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org    Reserved.set(Mips::GP);
136f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com    Reserved.set(Mips::GP_64);
13793a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.org  }
1386112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1396112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  return Reserved;
140f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com}
1416112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
142d96d17b9c113ac694138224249ff2ce643e961ddvandebo@chromium.orgbool
14393a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.orgMipsRegisterInfo::requiresRegisterScavenging(const MachineFunction &MF) const {
14493a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.org  return true;
14593a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.org}
14693a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.org
14793a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.orgbool
1486112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orgMipsRegisterInfo::trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
1496112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  return true;
1506112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org}
1516112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1526112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org// FrameIndex represent objects inside a abstract stack.
153c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com// We must replace FrameIndex with an stack/frame pointer
1546112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org// direct reference.
1556112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orgvoid MipsRegisterInfo::
1566112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orgeliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
1576112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org                    RegScavenger *RS) const {
1586112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  MachineInstr &MI = *II;
15919e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  MachineFunction &MF = *MI.getParent()->getParent();
16019e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org
16119e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  unsigned i = 0;
16219e3c1ed1b20ce93cc092d25c3637b62f90c5bc5vandebo@chromium.org  while (!MI.getOperand(i).isFI()) {
1636112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org    ++i;
1646112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org    assert(i < MI.getNumOperands() &&
1656112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org           "Instr doesn't have FrameIndex operand!");
1666112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  }
1676112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1686112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  DEBUG(errs() << "\nFunction : " << MF.getName() << "\n";
169f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com        errs() << "<--------->\n" << MI);
170f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com
1716112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  int FrameIndex = MI.getOperand(i).getIndex();
1726112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  uint64_t stackSize = MF.getFrameInfo()->getStackSize();
1736112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  int64_t spOffset = MF.getFrameInfo()->getObjectOffset(FrameIndex);
1746112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1756112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  DEBUG(errs() << "FrameIndex : " << FrameIndex << "\n"
176c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com               << "spOffset   : " << spOffset << "\n"
177c789cf1c6f3947283aeb34acb5a22e6204f8f6f5reed@google.com               << "stackSize  : " << stackSize << "\n");
1786112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1796112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  eliminateFI(MI, i, FrameIndex, stackSize, spOffset);
1806112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org}
1816112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1826112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orgunsigned MipsRegisterInfo::
1836112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orggetFrameRegister(const MachineFunction &MF) const {
184f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com  const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering();
185b83f6c3cbdabc14d8290b00d9f38ba59bf6719a1mtklein  bool IsN64 = Subtarget.isABI_N64();
1869b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
187f6c3ebdeb135dcdb9af225bd7af77f1fe1f92787reed@google.com  return TFI->hasFP(MF) ? (IsN64 ? Mips::FP_64 : Mips::FP) :
1889b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org                          (IsN64 ? Mips::SP_64 : Mips::SP);
1899b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org}
1906112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org
1916112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orgunsigned MipsRegisterInfo::
1926112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orggetEHExceptionRegister() const {
1936112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  llvm_unreachable("What is the exception register");
1946112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org}
1959b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org
1969b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.orgunsigned MipsRegisterInfo::
1976112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.orggetEHHandlerRegister() const {
1986112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org  llvm_unreachable("What is the exception handler register");
1999b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org}
2009b49dc0db8254e3dcdc2de4a1e0add4f8a7ac5a8vandebo@chromium.org