]>
Commit | Line | Data |
---|---|---|
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 | #ifndef _PPC_ASM_H_ | |
26 | #define _PPC_ASM_H_ | |
27 | ||
28 | #define __ASMNL__ @ | |
29 | #define STRINGD .ascii | |
30 | ||
31 | #ifdef ASSEMBLER | |
32 | ||
33 | ||
34 | #define br0 0 | |
35 | ||
36 | #define ARG0 r3 | |
37 | #define ARG1 r4 | |
38 | #define ARG2 r5 | |
39 | #define ARG3 r6 | |
40 | #define ARG4 r7 | |
41 | #define ARG5 r8 | |
42 | #define ARG6 r9 | |
43 | #define ARG7 r10 | |
44 | ||
45 | #define tmp0 r0 /* Temporary GPR remapping (603e specific) */ | |
46 | #define tmp1 r1 | |
47 | #define tmp2 r2 | |
48 | #define tmp3 r3 | |
49 | ||
50 | /* SPR registers */ | |
51 | ||
52 | #define mq 0 /* MQ register for 601 emulation */ | |
53 | #define rtcu 4 /* RTCU - upper word of RTC for 601 emulation */ | |
54 | #define rtcl 5 /* RTCL - lower word of RTC for 601 emulation */ | |
55 | #define dsisr 18 | |
56 | #define ppcDAR 19 | |
57 | #define ppcdar 19 | |
58 | #define dar 19 | |
59 | #define SDR1 25 | |
60 | #define sdr1 25 | |
61 | #define srr0 26 | |
62 | #define srr1 27 | |
63 | #define vrsave 256 /* Vector Register save */ | |
64 | #define sprg0 272 | |
65 | #define sprg1 273 | |
66 | #define sprg2 274 | |
67 | #define sprg3 275 | |
68 | #define pvr 287 | |
69 | ||
70 | #define IBAT0U 528 | |
71 | #define IBAT0L 529 | |
72 | #define IBAT1U 530 | |
73 | #define IBAT1L 531 | |
74 | #define IBAT2U 532 | |
75 | #define IBAT2L 533 | |
76 | #define IBAT3U 534 | |
77 | #define IBAT3L 535 | |
78 | #define ibat0u 528 | |
79 | #define ibat0l 529 | |
80 | #define ibat1u 530 | |
81 | #define ibat1l 531 | |
82 | #define ibat2u 532 | |
83 | #define ibat2l 533 | |
84 | #define ibat3u 534 | |
85 | #define ibat3l 535 | |
86 | ||
87 | #define DBAT0U 536 | |
88 | #define DBAT0L 537 | |
89 | #define DBAT1U 538 | |
90 | #define DBAT1L 539 | |
91 | #define DBAT2U 540 | |
92 | #define DBAT2L 541 | |
93 | #define DBAT3U 542 | |
94 | #define DBAT3L 543 | |
95 | #define dbat0u 536 | |
96 | #define dbat0l 537 | |
97 | #define dbat1u 538 | |
98 | #define dbat1l 539 | |
99 | #define dbat2u 540 | |
100 | #define dbat2l 541 | |
101 | #define dbat3u 542 | |
102 | #define dbat3l 543 | |
103 | ||
104 | #define ummcr2 928 /* Performance monitor control */ | |
105 | #define ubamr 935 /* Performance monitor mask */ | |
106 | #define ummcr0 936 /* Performance monitor control */ | |
107 | #define upmc1 937 /* Performance monitor counter */ | |
108 | #define upmc2 938 /* Performance monitor counter */ | |
109 | #define usia 939 /* User sampled instruction address */ | |
110 | #define ummcr1 940 /* Performance monitor control */ | |
111 | #define upmc3 941 /* Performance monitor counter */ | |
112 | #define upmc4 942 /* Performance monitor counter */ | |
113 | #define usda 943 /* User sampled data address */ | |
114 | #define mmcr2 944 /* Performance monitor control */ | |
115 | #define bamr 951 /* Performance monitor mask */ | |
116 | #define mmcr0 952 | |
117 | #define pmc1 953 | |
118 | #define pmc2 954 | |
119 | #define sia 955 | |
120 | #define mmcr1 956 | |
121 | #define pmc3 957 | |
122 | #define pmc4 958 | |
123 | #define sda 959 /* Sampled data address */ | |
124 | #define dmiss 976 /* ea that missed */ | |
125 | #define dcmp 977 /* compare value for the va that missed */ | |
126 | #define hash1 978 /* pointer to first hash pteg */ | |
127 | #define hash2 979 /* pointer to second hash pteg */ | |
128 | #define imiss 980 /* ea that missed */ | |
129 | #define tlbmiss 980 /* ea that missed */ | |
130 | #define icmp 981 /* compare value for the va that missed */ | |
131 | #define ptehi 981 /* compare value for the va that missed */ | |
132 | #define rpa 982 /* required physical address register */ | |
133 | #define ptelo 982 /* required physical address register */ | |
134 | #define l3pdet 984 /* l3pdet */ | |
135 | ||
136 | #define HID0 1008 /* Checkstop and misc enables */ | |
137 | #define hid0 1008 /* Checkstop and misc enables */ | |
138 | #define HID1 1009 /* Clock configuration */ | |
139 | #define hid1 1009 /* Clock configuration */ | |
140 | #define iabr 1010 /* Instruction address breakpoint register */ | |
141 | #define ictrl 1011 /* Instruction Cache Control */ | |
142 | #define dabr 1013 /* Data address breakpoint register */ | |
143 | #define msscr0 1014 /* Memory subsystem control */ | |
144 | #define msscr1 1015 /* Memory subsystem debug */ | |
145 | #define msssr0 1015 /* Memory Subsystem Status */ | |
146 | #define ldstcr 1016 /* Load/Store Status/Control */ | |
147 | #define l2cr2 1016 /* L2 Cache control 2 */ | |
148 | #define l2cr 1017 /* L2 Cache control */ | |
149 | #define l3cr 1018 /* L3 Cache control */ | |
150 | #define ictc 1019 /* I-cache throttling control */ | |
151 | #define thrm1 1020 /* Thermal management 1 */ | |
152 | #define thrm2 1021 /* Thermal management 2 */ | |
153 | #define thrm3 1022 /* Thermal management 3 */ | |
154 | #define pir 1023 /* Processor ID Register */ | |
155 | ||
156 | ; hid0 bits | |
157 | #define emcp 0 | |
158 | #define emcpm 0x80000000 | |
159 | #define dbp 1 | |
160 | #define dbpm 0x40000000 | |
161 | #define eba 2 | |
162 | #define ebam 0x20000000 | |
163 | #define ebd 3 | |
164 | #define ebdm 0x10000000 | |
165 | #define sbclk 4 | |
166 | #define sbclkm 0x08000000 | |
167 | #define eclk 6 | |
168 | #define eclkm 0x02000000 | |
169 | #define par 7 | |
170 | #define parm 0x01000000 | |
171 | #define sten 7 | |
172 | #define stenm 0x01000000 | |
173 | #define doze 8 | |
174 | #define dozem 0x00800000 | |
175 | #define nap 9 | |
176 | #define napm 0x00400000 | |
177 | #define sleep 10 | |
178 | #define sleepm 0x00200000 | |
179 | #define dpm 11 | |
180 | #define dpmm 0x00100000 | |
181 | #define riseg 12 | |
182 | #define risegm 0x00080000 | |
183 | #define eiec 13 | |
184 | #define eiecm 0x00040000 | |
185 | #define nhr 15 | |
186 | #define nhrm 0x00010000 | |
187 | #define ice 16 | |
188 | #define icem 0x00008000 | |
189 | #define dce 17 | |
190 | #define dcem 0x00004000 | |
191 | #define ilock 18 | |
192 | #define ilockm 0x00002000 | |
193 | #define dlock 19 | |
194 | #define dlockm 0x00001000 | |
195 | #define icfi 20 | |
196 | #define icfim 0x00000800 | |
197 | #define dcfi 21 | |
198 | #define dcfim 0x00000400 | |
199 | #define spd 22 | |
200 | #define spdm 0x00000200 | |
201 | #define sge 24 | |
202 | #define sgem 0x00000080 | |
203 | #define dcfa 25 | |
204 | #define dcfam 0x00000040 | |
205 | #define btic 26 | |
206 | #define bticm 0x00000020 | |
207 | #define lrstk 27 | |
208 | #define lrstkm 0x00000010 | |
209 | #define abe 28 | |
210 | #define abem 0x00000008 | |
211 | #define fold 28 | |
212 | #define foldm 0x00000008 | |
213 | #define bht 29 | |
214 | #define bhtm 0x00000004 | |
215 | #define nopdst 30 | |
216 | #define nopdstm 0x00000002 | |
217 | #define nopti 31 | |
218 | #define noptim 0x00000001 | |
219 | ||
220 | ; msscr0 bits | |
221 | #define shden 0 | |
222 | #define shdenm 0x80000000 | |
223 | #define shden3 1 | |
224 | #define shdenm3 0x40000000 | |
225 | #define l1intvs 2 | |
226 | #define l1intve 4 | |
227 | #define l1intvb 0x38000000 | |
228 | #define l2intvs 5 | |
229 | #define l2intve 7 | |
230 | #define l2intvb 0x07000000 | |
231 | #define dl1hwf 8 | |
232 | #define dl1hwfm 0x00800000 | |
233 | #define dbsiz 9 | |
234 | #define dbsizm 0x00400000 | |
235 | #define emode 10 | |
236 | #define emodem 0x00200000 | |
237 | #define abgd 11 | |
238 | #define abgdm 0x00100000 | |
239 | #define tfsts 24 | |
240 | #define tfste 25 | |
241 | #define tfstm 0x000000C0 | |
242 | ||
243 | ; msscr1 bits | |
244 | #define cqd 15 | |
245 | #define cqdm 0x00010000 | |
246 | #define csqs 1 | |
247 | #define csqe 2 | |
248 | #define csqm 0x60000000 | |
249 | ||
250 | ; msssr1 bits - 7450 | |
251 | #define vgL2PARA 0 | |
252 | #define vgL3PARA 1 | |
253 | #define vgL2COQEL 2 | |
254 | #define vgL3COQEL 3 | |
255 | #define vgL2CTR 4 | |
256 | #define vgL3CTR 5 | |
257 | #define vgL2COQR 6 | |
258 | #define vgL3COQR 7 | |
259 | #define vgLMQ 8 | |
260 | #define vgSMC 9 | |
261 | #define vgSNP 10 | |
262 | #define vgBIU 11 | |
263 | #define vgSMCE 12 | |
264 | #define vgL2TAG 13 | |
265 | #define vgL2DAT 14 | |
266 | #define vgL3TAG 15 | |
267 | #define vgL3DAT 16 | |
268 | #define vgAPE 17 | |
269 | #define vgDPE 18 | |
270 | #define vgTEA 19 | |
271 | ||
272 | ; srr1 bits | |
273 | #define icmck 1 | |
274 | #define icmckm 0x40000000 | |
275 | #define dcmck 2 | |
276 | #define dcmckm 0x20000000 | |
277 | #define l2mck 3 | |
278 | #define l2mckm 0x10000000 | |
279 | #define tlbmck 4 | |
280 | #define tlbmckm 0x08000000 | |
281 | #define brmck 5 | |
282 | #define brmckm 0x04000000 | |
283 | #define othmck 10 | |
284 | #define othmckm 0x00200000 | |
285 | #define l2dpmck 11 | |
286 | #define l2dpmckm 0x00100000 | |
287 | #define mcpmck 12 | |
288 | #define mcpmckm 0x00080000 | |
289 | #define teamck 13 | |
290 | #define teamckm 0x00040000 | |
291 | #define dpmck 14 | |
292 | #define dpmckm 0x00020000 | |
293 | #define apmck 15 | |
294 | #define apmckm 0x00010000 | |
295 | ||
296 | ; L2 cache control | |
297 | #define l2e 0 | |
298 | #define l2em 0x80000000 | |
299 | #define l2pe 1 | |
300 | #define l2pem 0x40000000 | |
301 | #define l2siz 2 | |
302 | #define l2sizf 3 | |
303 | #define l2sizm 0x30000000 | |
304 | #define l2clk 4 | |
305 | #define l2clkf 6 | |
306 | #define l2clkm 0x0E000000 | |
307 | #define l2ram 7 | |
308 | #define l2ramf 8 | |
309 | #define l2ramm 0x01800000 | |
310 | #define l2do 9 | |
311 | #define l2dom 0x00400000 | |
312 | #define l2i 10 | |
313 | #define l2im 0x00200000 | |
314 | #define l2ctl 11 | |
315 | #define l2ctlm 0x00100000 | |
316 | #define l2ionly 11 | |
317 | #define l2ionlym 0x00100000 | |
318 | #define l2wt 12 | |
319 | #define l2wtm 0x00080000 | |
320 | #define l2ts 13 | |
321 | #define l2tsm 0x00040000 | |
322 | #define l2oh 14 | |
323 | #define l2ohf 15 | |
324 | #define l2ohm 0x00030000 | |
325 | #define l2donly 15 | |
326 | #define l2donlym 0x00010000 | |
327 | #define l2sl 16 | |
328 | #define l2slm 0x00008000 | |
329 | #define l2df 17 | |
330 | #define l2dfm 0x00004000 | |
331 | #define l2byp 18 | |
332 | #define l2bypm 0x00002000 | |
333 | #define l2fa 19 | |
334 | #define l2fam 0x00001000 | |
335 | #define l2hwf 20 | |
336 | #define l2hwfm 0x00000800 | |
337 | #define l2io 21 | |
338 | #define l2iom 0x00000400 | |
339 | #define l2clkstp 22 | |
340 | #define l2clkstpm 0x00000200 | |
341 | #define l2dro 23 | |
342 | #define l2drom 0x00000100 | |
343 | #define l2ctr 24 | |
344 | #define l2ctrf 30 | |
345 | #define l2ctrm 0x000000FE | |
346 | #define l2ip 31 | |
347 | #define l2ipm 0x00000001 | |
348 | ||
349 | ; L3 cache control | |
350 | #define l3e 0 | |
351 | #define l3em 0x80000000 | |
352 | #define l3pe 1 | |
353 | #define l3pem 0x40000000 | |
354 | #define l3siz 3 | |
355 | #define l3sizm 0x10000000 | |
356 | #define l3clken 4 | |
357 | #define l3clkenm 0x08000000 | |
358 | #define l3dx 5 | |
359 | #define l3dxm 0x04000000 | |
360 | #define l3clk 6 | |
361 | #define l3clkf 8 | |
362 | #define l3clkm 0x03800000 | |
363 | #define l3io 9 | |
364 | #define l3iom 0x00400000 | |
365 | #define l3spo 13 | |
366 | #define l3spom 0x00040000 | |
367 | #define l3cksp 14 | |
368 | #define l3ckspf 15 | |
369 | #define l3ckspm 0x00030000 | |
370 | #define l3psp 16 | |
371 | #define l3pspf 18 | |
372 | #define l3pspm 0x0000E000 | |
373 | #define l3rep 19 | |
374 | #define l3repm 0x00001000 | |
375 | #define l3hwf 20 | |
376 | #define l3hwfm 0x00000800 | |
377 | #define l3i 21 | |
378 | #define l3im 0x00000400 | |
379 | #define l3rt 22 | |
380 | #define l3rtf 23 | |
381 | #define l3rtm 0x00000300 | |
382 | #define l3dro 23 | |
383 | #define l3drom 0x00000100 | |
384 | #define l3cya 24 | |
385 | #define l3cyam 0x00000080 | |
386 | #define l3donly 25 | |
387 | #define l3donlym 0x00000040 | |
388 | #define l3dmem 29 | |
389 | #define l3dmemm 0x00000004 | |
390 | #define l3dmsiz 31 | |
391 | #define l3dmsizm 0x00000001 | |
392 | ||
393 | #define thrmtin 0 | |
394 | #define thrmtinm 0x80000000 | |
395 | #define thrmtiv 1 | |
396 | #define thrmtivm 0x40000000 | |
397 | #define thrmthrs 2 | |
398 | #define thrmthre 8 | |
399 | #define thrmthrm 0x3F800000 | |
400 | #define thrmtid 29 | |
401 | #define thrmtidm 0x00000004 | |
402 | #define thrmtie 30 | |
403 | #define thrmtiem 0x00000002 | |
404 | #define thrmv 31 | |
405 | #define thrmvm 0x00000001 | |
406 | ||
407 | #define thrmsitvs 15 | |
408 | #define thrmsitve 30 | |
409 | #define thrmsitvm 0x0001FFFE | |
410 | #define thrme 31 | |
411 | #define thrmem 0x00000001 | |
412 | ||
413 | #define ictcfib 23 | |
414 | #define ictcfie 30 | |
415 | #define ictcfim 0x000001FE | |
416 | #define ictce 31 | |
417 | #define ictcem 0x00000001 | |
418 | ||
419 | #define cr0_lt 0 | |
420 | #define cr0_gt 1 | |
421 | #define cr0_eq 2 | |
422 | #define cr0_so 3 | |
423 | #define cr0_un 3 | |
424 | #define cr1_lt 4 | |
425 | #define cr1_gt 5 | |
426 | #define cr1_eq 6 | |
427 | #define cr1_so 7 | |
428 | #define cr1_un 7 | |
429 | #define cr2_lt 8 | |
430 | #define cr2_gt 9 | |
431 | #define cr2_eq 10 | |
432 | #define cr2_so 11 | |
433 | #define cr2_un 11 | |
434 | #define cr3_lt 12 | |
435 | #define cr3_gt 13 | |
436 | #define cr3_eq 14 | |
437 | #define cr3_so 15 | |
438 | #define cr3_un 15 | |
439 | #define cr4_lt 16 | |
440 | #define cr4_gt 17 | |
441 | #define cr4_eq 18 | |
442 | #define cr4_so 19 | |
443 | #define cr4_un 19 | |
444 | #define cr5_lt 20 | |
445 | #define cr5_gt 21 | |
446 | #define cr5_eq 22 | |
447 | #define cr5_so 23 | |
448 | #define cr5_un 23 | |
449 | #define cr6_lt 24 | |
450 | #define cr6_gt 25 | |
451 | #define cr6_eq 26 | |
452 | #define cr6_so 27 | |
453 | #define cr6_un 27 | |
454 | #define cr7_lt 28 | |
455 | #define cr7_gt 29 | |
456 | #define cr7_eq 30 | |
457 | #define cr7_so 31 | |
458 | #define cr7_un 31 | |
459 | ||
460 | /* | |
461 | * Macros to access high and low word values of an address | |
462 | */ | |
463 | ||
464 | #define HIGH_CADDR(x) ha16(x) | |
465 | #define HIGH_ADDR(x) hi16(x) | |
466 | #define LOW_ADDR(x) lo16(x) | |
467 | ||
468 | #endif /* ASSEMBLER */ | |
469 | ||
470 | /* Tags are placed before Immediately Following Code (IFC) for the debugger | |
471 | * to be able to deduce where to find various registers when backtracing | |
472 | * | |
473 | * We only define the values as we use them, see SVR4 ABI PowerPc Supplement | |
474 | * for more details (defined in ELF spec). | |
475 | */ | |
476 | ||
477 | #define TAG_NO_FRAME_USED 0x00000000 | |
478 | ||
479 | /* (should use genassym to get these offsets) */ | |
480 | ||
481 | #define FM_BACKPTR 0 | |
482 | #define FM_CR_SAVE 4 | |
483 | #define FM_LR_SAVE 8 /* MacOSX is NOT following the ABI at the moment.. */ | |
484 | #define FM_SIZE 64 /* minimum frame contents, backptr and LR save. Make sure it is quadaligned */ | |
485 | #define FM_ARG0 56 | |
486 | #define FM_ALIGN(l) ((l+15)&-16) | |
487 | #define PK_SYSCALL_BEGIN 0x7000 | |
488 | ||
489 | ||
490 | /* redzone is the area under the stack pointer which must be preserved | |
491 | * when taking a trap, interrupt etc. | |
492 | */ | |
493 | #define FM_REDZONE 224 /* is ((32-14+1)*4) */ | |
494 | ||
495 | #define COPYIN_ARG0_OFFSET FM_ARG0 | |
496 | ||
497 | #ifdef MACH_KERNEL | |
498 | #include <mach_kdb.h> | |
499 | #else /* MACH_KERNEL */ | |
500 | #define MACH_KDB 0 | |
501 | #endif /* MACH_KERNEL */ | |
502 | ||
503 | #define BREAKPOINT_TRAP tw 4,r4,r4 | |
504 | ||
505 | /* There is another definition of ALIGN for .c sources */ | |
506 | #ifndef __LANGUAGE_ASSEMBLY | |
507 | #define ALIGN 4 | |
508 | #endif /* __LANGUAGE_ASSEMBLY */ | |
509 | ||
510 | #ifndef FALIGN | |
511 | #define FALIGN 4 /* Align functions on words for now. Cachelines is better */ | |
512 | #endif | |
513 | ||
514 | #define LB(x,n) n | |
515 | #if __STDC__ | |
516 | #define LCL(x) L ## x | |
517 | #define EXT(x) _ ## x | |
518 | #define LEXT(x) _ ## x ## : | |
519 | #define LBc(x,n) n ## : | |
520 | #define LBb(x,n) n ## b | |
521 | #define LBf(x,n) n ## f | |
522 | #else /* __STDC__ */ | |
523 | #define LCL(x) L/**/x | |
524 | #define EXT(x) _/**/x | |
525 | #define LEXT(x) _/**/x/**/: | |
526 | #define LBc(x,n) n/**/: | |
527 | #define LBb(x,n) n/**/b | |
528 | #define LBf(x,n) n/**/f | |
529 | #endif /* __STDC__ */ | |
530 | ||
531 | #define String .asciz | |
532 | #define Value .word | |
533 | #define Times(a,b) (a*b) | |
534 | #define Divide(a,b) (a/b) | |
535 | ||
536 | #define data16 .byte 0x66 | |
537 | #define addr16 .byte 0x67 | |
538 | ||
539 | #if !GPROF | |
540 | #define MCOUNT | |
541 | #endif /* GPROF */ | |
542 | ||
543 | #define ELF_FUNC(x) | |
544 | #define ELF_DATA(x) | |
545 | #define ELF_SIZE(x,s) | |
546 | ||
547 | #define Entry(x,tag) .text@.align FALIGN@ .globl EXT(x)@ LEXT(x) | |
548 | #define ENTRY(x,tag) Entry(x,tag)@MCOUNT | |
549 | #define ENTRY2(x,y,tag) .text@ .align FALIGN@ .globl EXT(x)@ .globl EXT(y)@ \ | |
550 | LEXT(x)@ LEXT(y) @\ | |
551 | MCOUNT | |
552 | #if __STDC__ | |
553 | #define ASENTRY(x) .globl x @ .align FALIGN; x ## @ MCOUNT | |
554 | #else | |
555 | #define ASENTRY(x) .globl x @ .align FALIGN; x @ MCOUNT | |
556 | #endif /* __STDC__ */ | |
557 | #define DATA(x) .globl EXT(x) @ .align ALIGN @ LEXT(x) | |
558 | ||
559 | ||
560 | #define End(x) ELF_SIZE(x,.-x) | |
561 | #define END(x) End(EXT(x)) | |
562 | #define ENDDATA(x) END(x) | |
563 | #define Enddata(x) End(x) | |
564 | ||
565 | /* These defines are here for .c files that wish to reference global symbols | |
566 | * within __asm__ statements. | |
567 | */ | |
568 | #define CC_SYM_PREFIX "_" | |
569 | ||
570 | #endif /* _PPC_ASM_H_ */ |