Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Modules/i386/include/architecture/ppc/reg_help.h

1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23/* Copyright (c) 1996 NeXT Software, Inc. All rights reserved.
24 *
25 *File:architecture/ppc/reg_help.h
26 *Author:Doug Mitchell, NeXT Computer, Inc.
27 *
28 *m98k-specific macros and inlines for defining machine registers.
29 *
30 * HISTORY
31 * 05-Nov-92 Doug Mitchell at NeXT
32 *Created.
33 *
34 * 29-Dec-96 Umesh Vaishampayan (umeshv@NeXT.com)
35 *Ported from m98k. Removed dependency on nrw directory.
36 *Merged code from architecture/nrw/reg_help.h.
37 *Moved Register Usage #defines from asm_help.h in here.
38 */
39
40#ifndef _ARCH_PPC_REG_HELP_H_
41#define _ARCH_PPC_REG_HELP_H_
42
43#if defined(__ASSEMBLER__)
44/*
45 * GRF Register Usage Aliases
46 */
47#defineztr0// architecturally 0 for mem refs only!
48// real reg other inst, caller-saved
49#definespr1// stack pointer, callee-saved
50#definetocr2// tbl of contents, callee-saved
51#definea0r3// arg 0, return value 0, caller saved
52#definea1r4// arg 1, return value 1, caller saved
53#definea2r5// ....
54#definea3r6
55#definea4r7
56#definea5r8
57#definea6r9
58#definea7r10// arg 7, return value 7, caller saved
59#defineepr11// environment ptr, caller saved
60#defineatr12// assembler temp, caller saved
61#defines17r13// callee-saved 17
62#defines16r14
63#defines15r15
64#defines14r16
65#defines13r17
66#defines12r18
67#defines11r19
68#defines10r20
69#defines9r21
70#defines8r22
71#defines7r23
72#defines6r24
73#defines5r25
74#defines4r26
75#defines3r27
76#defines2r28
77#defines1r29// ....
78#defines0r30// callee-saved 0
79#definefpr31// frame-pointer, callee-saved
80
81/*
82 * Conversion of GRF aliases to register numbers
83 */
84#defineGRF_ZT0// architecturally 0 for mem refs only!
85// real reg other inst, caller-saved
86#defineGRF_SP1// stack pointer, callee-saved
87#defineGRF_TOC2// tbl of contents, callee-saved
88#defineGRF_A03// arg 0, return value 0, caller saved
89#defineGRF_A14// arg 1, return value 1, caller saved
90#defineGRF_A25// ....
91#defineGRF_A36
92#defineGRF_A47
93#defineGRF_A58
94#defineGRF_A69
95#defineGRF_A710// arg 7, return value 7, caller saved
96#defineGRF_EP11// environment ptr, caller saved
97#defineGRF_AT12// assembler temp, caller saved
98#defineGRF_S1713// callee-saved 17
99#defineGRF_S1614
100#defineGRF_S1515
101#defineGRF_S1416
102#defineGRF_S1317
103#defineGRF_S1218
104#defineGRF_S1119
105#defineGRF_S1020
106#defineGRF_S921
107#defineGRF_S822
108#defineGRF_S723
109#defineGRF_S624
110#defineGRF_S525
111#defineGRF_S426
112#defineGRF_S327
113#defineGRF_S228
114#defineGRF_S129// ....
115#defineGRF_S030// callee-saved 0
116#defineGRF_FP31// frame pointer, callee-saved
117
118/*
119 * FPF Register names
120 */
121#defineft0f0// scratch reg, caller-saved
122#definefa0f1// fp arg 0, return 0, caller-saved
123#definefa1f2// fp arg 1, caller-saved
124#definefa2f3// fp arg 2, caller-saved
125#definefa3f4
126#definefa4f5
127#definefa5f6
128#definefa6f7
129#definefa7f8
130#definefa8f9
131#definefa9f10
132#definefa10f11
133#definefa11f12
134#definefa12f13// fp arg 12, caller-saved
135#definefs17f14// callee-saved 17
136#definefs16f15
137#definefs15f16
138#definefs14f17
139#definefs13f18
140#definefs12f19
141#definefs11f20
142#definefs10f21
143#definefs9f22
144#definefs8f23
145#definefs7f24
146#definefs6f25
147#definefs5f26
148#definefs4f27
149#definefs3f28
150#definefs2f29
151#definefs1f30
152#definefs0f31// callee-saved 0
153
154/*
155 * Conversion of FPF aliases to register numbers
156 */
157#defineFPF_FT00// scratch reg, caller-saved
158#defineFPF_FA01// fp arg 0, return 0, caller-saved
159#defineFPF_FA12// fp arg 1, caller-saved
160#defineFPF_FA23// fp arg 2, caller-saved
161#defineFPF_FA34
162#defineFPF_FA45
163#defineFPF_FA56
164#defineFPF_FA67
165#defineFPF_FA78
166#defineFPF_FA89
167#defineFPF_FA910
168#defineFPF_FA1011
169#defineFPF_FA1112
170#defineFPF_FA1213// fp arg 12, caller-saved
171#defineFPF_FS1714// callee-saved 17
172#defineFPF_FS1615
173#defineFPF_FS1516
174#defineFPF_FS1417
175#defineFPF_FS1318
176#defineFPF_FS1219
177#defineFPF_FS1120
178#defineFPF_FS1021
179#defineFPF_FS922
180#defineFPF_FS823
181#defineFPF_FS724
182#defineFPF_FS625
183#defineFPF_FS526
184#defineFPF_FS427
185#defineFPF_FS328
186#defineFPF_FS229
187#defineFPF_FS130
188#defineFPF_FS031// callee-saved 0
189
190#endif/* __ASSEMBLER__ */
191
192
193/* Bitfield definition aid */
194#defineBITS_WIDTH(msb, lsb)((msb)-(lsb)+1)
195#defineBIT_WIDTH(pos)(1)/* mostly to record the position */
196
197/* Mask creation */
198#defineMKMASK(width, offset)(((unsigned)-1)>>(32-(width))<<(offset))
199#defineBITSMASK(msb, lsb)MKMASK(BITS_WIDTH(msb, lsb), lsb & 0x1f)
200#defineBITMASK(pos)MKMASK(BIT_WIDTH(pos), pos & 0x1f)
201
202/* Register addresses */
203#if__ASSEMBLER__
204# defineREG_ADDR(type, addr)(addr)
205#else/* ! __ASSEMBLER__ */
206# defineREG_ADDR(type, addr)(*(volatile type *)(addr))
207#endif/* __ASSEMBLER__ */
208
209/* Cast a register to be an unsigned */
210/* CAUTION :non naturally aligned foo can result into alignment traps
211 *use at own risk.
212 */
213#defineCONTENTS(foo)(*(unsigned *) &(foo))
214
215/* STRINGIFY -- perform all possible substitutions, then stringify */
216#define__STR(x)#x/* just a helper macro */
217#defineSTRINGIFY(x)__STR(x)
218
219/*
220 * Stack pointer must always be a multiple of 16
221 */
222#defineSTACK_INCR16
223#defineROUND_FRAME(x)((((unsigned)(x)) + STACK_INCR - 1) & ~(STACK_INCR-1))
224
225#endif /* _ARCH_PPC_REG_HELP_H_ */
226

Archive Download this file

Revision: 1621