1
/***********************************************************************/
5
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
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. */
11
/***********************************************************************/
13
/* $Id: ia64.S 3573 2001-07-12 12:54:24Z doligez $ */
15
#define ST8OFF(a,b,d) st8 [a] = b, d
16
#define LD8OFF(a,b,d) ld8 a = [b], d
17
#define STFDOFF(a,b,d) stfd [a] = b, d
18
#define LDFDOFF(a,b,d) ldfd a = [b], d
19
#define STFSPILLOFF(a,b,d) stf.spill [a] = b, d
20
#define LDFFILLOFF(a,b,d) ldf.fill a = [b], d
25
.global call_gen_code#
29
/* Allocate 64 "out" registers (for the Caml code) and no locals */
30
alloc r3 = ar.pfs, 0, 0, 64, 0
32
/* Save PFS, return address and GP on stack */
40
/* Save predicates on stack */
44
/* Save callee-save floating-point registers on stack */
47
STFSPILLOFF(r2,f2,16) ;;
48
STFSPILLOFF(r3,f3,16) ;;
49
STFSPILLOFF(r2,f4,16) ;;
50
STFSPILLOFF(r3,f5,16) ;;
51
STFSPILLOFF(r2,f16,16) ;;
52
STFSPILLOFF(r3,f17,16) ;;
53
STFSPILLOFF(r2,f18,16) ;;
54
STFSPILLOFF(r3,f19,16) ;;
55
STFSPILLOFF(r2,f20,16) ;;
56
STFSPILLOFF(r3,f21,16) ;;
57
STFSPILLOFF(r2,f22,16) ;;
58
STFSPILLOFF(r3,f23,16) ;;
59
STFSPILLOFF(r2,f24,16) ;;
60
STFSPILLOFF(r3,f25,16) ;;
61
STFSPILLOFF(r2,f26,16) ;;
62
STFSPILLOFF(r3,f27,16) ;;
63
STFSPILLOFF(r2,f28,16) ;;
64
STFSPILLOFF(r3,f29,16) ;;
65
STFSPILLOFF(r2,f30,16) ;;
66
STFSPILLOFF(r3,f31,16) ;;
68
/* Recover entry point and gp from the function pointer in in0 */
74
/* Shift arguments r33 ... r35 to r32 ... r34 */
80
br.call.sptk b0 = b6 ;;
82
/* Restore the saved floating-point registers */
85
LDFFILLOFF(f2,r2,16) ;;
86
LDFFILLOFF(f3,r3,16) ;;
87
LDFFILLOFF(f4,r2,16) ;;
88
LDFFILLOFF(f5,r3,16) ;;
89
LDFFILLOFF(f16,r2,16) ;;
90
LDFFILLOFF(f17,r3,16) ;;
91
LDFFILLOFF(f18,r2,16) ;;
92
LDFFILLOFF(f19,r3,16) ;;
93
LDFFILLOFF(f20,r2,16) ;;
94
LDFFILLOFF(f21,r3,16) ;;
95
LDFFILLOFF(f22,r2,16) ;;
96
LDFFILLOFF(f23,r3,16) ;;
97
LDFFILLOFF(f24,r2,16) ;;
98
LDFFILLOFF(f25,r3,16) ;;
99
LDFFILLOFF(f26,r2,16) ;;
100
LDFFILLOFF(f27,r3,16) ;;
101
LDFFILLOFF(f28,r2,16) ;;
102
LDFFILLOFF(f29,r3,16) ;;
103
LDFFILLOFF(f30,r2,16) ;;
104
LDFFILLOFF(f31,r3,16) ;;
106
/* Restore gp, predicates and return */
116
br.ret.sptk.many b0 ;;