--- /dev/null
+/*
+ * @OSF_COPYRIGHT@
+ */
+
+#ifndef _PPC_ASM_H_
+#define _PPC_ASM_H_
+
+#ifdef __ELF__
+#define __NO_UNDERSCORES__ 1
+#define __ASMNL__ ;
+#else
+#define __ASMNL__ @
+#endif
+
+#ifdef ASSEMBLER
+
+#ifdef __ELF__
+#define r0 0
+#define r1 1
+#define r2 2
+#define r3 3
+#define r4 4
+#define r5 5
+#define r6 6
+#define r7 7
+#define r8 8
+#define r9 9
+#define r10 10
+#define r11 11
+#define r12 12
+#define r13 13
+#define r14 14
+#define r15 15
+#define r16 16
+#define r17 17
+#define r18 18
+#define r19 19
+#define r20 20
+#define r21 21
+#define r22 22
+#define r23 23
+#define r24 24
+#define r25 25
+#define r26 26
+#define r27 27
+#define r28 28
+#define r29 29
+#define r30 30
+#define r31 31
+
+#define f0 0
+#define f1 1
+#define f2 2
+#define f3 3
+#define f4 4
+#define f5 5
+#define f6 6
+#define f7 7
+#define f8 8
+#define f9 9
+#define f10 10
+#define f11 11
+#define f12 12
+#define f13 13
+#define f14 14
+#define f15 15
+#define f16 16
+#define f17 17
+#define f18 18
+#define f19 19
+#define f20 20
+#define f21 21
+#define f22 22
+#define f23 23
+#define f24 24
+#define f25 25
+#define f26 26
+#define f27 27
+#define f28 28
+#define f29 29
+#define f30 30
+#define f31 31
+
+#define sr0 0
+#define sr1 1
+#define sr2 2
+#define sr3 3
+#define sr4 4
+#define sr5 5
+#define sr6 6
+#define sr7 7
+#define sr8 8
+#define sr9 9
+#define sr10 10
+#define sr11 11
+#define sr12 12
+#define sr13 13
+#define sr14 14
+#define sr15 15
+#define sr16 16
+#define sr17 17
+#define sr18 18
+#define sr19 19
+#define sr20 20
+#define sr21 21
+#define sr22 22
+#define sr23 23
+#define sr24 24
+#define sr25 25
+#define sr26 26
+#define sr27 27
+#define sr28 28
+#define sr29 29
+#define sr30 30
+#define sr31 31
+#endif
+
+#define ARG0 r3
+#define ARG1 r4
+#define ARG2 r5
+#define ARG3 r6
+#define ARG4 r7
+#define ARG5 r8
+#define ARG6 r9
+#define ARG7 r10
+
+#define tmp0 r0 /* Temporary GPR remapping (603e specific) */
+#define tmp1 r1
+#define tmp2 r2
+#define tmp3 r3
+
+/* SPR registers */
+
+#define dmiss 976 /* ea that missed */
+#define dcmp 977 /* compare value for the va that missed */
+#define hash1 978 /* pointer to first hash pteg */
+#define hash2 979 /* pointer to second hash pteg */
+#define imiss 980 /* ea that missed */
+#define icmp 981 /* compare value for the va that missed */
+#define rpa 982 /* required physical address register */
+
+#define iabr 1010 /* instruction address breakpoint register */
+#define pir 1023 /* Processor ID Register */
+
+/* MQ register on the 601 */
+#define mq 0 /* spr number for mq register on 601 */
+
+#define IBAT0U 528
+#define IBAT0L 529
+#define IBAT1U 530
+#define IBAT1L 531
+#define IBAT2U 532
+#define IBAT2L 533
+#define IBAT3U 534
+#define IBAT3L 535
+#define ibat0u 528
+#define ibat0l 529
+#define ibat1u 530
+#define ibat1l 531
+#define ibat2u 532
+#define ibat2l 533
+#define ibat3u 534
+#define ibat3l 535
+
+#define DBAT0U 536
+#define DBAT0L 537
+#define DBAT1U 538
+#define DBAT1L 539
+#define DBAT2U 540
+#define DBAT2L 541
+#define DBAT3U 542
+#define DBAT3L 543
+#define dbat0u 536
+#define dbat0l 537
+#define dbat1u 538
+#define dbat1l 539
+#define dbat2u 540
+#define dbat2l 541
+#define dbat3u 542
+#define dbat3l 543
+
+#define HID0 1008
+#define hid0 1008
+#define HID1 1009
+#define hid1 1009
+#define SDR1 25
+#define sprg0 272
+#define sprg1 273
+#define sprg2 274
+#define sprg3 275
+#define ppcDAR 19
+#define ppcdar 19
+#define srr0 26
+#define srr1 27
+
+#define CR0 0
+#define CR1 1
+#define CR2 2
+#define CR3 3
+#define CR4 4
+#define CR5 5
+#define CR6 6
+#define CR7 7
+
+#ifdef __ELF__
+#define cr0 0
+#define cr1 1
+#define cr2 2
+#define cr3 3
+#define cr4 4
+#define cr5 5
+#define cr6 6
+#define cr7 7
+#endif
+
+#define cr0_lt 0
+#define cr0_gt 1
+#define cr0_eq 2
+#define cr0_so 3
+#define cr0_un 3
+
+/*
+ * Macros to access high and low word values of an address
+ */
+
+#ifndef __ELF__
+#define HIGH_CADDR(x) ha16(x)
+#define HIGH_ADDR(x) hi16(x)
+#define LOW_ADDR(x) lo16(x)
+#else
+#define HIGH_CADDR(x) x@ha
+#define HIGH_ADDR(x) x@h
+#define LOW_ADDR(x) x@l
+#endif /* __ELF__ */
+
+#endif /* ASSEMBLER */
+
+/* Tags are placed before Immediately Following Code (IFC) for the debugger
+ * to be able to deduce where to find various registers when backtracing
+ *
+ * We only define the values as we use them, see SVR4 ABI PowerPc Supplement
+ * for more details (defined in ELF spec).
+ */
+
+#define TAG_NO_FRAME_USED 0x00000000
+
+/* (should use genassym to get these offsets) */
+
+#define FM_BACKPTR 0
+/* TODO NMGS FM_SIZE 8 is ok according to EABI specs, but gcc uses 16 */
+#ifdef __ELF__
+#define FM_LR_SAVE 4 /* gcc 2.7.1 is now following eabi spec correctly */
+#define FM_SIZE 16 /* minimum frame contents, backptr and LR save */
+#define FM_ARG0 8
+#else
+#define FM_CR_SAVE 4
+#define FM_LR_SAVE 8 /* Rhapsody iS NOT following the ABI at the moment.. */
+#define FM_SIZE 72 /* minimum frame contents, backptr and LR save */
+#define FM_ARG0 56
+#endif
+
+#define FM_ELF_ARG0 8
+#define FM_MACHO_ARG0 56
+#define MACHO_SYSCALL_BEGIN 0x2000
+#define PK_SYSCALL_BEGIN 0x7000
+
+
+/* redzone is the area under the stack pointer which must be preserved
+ * when taking a trap, interrupt etc. This is no longer needed as gcc
+ * (2.7.2 and above) now follows ELF spec correctly and never loads/stores
+ * below the frame pointer
+ */
+#ifdef __ELF__
+#define FM_REDZONE 0 /* was ((32-14+1)*4) */
+#else
+#define FM_REDZONE 224 /* is ((32-14+1)*4) */
+#endif
+
+#define COPYIN_ARG0_OFFSET FM_ARG0
+
+#ifdef MACH_KERNEL_BUILD
+#include <mach_kdb.h>
+#else /* MACH_KERNEL */
+#define MACH_KDB 0
+#endif /* MACH_KERNEL */
+
+#define BREAKPOINT_TRAP twge r2,r2
+
+/* There is another definition of ALIGN for .c sources */
+#ifndef __LANGUAGE_ASSEMBLY
+#define ALIGN 2
+#endif /* __LANGUAGE_ASSEMBLY */
+
+#ifndef FALIGN
+#define FALIGN 2 /* Align functions on words for now. Cachelines is better */
+#endif
+
+#define LB(x,n) n
+#if __STDC__
+#ifndef __NO_UNDERSCORES__
+#define LCL(x) L ## x
+#define EXT(x) _ ## x
+#define LEXT(x) _ ## x ## :
+#else
+#define LCL(x) .L ## x
+#define EXT(x) x
+#define LEXT(x) x ## :
+#endif
+#define LBc(x,n) n ## :
+#define LBb(x,n) n ## b
+#define LBf(x,n) n ## f
+#else /* __STDC__ */
+#ifndef __NO_UNDERSCORES__
+#define LCL(x) L/**/x
+#define EXT(x) _/**/x
+#define LEXT(x) _/**/x/**/:
+#else /* __NO_UNDERSCORES__ */
+#define LCL(x) .L/**/x
+#define EXT(x) x
+#define LEXT(x) x/**/:
+#endif /* __NO_UNDERSCORES__ */
+#define LBc(x,n) n/**/:
+#define LBb(x,n) n/**/b
+#define LBf(x,n) n/**/f
+#endif /* __STDC__ */
+
+#define String .asciz
+#define Value .word
+#define Times(a,b) (a*b)
+#define Divide(a,b) (a/b)
+
+#define data16 .byte 0x66
+#define addr16 .byte 0x67
+
+#if !GPROF
+#define MCOUNT
+
+#elif defined(__SHARED__)
+#define MCOUNT ; .data;\
+ .align ALIGN;\
+ LBc(x, 8) .long 0;\
+ .text;\
+ Gpush;\
+ Gload;\
+ leal Gotoff(LBb(x,8)),%edx;\
+ Egaddr(%eax,_mcount_ptr);\
+ Gpop;\
+ call *(%eax);
+
+#else /* !GPROF, !__SHARED__ */
+#define MCOUNT ; .data;\
+ .align ALIGN;\
+ LBc(x, 8) .long 0;\
+ .text;\
+ movl $LBb(x,8),%edx;\
+ call *EXT(_mcount_ptr);
+
+#endif /* GPROF */
+
+#ifdef __ELF__
+#define ELF_FUNC(x) .type x,@function
+#define ELF_DATA(x) .type x,@object
+#define ELF_SIZE(x,s) .size x,s
+#else
+#define ELF_FUNC(x)
+#define ELF_DATA(x)
+#define ELF_SIZE(x,s)
+#endif
+
+#ifdef __ELF__
+#define Entry(x,tag) .globl EXT(x); ELF_FUNC(EXT(x)); .long tag;.align FALIGN; LEXT(x)
+#define ENTRY(x,tag) Entry(x,tag) MCOUNT
+#define ENTRY2(x,y,tag) .globl EXT(x); .globl EXT(y); \
+ ELF_FUNC(EXT(x)); ELF_FUNC(EXT(y)); \
+ .align FALIGN; LEXT(x); LEXT(y) \
+ MCOUNT
+#if __STDC__
+#define ASENTRY(x) .globl x; .align FALIGN; x ## : ELF_FUNC(x) MCOUNT
+#else
+#define ASENTRY(x) .globl x; .align FALIGN; x: ELF_FUNC(x) MCOUNT
+#endif /* __STDC__ */
+#define DATA(x) .globl EXT(x); ELF_DATA(EXT(x)); .align ALIGN; LEXT(x)
+
+#else /* __ELF__ */
+
+#define Entry(x,tag) .text@.align FALIGN@ .globl EXT(x)@ LEXT(x)
+#define ENTRY(x,tag) Entry(x,tag)@MCOUNT
+#define ENTRY2(x,y,tag) .text@ .align FALIGN@ .globl EXT(x)@ .globl EXT(y)@ \
+ LEXT(x)@ LEXT(y) @\
+ MCOUNT
+#if __STDC__
+#define ASENTRY(x) .globl x @ .align FALIGN; x ## @ MCOUNT
+#else
+#define ASENTRY(x) .globl x @ .align FALIGN; x @ MCOUNT
+#endif /* __STDC__ */
+#define DATA(x) .globl EXT(x) @ .align ALIGN @ LEXT(x)
+#endif
+
+
+
+#define End(x) ELF_SIZE(x,.-x)
+#define END(x) End(EXT(x))
+#define ENDDATA(x) END(x)
+#define Enddata(x) End(x)
+
+/* These defines are here for .c files that wish to reference global symbols
+ * within __asm__ statements.
+ */
+#ifndef __NO_UNDERSCORES__
+#define CC_SYM_PREFIX "_"
+#else
+#define CC_SYM_PREFIX ""
+#endif /* __NO_UNDERSCORES__ */
+
+#endif /* _PPC_ASM_H_ */