1; Copyright 2020 the V8 project authors. All rights reserved. 2; Use of this source code is governed by a BSD-style license that can be 3; found in the LICENSE file. 4 5; This file is exactly the same as push_registers_asm.cc, just formatted for 6; the Microsoft Arm Assembler. 7 8 AREA |.text|, CODE, ALIGN=4, READONLY 9 EXPORT PushAllRegistersAndIterateStack 10PushAllRegistersAndIterateStack 11 ; x19-x29 are callee-saved 12 STP x19, x20, [sp, #-16]! 13 STP x21, x22, [sp, #-16]! 14 STP x23, x24, [sp, #-16]! 15 STP x25, x26, [sp, #-16]! 16 STP x27, x28, [sp, #-16]! 17 STP fp, lr, [sp, #-16]! 18 ; Maintain frame pointer 19 MOV fp, sp 20 ; Pass 1st parameter (x0) unchanged (Stack*). 21 ; Pass 2nd parameter (x1) unchanged (StackVisitor*). 22 ; Save 3rd parameter (x2; IterateStackCallback) 23 MOV x7, x2 24 ; Pass 3rd parameter as sp (stack pointer) 25 MOV x2, sp 26 BLR x7 27 ; Load return address 28 LDR lr, [sp, #8] 29 ; Restore frame pointer and pop all callee-saved registers. 30 LDR fp, [sp], #96 31 RET 32 END