ocaml/testasmcomp/power-elf.S

131 lines
3.8 KiB
ArmAsm

/*********************************************************************/
/* */
/* Objective Caml */
/* */
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
/* */
/* Copyright 1996 Institut National de Recherche en Informatique et */
/* Automatique. Distributed only by permission. */
/* */
/*********************************************************************/
/* $Id$ */
/* Save and restore all callee-save registers */
/* GPR 14 at sp+16 ... GPR 31 at sp+84
FPR 14 at sp+92 ... FPR 31 at sp+228 */
#define Save_callee_save \
addic 11, 1, 16-4; \
stwu 14, 4(11); \
stwu 15, 4(11); \
stwu 16, 4(11); \
stwu 17, 4(11); \
stwu 18, 4(11); \
stwu 19, 4(11); \
stwu 20, 4(11); \
stwu 21, 4(11); \
stwu 22, 4(11); \
stwu 23, 4(11); \
stwu 24, 4(11); \
stwu 25, 4(11); \
stwu 26, 4(11); \
stwu 27, 4(11); \
stwu 28, 4(11); \
stwu 29, 4(11); \
stwu 30, 4(11); \
stwu 31, 4(11); \
stfdu 14, 8(11); \
stfdu 15, 8(11); \
stfdu 16, 8(11); \
stfdu 17, 8(11); \
stfdu 18, 8(11); \
stfdu 19, 8(11); \
stfdu 20, 8(11); \
stfdu 21, 8(11); \
stfdu 22, 8(11); \
stfdu 23, 8(11); \
stfdu 24, 8(11); \
stfdu 25, 8(11); \
stfdu 26, 8(11); \
stfdu 27, 8(11); \
stfdu 28, 8(11); \
stfdu 29, 8(11); \
stfdu 30, 8(11); \
stfdu 31, 8(11)
#define Restore_callee_save \
addic 11, 1, 16-4; \
lwzu 14, 4(11); \
lwzu 15, 4(11); \
lwzu 16, 4(11); \
lwzu 17, 4(11); \
lwzu 18, 4(11); \
lwzu 19, 4(11); \
lwzu 20, 4(11); \
lwzu 21, 4(11); \
lwzu 22, 4(11); \
lwzu 23, 4(11); \
lwzu 24, 4(11); \
lwzu 25, 4(11); \
lwzu 26, 4(11); \
lwzu 27, 4(11); \
lwzu 28, 4(11); \
lwzu 29, 4(11); \
lwzu 30, 4(11); \
lwzu 31, 4(11); \
lfdu 14, 8(11); \
lfdu 15, 8(11); \
lfdu 16, 8(11); \
lfdu 17, 8(11); \
lfdu 18, 8(11); \
lfdu 19, 8(11); \
lfdu 20, 8(11); \
lfdu 21, 8(11); \
lfdu 22, 8(11); \
lfdu 23, 8(11); \
lfdu 24, 8(11); \
lfdu 25, 8(11); \
lfdu 26, 8(11); \
lfdu 27, 8(11); \
lfdu 28, 8(11); \
lfdu 29, 8(11); \
lfdu 30, 8(11); \
lfdu 31, 8(11)
.section ".text"
.globl call_gen_code
.type call_gen_code, @function
call_gen_code:
/* Allocate and link stack frame */
stwu 1, -256(1)
/* Save return address */
mflr 0
stw 0, 256+4(1)
/* Save all callee-save registers */
Save_callee_save
/* Shuffle arguments */
mtlr 3
mr 3, 4
mr 4, 5
mr 5, 6
mr 6, 7
/* Call the function */
blrl
/* Restore callee-save registers */
Restore_callee_save
/* Reload return address */
lwz 0, 256+4(1)
mtlr 0
/* Return */
addi 1, 1, 256
blr
.globl caml_c_call
.type caml_c_call, @function
caml_c_call:
/* Jump to C function (address in 11) */
mtctr 11
bctr