diff options
Diffstat (limited to 'runtime/arch/arm/context_arm.cc')
| -rw-r--r-- | runtime/arch/arm/context_arm.cc | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/runtime/arch/arm/context_arm.cc b/runtime/arch/arm/context_arm.cc index 6a337b3038..96ffc9310f 100644 --- a/runtime/arch/arm/context_arm.cc +++ b/runtime/arch/arm/context_arm.cc @@ -25,14 +25,14 @@ namespace art { namespace arm { -static const uint32_t gZero = 0; +static constexpr uint32_t gZero = 0; void ArmContext::Reset() { for (size_t i = 0; i < kNumberOfCoreRegisters; i++) { - gprs_[i] = NULL; + gprs_[i] = nullptr; } for (size_t i = 0; i < kNumberOfSRegisters; i++) { - fprs_[i] = NULL; + fprs_[i] = nullptr; } gprs_[SP] = &sp_; gprs_[PC] = &pc_; @@ -69,31 +69,46 @@ void ArmContext::FillCalleeSaves(const StackVisitor& fr) { } } -void ArmContext::SetGPR(uint32_t reg, uintptr_t value) { +bool ArmContext::SetGPR(uint32_t reg, uintptr_t value) { DCHECK_LT(reg, static_cast<uint32_t>(kNumberOfCoreRegisters)); DCHECK_NE(gprs_[reg], &gZero); // Can't overwrite this static value since they are never reset. - DCHECK(gprs_[reg] != NULL); - *gprs_[reg] = value; + if (gprs_[reg] != nullptr) { + *gprs_[reg] = value; + return true; + } else { + return false; + } +} + +bool ArmContext::SetFPR(uint32_t reg, uintptr_t value) { + DCHECK_LT(reg, static_cast<uint32_t>(kNumberOfSRegisters)); + DCHECK_NE(fprs_[reg], &gZero); // Can't overwrite this static value since they are never reset. + if (fprs_[reg] != nullptr) { + *fprs_[reg] = value; + return true; + } else { + return false; + } } void ArmContext::SmashCallerSaves() { // This needs to be 0 because we want a null/zero return value. gprs_[R0] = const_cast<uint32_t*>(&gZero); gprs_[R1] = const_cast<uint32_t*>(&gZero); - gprs_[R2] = NULL; - gprs_[R3] = NULL; + gprs_[R2] = nullptr; + gprs_[R3] = nullptr; } extern "C" void art_quick_do_long_jump(uint32_t*, uint32_t*); void ArmContext::DoLongJump() { - uintptr_t gprs[16]; - uint32_t fprs[32]; + uintptr_t gprs[kNumberOfCoreRegisters]; + uint32_t fprs[kNumberOfSRegisters]; for (size_t i = 0; i < kNumberOfCoreRegisters; ++i) { - gprs[i] = gprs_[i] != NULL ? *gprs_[i] : ArmContext::kBadGprBase + i; + gprs[i] = gprs_[i] != nullptr ? *gprs_[i] : ArmContext::kBadGprBase + i; } for (size_t i = 0; i < kNumberOfSRegisters; ++i) { - fprs[i] = fprs_[i] != NULL ? *fprs_[i] : ArmContext::kBadGprBase + i; + fprs[i] = fprs_[i] != nullptr ? *fprs_[i] : ArmContext::kBadFprBase + i; } DCHECK_EQ(reinterpret_cast<uintptr_t>(Thread::Current()), gprs[TR]); art_quick_do_long_jump(gprs, fprs); |