ocaml/testsuite/tools/asmgen_i386.S

71 lines
2.3 KiB
ArmAsm

/**************************************************************************/
/* */
/* OCaml */
/* */
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
/* */
/* Copyright 1996 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. */
/* */
/**************************************************************************/
/* Linux with ELF binaries does not prefix identifiers with _.
Linux with a.out binaries, FreeBSD, and NextStep do. */
#if defined(SYS_linux_elf) || defined(SYS_bsd_elf) \
|| defined(SYS_solaris) || defined(SYS_beos) || defined(SYS_gnu)
#define G(x) x
#define FUNCTION_ALIGN 16
#else
#define G(x) _##x
#define FUNCTION_ALIGN 4
#endif
.globl G(call_gen_code)
.align FUNCTION_ALIGN
G(call_gen_code):
pushl %ebp
movl %esp,%ebp
pushl %ebx
pushl %esi
pushl %edi
movl 12(%ebp),%eax
movl 16(%ebp),%ebx
movl 20(%ebp),%ecx
movl 24(%ebp),%edx
call *8(%ebp)
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
.globl G(caml_c_call)
.align FUNCTION_ALIGN
G(caml_c_call):
jmp *%eax
.comm G(Caml_state), 4
/* Some tests are designed to cause registers to spill; on
* x86 we require the caml_extra_params symbol from the RTS. */
.data
.globl G(caml_extra_params)
G(caml_extra_params):
#ifndef SYS_solaris
.space 64
#else
.zero 64
#endif
#if defined(SYS_linux_elf)
/* Mark stack as non-executable */
.section .note.GNU-stack,"",%progbits
#endif