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