diff options
Diffstat (limited to 'runtime/stack_map.h')
-rw-r--r-- | runtime/stack_map.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/runtime/stack_map.h b/runtime/stack_map.h index fd22361221..ec37699935 100644 --- a/runtime/stack_map.h +++ b/runtime/stack_map.h @@ -104,10 +104,9 @@ class DexRegisterMap { return "in fpu register"; case kConstant: return "as constant"; - default: - LOG(FATAL) << "Invalid location kind " << static_cast<int>(kind); - return nullptr; } + UNREACHABLE(); + return nullptr; } LocationKind GetLocationKind(uint16_t register_index) const { @@ -126,6 +125,23 @@ class DexRegisterMap { kFixedSize + sizeof(LocationKind) + register_index * SingleEntrySize()); } + int32_t GetStackOffsetInBytes(uint16_t register_index) const { + DCHECK(GetLocationKind(register_index) == kInStack); + // We currently encode the offset in bytes. + return GetValue(register_index); + } + + int32_t GetConstant(uint16_t register_index) const { + DCHECK(GetLocationKind(register_index) == kConstant); + return GetValue(register_index); + } + + int32_t GetMachineRegister(uint16_t register_index) const { + DCHECK(GetLocationKind(register_index) == kInRegister + || GetLocationKind(register_index) == kInFpuRegister); + return GetValue(register_index); + } + static size_t SingleEntrySize() { return sizeof(LocationKind) + sizeof(int32_t); } |