1// -*- Mode: Asm; tab-width: 4; tab-stop-list: (4 12 32); comment-column: 30; comment-start: "// "; indent-tabs-mode: nil -*-
2//
3// This file is part of the LibreOffice project.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at http://mozilla.org/MPL/2.0/.
8//
9// This file incorporates work covered by the following license notice:
10//
11//   Licensed to the Apache Software Foundation (ASF) under one or more
12//   contributor license agreements. See the NOTICE file distributed
13//   with this work for additional information regarding copyright
14//   ownership. The ASF licenses this file to you under the Apache
15//   License, Version 2.0 (the "License"); you may not use this file
16//   except in compliance with the License. You may obtain a copy of
17//   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18//
19    .section        __TEXT,__text,regular,pure_instructions
20
21    .p2align        2
22codeSnippet_0_0:
23    mov x14, 0
24    mov x15, 0
25    b _privateSnippetExecutor
26codeSnippet_0_1:
27    mov x14, 0
28    mov x15, 1
29    b _privateSnippetExecutor
30codeSnippet_0_2:
31    mov x14, 0
32    mov x15, 2
33    b _privateSnippetExecutor
34codeSnippet_0_3:
35    mov x14, 0
36    mov x15, 3
37    b _privateSnippetExecutor
38codeSnippet_1_0:
39    mov x14, 1
40    mov x15, 0
41    b _privateSnippetExecutor
42    .long 0x000001
43    .long 0
44codeSnippet_1_1:
45    mov x14, 1
46    mov x15, 1
47    b _privateSnippetExecutor
48codeSnippet_1_2:
49    mov x14, 1
50    mov x15, 2
51    b _privateSnippetExecutor
52codeSnippet_1_3:
53    mov x14, 1
54    mov x15, 3
55    b _privateSnippetExecutor
56codeSnippet_2_0:
57    mov x14, 2
58    mov x15, 0
59    b _privateSnippetExecutor
60codeSnippet_2_1:
61    mov x14, 2
62    mov x15, 1
63    b _privateSnippetExecutor
64codeSnippet_2_2:
65    mov x14, 2
66    mov x15, 2
67    b _privateSnippetExecutor
68codeSnippet_2_3:
69    mov x14, 2
70    mov x15, 3
71    b _privateSnippetExecutor
72    .long 0x000002
73    .long 3
74codeSnippet_3_0:
75    mov x14, 3
76    mov x15, 0
77    b _privateSnippetExecutor
78codeSnippet_3_1:
79    mov x14, 3
80    mov x15, 1
81    b _privateSnippetExecutor
82codeSnippet_3_2:
83    mov x14, 3
84    mov x15, 2
85    b _privateSnippetExecutor
86codeSnippet_3_3:
87    mov x14, 3
88    mov x15, 3
89    b _privateSnippetExecutor
90codeSnippet_4_0:
91    mov x14, 4
92    mov x15, 0
93    b _privateSnippetExecutor
94codeSnippet_4_1:
95    mov x14, 4
96    mov x15, 1
97    b _privateSnippetExecutor
98codeSnippet_4_2:
99    mov x14, 4
100    mov x15, 2
101    b _privateSnippetExecutor
102codeSnippet_4_3:
103    mov x14, 4
104    mov x15, 3
105    b _privateSnippetExecutor
106codeSnippet_5_0:
107    mov x14, 5
108    mov x15, 0
109    b _privateSnippetExecutor
110codeSnippet_5_1:
111    mov x14, 5
112    mov x15, 1
113    b _privateSnippetExecutor
114codeSnippet_5_2:
115    mov x14, 5
116    mov x15, 2
117    b _privateSnippetExecutor
118codeSnippet_5_3:
119    mov x14, 5
120    mov x15, 3
121    b _privateSnippetExecutor
122codeSnippet_6_0:
123    mov x14, 6
124    mov x15, 0
125    b _privateSnippetExecutor
126codeSnippet_6_1:
127    mov x14, 6
128    mov x15, 1
129    b _privateSnippetExecutor
130codeSnippet_6_2:
131    mov x14, 6
132    mov x15, 2
133    b _privateSnippetExecutor
134codeSnippet_6_3:
135    mov x14, 6
136    mov x15, 3
137    b _privateSnippetExecutor
138codeSnippet_7_0:
139    mov x14, 7
140    mov x15, 0
141    b _privateSnippetExecutor
142codeSnippet_7_1:
143    mov x14, 7
144    mov x15, 1
145    b _privateSnippetExecutor
146codeSnippet_7_2:
147    mov x14, 7
148    mov x15, 2
149    b _privateSnippetExecutor
150codeSnippet_7_3:
151    mov x14, 7
152    mov x15, 3
153    b _privateSnippetExecutor
154
155    .globl _codeSnippets
156_codeSnippets:
157    .long codeSnippet_0_0 - _codeSnippets
158    .long codeSnippet_0_1 - _codeSnippets
159    .long codeSnippet_0_2 - _codeSnippets
160    .long codeSnippet_0_3 - _codeSnippets
161    .long codeSnippet_1_0 - _codeSnippets
162    .long codeSnippet_1_1 - _codeSnippets
163    .long codeSnippet_1_2 - _codeSnippets
164    .long codeSnippet_1_3 - _codeSnippets
165    .long codeSnippet_2_0 - _codeSnippets
166    .long codeSnippet_2_1 - _codeSnippets
167    .long codeSnippet_2_2 - _codeSnippets
168    .long codeSnippet_2_3 - _codeSnippets
169    .long codeSnippet_3_0 - _codeSnippets
170    .long codeSnippet_3_1 - _codeSnippets
171    .long codeSnippet_3_2 - _codeSnippets
172    .long codeSnippet_3_3 - _codeSnippets
173    .long codeSnippet_4_0 - _codeSnippets
174    .long codeSnippet_4_1 - _codeSnippets
175    .long codeSnippet_4_2 - _codeSnippets
176    .long codeSnippet_4_3 - _codeSnippets
177    .long codeSnippet_5_0 - _codeSnippets
178    .long codeSnippet_5_1 - _codeSnippets
179    .long codeSnippet_5_2 - _codeSnippets
180    .long codeSnippet_5_3 - _codeSnippets
181    .long codeSnippet_6_0 - _codeSnippets
182    .long codeSnippet_6_1 - _codeSnippets
183    .long codeSnippet_6_2 - _codeSnippets
184    .long codeSnippet_6_3 - _codeSnippets
185    .long codeSnippet_7_0 - _codeSnippets
186    .long codeSnippet_7_1 - _codeSnippets
187    .long codeSnippet_7_2 - _codeSnippets
188    .long codeSnippet_7_3 - _codeSnippets
189
190
191
192    .private_extern _privateSnippetExecutor
193    .globl  _privateSnippetExecutor
194    .p2align        2
195_privateSnippetExecutor:
196    .cfi_startproc
197    .cfi_def_cfa w29, 16
198    .cfi_offset w30, -8
199    .cfi_offset w29, -16
200
201    // _privateSnippetExecutor is jumped to from codeSnippet_*
202
203    // push all GP, FP/SIMD registers to the stack
204    stp x6, x7, [sp, #-16]!
205    stp x4, x5, [sp, #-16]!
206    stp x2, x3, [sp, #-16]!
207    stp x0, x1, [sp, #-16]!
208    stp d6, d7, [sp, #-16]!
209    stp d4, d5, [sp, #-16]!
210    stp d2, d3, [sp, #-16]!
211    stp d0, d1, [sp, #-16]!
212
213    // push x8 (RC pointer) and lr to stack
214    stp     x8, lr, [sp, #-16]!
215
216    // First argument (x15 set up in the codeSnippet instance)
217    // Second argument: The pointer to all the above
218    mov x0, x14
219    mov x1, x15
220    mov x2, sp
221    bl  _cpp_vtable_call
222
223    // restore x8 (RC pointer) and lr (skip RC from cpp_vtable_call)
224    ldp x8, lr, [sp, #0]
225
226    // restore stack
227    add sp, sp, #144
228
229    // continue with throw/catch
230    ret lr
231    .cfi_endproc
232
233// vim:set shiftwidth=4 softtabstop=4 expandtab:
234