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
10+ PushAllRegistersAndIterateStack
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
0 commit comments