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