| Index: runtime/vm/assembler_arm64.h
|
| ===================================================================
|
| --- runtime/vm/assembler_arm64.h (revision 41023)
|
| +++ runtime/vm/assembler_arm64.h (working copy)
|
| @@ -1090,6 +1090,14 @@
|
| ASSERT(reg != PP); // Only pop PP with PopAndUntagPP().
|
| ldr(reg, Address(SP, 1 * kWordSize, Address::PostIndex));
|
| }
|
| + void PushPair(Register first, Register second) {
|
| + ASSERT((first != PP) && (second != PP));
|
| + stp(second, first, Address(SP, -2 * kWordSize, Address::PairPreIndex));
|
| + }
|
| + void PopPair(Register first, Register second) {
|
| + ASSERT((first != PP) && (second != PP));
|
| + ldp(second, first, Address(SP, 2 * kWordSize, Address::PairPostIndex));
|
| + }
|
| void PushFloat(VRegister reg) {
|
| fstrs(reg, Address(SP, -1 * kFloatSize, Address::PreIndex));
|
| }
|
| @@ -1113,6 +1121,13 @@
|
| add(TMP, PP, Operand(kHeapObjectTag));
|
| str(TMP, Address(SP, -1 * kWordSize, Address::PreIndex));
|
| }
|
| + void TagAndPushPPAndPcMarker(Register pc_marker_reg) {
|
| + ASSERT(pc_marker_reg != TMP2);
|
| + // Add the heap object tag back to PP before putting it on the stack.
|
| + add(TMP2, PP, Operand(kHeapObjectTag));
|
| + stp(TMP2, pc_marker_reg,
|
| + Address(SP, -2 * kWordSize, Address::PairPreIndex));
|
| + }
|
| void PopAndUntagPP() {
|
| ldr(PP, Address(SP, 1 * kWordSize, Address::PostIndex));
|
| sub(PP, PP, Operand(kHeapObjectTag));
|
| @@ -1711,7 +1726,7 @@
|
| ASSERT((rt2 != CSP) && (rt2 != R31));
|
| const Register crt = ConcreteRegister(rt);
|
| const Register crt2 = ConcreteRegister(rt2);
|
| - int32_t opc;
|
| + int32_t opc = 0;
|
| switch (sz) {
|
| case kDoubleWord: opc = B31; break;
|
| case kWord: opc = B30; break;
|
|
|