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