summaryrefslogtreecommitdiffstats
path: root/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/source/cpp_uno/gcc3_ios/ios64_helper.s')
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/ios64_helper.s233
1 files changed, 233 insertions, 0 deletions
diff --git a/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s b/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s
new file mode 100644
index 000000000..12308f1a9
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_ios/ios64_helper.s
@@ -0,0 +1,233 @@
+// -*- Mode: Asm; tab-width: 4; tab-stop-list: (4 12 32); comment-column: 30; comment-start: "// "; indent-tabs-mode: nil -*-
+//
+// This file is part of the LibreOffice project.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// This file incorporates work covered by the following license notice:
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed
+// with this work for additional information regarding copyright
+// ownership. The ASF licenses this file to you under the Apache
+// License, Version 2.0 (the "License"); you may not use this file
+// except in compliance with the License. You may obtain a copy of
+// the License at http://www.apache.org/licenses/LICENSE-2.0 .
+//
+ .section __TEXT,__text,regular,pure_instructions
+
+ .p2align 2
+codeSnippet_0_0:
+ mov x14, 0
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_0_1:
+ mov x14, 0
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_0_2:
+ mov x14, 0
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_0_3:
+ mov x14, 0
+ mov x15, 3
+ b _privateSnippetExecutor
+codeSnippet_1_0:
+ mov x14, 1
+ mov x15, 0
+ b _privateSnippetExecutor
+ .long 0x000001
+ .long 0
+codeSnippet_1_1:
+ mov x14, 1
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_1_2:
+ mov x14, 1
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_1_3:
+ mov x14, 1
+ mov x15, 3
+ b _privateSnippetExecutor
+codeSnippet_2_0:
+ mov x14, 2
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_2_1:
+ mov x14, 2
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_2_2:
+ mov x14, 2
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_2_3:
+ mov x14, 2
+ mov x15, 3
+ b _privateSnippetExecutor
+ .long 0x000002
+ .long 3
+codeSnippet_3_0:
+ mov x14, 3
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_3_1:
+ mov x14, 3
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_3_2:
+ mov x14, 3
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_3_3:
+ mov x14, 3
+ mov x15, 3
+ b _privateSnippetExecutor
+codeSnippet_4_0:
+ mov x14, 4
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_4_1:
+ mov x14, 4
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_4_2:
+ mov x14, 4
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_4_3:
+ mov x14, 4
+ mov x15, 3
+ b _privateSnippetExecutor
+codeSnippet_5_0:
+ mov x14, 5
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_5_1:
+ mov x14, 5
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_5_2:
+ mov x14, 5
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_5_3:
+ mov x14, 5
+ mov x15, 3
+ b _privateSnippetExecutor
+codeSnippet_6_0:
+ mov x14, 6
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_6_1:
+ mov x14, 6
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_6_2:
+ mov x14, 6
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_6_3:
+ mov x14, 6
+ mov x15, 3
+ b _privateSnippetExecutor
+codeSnippet_7_0:
+ mov x14, 7
+ mov x15, 0
+ b _privateSnippetExecutor
+codeSnippet_7_1:
+ mov x14, 7
+ mov x15, 1
+ b _privateSnippetExecutor
+codeSnippet_7_2:
+ mov x14, 7
+ mov x15, 2
+ b _privateSnippetExecutor
+codeSnippet_7_3:
+ mov x14, 7
+ mov x15, 3
+ b _privateSnippetExecutor
+
+ .globl _codeSnippets
+_codeSnippets:
+ .long codeSnippet_0_0 - _codeSnippets
+ .long codeSnippet_0_1 - _codeSnippets
+ .long codeSnippet_0_2 - _codeSnippets
+ .long codeSnippet_0_3 - _codeSnippets
+ .long codeSnippet_1_0 - _codeSnippets
+ .long codeSnippet_1_1 - _codeSnippets
+ .long codeSnippet_1_2 - _codeSnippets
+ .long codeSnippet_1_3 - _codeSnippets
+ .long codeSnippet_2_0 - _codeSnippets
+ .long codeSnippet_2_1 - _codeSnippets
+ .long codeSnippet_2_2 - _codeSnippets
+ .long codeSnippet_2_3 - _codeSnippets
+ .long codeSnippet_3_0 - _codeSnippets
+ .long codeSnippet_3_1 - _codeSnippets
+ .long codeSnippet_3_2 - _codeSnippets
+ .long codeSnippet_3_3 - _codeSnippets
+ .long codeSnippet_4_0 - _codeSnippets
+ .long codeSnippet_4_1 - _codeSnippets
+ .long codeSnippet_4_2 - _codeSnippets
+ .long codeSnippet_4_3 - _codeSnippets
+ .long codeSnippet_5_0 - _codeSnippets
+ .long codeSnippet_5_1 - _codeSnippets
+ .long codeSnippet_5_2 - _codeSnippets
+ .long codeSnippet_5_3 - _codeSnippets
+ .long codeSnippet_6_0 - _codeSnippets
+ .long codeSnippet_6_1 - _codeSnippets
+ .long codeSnippet_6_2 - _codeSnippets
+ .long codeSnippet_6_3 - _codeSnippets
+ .long codeSnippet_7_0 - _codeSnippets
+ .long codeSnippet_7_1 - _codeSnippets
+ .long codeSnippet_7_2 - _codeSnippets
+ .long codeSnippet_7_3 - _codeSnippets
+
+
+
+ .private_extern _privateSnippetExecutor
+ .globl _privateSnippetExecutor
+ .p2align 2
+_privateSnippetExecutor:
+ .cfi_startproc
+ .cfi_def_cfa w29, 16
+ .cfi_offset w30, -8
+ .cfi_offset w29, -16
+
+ // _privateSnippetExecutor is jumped to from codeSnippet_*
+
+ // push all GP, FP/SIMD registers to the stack
+ stp x6, x7, [sp, #-16]!
+ stp x4, x5, [sp, #-16]!
+ stp x2, x3, [sp, #-16]!
+ stp x0, x1, [sp, #-16]!
+ stp d6, d7, [sp, #-16]!
+ stp d4, d5, [sp, #-16]!
+ stp d2, d3, [sp, #-16]!
+ stp d0, d1, [sp, #-16]!
+
+ // push x8 (RC pointer) and lr to stack
+ stp x8, lr, [sp, #-16]!
+
+ // First argument (x15 set up in the codeSnippet instance)
+ // Second argument: The pointer to all the above
+ mov x0, x14
+ mov x1, x15
+ mov x2, sp
+ bl _cpp_vtable_call
+
+ // restore x8 (RC pointer) and lr (skip RC from cpp_vtable_call)
+ ldp x8, lr, [sp, #0]
+
+ // restore stack
+ add sp, sp, #144
+
+ // continue with throw/catch
+ ret lr
+ .cfi_endproc
+
+// vim:set shiftwidth=4 softtabstop=4 expandtab: