CACAO
md-asm.hpp
Go to the documentation of this file.
1 /* src/vm/jit/powerpc64/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 #include <ppc-asm.h>
36 
37 /* register defines ***********************************************************/
38 
39 #define zero r0
40 
41 /* #define XXX r2 - system reserved register */
42 
43 #define a0 r3
44 #define a1 r4
45 #define a2 r5
46 #define a3 r6
47 #define a4 r7
48 #define a5 r8
49 #define a6 r9
50 #define a7 r10
51 
52 #define itmp1 r11
53 #define itmp2 r12
54 #define pv r14
55 
56 #define s0 r15
57 
58 #define itmp3 r16
59 #define t0 r17
60 #define t1 r18
61 #define t2 r19
62 #define t3 r20
63 #define t4 r21
64 #define t5 r22
65 #define t6 r23
66 
67 #define s1 r24
68 #define s2 r25
69 #define s3 r26
70 #define s4 r27
71 #define s5 r28
72 #define s6 r29
73 #define s7 r30
74 #define s8 r31
75 
76 #define v0 a0
77 #define v1 a1
78 
79 #define xptr itmp1
80 #define xpc itmp2
81 
82 #define mptr r12
83 #define mptrn 12
84 
85 
86 #define ftmp3 fr0
87 
88 #define fa0 f1
89 #define fa1 f2
90 #define fa2 f3
91 #define fa3 f4
92 #define fa4 f5
93 #define fa5 f6
94 #define fa6 f7
95 #define fa7 f8
96 #define fa8 f9
97 #define fa9 f10
98 #define fa10 f11
99 #define fa11 f12
100 #define fa12 f13
101 
102 #define ftmp1 f16
103 #define ftmp2 f17
104 
105 #define fs0 f14
106 #define fs1 f15
107 #define fs2 f18
108 #define fs3 f19
109 #define fs4 f20
110 #define fs5 f21
111 #define fs6 f22
112 #define fs7 f23
113 #define fs8 f24
114 #define fs9 f25
115 #define fs10 f26
116 #define fs11 f27
117 #define fs12 f28
118 #define fs13 f29
119 #define fs14 f30
120 #define fs15 f31
121 
122 #define fv0 fa0
123 
124 
125 /* save and restore macros ****************************************************/
126 
127 #define SAVE_ARGUMENT_REGISTERS(off) \
128  std a0,(0+(off))*8(sp); \
129  std a1,(1+(off))*8(sp); \
130  std a2,(2+(off))*8(sp); \
131  std a3,(3+(off))*8(sp); \
132  std a4,(4+(off))*8(sp); \
133  std a5,(5+(off))*8(sp); \
134  std a6,(6+(off))*8(sp); \
135  std a7,(7+(off))*8(sp); \
136  \
137  stfd fa0,(8+(off))*8(sp); \
138  stfd fa1,(9+(off))*8(sp); \
139  stfd fa2,(10+(off))*8(sp); \
140  stfd fa3,(11+(off))*8(sp); \
141  stfd fa4,(12+(off))*8(sp); \
142  stfd fa5,(13+(off))*8(sp); \
143  stfd fa6,(14+(off))*8(sp); \
144  stfd fa7,(15+(off))*8(sp); \
145  stfd fa8,(16+(off))*8(sp); \
146  stfd fa9,(17+(off))*8(sp); \
147  stfd fa10,(18+(off))*8(sp);\
148  stfd fa11,(19+(off))*8(sp);\
149  stfd fa12,(20+(off))*8(sp);\
150 
151 #define RESTORE_ARGUMENT_REGISTERS(off) \
152  ld a0,(0+(off))*8(sp); \
153  ld a1,(1+(off))*8(sp); \
154  ld a2,(2+(off))*8(sp); \
155  ld a3,(3+(off))*8(sp); \
156  ld a4,(4+(off))*8(sp); \
157  ld a5,(5+(off))*8(sp); \
158  ld a6,(6+(off))*8(sp); \
159  ld a7,(7+(off))*8(sp); \
160  \
161  lfd fa0,(8+(off))*8(sp); \
162  lfd fa1,(9+(off))*8(sp); \
163  lfd fa2,(10+(off))*8(sp); \
164  lfd fa3,(11+(off))*8(sp); \
165  lfd fa4,(12+(off))*8(sp); \
166  lfd fa5,(13+(off))*8(sp); \
167  lfd fa6,(14+(off))*8(sp); \
168  lfd fa7,(15+(off))*8(sp); \
169  lfd fa8,(16+(off))*8(sp); \
170  lfd fa9,(17+(off))*8(sp); \
171  lfd fa10,(18+(off))*8(sp); \
172  lfd fa11,(19+(off))*8(sp); \
173  lfd fa12,(20+(off))*8(sp);
174 
175 
176 #define SAVE_TEMPORARY_REGISTERS(off) \
177  std t0,(0+(off))*8(sp); \
178  std t1,(1+(off))*8(sp); \
179  std t2,(2+(off))*8(sp); \
180  std t3,(3+(off))*8(sp); \
181  std t4,(4+(off))*8(sp); \
182  std t5,(5+(off))*8(sp); \
183  std t6,(6+(off))*8(sp);
184 #if 0
185  \
186  \
187  stfd ft0,(7+(off))*8(sp); \
188  stfd ft1,(8+(off))*8(sp); \
189  stfd ft2,(9+(off))*8(sp); \
190  stfd ft3,(10+(off))*8(sp); \
191  stfd ft4,(11+(off))*8(sp); \
192  stfd ft5,(12+(off))*8(sp);
193 #endif
194 #define RESTORE_TEMPORARY_REGISTERS(off) \
195  ld t0,(0+(off))*8(sp); \
196  ld t1,(1+(off))*8(sp); \
197  ld t2,(2+(off))*8(sp); \
198  ld t3,(3+(off))*8(sp); \
199  ld t4,(4+(off))*8(sp); \
200  ld t5,(5+(off))*8(sp); \
201  ld t6,(6+(off))*8(sp);
202 #if 0
203  \
204  \
205  lfd ft0,(7+(off))*8(sp); \
206  lfd ft1,(8+(off))*8(sp); \
207  lfd ft2,(9+(off))*8(sp); \
208  lfd ft3,(10+(off))*8(sp); \
209  lfd ft4,(11+(off))*8(sp); \
210  lfd ft5,(12+(off))*8(sp);
211 #endif
212 #endif // MD_ASM_HPP_
213 
214 
215 /*
216  * These are local overrides for various environment variables in Emacs.
217  * Please do not remove this and leave it at the end of the file, where
218  * Emacs will automagically detect them.
219  * ---------------------------------------------------------------------
220  * Local variables:
221  * mode: c++
222  * indent-tabs-mode: t
223  * c-basic-offset: 4
224  * tab-width: 4
225  * End:
226  */
#define ft2
Definition: md-asm.hpp:105
#define ft0
Definition: md-asm.hpp:103
#define ft3
Definition: md-asm.hpp:106
#define ft1
Definition: md-asm.hpp:104
#define sp
Definition: md-asm.hpp:81
#define ft5
Definition: md-asm.hpp:108
#define ft4
Definition: md-asm.hpp:107