CACAO
md-asm.hpp
Go to the documentation of this file.
1 /* src/vm/jit/mips/md-asm.hpp - assembler defines for MIPS 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 #include "config.h"
30 
31 
32 /* register defines ***********************************************************/
33 
34 #if SIZEOF_VOID_P == 8
35 
36 #define zero $0
37 #define itmp1 $1
38 #define v0 $2
39 #define itmp2 $3
40 #define a0 $4
41 #define a1 $5
42 #define a2 $6
43 #define a3 $7
44 
45 #define a4 $8
46 #define a5 $9
47 #define a6 $10
48 #define a7 $11
49 #define t0 $12
50 #define t1 $13
51 #define t2 $14
52 #define t3 $15
53 
54 #define s0 $16
55 #define s1 $17
56 #define s2 $18
57 #define s3 $19
58 #define s4 $20
59 #define s5 $21
60 #define s6 $22
61 #define s7 $23
62 
63 #define t4 $24
64 #define itmp3 $25
65 #define k0 $26
66 #define k1 $27
67 
68 #define gp $28
69 #define sp $29
70 #define s8 $30
71 #define ra $31
72 
73 #define pv s8
74 
75 #define xptr itmp1
76 #define xpc itmp2
77 #define mptr itmp3
78 #define mptrreg 25
79 
80 
81 #define fv0 $f0
82 #define ft0 $f1
83 #define ft1 $f2
84 #define ft2 $f3
85 #define ft3 $f4
86 #define ft4 $f5
87 #define ft5 $f6
88 #define ft6 $f7
89 
90 #define ft7 $f8
91 #define ft8 $f9
92 #define ft9 $f10
93 #define ft10 $f11
94 #define fa0 $f12
95 #define fa1 $f13
96 #define fa2 $f14
97 #define fa3 $f15
98 
99 #define fa4 $f16
100 #define fa5 $f17
101 #define fa6 $f18
102 #define fa7 $f19
103 #define ft11 $f20
104 #define ft12 $f21
105 #define ft13 $f22
106 #define ft14 $f23
107 
108 #define fs0 $f24
109 #define ft15 $f25
110 #define fs1 $f26
111 #define ft16 $f27
112 #define fs2 $f28
113 #define ft17 $f29
114 #define fs3 $f30
115 #define ft18 $f31
116 
117 #define fss0 $f20
118 #define fss1 $f22
119 #define fss2 $f25
120 #define fss3 $f27
121 #define fss4 $f29
122 #define fss5 $f31
123 
124 #else /* SIZEOF_VOID_P == 8 */
125 
126 #define zero $0
127 #define itmp1 $1
128 #define v0 $2
129 #define v1 $3
130 #define a0 $4
131 #define a1 $5
132 #define a2 $6
133 #define a3 $7
134 
135 #define t0 $8
136 #define t1 $9
137 #define t2 $10
138 #define t3 $11
139 #define t4 $12
140 #define t5 $13
141 #define t6 $14
142 #define t7 $15
143 
144 #define s0 $16
145 #define s1 $17
146 #define s2 $18
147 #define s3 $19
148 #define s4 $20
149 #define s5 $21
150 #define s6 $22
151 #define s7 $23
152 
153 #define itmp2 $24
154 #define itmp3 $25
155 #define k0 $26
156 #define k1 $27
157 
158 #define gp $28
159 #define sp $29
160 #define s8 $30
161 #define ra $31
162 
163 
164 #define pv s8
165 #define xptr itmp1
166 #define xpc itmp2
167 #define mptr itmp3
168 #define mptrreg 25
169 
170 
171 #define fv0 $f0
172 #define ftmp1 $f2
173 #define ftmp2 $f4
174 #define ftmp3 $f6
175 
176 #define ft0 $f8
177 #define ft1 $f10
178 #define fa0 $f12
179 #define fa1 $f14
180 
181 #define ft2 $f16
182 #define ft3 $f18
183 #define fs0 $f20
184 #define fs1 $f22
185 
186 #define fs2 $f24
187 #define fs3 $f26
188 #define fs4 $f28
189 #define fs5 $f30
190 
191 #endif /* SIZEOF_VOID_P == 8 */
192 
193 #if SIZEOF_VOID_P == 8
194 
195 #define aaddu daddu
196 #define asubu dsubu
197 #define aaddi daddi
198 #define aaddiu daddiu
199 #define ald ld
200 #define ast sd
201 #define ala dla
202 #define asll dsll
203 
204 #define all lld
205 #define asc scd
206 
207 #else
208 
209 #define aaddu addu
210 #define asubu subu
211 #define aaddi addi
212 #define aaddiu addiu
213 #define ald lw
214 #define ast sw
215 #define ala la
216 #define asll sll
217 
218 #define all ll
219 #define asc sc
220 
221 #endif
222 
223 
224 /* save and restore macros ****************************************************/
225 
226 #if SIZEOF_VOID_P == 8
227 
228 #define SAVE_ARGUMENT_REGISTERS(off) \
229  sd a0,(0+(off))*8(sp) ; \
230  sd a1,(1+(off))*8(sp) ; \
231  sd a2,(2+(off))*8(sp) ; \
232  sd a3,(3+(off))*8(sp) ; \
233  sd a4,(4+(off))*8(sp) ; \
234  sd a5,(5+(off))*8(sp) ; \
235  sd a6,(6+(off))*8(sp) ; \
236  sd a7,(7+(off))*8(sp) ; \
237  \
238  s.d fa0,(8+(off))*8(sp) ; \
239  s.d fa1,(9+(off))*8(sp) ; \
240  s.d fa2,(10+(off))*8(sp); \
241  s.d fa3,(11+(off))*8(sp); \
242  s.d fa4,(12+(off))*8(sp); \
243  s.d fa5,(13+(off))*8(sp); \
244  s.d fa6,(14+(off))*8(sp); \
245  s.d fa7,(15+(off))*8(sp);
246 
247 #define RESTORE_ARGUMENT_REGISTERS(off) \
248  ld a0,(0+(off))*8(sp) ; \
249  ld a1,(1+(off))*8(sp) ; \
250  ld a2,(2+(off))*8(sp) ; \
251  ld a3,(3+(off))*8(sp) ; \
252  ld a4,(4+(off))*8(sp) ; \
253  ld a5,(5+(off))*8(sp) ; \
254  ld a6,(6+(off))*8(sp) ; \
255  ld a7,(7+(off))*8(sp) ; \
256  \
257  l.d fa0,(8+(off))*8(sp); \
258  l.d fa1,(9+(off))*8(sp); \
259  l.d fa2,(10+(off))*8(sp); \
260  l.d fa3,(11+(off))*8(sp); \
261  l.d fa4,(12+(off))*8(sp); \
262  l.d fa5,(13+(off))*8(sp); \
263  l.d fa6,(14+(off))*8(sp); \
264  l.d fa7,(15+(off))*8(sp);
265 
266 
267 #define SAVE_TEMPORARY_REGISTERS(off) \
268  sd t0,(0+(off))*8(sp) ; \
269  sd t1,(1+(off))*8(sp) ; \
270  sd t2,(2+(off))*8(sp) ; \
271  sd t3,(3+(off))*8(sp) ; \
272  sd t4,(4+(off))*8(sp) ; \
273  \
274  s.d ft3,(5+(off))*8(sp) ; \
275  s.d ft4,(6+(off))*8(sp) ; \
276  s.d ft5,(7+(off))*8(sp) ; \
277  s.d ft6,(8+(off))*8(sp) ; \
278  s.d ft7,(9+(off))*8(sp) ; \
279  s.d ft8,(10+(off))*8(sp) ; \
280  s.d ft9,(11+(off))*8(sp) ; \
281  s.d ft10,(12+(off))*8(sp) ; \
282  s.d ft11,(13+(off))*8(sp) ; \
283  s.d ft12,(14+(off))*8(sp) ; \
284  s.d ft13,(15+(off))*8(sp) ; \
285  s.d ft14,(16+(off))*8(sp) ; \
286  s.d ft15,(17+(off))*8(sp) ; \
287  s.d ft16,(18+(off))*8(sp) ; \
288  s.d ft17,(19+(off))*8(sp) ; \
289  s.d ft18,(20+(off))*8(sp) ;
290 
291 #define RESTORE_TEMPORARY_REGISTERS(off) \
292  ld t0,(0+(off))*8(sp) ; \
293  ld t1,(1+(off))*8(sp) ; \
294  ld t2,(2+(off))*8(sp) ; \
295  ld t3,(3+(off))*8(sp) ; \
296  ld t4,(4+(off))*8(sp) ; \
297  \
298  l.d ft3,(5+(off))*8(sp) ; \
299  l.d ft4,(6+(off))*8(sp) ; \
300  l.d ft5,(7+(off))*8(sp) ; \
301  l.d ft6,(8+(off))*8(sp) ; \
302  l.d ft7,(9+(off))*8(sp) ; \
303  l.d ft8,(10+(off))*8(sp) ; \
304  l.d ft9,(11+(off))*8(sp) ; \
305  l.d ft10,(12+(off))*8(sp) ; \
306  l.d ft11,(13+(off))*8(sp) ; \
307  l.d ft12,(14+(off))*8(sp) ; \
308  l.d ft13,(15+(off))*8(sp) ; \
309  l.d ft14,(16+(off))*8(sp) ; \
310  l.d ft15,(17+(off))*8(sp) ; \
311  l.d ft16,(18+(off))*8(sp) ; \
312  l.d ft17,(19+(off))*8(sp) ; \
313  l.d ft18,(20+(off))*8(sp) ;
314 
315 #else /* SIZEOF_VOID_P == 8 */
316 
317 #define SAVE_ARGUMENT_REGISTERS(off) \
318  sw a0,(0+(off))*4(sp) ; \
319  sw a1,(1+(off))*4(sp) ; \
320  sw a2,(2+(off))*4(sp) ; \
321  sw a3,(3+(off))*4(sp) ; \
322  s.d fa0,(4+(off))*4(sp) ; \
323  s.d fa1,(6+(off))*4(sp) ;
324 
325 #define RESTORE_ARGUMENT_REGISTERS(off) \
326  lw a0,(0+(off))*4(sp) ; \
327  lw a1,(1+(off))*4(sp) ; \
328  lw a2,(2+(off))*4(sp) ; \
329  lw a3,(3+(off))*4(sp) ; \
330  l.d fa0,(4+(off))*4(sp) ; \
331  l.d fa1,(6+(off))*4(sp) ;
332 
333 
334 #define SAVE_TEMPORARY_REGISTERS(off) \
335  sw t0,(0+(off))*4(sp) ; \
336  sw t1,(1+(off))*4(sp) ; \
337  sw t2,(2+(off))*4(sp) ; \
338  sw t3,(3+(off))*4(sp) ; \
339  sw t4,(4+(off))*4(sp) ; \
340  sw t5,(5+(off))*4(sp) ; \
341  sw t6,(6+(off))*4(sp) ; \
342  sw t7,(7+(off))*4(sp) ; \
343  s.d ft0,(8+(off))*4(sp) ; \
344  s.d ft1,(10+(off))*4(sp) ; \
345  s.d ft2,(12+(off))*4(sp) ; \
346  s.d ft3,(14+(off))*4(sp) ;
347 
348 #define RESTORE_TEMPORARY_REGISTERS(off) \
349  lw t0,(0+(off))*4(sp) ; \
350  lw t1,(1+(off))*4(sp) ; \
351  lw t2,(2+(off))*4(sp) ; \
352  lw t3,(3+(off))*4(sp) ; \
353  lw t4,(4+(off))*4(sp) ; \
354  lw t5,(5+(off))*4(sp) ; \
355  lw t6,(6+(off))*4(sp) ; \
356  lw t7,(7+(off))*4(sp) ; \
357  l.d ft0,(8+(off))*4(sp) ; \
358  l.d ft1,(10+(off))*4(sp) ; \
359  l.d ft2,(12+(off))*4(sp) ; \
360  l.d ft3,(14+(off))*4(sp) ;
361 
362 #endif /* SIZEOF_VOID_P == 8 */
363 
364 #endif // MD_ASM_HPP_
365 
366 
367 /*
368  * These are local overrides for various environment variables in Emacs.
369  * Please do not remove this and leave it at the end of the file, where
370  * Emacs will automagically detect them.
371  * ---------------------------------------------------------------------
372  * Local variables:
373  * mode: c++
374  * indent-tabs-mode: t
375  * c-basic-offset: 4
376  * tab-width: 4
377  * End:
378  */