* Updated header: Added 2006. Changed address of FSF. Changed email
[cacao.git] / src / vm / jit / alpha / md-asm.h
1 /* src/vm/jit/alpha/md-asm.h - assembler defines for Alpha ABI
2
3    Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6    J. Wenninger, Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23    02110-1301, USA.
24
25    Contact: cacao@cacaojvm.org
26
27    Authors: Christian Thalinger
28
29    Changes:
30
31    $Id: md-asm.h 4357 2006-01-22 23:33:38Z twisti $
32
33 */
34
35
36 #ifndef _MD_ASM_H
37 #define _MD_ASM_H
38
39
40 /* register defines ***********************************************************/
41
42 #define v0      $0
43
44 #define t0      $1
45 #define t1      $2
46 #define t2      $3
47 #define t3      $4
48 #define t4      $5
49 #define t5      $6
50 #define t6      $7
51 #define t7      $8
52
53 #define s0      $9
54 #define s1      $10
55 #define s2      $11
56 #define s3      $12
57 #define s4      $13
58 #define s5      $14
59 #define s6      $15
60
61 #define a0      $16
62 #define a1      $17
63 #define a2      $18
64 #define a3      $19
65 #define a4      $20
66 #define a5      $21
67
68 #define t8      $22
69 #define t9      $23
70 #define t10     $24
71 #define t11     $25
72 #define ra      $26
73 #define t12     $27
74
75 #define pv      t12
76 #define AT      $at
77 #define gp      $29
78 #define sp      $30
79 #define zero    $31
80
81 #define itmp1   t11
82 #define itmp2   $28
83 #define itmp3   gp
84
85 #define xptr    itmp1
86 #define xpc     itmp2
87
88
89 #define fv0     $f0
90 #define ft0     $f1
91
92 #define fs0     $f2
93 #define fs1     $f3
94 #define fs2     $f4
95 #define fs3     $f5
96 #define fs4     $f6
97 #define fs5     $f7
98 #define fs6     $f8
99 #define fs7     $f9
100
101 #define ft1     $f10
102 #define ft2     $f11
103 #define ft3     $f12
104 #define ft4     $f13
105 #define ft5     $f14
106 #define ft6     $f15
107
108 #define fa0     $f16
109 #define fa1     $f17
110 #define fa2     $f18
111 #define fa3     $f19
112 #define fa4     $f20
113 #define fa5     $f21
114
115 #define ft7     $f22
116 #define ft8     $f23
117 #define ft9     $f24
118 #define ft10    $f25
119 #define ft11    $f26
120 #define ft12    $f27
121
122 #define ftmp1   $f28
123 #define ftmp2   $f29
124 #define ftmp3   $f30
125
126 #define fzero   $f31
127
128 #define PAL_imb 0x86
129
130
131 /* save and restore macros ****************************************************/
132
133 #define SAVE_RETURN_REGISTERS(off) \
134         stq     v0,(0+(off))*8(sp)    ; \
135         stt     fv0,(1+(off))*8(sp)   ;
136
137 #define RESTORE_RETURN_REGISTERS(off) \
138         ldq     v0,(0+(off))*8(sp)    ; \
139         ldt     fv0,(1+(off))*8(sp)   ;
140
141 #define SAVE_ARGUMENT_REGISTERS(off) \
142         stq     a0,(0+(off))*8(sp)    ; \
143         stq     a1,(1+(off))*8(sp)    ; \
144         stq     a2,(2+(off))*8(sp)    ; \
145         stq     a3,(3+(off))*8(sp)    ; \
146         stq     a4,(4+(off))*8(sp)    ; \
147         stq     a5,(5+(off))*8(sp)    ; \
148         \
149         stt     fa0,(6+(off))*8(sp)   ; \
150         stt     fa1,(7+(off))*8(sp)   ; \
151         stt     fa2,(8+(off))*8(sp)   ; \
152         stt     fa3,(9+(off))*8(sp)   ; \
153         stt     fa4,(10+(off))*8(sp)  ; \
154         stt     fa5,(11+(off))*8(sp)  ;
155
156 #define RESTORE_ARGUMENT_REGISTERS(off) \
157         ldq     a0,(0+(off))*8(sp)    ; \
158         ldq     a1,(1+(off))*8(sp)    ; \
159         ldq     a2,(2+(off))*8(sp)    ; \
160         ldq     a3,(3+(off))*8(sp)    ; \
161         ldq     a4,(4+(off))*8(sp)    ; \
162         ldq     a5,(5+(off))*8(sp)    ; \
163         \
164         ldt     fa0,(6+(off))*8(sp)   ; \
165         ldt     fa1,(7+(off))*8(sp)   ; \
166         ldt     fa2,(8+(off))*8(sp)   ; \
167         ldt     fa3,(9+(off))*8(sp)   ; \
168         ldt     fa4,(10+(off))*8(sp)  ; \
169         ldt     fa5,(11+(off))*8(sp)  ;
170                 
171 #define SAVE_TEMPORARY_REGISTERS(off) \
172         stq     t0,(0+(off))*8(sp)    ; \
173         stq     t1,(1+(off))*8(sp)    ; \
174         stq     t2,(2+(off))*8(sp)    ; \
175         stq     t3,(3+(off))*8(sp)    ; \
176         stq     t4,(4+(off))*8(sp)    ; \
177         stq     t5,(5+(off))*8(sp)    ; \
178         stq     t6,(6+(off))*8(sp)    ; \
179         stq     t7,(7+(off))*8(sp)    ; \
180         stq     t8,(8+(off))*8(sp)    ; \
181         stq     t9,(9+(off))*8(sp)    ; \
182         stq     t10,(10+(off))*8(sp)  ; \
183         \
184         stt     ft0,(11+(off))*8(sp)  ; \
185         stt     ft1,(12+(off))*8(sp)  ; \
186         stt     ft2,(13+(off))*8(sp)  ; \
187         stt     ft3,(14+(off))*8(sp)  ; \
188         stt     ft4,(15+(off))*8(sp)  ; \
189         stt     ft5,(16+(off))*8(sp)  ; \
190         stt     ft6,(17+(off))*8(sp)  ; \
191         stt     ft7,(18+(off))*8(sp)  ; \
192         stt     ft8,(19+(off))*8(sp)  ; \
193         stt     ft9,(20+(off))*8(sp)  ; \
194         stt     ft10,(21+(off))*8(sp) ; \
195         stt     ft11,(22+(off))*8(sp) ; \
196         stt     ft12,(23+(off))*8(sp) ;
197
198
199 #define RESTORE_TEMPORARY_REGISTERS(off) \
200         ldq     t0,(0+(off))*8(sp)    ; \
201         ldq     t1,(1+(off))*8(sp)    ; \
202         ldq     t2,(2+(off))*8(sp)    ; \
203         ldq     t3,(3+(off))*8(sp)    ; \
204         ldq     t4,(4+(off))*8(sp)    ; \
205         ldq     t5,(5+(off))*8(sp)    ; \
206         ldq     t6,(6+(off))*8(sp)    ; \
207         ldq     t7,(7+(off))*8(sp)    ; \
208         ldq     t8,(8+(off))*8(sp)    ; \
209         ldq     t9,(9+(off))*8(sp)    ; \
210         ldq     t10,(10+(off))*8(sp)  ; \
211         \
212         ldt     ft0,(11+(off))*8(sp)  ; \
213         ldt     ft1,(12+(off))*8(sp)  ; \
214         ldt     ft2,(13+(off))*8(sp)  ; \
215         ldt     ft3,(14+(off))*8(sp)  ; \
216         ldt     ft4,(15+(off))*8(sp)  ; \
217         ldt     ft5,(16+(off))*8(sp)  ; \
218         ldt     ft6,(17+(off))*8(sp)  ; \
219         ldt     ft7,(18+(off))*8(sp)  ; \
220         ldt     ft8,(19+(off))*8(sp)  ; \
221         ldt     ft9,(20+(off))*8(sp)  ; \
222         ldt     ft10,(21+(off))*8(sp) ; \
223         ldt     ft11,(22+(off))*8(sp) ; \
224         ldt     ft12,(23+(off))*8(sp) ;
225
226 #endif /* _MD_ASM_H */
227
228
229 /*
230  * These are local overrides for various environment variables in Emacs.
231  * Please do not remove this and leave it at the end of the file, where
232  * Emacs will automagically detect them.
233  * ---------------------------------------------------------------------
234  * Local variables:
235  * mode: c
236  * indent-tabs-mode: t
237  * c-basic-offset: 4
238  * tab-width: 4
239  * End:
240  */