diff options
Diffstat (limited to 'compiler/utils')
| -rw-r--r-- | compiler/utils/arm64/assembler_arm64.cc | 9 | ||||
| -rw-r--r-- | compiler/utils/arm64/assembler_arm64.h | 3 |
2 files changed, 12 insertions, 0 deletions
diff --git a/compiler/utils/arm64/assembler_arm64.cc b/compiler/utils/arm64/assembler_arm64.cc index b364ba0f65..00ce923517 100644 --- a/compiler/utils/arm64/assembler_arm64.cc +++ b/compiler/utils/arm64/assembler_arm64.cc @@ -468,6 +468,15 @@ void Arm64Assembler::Call(ManagedRegister m_base, Offset offs, ManagedRegister m ___ Blr(reg_x(scratch.AsCoreRegister())); } +void Arm64Assembler::JumpTo(ManagedRegister m_base, Offset offs, ManagedRegister m_scratch) { + Arm64ManagedRegister base = m_base.AsArm64(); + Arm64ManagedRegister scratch = m_scratch.AsArm64(); + CHECK(base.IsCoreRegister()) << base; + CHECK(scratch.IsCoreRegister()) << scratch; + LoadFromOffset(scratch.AsCoreRegister(), base.AsCoreRegister(), offs.Int32Value()); + ___ Br(reg_x(scratch.AsCoreRegister())); +} + void Arm64Assembler::Call(FrameOffset base, Offset offs, ManagedRegister m_scratch) { Arm64ManagedRegister scratch = m_scratch.AsArm64(); CHECK(scratch.IsCoreRegister()) << scratch; diff --git a/compiler/utils/arm64/assembler_arm64.h b/compiler/utils/arm64/assembler_arm64.h index 2bada3fc9e..1c47e7757d 100644 --- a/compiler/utils/arm64/assembler_arm64.h +++ b/compiler/utils/arm64/assembler_arm64.h @@ -204,6 +204,9 @@ class Arm64Assembler : public Assembler { void Call(FrameOffset base, Offset offset, ManagedRegister scratch); void Call(ThreadOffset offset, ManagedRegister scratch); + // Jump to address (not setting link register) + void JumpTo(ManagedRegister m_base, Offset offs, ManagedRegister m_scratch); + // Generate code to check if Thread::Current()->exception_ is non-null // and branch to a ExceptionSlowPath if it is. void ExceptionPoll(ManagedRegister scratch, size_t stack_adjust); |