UnwindRegistersRestore.S revision b78da9875b6e35187b5d584746c78faaf3230a3d
1b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===-------------------- UnwindRegistersRestore.s ------------------------===//
2b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//
3b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//                     The LLVM Compiler Infrastructure
4b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//
5b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// This file is dual licensed under the MIT and the University of Illinois Open
6b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Source Licenses. See LICENSE.TXT for details.
7b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//
8b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===----------------------------------------------------------------------===//
9b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
10b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
11b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    .text
12b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
13b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#if __i386__
14b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
15b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#
16b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# extern int unw_getcontext(unw_context_t* thread_state)
17b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#
18b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# On entry:
19b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   +                       +
20b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   +-----------------------+
21b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   + thread_state pointer  +
22b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   +-----------------------+
23b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   + return address        +
24b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   +-----------------------+   <-- SP
25b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#   +                       +
26b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#
27b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  .globl _unw_getcontext
28b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext:
29b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  push  %eax
30b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  8(%esp), %eax
31b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %ebx,  4(%eax)
32b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %ecx,  8(%eax)
33b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %edx, 12(%eax)
34b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %edi, 16(%eax)
35b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %esi, 20(%eax)
36b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %ebp, 24(%eax)
37b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %esp, %edx
38b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  addl  $8, %edx
39b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %edx, 28(%eax)  # store what sp was at call site as esp
40b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip ss
41b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip eflags
42b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  4(%esp), %edx
43b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %edx, 40(%eax)  # store return address as eip
44b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip cs
45b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip ds
46b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip es
47b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip fs
48b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip gs
49b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  (%esp), %edx
50b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movl  %edx, (%eax)  # store original eax
51b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  popl  %eax
52b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  xorl  %eax, %eax    # return UNW_ESUCCESS
53b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ret
54b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
55b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#elif __x86_64__
56b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
57b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#
58b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# extern int unw_getcontext(unw_context_t* thread_state)
59b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#
60b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# On entry:
61b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#  thread_state pointer is in rdi
62b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#
63b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  .globl _unw_getcontext
64b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext:
65b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rax,   (%rdi)
66b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rbx,  8(%rdi)
67b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rcx, 16(%rdi)
68b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rdx, 24(%rdi)
69b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rdi, 32(%rdi)
70b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rsi, 40(%rdi)
71b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rbp, 48(%rdi)
72b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rsp, 56(%rdi)
73b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  addq  $8,   56(%rdi)
74b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r8,  64(%rdi)
75b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r9,  72(%rdi)
76b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r10, 80(%rdi)
77b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r11, 88(%rdi)
78b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r12, 96(%rdi)
79b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r13,104(%rdi)
80b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r14,112(%rdi)
81b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %r15,120(%rdi)
82b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  (%rsp),%rsi
83b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  movq  %rsi,128(%rdi) # store return address as rip
84b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip rflags
85b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip cs
86b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip fs
87b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  # skip gs
88b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  xorl  %eax, %eax    # return UNW_ESUCCESS
89b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ret
90b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
91b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#elif __ppc__
92b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
93b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;
94b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; extern int unw_getcontext(unw_context_t* thread_state)
95b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;
96b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; On entry:
97b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;  thread_state pointer is in r3
98b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;
99b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  .globl _unw_getcontext
100b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext:
101b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r0,  8(r3)
102b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  mflr  r0
103b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r0,  0(r3)  ; store lr as ssr0
104b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r1, 12(r3)
105b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r2, 16(r3)
106b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r3, 20(r3)
107b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r4, 24(r3)
108b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r5, 28(r3)
109b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r6, 32(r3)
110b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r7, 36(r3)
111b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r8, 40(r3)
112b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r9, 44(r3)
113b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r10, 48(r3)
114b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r11, 52(r3)
115b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r12, 56(r3)
116b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r13, 60(r3)
117b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r14, 64(r3)
118b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r15, 68(r3)
119b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r16, 72(r3)
120b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r17, 76(r3)
121b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r18, 80(r3)
122b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r19, 84(r3)
123b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r20, 88(r3)
124b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r21, 92(r3)
125b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r22, 96(r3)
126b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r23,100(r3)
127b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r24,104(r3)
128b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r25,108(r3)
129b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r26,112(r3)
130b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r27,116(r3)
131b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r28,120(r3)
132b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r29,124(r3)
133b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r30,128(r3)
134b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw     r31,132(r3)
135b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
136b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; save VRSave register
137b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  mfspr  r0,256
138b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r0,156(r3)
139b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; save CR registers
140b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  mfcr  r0
141b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r0,136(r3)
142b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; save CTR register
143b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  mfctr  r0
144b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r0,148(r3)
145b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
146b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; save float registers
147b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f0, 160(r3)
148b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f1, 168(r3)
149b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f2, 176(r3)
150b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f3, 184(r3)
151b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f4, 192(r3)
152b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f5, 200(r3)
153b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f6, 208(r3)
154b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f7, 216(r3)
155b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f8, 224(r3)
156b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f9, 232(r3)
157b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f10,240(r3)
158b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f11,248(r3)
159b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f12,256(r3)
160b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f13,264(r3)
161b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f14,272(r3)
162b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f15,280(r3)
163b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f16,288(r3)
164b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f17,296(r3)
165b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f18,304(r3)
166b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f19,312(r3)
167b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f20,320(r3)
168b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f21,328(r3)
169b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f22,336(r3)
170b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f23,344(r3)
171b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f24,352(r3)
172b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f25,360(r3)
173b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f26,368(r3)
174b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f27,376(r3)
175b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f28,384(r3)
176b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f29,392(r3)
177b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f30,400(r3)
178b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stfd    f31,408(r3)
179b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
180b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
181b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; save vector registers
182b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
183b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  subi  r4,r1,16
184b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  rlwinm  r4,r4,0,0,27  ; mask low 4-bits
185b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; r4 is now a 16-byte aligned pointer into the red zone
186b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
187b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#define SAVE_VECTOR_UNALIGNED(_vec, _offset) \
188b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stvx  _vec,0,r4           @\
189b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  lwz    r5, 0(r4)          @\
190b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r5, _offset(r3)    @\
191b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  lwz    r5, 4(r4)          @\
192b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r5, _offset+4(r3)  @\
193b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  lwz    r5, 8(r4)          @\
194b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r5, _offset+8(r3)  @\
195b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  lwz    r5, 12(r4)         @\
196b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stw    r5, _offset+12(r3)
197b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
198b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v0, 424+0x000)
199b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v1, 424+0x010)
200b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v2, 424+0x020)
201b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v3, 424+0x030)
202b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v4, 424+0x040)
203b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v5, 424+0x050)
204b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v6, 424+0x060)
205b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v7, 424+0x070)
206b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v8, 424+0x080)
207b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED( v9, 424+0x090)
208b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v10, 424+0x0A0)
209b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v11, 424+0x0B0)
210b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v12, 424+0x0C0)
211b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v13, 424+0x0D0)
212b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v14, 424+0x0E0)
213b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v15, 424+0x0F0)
214b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v16, 424+0x100)
215b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v17, 424+0x110)
216b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v18, 424+0x120)
217b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v19, 424+0x130)
218b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v20, 424+0x140)
219b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v21, 424+0x150)
220b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v22, 424+0x160)
221b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v23, 424+0x170)
222b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v24, 424+0x180)
223b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v25, 424+0x190)
224b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v26, 424+0x1A0)
225b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v27, 424+0x1B0)
226b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v28, 424+0x1C0)
227b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v29, 424+0x1D0)
228b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v30, 424+0x1E0)
229b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  SAVE_VECTOR_UNALIGNED(v31, 424+0x1F0)
230b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
231b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  li  r3, 0    ; return UNW_ESUCCESS
232b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  blr
233b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
234b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
235b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#elif __arm64__
236b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
237b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;
238b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; extern int unw_getcontext(unw_context_t* thread_state)
239b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;
240b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; On entry:
241b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;  thread_state pointer is in x0
242b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik;
243b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  .globl _unw_getcontext
244b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext:
245b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x0, x1,  [x0, #0x000]
246b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x2, x3,  [x0, #0x010]
247b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x4, x5,  [x0, #0x020]
248b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x6, x7,  [x0, #0x030]
249b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x8, x9,  [x0, #0x040]
250b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x10,x11, [x0, #0x050]
251b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x12,x13, [x0, #0x060]
252b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x14,x15, [x0, #0x070]
253b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x16,x17, [x0, #0x080]
254b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x18,x19, [x0, #0x090]
255b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x20,x21, [x0, #0x0A0]
256b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x22,x23, [x0, #0x0B0]
257b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x24,x25, [x0, #0x0C0]
258b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x26,x27, [x0, #0x0D0]
259b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    x28,fp,  [x0, #0x0E0]
260b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  str    lr,      [x0, #0x0F0]
261b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  mov    x1,sp
262b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  str    x1,      [x0, #0x0F8]
263b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  str    lr,      [x0, #0x100]    ; store return address as pc
264b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ; skip cpsr
265b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d0, d1,  [x0, #0x110]
266b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d2, d3,  [x0, #0x120]
267b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d4, d5,  [x0, #0x130]
268b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d6, d7,  [x0, #0x140]
269b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d8, d9,  [x0, #0x150]
270b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d10,d11, [x0, #0x160]
271b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d12,d13, [x0, #0x170]
272b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d14,d15, [x0, #0x180]
273b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d16,d17, [x0, #0x190]
274b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d18,d19, [x0, #0x1A0]
275b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d20,d21, [x0, #0x1B0]
276b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d22,d23, [x0, #0x1C0]
277b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d24,d25, [x0, #0x1D0]
278b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d26,d27, [x0, #0x1E0]
279b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  stp    d28,d29, [x0, #0x1F0]
280b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  str    d30,     [x0, #0x200]
281b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  str    d31,     [x0, #0x208]
282b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ldr    x0, #0      ; return UNW_ESUCCESS
283b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik  ret
284b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
285b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif
286b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
287