CACAO
md-asm.hpp
Go to the documentation of this file.
1 /* src/vm/jit/alpha/md-asm.hpp - assembler defines for Alpha ABI
2 
3  Copyright (C) 1996-2013
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_HPP_
27 #define MD_ASM_HPP_ 1
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_HPP_
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  */