17fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao/* 27fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * Copyright (C) 2011 The Android Open Source Project 37fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * 47fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * Licensed under the Apache License, Version 2.0 (the "License"); 57fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * you may not use this file except in compliance with the License. 67fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * You may obtain a copy of the License at 77fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * 87fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * http://www.apache.org/licenses/LICENSE-2.0 97fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * 107fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * Unless required by applicable law or agreed to in writing, software 117fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * distributed under the License is distributed on an "AS IS" BASIS, 127fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * See the License for the specific language governing permissions and 147fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao * limitations under the License. 157fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao */ 167fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 17166db04e259ca51838c311891598664deeed85adIan Rogers#ifndef ART_COMPILER_UTILS_MIPS_MANAGED_REGISTER_MIPS_H_ 18166db04e259ca51838c311891598664deeed85adIan Rogers#define ART_COMPILER_UTILS_MIPS_MANAGED_REGISTER_MIPS_H_ 197fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 207fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao#include "constants_mips.h" 214fda4eb799c95be266f52aaf3461a440ea86b841David Srbecky#include "debug/dwarf/register.h" 22166db04e259ca51838c311891598664deeed85adIan Rogers#include "utils/managed_register.h" 237fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 247fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaonamespace art { 257fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaonamespace mips { 267fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 277fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// Values for register pairs. 287fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoenum RegisterPair { 297fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao V0_V1 = 0, 307fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao A0_A1 = 1, 317fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao A2_A3 = 2, 327fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao T0_T1 = 3, 337fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao T2_T3 = 4, 347fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao T4_T5 = 5, 357fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao T6_T7 = 6, 367fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao S0_S1 = 7, 377fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao S2_S3 = 8, 387fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao S4_S5 = 9, 397fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao S6_S7 = 10, 407fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao A1_A2 = 11, // Dalvik style passing 417fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao kNumberOfRegisterPairs = 12, 427fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao kNoRegisterPair = -1, 437fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao}; 447fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 457fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaostd::ostream& operator<<(std::ostream& os, const RegisterPair& reg); 467fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 477fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfCoreRegIds = kNumberOfCoreRegisters; 487fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfCoreAllocIds = kNumberOfCoreRegisters; 497fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 507fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfFRegIds = kNumberOfFRegisters; 517fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfFAllocIds = kNumberOfFRegisters; 527fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 537fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfDRegIds = kNumberOfDRegisters; 547fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfOverlappingDRegIds = kNumberOfOverlappingDRegisters; 557fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfDAllocIds = kNumberOfDRegisters; 567fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 577fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfPairRegIds = kNumberOfRegisterPairs; 587fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 597fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfRegIds = kNumberOfCoreRegIds + kNumberOfFRegIds + 607fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao kNumberOfDRegIds + kNumberOfPairRegIds; 617fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoconst int kNumberOfAllocIds = 627fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao kNumberOfCoreAllocIds + kNumberOfFAllocIds + kNumberOfDAllocIds; 637fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 647fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// Register ids map: 657fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// [0..R[ core registers (enum Register) 667fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// [R..F[ single precision FP registers (enum FRegister) 677fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// [F..D[ double precision FP registers (enum DRegister) 687fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// [D..P[ core register pairs (enum RegisterPair) 697fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// where 707fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// R = kNumberOfCoreRegIds 717fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// F = R + kNumberOfFRegIds 727fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// D = F + kNumberOfDRegIds 737fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// P = D + kNumberOfRegisterPairs 747fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 757fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// Allocation ids map: 767fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// [0..R[ core registers (enum Register) 777fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// [R..F[ single precision FP registers (enum FRegister) 787fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// where 797fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// R = kNumberOfCoreRegIds 807fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// F = R + kNumberOfFRegIds 817fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 827fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 837fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// An instance of class 'ManagedRegister' represents a single core register (enum 847fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// Register), a single precision FP register (enum FRegister), a double precision 857fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// FP register (enum DRegister), or a pair of core registers (enum RegisterPair). 867fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// 'ManagedRegister::NoRegister()' provides an invalid register. 877fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao// There is a one-to-one mapping between ManagedRegister and register id. 887fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoclass MipsManagedRegister : public ManagedRegister { 897fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao public: 907fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao Register AsCoreRegister() const { 917fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsCoreRegister()); 927fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return static_cast<Register>(id_); 937fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 947fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 957fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao FRegister AsFRegister() const { 967fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsFRegister()); 977fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return static_cast<FRegister>(id_ - kNumberOfCoreRegIds); 987fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 997fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1007fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao DRegister AsDRegister() const { 1017fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsDRegister()); 1027fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return static_cast<DRegister>(id_ - kNumberOfCoreRegIds - kNumberOfFRegIds); 1037fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1047fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1057fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao FRegister AsOverlappingDRegisterLow() const { 1067fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsOverlappingDRegister()); 1077fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao DRegister d_reg = AsDRegister(); 1087fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return static_cast<FRegister>(d_reg * 2); 1097fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1107fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1117fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao FRegister AsOverlappingDRegisterHigh() const { 1127fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsOverlappingDRegister()); 1137fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao DRegister d_reg = AsDRegister(); 1147fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return static_cast<FRegister>(d_reg * 2 + 1); 1157fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1167fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1177fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao Register AsRegisterPairLow() const { 1187fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsRegisterPair()); 1197fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao // Appropriate mapping of register ids allows to use AllocIdLow(). 1207fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return FromRegId(AllocIdLow()).AsCoreRegister(); 1217fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1227fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1237fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao Register AsRegisterPairHigh() const { 1247fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsRegisterPair()); 1257fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao // Appropriate mapping of register ids allows to use AllocIdHigh(). 1267fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return FromRegId(AllocIdHigh()).AsCoreRegister(); 1277fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1287fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1297fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool IsCoreRegister() const { 1307fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsValidManagedRegister()); 1317fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return (0 <= id_) && (id_ < kNumberOfCoreRegIds); 1327fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1337fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1347fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool IsFRegister() const { 1357fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsValidManagedRegister()); 1367fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao const int test = id_ - kNumberOfCoreRegIds; 1377fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return (0 <= test) && (test < kNumberOfFRegIds); 1387fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1397fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1407fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool IsDRegister() const { 1417fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsValidManagedRegister()); 1427fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao const int test = id_ - (kNumberOfCoreRegIds + kNumberOfFRegIds); 1437fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return (0 <= test) && (test < kNumberOfDRegIds); 1447fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1457fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1467fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao // Returns true if this DRegister overlaps FRegisters. 1477fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool IsOverlappingDRegister() const { 1487fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsValidManagedRegister()); 1497fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao const int test = id_ - (kNumberOfCoreRegIds + kNumberOfFRegIds); 1507fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return (0 <= test) && (test < kNumberOfOverlappingDRegIds); 1517fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1527fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1537fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool IsRegisterPair() const { 1547fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsValidManagedRegister()); 1557fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao const int test = 1567fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao id_ - (kNumberOfCoreRegIds + kNumberOfFRegIds + kNumberOfDRegIds); 1577fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return (0 <= test) && (test < kNumberOfPairRegIds); 1587fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1597fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1607fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao void Print(std::ostream& os) const; 1617fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1627fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao // Returns true if the two managed-registers ('this' and 'other') overlap. 1637fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao // Either managed-register may be the NoRegister. If both are the NoRegister 1647fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao // then false is returned. 1657fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool Overlaps(const MipsManagedRegister& other) const; 1667fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1677fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao static MipsManagedRegister FromCoreRegister(Register r) { 1687fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK_NE(r, kNoRegister); 1697fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return FromRegId(r); 1707fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1717fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1727fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao static MipsManagedRegister FromFRegister(FRegister r) { 1737fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK_NE(r, kNoFRegister); 1747fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return FromRegId(r + kNumberOfCoreRegIds); 1757fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1767fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1777fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao static MipsManagedRegister FromDRegister(DRegister r) { 1787fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK_NE(r, kNoDRegister); 1797fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return FromRegId(r + kNumberOfCoreRegIds + kNumberOfFRegIds); 1807fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1817fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1827fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao static MipsManagedRegister FromRegisterPair(RegisterPair r) { 1837fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK_NE(r, kNoRegisterPair); 1847fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return FromRegId(r + (kNumberOfCoreRegIds + kNumberOfFRegIds + kNumberOfDRegIds)); 1857fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1867fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1877fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao private: 1887fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao bool IsValidManagedRegister() const { 1897fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return (0 <= id_) && (id_ < kNumberOfRegIds); 1907fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1917fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1927fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao int RegId() const { 1937fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(!IsNoRegister()); 1947fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return id_; 1957fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 1967fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 1977fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao int AllocId() const { 1987fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(IsValidManagedRegister() && !IsOverlappingDRegister() && !IsRegisterPair()); 1997fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK_LT(id_, kNumberOfAllocIds); 2007fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return id_; 2017fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 2027fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2037fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao int AllocIdLow() const; 2047fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao int AllocIdHigh() const; 2057fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2067fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao friend class ManagedRegister; 2077fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2087fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao explicit MipsManagedRegister(int reg_id) : ManagedRegister(reg_id) {} 2097fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2107fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao static MipsManagedRegister FromRegId(int reg_id) { 2117fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao MipsManagedRegister reg(reg_id); 2127fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(reg.IsValidManagedRegister()); 2137fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return reg; 2147fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao } 2157fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao}; 2167fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2177fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaostd::ostream& operator<<(std::ostream& os, const MipsManagedRegister& reg); 2187fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2197fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao} // namespace mips 2207fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2217fbee0731b14b5bf392a4254f5cd84685ab517dajeffhaoinline mips::MipsManagedRegister ManagedRegister::AsMips() const { 2227fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao mips::MipsManagedRegister reg(id_); 2237fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao CHECK(reg.IsNoRegister() || reg.IsValidManagedRegister()); 2247fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao return reg; 2257fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao} 2267fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 2277fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao} // namespace art 2287fbee0731b14b5bf392a4254f5cd84685ab517dajeffhao 229166db04e259ca51838c311891598664deeed85adIan Rogers#endif // ART_COMPILER_UTILS_MIPS_MANAGED_REGISTER_MIPS_H_ 230