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