Chromium Code Reviews| Index: runtime/vm/assembler_arm64.h |
| =================================================================== |
| --- runtime/vm/assembler_arm64.h (revision 35277) |
| +++ runtime/vm/assembler_arm64.h (working copy) |
| @@ -550,6 +550,16 @@ |
| adds(ZR, rn, o); |
| } |
| + void CompareRegisters(Register rn, Register rm) { |
| + if (rn == SP) { |
| + // UXTX 0 on a 64-bit register (rm) is a nop, but forces R31 to be |
| + // interpreted as SP. |
| + cmp(SP, Operand(rm, UXTX, 0)); |
|
regis
2014/04/22 23:38:10
I suppose you have an assert in cmp() making sure
zra
2014/04/23 17:18:45
The relevant asserts are in AddSubHelper. I've add
|
| + } else { |
| + cmp(rn, Operand(rm)); |
| + } |
| + } |
| + |
| // Conditional branch. |
| void b(Label* label, Condition cond = AL) { |
| EmitBranch(BCOND, cond, label); |
| @@ -633,16 +643,22 @@ |
| } |
| // Branching to ExternalLabels. |
| - void Branch(const ExternalLabel* label) { |
| - LoadExternalLabel(TMP, label, kPatchable, PP); |
| + void BranchPatchable(const ExternalLabel* label, Register pp) { |
| + LoadExternalLabel(TMP, label, kPatchable, pp); |
| br(TMP); |
| } |
| - void BranchPatchable(const ExternalLabel* label) { |
| - LoadPatchableImmediate(TMP, label->address()); |
| + void Branch(const ExternalLabel* label, Register pp) { |
| + LoadExternalLabel(TMP, label, kNotPatchable, pp); |
| br(TMP); |
| } |
| + // Fixed length branch to label. |
| + void BranchFixed(const ExternalLabel* label) { |
| + LoadImmediateFixed(TMP, label->address()); |
| + br(TMP); |
| + } |
| + |
| void BranchLink(const ExternalLabel* label, Register pp) { |
| if (Isolate::Current() == Dart::vm_isolate()) { |
| LoadImmediate(TMP, label->address(), kNoRegister); |
| @@ -704,7 +720,7 @@ |
| Patchability patchable, Register pp); |
| void LoadObject(Register dst, const Object& obj, Register pp); |
| void LoadDecodableImmediate(Register reg, int64_t imm, Register pp); |
| - void LoadPatchableImmediate(Register reg, int64_t imm); |
| + void LoadImmediateFixed(Register reg, int64_t imm); |
| void LoadImmediate(Register reg, int64_t imm, Register pp); |
| void PushObject(const Object& object, Register pp) { |
| @@ -716,6 +732,8 @@ |
| void LeaveFrame(); |
| void EnterDartFrame(intptr_t frame_size); |
| + void EnterDartFrameWithInfo(intptr_t frame_size, Register new_pp); |
| + void EnterOsrFrame(intptr_t extra_size, Register new_pp); |
| void LeaveDartFrame(); |
| void EnterCallRuntimeFrame(intptr_t frame_size); |