67 lines
2.4 KiB
ArmAsm
67 lines
2.4 KiB
ArmAsm
/**************************************************************************/
|
|
/* */
|
|
/* OCaml */
|
|
/* */
|
|
/* Xavier Leroy, projet Gallium, INRIA Rocquencourt */
|
|
/* */
|
|
/* Copyright 2013 Institut National de Recherche en Informatique et */
|
|
/* en Automatique. */
|
|
/* */
|
|
/* All rights reserved. This file is distributed under the terms of */
|
|
/* the GNU Lesser General Public License version 2.1, with the */
|
|
/* special exception on linking described in the file LICENSE. */
|
|
/* */
|
|
/**************************************************************************/
|
|
|
|
#if defined(SYS_macosx)
|
|
#define G(sym) _##sym
|
|
#else
|
|
#define G(sym) sym
|
|
#endif
|
|
|
|
.globl G(call_gen_code)
|
|
.align 2
|
|
G(call_gen_code):
|
|
/* Set up stack frame and save callee-save registers */
|
|
stp x29, x30, [sp, -160]!
|
|
add x29, sp, #0
|
|
stp x19, x20, [sp, 16]
|
|
stp x21, x22, [sp, 32]
|
|
stp x23, x24, [sp, 48]
|
|
stp x25, x26, [sp, 64]
|
|
stp x27, x28, [sp, 80]
|
|
stp d8, d9, [sp, 96]
|
|
stp d10, d11, [sp, 112]
|
|
stp d12, d13, [sp, 128]
|
|
stp d14, d15, [sp, 144]
|
|
/* Shuffle arguments */
|
|
mov x8, x0
|
|
mov x0, x1
|
|
mov x1, x2
|
|
mov x2, x3
|
|
mov x3, x4
|
|
/* Call generated asm */
|
|
blr x8
|
|
/* Reload callee-save registers and return address */
|
|
ldp x19, x20, [sp, 16]
|
|
ldp x21, x22, [sp, 32]
|
|
ldp x23, x24, [sp, 48]
|
|
ldp x25, x26, [sp, 64]
|
|
ldp x27, x28, [sp, 80]
|
|
ldp d8, d9, [sp, 96]
|
|
ldp d10, d11, [sp, 112]
|
|
ldp d12, d13, [sp, 128]
|
|
ldp d14, d15, [sp, 144]
|
|
ldp x29, x30, [sp], 160
|
|
ret
|
|
|
|
.globl caml_c_call
|
|
.align 2
|
|
G(caml_c_call):
|
|
br x15
|
|
|
|
#if !defined(SYS_macosx)
|
|
/* Mark stack as non-executable */
|
|
.section .note.GNU-stack,"",%progbits
|
|
#endif
|