* fv0: Defined.
[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 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4    R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5    C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6    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., 59 Temple Place - Suite 330, Boston, MA
23    02111-1307, USA.
24
25    Contact: cacao@complang.tuwien.ac.at
26
27    Authors: Christian Thalinger
28
29    Changes:
30
31    $Id: md-asm.h 3506 2005-10-27 10:20:48Z 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 #define ft13    $f28
122 #define ft14    $f29
123 #define ft15    $f20
124
125 #define fzero   $f31
126
127 #define ftmp1   ft13
128 #define ftmp2   ft14
129 #define ftmp3   ft15
130
131 #define PAL_imb 0x86
132
133
134 /* save and restore macros ****************************************************/
135
136 #define SAVE_RETURN_REGISTERS(off) \
137         stq     v0,(0+(off))*8(sp)      ; \
138         stt     fv0,(1+(off))*8(sp)     ;
139
140 #define RESTORE_RETURN_REGISTERS(off) \
141         ldq     v0,(0+(off))*8(sp)      ; \
142         ldt     fv0,(1+(off))*8(sp)     ;
143
144 #define SAVE_ARGUMENT_REGISTERS(off) \
145         stq     a0,(0+(off))*8(sp)      ; \
146         stq     a1,(1+(off))*8(sp)      ; \
147         stq     a2,(2+(off))*8(sp)      ; \
148         stq     a3,(3+(off))*8(sp)      ; \
149         stq     a4,(4+(off))*8(sp)      ; \
150         stq     a5,(5+(off))*8(sp)      ; \
151         \
152         stt     fa0,(6+(off))*8(sp)     ; \
153         stt     fa1,(7+(off))*8(sp)     ; \
154         stt     fa2,(8+(off))*8(sp)     ; \
155         stt     fa3,(9+(off))*8(sp)     ; \
156         stt     fa4,(10+(off))*8(sp)    ; \
157         stt     fa5,(11+(off))*8(sp)    ;
158
159 #define RESTORE_ARGUMENT_REGISTERS(off) \
160         ldq     a0,(0+(off))*8(sp)      ; \
161         ldq     a1,(1+(off))*8(sp)      ; \
162         ldq     a2,(2+(off))*8(sp)      ; \
163         ldq     a3,(3+(off))*8(sp)      ; \
164         ldq     a4,(4+(off))*8(sp)      ; \
165         ldq     a5,(5+(off))*8(sp)      ; \
166         \
167         ldt     fa0,(6+(off))*8(sp)     ; \
168         ldt     fa1,(7+(off))*8(sp)     ; \
169         ldt     fa2,(8+(off))*8(sp)     ; \
170         ldt     fa3,(9+(off))*8(sp)     ; \
171         ldt     fa4,(10+(off))*8(sp)    ; \
172         ldt     fa5,(11+(off))*8(sp)    ;
173                 
174 #define SAVE_TEMPORARY_REGISTERS(off) \
175         stq     t0,(0+(off))*8(sp)       ; \
176         stq     t1,(1+(off))*8(sp)       ; \
177         stq     t2,(2+(off))*8(sp)       ; \
178         stq     t3,(3+(off))*8(sp)       ; \
179         stq     t4,(4+(off))*8(sp)       ; \
180         stq     t5,(5+(off))*8(sp)       ; \
181         stq     t6,(6+(off))*8(sp)       ; \
182         stq     t7,(7+(off))*8(sp)       ; \
183         stq     t8,(8+(off))*8(sp)       ; \
184         stq     t9,(9+(off))*8(sp)       ; \
185         stq     t10,(10+(off))*8(sp)     ; \
186         \
187         stt     ft0,(11+(off))*8(sp)     ; \
188         stt     ft1,(12+(off))*8(sp)     ; \
189         stt     ft2,(13+(off))*8(sp)     ; \
190         stt     ft3,(14+(off))*8(sp)     ; \
191         stt     ft4,(15+(off))*8(sp)     ; \
192         stt     ft5,(16+(off))*8(sp)     ; \
193         stt     ft6,(17+(off))*8(sp)     ; \
194         stt     ft7,(18+(off))*8(sp)     ; \
195         stt     ft8,(19+(off))*8(sp)     ; \
196         stt     ft9,(20+(off))*8(sp)     ; \
197         stt     ft10,(21+(off))*8(sp)    ; \
198         stt     ft11,(22+(off))*8(sp)    ; \
199         stt     ft12,(23+(off))*8(sp)    ; \
200         stt     ft13,(24+(off))*8(sp)    ; \
201         stt     ft14,(25+(off))*8(sp)    ; \
202         stt     ft15,(26+(off))*8(sp)    ; 
203
204
205 #define RESTORE_TEMPORARY_REGISTERS(off) \
206         ldq     t0,(0+(off))*8(sp)       ; \
207         ldq     t1,(1+(off))*8(sp)       ; \
208         ldq     t2,(2+(off))*8(sp)       ; \
209         ldq     t3,(3+(off))*8(sp)       ; \
210         ldq     t4,(4+(off))*8(sp)       ; \
211         ldq     t5,(5+(off))*8(sp)       ; \
212         ldq     t6,(6+(off))*8(sp)       ; \
213         ldq     t7,(7+(off))*8(sp)       ; \
214         ldq     t8,(8+(off))*8(sp)       ; \
215         ldq     t9,(9+(off))*8(sp)       ; \
216         ldq     t10,(10+(off))*8(sp)     ; \
217         \
218         ldt     ft0,(11+(off))*8(sp)     ; \
219         ldt     ft1,(12+(off))*8(sp)     ; \
220         ldt     ft2,(13+(off))*8(sp)     ; \
221         ldt     ft3,(14+(off))*8(sp)     ; \
222         ldt     ft4,(15+(off))*8(sp)     ; \
223         ldt     ft5,(16+(off))*8(sp)     ; \
224         ldt     ft6,(17+(off))*8(sp)     ; \
225         ldt     ft7,(18+(off))*8(sp)     ; \
226         ldt     ft8,(19+(off))*8(sp)     ; \
227         ldt     ft9,(20+(off))*8(sp)     ; \
228         ldt     ft10,(21+(off))*8(sp)    ; \
229         ldt     ft11,(22+(off))*8(sp)    ; \
230         ldt     ft12,(23+(off))*8(sp)    ; \
231         ldt     ft13,(24+(off))*8(sp)    ; \
232         ldt     ft14,(25+(off))*8(sp)    ; \
233         ldt     ft15,(26+(off))*8(sp)    ; 
234
235 #endif /* _MD_ASM_H */
236
237
238 /*
239  * These are local overrides for various environment variables in Emacs.
240  * Please do not remove this and leave it at the end of the file, where
241  * Emacs will automagically detect them.
242  * ---------------------------------------------------------------------
243  * Local variables:
244  * mode: c
245  * indent-tabs-mode: t
246  * c-basic-offset: 4
247  * tab-width: 4
248  * End:
249  */