Loading...
include/asm.h /dev/null Libc-262.2.12
--- /dev/null
+++ Libc/Libc-262.2.12/include/asm.h
@@ -0,0 +1,415 @@
+/*
+ * @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_ */