1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #include "dex_register_location.h" 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN { 20*795d594fSAndroid Build Coastguard Worker operator <<(std::ostream & stream,DexRegisterLocation::Kind kind)21*795d594fSAndroid Build Coastguard Workerstd::ostream& operator<<(std::ostream& stream, DexRegisterLocation::Kind kind) { 22*795d594fSAndroid Build Coastguard Worker return stream << "Kind<" << static_cast<int32_t>(kind) << ">"; 23*795d594fSAndroid Build Coastguard Worker } 24*795d594fSAndroid Build Coastguard Worker operator <<(std::ostream & stream,const DexRegisterLocation & reg)25*795d594fSAndroid Build Coastguard Workerstd::ostream& operator<<(std::ostream& stream, const DexRegisterLocation& reg) { 26*795d594fSAndroid Build Coastguard Worker using Kind = DexRegisterLocation::Kind; 27*795d594fSAndroid Build Coastguard Worker switch (reg.GetKind()) { 28*795d594fSAndroid Build Coastguard Worker case Kind::kInvalid: 29*795d594fSAndroid Build Coastguard Worker return stream << "Invalid"; 30*795d594fSAndroid Build Coastguard Worker case Kind::kNone: 31*795d594fSAndroid Build Coastguard Worker return stream << "None"; 32*795d594fSAndroid Build Coastguard Worker case Kind::kInStack: 33*795d594fSAndroid Build Coastguard Worker return stream << "sp+" << reg.GetValue(); 34*795d594fSAndroid Build Coastguard Worker case Kind::kInRegister: 35*795d594fSAndroid Build Coastguard Worker return stream << "r" << reg.GetValue(); 36*795d594fSAndroid Build Coastguard Worker case Kind::kInRegisterHigh: 37*795d594fSAndroid Build Coastguard Worker return stream << "r" << reg.GetValue() << "/hi"; 38*795d594fSAndroid Build Coastguard Worker case Kind::kInFpuRegister: 39*795d594fSAndroid Build Coastguard Worker return stream << "f" << reg.GetValue(); 40*795d594fSAndroid Build Coastguard Worker case Kind::kInFpuRegisterHigh: 41*795d594fSAndroid Build Coastguard Worker return stream << "f" << reg.GetValue() << "/hi"; 42*795d594fSAndroid Build Coastguard Worker case Kind::kConstant: 43*795d594fSAndroid Build Coastguard Worker return stream << "#" << reg.GetValue(); 44*795d594fSAndroid Build Coastguard Worker default: 45*795d594fSAndroid Build Coastguard Worker return stream << "DexRegisterLocation(" << static_cast<uint32_t>(reg.GetKind()) 46*795d594fSAndroid Build Coastguard Worker << "," << reg.GetValue() << ")"; 47*795d594fSAndroid Build Coastguard Worker } 48*795d594fSAndroid Build Coastguard Worker } 49*795d594fSAndroid Build Coastguard Worker 50*795d594fSAndroid Build Coastguard Worker } // namespace art 51