* Removed all Id tags.
[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 */
32
33
34 #ifndef _MD_ASM_H
35 #define _MD_ASM_H
36
37
38 /* register defines ***********************************************************/
39
40 #define v0      $0
41
42 #define t0      $1
43 #define t1      $2
44 #define t2      $3
45 #define t3      $4
46 #define t4      $5
47 #define t5      $6
48 #define t6      $7
49 #define t7      $8
50
51 #define s0      $9
52 #define s1      $10
53 #define s2      $11
54 #define s3      $12
55 #define s4      $13
56 #define s5      $14
57 #define s6      $15
58
59 #define a0      $16
60 #define a1      $17
61 #define a2      $18
62 #define a3      $19
63 #define a4      $20
64 #define a5      $21
65
66 #define t8      $22
67 #define t9      $23
68 #define t10     $24
69 #define t11     $25
70 #define ra      $26
71 #define t12     $27
72
73 #define pv      t12
74 #define AT      $at
75 #define gp      $29
76 #define sp      $30
77 #define zero    $31
78
79 #define itmp1   t11
80 #define itmp2   $28
81 #define itmp3   gp
82
83 #define xptr    itmp1
84 #define xpc     itmp2
85 #define mptr    itmp2
86
87 #define fv0     $f0
88 #define ft0     $f1
89
90 #define fs0     $f2
91 #define fs1     $f3
92 #define fs2     $f4
93 #define fs3     $f5
94 #define fs4     $f6
95 #define fs5     $f7
96 #define fs6     $f8
97 #define fs7     $f9
98
99 #define ft1     $f10
100 #define ft2     $f11
101 #define ft3     $f12
102 #define ft4     $f13
103 #define ft5     $f14
104 #define ft6     $f15
105
106 #define fa0     $f16
107 #define fa1     $f17
108 #define fa2     $f18
109 #define fa3     $f19
110 #define fa4     $f20
111 #define fa5     $f21
112
113 #define ft7     $f22
114 #define ft8     $f23
115 #define ft9     $f24
116 #define ft10    $f25
117 #define ft11    $f26
118 #define ft12    $f27
119
120 #define ftmp1   $f28
121 #define ftmp2   $f29
122 #define ftmp3   $f30
123
124 #define fzero   $f31
125
126 #define PAL_imb 0x86
127
128
129 /* save and restore macros ****************************************************/
130
131 #define SAVE_RETURN_REGISTERS(off) \
132         stq     v0,(0+(off))*8(sp)    ; \
133         stt     fv0,(1+(off))*8(sp)   ;
134
135 #define RESTORE_RETURN_REGISTERS(off) \
136         ldq     v0,(0+(off))*8(sp)    ; \
137         ldt     fv0,(1+(off))*8(sp)   ;
138
139 #define SAVE_ARGUMENT_REGISTERS(off) \
140         stq     a0,(0+(off))*8(sp)    ; \
141         stq     a1,(1+(off))*8(sp)    ; \
142         stq     a2,(2+(off))*8(sp)    ; \
143         stq     a3,(3+(off))*8(sp)    ; \
144         stq     a4,(4+(off))*8(sp)    ; \
145         stq     a5,(5+(off))*8(sp)    ; \
146         \
147         stt     fa0,(6+(off))*8(sp)   ; \
148         stt     fa1,(7+(off))*8(sp)   ; \
149         stt     fa2,(8+(off))*8(sp)   ; \
150         stt     fa3,(9+(off))*8(sp)   ; \
151         stt     fa4,(10+(off))*8(sp)  ; \
152         stt     fa5,(11+(off))*8(sp)  ;
153
154 #define RESTORE_ARGUMENT_REGISTERS(off) \
155         ldq     a0,(0+(off))*8(sp)    ; \
156         ldq     a1,(1+(off))*8(sp)    ; \
157         ldq     a2,(2+(off))*8(sp)    ; \
158         ldq     a3,(3+(off))*8(sp)    ; \
159         ldq     a4,(4+(off))*8(sp)    ; \
160         ldq     a5,(5+(off))*8(sp)    ; \
161         \
162         ldt     fa0,(6+(off))*8(sp)   ; \
163         ldt     fa1,(7+(off))*8(sp)   ; \
164         ldt     fa2,(8+(off))*8(sp)   ; \
165         ldt     fa3,(9+(off))*8(sp)   ; \
166         ldt     fa4,(10+(off))*8(sp)  ; \
167         ldt     fa5,(11+(off))*8(sp)  ;
168                 
169 #define SAVE_TEMPORARY_REGISTERS(off) \
170         stq     t0,(0+(off))*8(sp)    ; \
171         stq     t1,(1+(off))*8(sp)    ; \
172         stq     t2,(2+(off))*8(sp)    ; \
173         stq     t3,(3+(off))*8(sp)    ; \
174         stq     t4,(4+(off))*8(sp)    ; \
175         stq     t5,(5+(off))*8(sp)    ; \
176         stq     t6,(6+(off))*8(sp)    ; \
177         stq     t7,(7+(off))*8(sp)    ; \
178         stq     t8,(8+(off))*8(sp)    ; \
179         stq     t9,(9+(off))*8(sp)    ; \
180         stq     t10,(10+(off))*8(sp)  ; \
181         \
182         stt     ft0,(11+(off))*8(sp)  ; \
183         stt     ft1,(12+(off))*8(sp)  ; \
184         stt     ft2,(13+(off))*8(sp)  ; \
185         stt     ft3,(14+(off))*8(sp)  ; \
186         stt     ft4,(15+(off))*8(sp)  ; \
187         stt     ft5,(16+(off))*8(sp)  ; \
188         stt     ft6,(17+(off))*8(sp)  ; \
189         stt     ft7,(18+(off))*8(sp)  ; \
190         stt     ft8,(19+(off))*8(sp)  ; \
191         stt     ft9,(20+(off))*8(sp)  ; \
192         stt     ft10,(21+(off))*8(sp) ; \
193         stt     ft11,(22+(off))*8(sp) ; \
194         stt     ft12,(23+(off))*8(sp) ;
195
196
197 #define RESTORE_TEMPORARY_REGISTERS(off) \
198         ldq     t0,(0+(off))*8(sp)    ; \
199         ldq     t1,(1+(off))*8(sp)    ; \
200         ldq     t2,(2+(off))*8(sp)    ; \
201         ldq     t3,(3+(off))*8(sp)    ; \
202         ldq     t4,(4+(off))*8(sp)    ; \
203         ldq     t5,(5+(off))*8(sp)    ; \
204         ldq     t6,(6+(off))*8(sp)    ; \
205         ldq     t7,(7+(off))*8(sp)    ; \
206         ldq     t8,(8+(off))*8(sp)    ; \
207         ldq     t9,(9+(off))*8(sp)    ; \
208         ldq     t10,(10+(off))*8(sp)  ; \
209         \
210         ldt     ft0,(11+(off))*8(sp)  ; \
211         ldt     ft1,(12+(off))*8(sp)  ; \
212         ldt     ft2,(13+(off))*8(sp)  ; \
213         ldt     ft3,(14+(off))*8(sp)  ; \
214         ldt     ft4,(15+(off))*8(sp)  ; \
215         ldt     ft5,(16+(off))*8(sp)  ; \
216         ldt     ft6,(17+(off))*8(sp)  ; \
217         ldt     ft7,(18+(off))*8(sp)  ; \
218         ldt     ft8,(19+(off))*8(sp)  ; \
219         ldt     ft9,(20+(off))*8(sp)  ; \
220         ldt     ft10,(21+(off))*8(sp) ; \
221         ldt     ft11,(22+(off))*8(sp) ; \
222         ldt     ft12,(23+(off))*8(sp) ;
223
224 #endif /* _MD_ASM_H */
225
226
227 /*
228  * These are local overrides for various environment variables in Emacs.
229  * Please do not remove this and leave it at the end of the file, where
230  * Emacs will automagically detect them.
231  * ---------------------------------------------------------------------
232  * Local variables:
233  * mode: c
234  * indent-tabs-mode: t
235  * c-basic-offset: 4
236  * tab-width: 4
237  * End:
238  */