summaryrefslogtreecommitdiff
path: root/ocaml-binary-annot/testsuite/tests/asmcomp/power-rhapsody.S
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml-binary-annot/testsuite/tests/asmcomp/power-rhapsody.S')
-rw-r--r--ocaml-binary-annot/testsuite/tests/asmcomp/power-rhapsody.S129
1 files changed, 129 insertions, 0 deletions
diff --git a/ocaml-binary-annot/testsuite/tests/asmcomp/power-rhapsody.S b/ocaml-binary-annot/testsuite/tests/asmcomp/power-rhapsody.S
new file mode 100644
index 0000000000..a9b8044b8d
--- /dev/null
+++ b/ocaml-binary-annot/testsuite/tests/asmcomp/power-rhapsody.S
@@ -0,0 +1,129 @@
+/*********************************************************************/
+/* */
+/* Objective Caml */
+/* */
+/* 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 Q Public License version 1.0. */
+/* */
+/*********************************************************************/
+
+/* $Id: power-rhapsody.S 2553 1999-11-17 18:59:06Z xleroy $ */
+
+/* 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 r11, r1, 16-4; \
+ stwu r14, 4(r11); \
+ stwu r15, 4(r11); \
+ stwu r16, 4(r11); \
+ stwu r17, 4(r11); \
+ stwu r18, 4(r11); \
+ stwu r19, 4(r11); \
+ stwu r20, 4(r11); \
+ stwu r21, 4(r11); \
+ stwu r22, 4(r11); \
+ stwu r23, 4(r11); \
+ stwu r24, 4(r11); \
+ stwu r25, 4(r11); \
+ stwu r26, 4(r11); \
+ stwu r27, 4(r11); \
+ stwu r28, 4(r11); \
+ stwu r29, 4(r11); \
+ stwu r30, 4(r11); \
+ stwu r31, 4(r11); \
+ stfdu f14, 8(r11); \
+ stfdu f15, 8(r11); \
+ stfdu f16, 8(r11); \
+ stfdu f17, 8(r11); \
+ stfdu f18, 8(r11); \
+ stfdu f19, 8(r11); \
+ stfdu f20, 8(r11); \
+ stfdu f21, 8(r11); \
+ stfdu f22, 8(r11); \
+ stfdu f23, 8(r11); \
+ stfdu f24, 8(r11); \
+ stfdu f25, 8(r11); \
+ stfdu f26, 8(r11); \
+ stfdu f27, 8(r11); \
+ stfdu f28, 8(r11); \
+ stfdu f29, 8(r11); \
+ stfdu f30, 8(r11); \
+ stfdu f31, 8(r11)
+
+#define Restore_callee_save \
+ addic r11, r1, 16-4; \
+ lwzu r14, 4(r11); \
+ lwzu r15, 4(r11); \
+ lwzu r16, 4(r11); \
+ lwzu r17, 4(r11); \
+ lwzu r18, 4(r11); \
+ lwzu r19, 4(r11); \
+ lwzu r20, 4(r11); \
+ lwzu r21, 4(r11); \
+ lwzu r22, 4(r11); \
+ lwzu r23, 4(r11); \
+ lwzu r24, 4(r11); \
+ lwzu r25, 4(r11); \
+ lwzu r26, 4(r11); \
+ lwzu r27, 4(r11); \
+ lwzu r28, 4(r11); \
+ lwzu r29, 4(r11); \
+ lwzu r30, 4(r11); \
+ lwzu r31, 4(r11); \
+ lfdu f14, 8(r11); \
+ lfdu f15, 8(r11); \
+ lfdu f16, 8(r11); \
+ lfdu f17, 8(r11); \
+ lfdu f18, 8(r11); \
+ lfdu f19, 8(r11); \
+ lfdu f20, 8(r11); \
+ lfdu f21, 8(r11); \
+ lfdu f22, 8(r11); \
+ lfdu f23, 8(r11); \
+ lfdu f24, 8(r11); \
+ lfdu f25, 8(r11); \
+ lfdu f26, 8(r11); \
+ lfdu f27, 8(r11); \
+ lfdu f28, 8(r11); \
+ lfdu f29, 8(r11); \
+ lfdu f30, 8(r11); \
+ lfdu f31, 8(r11)
+
+ .text
+
+ .globl _call_gen_code
+_call_gen_code:
+ /* Allocate and link stack frame */
+ stwu r1, -256(r1)
+ /* Save return address */
+ mflr r0
+ stw r0, 256+4(r1)
+ /* Save all callee-save registers */
+ Save_callee_save
+ /* Shuffle arguments */
+ mtlr r3
+ mr r3, r4
+ mr r4, r5
+ mr r5, r6
+ mr r6, r7
+ /* Call the function */
+ blrl
+ /* Restore callee-save registers */
+ Restore_callee_save
+ /* Reload return address */
+ lwz r0, 256+4(r1)
+ mtlr r0
+ /* Return */
+ addi r1, r1, 256
+ blr
+
+ .globl _caml_c_call
+_caml_c_call:
+ /* Jump to C function (address in 11) */
+ mtctr r11
+ bctr