CACAO
md-asm.hpp
Go to the documentation of this file.
1 /* src/vm/jit/powerpc/linux/md-asm.hpp - assembler defines for PowerPC Linux 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  Contact: cacao@cacaojvm.org
24 
25  Authors: Christian Thalinger
26 
27  Changes:
28 
29 */
30 
31 
32 #ifndef MD_ASM_HPP_
33 #define MD_ASM_HPP_ 1
34 
35 /* register defines ***********************************************************/
36 
37 #define r0 0
38 #define r1 1
39 #define r2 2
40 #define r3 3
41 #define r4 4
42 #define r5 5
43 #define r6 6
44 #define r7 7
45 #define r8 8
46 #define r9 9
47 #define r10 10
48 #define r11 11
49 #define r12 12
50 #define r13 13
51 #define r14 14
52 #define r15 15
53 #define r16 16
54 #define r17 17
55 #define r18 18
56 #define r19 19
57 #define r20 20
58 #define r21 21
59 #define r22 22
60 #define r23 23
61 #define r24 24
62 #define r25 25
63 #define r26 26
64 #define r27 27
65 #define r28 28
66 #define r29 29
67 #define r30 30
68 #define r31 31
69 
70 #define fr0 0
71 #define fr1 1
72 #define fr2 2
73 #define fr3 3
74 #define fr4 4
75 #define fr5 5
76 #define fr6 6
77 #define fr7 7
78 #define fr8 8
79 #define fr9 9
80 #define fr10 10
81 #define fr11 11
82 #define fr12 12
83 #define fr13 13
84 #define fr14 14
85 #define fr15 15
86 #define fr16 16
87 #define fr17 17
88 #define fr18 18
89 #define fr19 19
90 #define fr20 20
91 #define fr21 21
92 #define fr22 22
93 #define fr23 23
94 #define fr24 24
95 #define fr25 25
96 #define fr26 26
97 #define fr27 27
98 #define fr28 28
99 #define fr29 29
100 #define fr30 30
101 #define fr31 31
102 
103 
104 /* register defines ***********************************************************/
105 
106 #define zero r0
107 #define sp r1
108 
109 /* #define foo r2 - system reserved register */
110 
111 #define a0 r3
112 #define a1 r4
113 #define a2 r5
114 #define a3 r6
115 #define a4 r7
116 #define a5 r8
117 #define a6 r9
118 #define a7 r10
119 
120 #define itmp1 r11
121 #define itmp2 r12
122 #define pv r13
123 
124 #define s0 r14
125 #define s1 r15
126 
127 #define itmp3 r16
128 #define t0 r17
129 #define t1 r18
130 #define t2 r19
131 #define t3 r20
132 #define t4 r21
133 #define t5 r22
134 #define t6 r23
135 
136 #define s2 r24
137 #define s3 r25
138 #define s4 r26
139 #define s5 r27
140 #define s6 r28
141 #define s7 r29
142 #define s8 r30
143 #define s9 r31
144 
145 #define v0 a0
146 #define v1 a1
147 
148 #define xptr itmp1
149 #define xpc itmp2
150 
151 #define mptr itmp2
152 #define mptrn itmp2
153 
154 
155 #define ftmp3 r0
156 
157 #define fa0 r1
158 #define fa1 r2
159 #define fa2 r3
160 #define fa3 r4
161 #define fa4 r5
162 #define fa5 r6
163 #define fa6 r7
164 #define fa7 r8
165 
166 #define fa8 r9
167 #define fa9 r10
168 #define fa10 r11
169 #define fa11 r12
170 #define fa12 r13
171 
172 #define fs0 r14
173 #define fs1 r15
174 
175 #define ftmp1 r16
176 #define ftmp2 r17
177 
178 #define ft0 r18
179 #define ft1 r19
180 #define ft2 r20
181 #define ft3 r21
182 #define ft4 r22
183 #define ft5 r23
184 
185 #define fs2 r24
186 #define fs3 r25
187 #define fs4 r26
188 #define fs5 r27
189 #define fs6 r28
190 #define fs7 r29
191 #define fs8 r30
192 #define fs9 r31
193 
194 #define fv0 fa0
195 
196 
197 /* save and restore macros ****************************************************/
198 
199 #define SAVE_ARGUMENT_REGISTERS(off) \
200  stw a0,(0+(off))*4(sp); \
201  stw a1,(1+(off))*4(sp); \
202  stw a2,(2+(off))*4(sp); \
203  stw a3,(3+(off))*4(sp); \
204  stw a4,(4+(off))*4(sp); \
205  stw a5,(5+(off))*4(sp); \
206  stw a6,(6+(off))*4(sp); \
207  stw a7,(7+(off))*4(sp); \
208  \
209  stfd fa0,(8+(off))*4(sp); \
210  stfd fa1,(10+(off))*4(sp); \
211  stfd fa2,(12+(off))*4(sp); \
212  stfd fa3,(14+(off))*4(sp); \
213  stfd fa4,(16+(off))*4(sp); \
214  stfd fa5,(18+(off))*4(sp); \
215  stfd fa6,(20+(off))*4(sp); \
216  stfd fa7,(22+(off))*4(sp);
217 
218 #define RESTORE_ARGUMENT_REGISTERS(off) \
219  lwz a0,(0+(off))*4(sp); \
220  lwz a1,(1+(off))*4(sp); \
221  lwz a2,(2+(off))*4(sp); \
222  lwz a3,(3+(off))*4(sp); \
223  lwz a4,(4+(off))*4(sp); \
224  lwz a5,(5+(off))*4(sp); \
225  lwz a6,(6+(off))*4(sp); \
226  lwz a7,(7+(off))*4(sp); \
227  \
228  lfd fa0,(8+(off))*4(sp); \
229  lfd fa1,(10+(off))*4(sp); \
230  lfd fa2,(12+(off))*4(sp); \
231  lfd fa3,(14+(off))*4(sp); \
232  lfd fa4,(16+(off))*4(sp); \
233  lfd fa5,(18+(off))*4(sp); \
234  lfd fa6,(20+(off))*4(sp); \
235  lfd fa7,(22+(off))*4(sp);
236 
237 
238 #define SAVE_TEMPORARY_REGISTERS(off) \
239  stw t0,(0+(off))*4(sp); \
240  stw t1,(1+(off))*4(sp); \
241  stw t2,(2+(off))*4(sp); \
242  stw t3,(3+(off))*4(sp); \
243  stw t4,(4+(off))*4(sp); \
244  stw t5,(5+(off))*4(sp); \
245  stw t6,(6+(off))*4(sp); \
246  \
247  stfd ft0,(8+(off))*4(sp); \
248  stfd ft1,(10+(off))*4(sp); \
249  stfd ft2,(12+(off))*4(sp); \
250  stfd ft3,(14+(off))*4(sp); \
251  stfd ft4,(16+(off))*4(sp); \
252  stfd ft5,(18+(off))*4(sp);
253 
254 #define RESTORE_TEMPORARY_REGISTERS(off) \
255  lwz t0,(0+(off))*4(sp); \
256  lwz t1,(1+(off))*4(sp); \
257  lwz t2,(2+(off))*4(sp); \
258  lwz t3,(3+(off))*4(sp); \
259  lwz t4,(4+(off))*4(sp); \
260  lwz t5,(5+(off))*4(sp); \
261  lwz t6,(6+(off))*4(sp); \
262  \
263  lfd ft0,(8+(off))*4(sp); \
264  lfd ft1,(10+(off))*4(sp); \
265  lfd ft2,(12+(off))*4(sp); \
266  lfd ft3,(14+(off))*4(sp); \
267  lfd ft4,(16+(off))*4(sp); \
268  lfd ft5,(18+(off))*4(sp);
269 
270 #endif // MD_ASM_HPP_
271 
272 
273 /*
274  * These are local overrides for various environment variables in Emacs.
275  * Please do not remove this and leave it at the end of the file, where
276  * Emacs will automagically detect them.
277  * ---------------------------------------------------------------------
278  * Local variables:
279  * mode: c++
280  * indent-tabs-mode: t
281  * c-basic-offset: 4
282  * tab-width: 4
283  * End:
284  */