Sys.Signals module for a Variant type of signals (and a set_signal function that...
[ocaml.git] / testasmcomp / hppa.S
blob2b1ab21c66ece492bd65de007dc13e66c48ed4d6
1 ;*********************************************************************
2 ;*                                                                   *
3 ;*                          Objective Caml                           *
4 ;*                                                                   *
5 ;*           Xavier Leroy, projet Cristal, INRIA Rocquencourt        *
6 ;*                                                                   *
7 ;* Copyright 1996 Institut National de Recherche en Informatique et  *
8 ;* en Automatique.  All rights reserved.  This file is distributed   *
9 ;* under the terms of the Q Public License version 1.0.              *
10 ;*                                                                   *
11 ;*********************************************************************
13 ; $Id$
14 ; Must be preprocessed by cpp
16 #ifdef SYS_hpux
17 #define G(x) x
18 #define CODESPACE .code
19 #define CODE_ALIGN 4
20 #define EXPORT_CODE(x) .export x, entry, priv_lev=3
21 #define STARTPROC .proc ! .callinfo frame=0, no_calls ! .entry
22 #define ENDPROC .exit ! .procend
23 #endif
25 #ifdef SYS_nextstep
26 #define G(x) _##x
27 #define CODESPACE .text
28 #define CODE_ALIGN 2
29 #define EXPORT_CODE(x) .globl x
30 #define STARTPROC
31 #define ENDPROC
32 #endif
34 #ifdef SYS_hpux
35         .space $PRIVATE$
36         .subspa $DATA$,quad=1,align=8,access=31
37         .subspa $BSS$,quad=1,align=8,access=31,zero,sort=82
38         .space $TEXT$
39         .subspa $LIT$,quad=0,align=8,access=44
40         .subspa $CODE$,quad=0,align=8,access=44,code_only
41         .import $global$, data
42         .import $$dyncall, millicode
43 #endif
45         CODESPACE
46         .align  CODE_ALIGN
47         EXPORT_CODE(G(call_gen_code))
48 G(call_gen_code):
49         STARTPROC
50         stw     %r2,-20(%r30)
51         ldo     256(%r30), %r30
52 ; Save the callee-save registers
53         ldo     -32(%r30), %r1
54         stws,ma %r3, -4(%r1)
55         stws,ma %r4, -4(%r1)
56         stws,ma %r5, -4(%r1)
57         stws,ma %r6, -4(%r1)
58         stws,ma %r7, -4(%r1)
59         stws,ma %r8, -4(%r1)
60         stws,ma %r9, -4(%r1)
61         stws,ma %r10, -4(%r1)
62         stws,ma %r11, -4(%r1)
63         stws,ma %r12, -4(%r1)
64         stws,ma %r13, -4(%r1)
65         stws,ma %r14, -4(%r1)
66         stws,ma %r15, -4(%r1)
67         stws,ma %r16, -4(%r1)
68         stws,ma %r17, -4(%r1)
69         stws,ma %r18, -4(%r1)
70         fstds,ma %fr12, -8(%r1)
71         fstds,ma %fr13, -8(%r1)
72         fstds,ma %fr14, -8(%r1)
73         fstds,ma %fr15, -8(%r1)
74         fstds,ma %fr16, -8(%r1)
75         fstds,ma %fr17, -8(%r1)
76         fstds,ma %fr18, -8(%r1)
77         fstds,ma %fr19, -8(%r1)
78         fstds,ma %fr20, -8(%r1)
79         fstds,ma %fr21, -8(%r1)
80         fstds,ma %fr22, -8(%r1)
81         fstds,ma %fr23, -8(%r1)
82         fstds,ma %fr24, -8(%r1)
83         fstds,ma %fr25, -8(%r1)
84         fstds,ma %fr26, -8(%r1)
85         fstds,ma %fr27, -8(%r1)
86         fstds,ma %fr28, -8(%r1)
87         fstds,ma %fr29, -8(%r1)
88         fstds,ma %fr30, -8(%r1)
89         fstds,ma %fr31, -8(%r1)
91 ; Shuffle the arguments and call
92         copy    %r26, %r22
93         copy    %r25, %r26
94         copy    %r24, %r25
95         copy    %r23, %r24
96         fcpy,dbl %fr5, %fr4
97 #ifdef SYS_hpux
98         bl      $$dyncall, %r2
99         nop
100 #else
101         ble     0(4, %r22)
102         copy    %r31, %r2
103 #endif
104 ; Shuffle the results
105         copy    %r26, %r28
106 ; Restore the callee-save registers
107         ldo     -32(%r30), %r1
108         ldws,ma -4(%r1), %r3
109         ldws,ma -4(%r1), %r4
110         ldws,ma -4(%r1), %r5
111         ldws,ma -4(%r1), %r6
112         ldws,ma -4(%r1), %r7
113         ldws,ma -4(%r1), %r8
114         ldws,ma -4(%r1), %r9
115         ldws,ma -4(%r1), %r10
116         ldws,ma -4(%r1), %r11
117         ldws,ma -4(%r1), %r12
118         ldws,ma -4(%r1), %r13
119         ldws,ma -4(%r1), %r14
120         ldws,ma -4(%r1), %r15
121         ldws,ma -4(%r1), %r16
122         ldws,ma -4(%r1), %r17
123         ldws,ma -4(%r1), %r18
124         fldds,ma -8(%r1), %fr12
125         fldds,ma -8(%r1), %fr13
126         fldds,ma -8(%r1), %fr14
127         fldds,ma -8(%r1), %fr15
128         fldds,ma -8(%r1), %fr16
129         fldds,ma -8(%r1), %fr17
130         fldds,ma -8(%r1), %fr18
131         fldds,ma -8(%r1), %fr19
132         fldds,ma -8(%r1), %fr20
133         fldds,ma -8(%r1), %fr21
134         fldds,ma -8(%r1), %fr22
135         fldds,ma -8(%r1), %fr23
136         fldds,ma -8(%r1), %fr24
137         fldds,ma -8(%r1), %fr25
138         fldds,ma -8(%r1), %fr26
139         fldds,ma -8(%r1), %fr27
140         fldds,ma -8(%r1), %fr28
141         fldds,ma -8(%r1), %fr29
142         fldds,ma -8(%r1), %fr30
143         fldds,ma -8(%r1), %fr31
145         ldo     -256(%r30), %r30
146         ldw     -20(%r30), %r2
147         bv      0(%r2)
148         nop
149         ENDPROC
151         .align  CODE_ALIGN
152         EXPORT_CODE(caml_c_call)
153 G(caml_c_call):
154         STARTPROC
155 #ifdef SYS_hpux
156         bl $$dyncall, %r0
157         nop
158 #else
159         bv      0(%r22)
160         nop
161 #endif
162         ENDPROC