|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * @OSF_COPYRIGHT@
24: */
25:
26: #ifndef _PPC_ASM_H_
27: #define _PPC_ASM_H_
28:
29: #define __ASMNL__ @
30: #define STRINGD .ascii
31:
32: #ifdef ASSEMBLER
33:
34:
35: #define br0 0
36:
37: #define ARG0 r3
38: #define ARG1 r4
39: #define ARG2 r5
40: #define ARG3 r6
41: #define ARG4 r7
42: #define ARG5 r8
43: #define ARG6 r9
44: #define ARG7 r10
45:
46: #define tmp0 r0 /* Temporary GPR remapping (603e specific) */
47: #define tmp1 r1
48: #define tmp2 r2
49: #define tmp3 r3
50:
51: /* SPR registers */
52:
53: #define mq 0 /* MQ register for 601 emulation */
54: #define rtcu 4 /* RTCU - upper word of RTC for 601 emulation */
55: #define rtcl 5 /* RTCL - lower word of RTC for 601 emulation */
56: #define dsisr 18
57: #define ppcDAR 19
58: #define ppcdar 19
59: #define dar 19
60: #define SDR1 25
61: #define sdr1 25
62: #define srr0 26
63: #define srr1 27
64: #define vrsave 256 /* Vector Register save */
65: #define sprg0 272
66: #define sprg1 273
67: #define sprg2 274
68: #define sprg3 275
69: #define pvr 287
70:
71: #define IBAT0U 528
72: #define IBAT0L 529
73: #define IBAT1U 530
74: #define IBAT1L 531
75: #define IBAT2U 532
76: #define IBAT2L 533
77: #define IBAT3U 534
78: #define IBAT3L 535
79: #define ibat0u 528
80: #define ibat0l 529
81: #define ibat1u 530
82: #define ibat1l 531
83: #define ibat2u 532
84: #define ibat2l 533
85: #define ibat3u 534
86: #define ibat3l 535
87:
88: #define DBAT0U 536
89: #define DBAT0L 537
90: #define DBAT1U 538
91: #define DBAT1L 539
92: #define DBAT2U 540
93: #define DBAT2L 541
94: #define DBAT3U 542
95: #define DBAT3L 543
96: #define dbat0u 536
97: #define dbat0l 537
98: #define dbat1u 538
99: #define dbat1l 539
100: #define dbat2u 540
101: #define dbat2l 541
102: #define dbat3u 542
103: #define dbat3l 543
104:
105: #define ummcr2 928 /* Performance monitor control */
106: #define ubamr 935 /* Performance monitor mask */
107: #define ummcr0 936 /* Performance monitor control */
108: #define upmc1 937 /* Performance monitor counter */
109: #define upmc2 938 /* Performance monitor counter */
110: #define usia 939 /* User sampled instruction address */
111: #define ummcr1 940 /* Performance monitor control */
112: #define upmc3 941 /* Performance monitor counter */
113: #define upmc4 942 /* Performance monitor counter */
114: #define usda 943 /* User sampled data address */
115: #define mmcr2 944 /* Performance monitor control */
116: #define bamr 951 /* Performance monitor mask */
117: #define mmcr0 952
118: #define pmc1 953
119: #define pmc2 954
120: #define sia 955
121: #define mmcr1 956
122: #define pmc3 957
123: #define pmc4 958
124: #define sda 959 /* Sampled data address */
125: #define dmiss 976 /* ea that missed */
126: #define dcmp 977 /* compare value for the va that missed */
127: #define hash1 978 /* pointer to first hash pteg */
128: #define hash2 979 /* pointer to second hash pteg */
129: #define imiss 980 /* ea that missed */
130: #define icmp 981 /* compare value for the va that missed */
131: #define rpa 982 /* required physical address register */
132:
133: #define HID0 1008 /* Checkstop and misc enables */
134: #define hid0 1008 /* Checkstop and misc enables */
135: #define HID1 1009 /* Clock configuration */
136: #define hid1 1009 /* Clock configuration */
137: #define iabr 1010 /* Instruction address breakpoint register */
138: #define dabr 1013 /* Data address breakpoint register */
139: #define msscr0 1014 /* Memory subsystem control */
140: #define msscr1 1015 /* Memory subsystem debug */
141: #define l2cr 1017 /* L2 Cache control */
142: #define ictc 1019 /* I-cache throttling control */
143: #define thrm1 1020 /* Thermal management 1 */
144: #define thrm2 1021 /* Thermal management 2 */
145: #define thrm3 1022 /* Thermal management 3 */
146: #define pir 1023 /* Processor ID Register */
147:
148: ; hid0 bits
149: #define emcp 0
150: #define emcpm 0x80000000
151: #define dbp 1
152: #define dbpm 0x40000000
153: #define eba 2
154: #define ebam 0x20000000
155: #define ebd 3
156: #define ebdm 0x10000000
157: #define sbclk 4
158: #define sbclkm 0x08000000
159: #define eclk 6
160: #define eclkm 0x02000000
161: #define par 7
162: #define parm 0x01000000
163: #define doze 8
164: #define dozem 0x00800000
165: #define nap 9
166: #define napm 0x00400000
167: #define sleep 10
168: #define sleepm 0x00200000
169: #define dpm 11
170: #define dpmm 0x00100000
171: #define riseg 12
172: #define risegm 0x00080000
173: #define eiec 13
174: #define eiecm 0x00040000
175: #define nhr 15
176: #define nhrm 0x00010000
177: #define ice 16
178: #define icem 0x00008000
179: #define dce 17
180: #define dcem 0x00004000
181: #define ilock 18
182: #define ilockm 0x00002000
183: #define dlock 19
184: #define dlockm 0x00001000
185: #define icfi 20
186: #define icfim 0x00000800
187: #define dcfi 21
188: #define dcfim 0x00000400
189: #define spd 22
190: #define spdm 0x00000200
191: #define sge 24
192: #define sgem 0x00000080
193: #define dcfa 25
194: #define dcfam 0x00000040
195: #define btic 26
196: #define bticm 0x00000020
197: #define abe 28
198: #define abem 0x00000008
199: #define bht 29
200: #define bhtm 0x00000004
201: #define nopdst 30
202: #define nopdstm 0x00000002
203: #define nopti 31
204: #define noptim 0x00000001
205:
206: ; msscr0 bits
207: #define shden 0
208: #define shdenm 0x80000000
209: #define shden3 1
210: #define shdenm3 0x40000000
211: #define l1intvs 2
212: #define l1intve 4
213: #define l1intvb 0x38000000
214: #define l2intvs 5
215: #define l2intve 7
216: #define l2intvb 0x07000000
217: #define dl1hwf 8
218: #define dl1hwfm 0x00800000
219: #define dbsiz 9
220: #define dbsizm 0x00400000
221: #define emode 10
222: #define emodem 0x00200000
223: #define abgd 11
224: #define abgdm 0x00100000
225: #define tfsts 24
226: #define tfste 25
227: #define tfstm 0x000000C0
228:
229: ; msscr1 bits
230: #define cqd 15
231: #define cqdm 0x00010000
232: #define csqs 1
233: #define csqe 2
234: #define csqm 0x60000000
235:
236: ; srr1 bits
237: #define icmck 1
238: #define icmckm 0x40000000
239: #define dcmck 2
240: #define dcmckm 0x20000000
241: #define l2mck 3
242: #define l2mckm 0x10000000
243: #define tlbmck 4
244: #define tlbmckm 0x08000000
245: #define brmck 5
246: #define brmckm 0x04000000
247: #define othmck 10
248: #define othmckm 0x00200000
249: #define l2dpmck 11
250: #define l2dpmckm 0x00100000
251: #define mcpmck 12
252: #define mcpmckm 0x00080000
253: #define teamck 13
254: #define teamckm 0x00040000
255: #define dpmck 14
256: #define dpmckm 0x00020000
257: #define apmck 15
258: #define apmckm 0x00010000
259:
260: #define cr0_lt 0
261: #define cr0_gt 1
262: #define cr0_eq 2
263: #define cr0_so 3
264: #define cr0_un 3
265: #define cr1_lt 4
266: #define cr1_gt 5
267: #define cr1_eq 6
268: #define cr1_so 7
269: #define cr1_un 7
270: #define cr2_lt 8
271: #define cr2_gt 9
272: #define cr2_eq 10
273: #define cr2_so 11
274: #define cr2_un 11
275: #define cr3_lt 12
276: #define cr3_gt 13
277: #define cr3_eq 14
278: #define cr3_so 15
279: #define cr3_un 15
280: #define cr4_lt 16
281: #define cr4_gt 17
282: #define cr4_eq 18
283: #define cr4_so 19
284: #define cr4_un 19
285: #define cr5_lt 20
286: #define cr5_gt 21
287: #define cr5_eq 22
288: #define cr5_so 23
289: #define cr5_un 23
290: #define cr6_lt 24
291: #define cr6_gt 25
292: #define cr6_eq 26
293: #define cr6_so 27
294: #define cr6_un 27
295: #define cr7_lt 28
296: #define cr7_gt 29
297: #define cr7_eq 30
298: #define cr7_so 31
299: #define cr7_un 31
300:
301: /*
302: * Macros to access high and low word values of an address
303: */
304:
305: #define HIGH_CADDR(x) ha16(x)
306: #define HIGH_ADDR(x) hi16(x)
307: #define LOW_ADDR(x) lo16(x)
308:
309: #endif /* ASSEMBLER */
310:
311: /* Tags are placed before Immediately Following Code (IFC) for the debugger
312: * to be able to deduce where to find various registers when backtracing
313: *
314: * We only define the values as we use them, see SVR4 ABI PowerPc Supplement
315: * for more details (defined in ELF spec).
316: */
317:
318: #define TAG_NO_FRAME_USED 0x00000000
319:
320: /* (should use genassym to get these offsets) */
321:
322: #define FM_BACKPTR 0
323: #define FM_CR_SAVE 4
324: #define FM_LR_SAVE 8 /* MacOSX is NOT following the ABI at the moment.. */
325: #define FM_SIZE 64 /* minimum frame contents, backptr and LR save. Make sure it is quadaligned */
326: #define FM_ARG0 56
327: #define FM_ALIGN(l) ((l+15)&-16)
328:
329: #define FM_ELF_ARG0 8
330: #define FM_MACHO_ARG0 56
331: #define MACHO_SYSCALL_BEGIN 0x2000
332: #define PK_SYSCALL_BEGIN 0x7000
333:
334:
335: /* redzone is the area under the stack pointer which must be preserved
336: * when taking a trap, interrupt etc.
337: */
338: #define FM_REDZONE 224 /* is ((32-14+1)*4) */
339:
340: #define COPYIN_ARG0_OFFSET FM_ARG0
341:
342: #ifdef MACH_KERNEL
343: #include <mach_kdb.h>
344: #else /* MACH_KERNEL */
345: #define MACH_KDB 0
346: #endif /* MACH_KERNEL */
347:
348: #define BREAKPOINT_TRAP tw 4,r4,r4
349:
350: /* There is another definition of ALIGN for .c sources */
351: #ifndef __LANGUAGE_ASSEMBLY
352: #define ALIGN 4
353: #endif /* __LANGUAGE_ASSEMBLY */
354:
355: #ifndef FALIGN
356: #define FALIGN 4 /* Align functions on words for now. Cachelines is better */
357: #endif
358:
359: #define LB(x,n) n
360: #if __STDC__
361: #define LCL(x) L ## x
362: #define EXT(x) _ ## x
363: #define LEXT(x) _ ## x ## :
364: #define LBc(x,n) n ## :
365: #define LBb(x,n) n ## b
366: #define LBf(x,n) n ## f
367: #else /* __STDC__ */
368: #define LCL(x) L/**/x
369: #define EXT(x) _/**/x
370: #define LEXT(x) _/**/x/**/:
371: #define LBc(x,n) n/**/:
372: #define LBb(x,n) n/**/b
373: #define LBf(x,n) n/**/f
374: #endif /* __STDC__ */
375:
376: #define String .asciz
377: #define Value .word
378: #define Times(a,b) (a*b)
379: #define Divide(a,b) (a/b)
380:
381: #define data16 .byte 0x66
382: #define addr16 .byte 0x67
383:
384: #if !GPROF
385: #define MCOUNT
386: #endif /* GPROF */
387:
388: #define ELF_FUNC(x)
389: #define ELF_DATA(x)
390: #define ELF_SIZE(x,s)
391:
392: #define Entry(x,tag) [email protected] FALIGN@ .globl EXT(x)@ LEXT(x)
393: #define ENTRY(x,tag) Entry(x,tag)@MCOUNT
394: #define ENTRY2(x,y,tag) .text@ .align FALIGN@ .globl EXT(x)@ .globl EXT(y)@ \
395: LEXT(x)@ LEXT(y) @\
396: MCOUNT
397: #if __STDC__
398: #define ASENTRY(x) .globl x @ .align FALIGN; x ## @ MCOUNT
399: #else
400: #define ASENTRY(x) .globl x @ .align FALIGN; x @ MCOUNT
401: #endif /* __STDC__ */
402: #define DATA(x) .globl EXT(x) @ .align ALIGN @ LEXT(x)
403:
404:
405: #define End(x) ELF_SIZE(x,.-x)
406: #define END(x) End(EXT(x))
407: #define ENDDATA(x) END(x)
408: #define Enddata(x) End(x)
409:
410: /* These defines are here for .c files that wish to reference global symbols
411: * within __asm__ statements.
412: */
413: #define CC_SYM_PREFIX "_"
414:
415: #endif /* _PPC_ASM_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.