| Index: runtime/vm/assembler_arm64.h
|
| ===================================================================
|
| --- runtime/vm/assembler_arm64.h (revision 35373)
|
| +++ runtime/vm/assembler_arm64.h (working copy)
|
| @@ -525,9 +525,10 @@
|
| }
|
|
|
| // Loads and Stores.
|
| - void ldr(Register rt, Address a) {
|
| + void ldr(Register rt, Address a, OperandSize sz = kDoubleWord) {
|
| if (a.type() == Address::PCOffset) {
|
| - EmitLoadRegLiteral(LDRpc, rt, a, kDoubleWord);
|
| + ASSERT(sz == kDoubleWord);
|
| + EmitLoadRegLiteral(LDRpc, rt, a, sz);
|
| } else {
|
| // If we are doing pre-/post-indexing, and the base and result registers
|
| // are the same, then the result of the load will be clobbered by the
|
| @@ -535,11 +536,11 @@
|
| ASSERT(((a.type() != Address::PreIndex) &&
|
| (a.type() != Address::PostIndex)) ||
|
| (rt != a.base()));
|
| - EmitLoadStoreReg(LDR, rt, a, kDoubleWord);
|
| + EmitLoadStoreReg(LDR, rt, a, sz);
|
| }
|
| }
|
| - void str(Register rt, Address a) {
|
| - EmitLoadStoreReg(STR, rt, a, kDoubleWord);
|
| + void str(Register rt, Address a, OperandSize sz = kDoubleWord) {
|
| + EmitLoadStoreReg(STR, rt, a, sz);
|
| }
|
|
|
| // Comparison.
|
| @@ -684,11 +685,15 @@
|
| // PP should be passed for pp.
|
| void AddImmediate(Register dest, Register rn, int64_t imm, Register pp);
|
| void CompareImmediate(Register rn, int64_t imm, Register pp);
|
| - void LoadFromOffset(Register dest, Register base, int32_t offset);
|
| +
|
| + void LoadFromOffset(Register dest, Register base, int32_t offset,
|
| + OperandSize sz = kDoubleWord);
|
| void LoadFieldFromOffset(Register dest, Register base, int32_t offset) {
|
| LoadFromOffset(dest, base, offset - kHeapObjectTag);
|
| }
|
| - void StoreToOffset(Register dest, Register base, int32_t offset);
|
| +
|
| + void StoreToOffset(Register dest, Register base, int32_t offset,
|
| + OperandSize sz = kDoubleWord);
|
| void StoreFieldToOffset(Register dest, Register base, int32_t offset) {
|
| StoreToOffset(dest, base, offset - kHeapObjectTag);
|
| }
|
| @@ -742,9 +747,13 @@
|
|
|
| void EnterCallRuntimeFrame(intptr_t frame_size);
|
| void LeaveCallRuntimeFrame();
|
| -
|
| void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
|
|
|
| + // Set up a stub frame so that the stack traversal code can easily identify
|
| + // a stub frame.
|
| + void EnterStubFrame(bool load_pp = false);
|
| + void LeaveStubFrame();
|
| +
|
| private:
|
| AssemblerBuffer buffer_; // Contains position independent code.
|
|
|
|
|