1 #define ALIGN 8
2
3 #define CALL_GEN_CODE call_gen_code
4 #define CAML_C_CALL caml_c_call
5 #define CAML_NEGF_MASK caml_negf_mask
6 #define CAML_ABSF_MASK caml_absf_mask
7
8 .section ".text"
9
10 .globl CALL_GEN_CODE
11 .type CALL_GEN_CODE, @function
12 .align ALIGN
13 CALL_GEN_CODE:
14 /* Stack space */
15 lay %r15, -144(%r15)
16 /* Save registers */
17 stmg %r6,%r14, 0(%r15)
18 std %f8, 72(%r15)
19 std %f9, 80(%r15)
20 std %f10, 88(%r15)
21 std %f11, 96(%r15)
22 std %f12, 104(%r15)
23 std %f13, 112(%r15)
24 std %f14, 120(%r15)
25 std %f15, 128(%r15)
26 /* Shuffle args */
27 lgr %r1, %r2
28 lgr %r2, %r3
29 lgr %r3, %r4
30 lgr %r4, %r5
31 /* Function call */
32 basr %r14, %r1
33 /* Restore registers */
34 lmg %r6,%r14, 0(%r15)
35 ld %f8, 72(%r15)
36 ld %f9, 80(%r15)
37 ld %f10, 88(%r15)
38 ld %f11, 96(%r15)
39 ld %f12, 104(%r15)
40 ld %f13, 112(%r15)
41 ld %f14, 120(%r15)
42 ld %f15, 128(%r15)
43 /* Return */
44 lay %r15, 144(%r15)
45 br %r14
46
47 .globl CAML_C_CALL
48 .type CAML_C_CALL, @function
49 .align ALIGN
50 CAML_C_CALL:
51 br %r7
52
53 .section ".rodata"
54
55 .global CAML_NEGF_MASK
56 .align ALIGN
57 CAML_NEGF_MASK:
58 .quad 0x8000000000000000, 0
59 .global CAML_ABSF_MASK
60 .align ALIGN
61 CAML_ABSF_MASK:
62 .quad 0x7FFFFFFFFFFFFFFF, 0
63
64 .comm young_limit, 8
65
66 /* Mark stack as non-executable */
67 .section .note.GNU-stack,"",%progbits
68