| 1 | /*	$NetBSD: reg.h,v 1.14 2021/08/13 20:47:55 andvar Exp $	*/ |
| 2 | |
| 3 | #ifndef _POWERPC_REG_H_ |
| 4 | #define _POWERPC_REG_H_ |
| 5 | |
| 6 | /* |
| 7 | * Register Usage according the SVR4 ABI for PPC. |
| 8 | * |
| 9 | * Register	Usage |
| 10 | * r0		Volatile register which may be modified during function linkage |
| 11 | * r1		Stack frame pointer, always valid |
| 12 | * r2		System-reserved register |
| 13 | * r3-r4	Volatile registers used for parameter passing and return values |
| 14 | * r5-r10	Volatile registers used for parameter passing |
| 15 | * r11-r12	Volatile register which may be modified during function linkage |
| 16 | * r13		Small data area pointer register |
| 17 | * f0		Volatile register |
| 18 | * f1		Volatile registers used for parameter passing and return values |
| 19 | * f2-f8	Volatile registers used for parameter passing |
| 20 | * f9-f13	Volatile registers |
| 21 | * |
| 22 | * [Start of callee-saved registers] |
| 23 | * r14-r30	Registers used for local variables |
| 24 | * r31		Used for local variable or "environment pointers" |
| 25 | * f14-f31	Registers used for local variables |
| 26 | * |
| 27 | * |
| 28 | * Register Usage according the ELF64 ABI (PowerOpen/AIX) for PPC. |
| 29 | * |
| 30 | * Register	Usage |
| 31 | * r0		Volatile register which may be modified during function linkage |
| 32 | * r1		Stack frame pointer, always valid |
| 33 | * r2		TOC pointer |
| 34 | * r3		Volatile register used for parameter passing and return value |
| 35 | * r4-r10	Volatile registers used for parameter passing |
| 36 | * r11		Volatile register used in calls by pointer and as an |
| 37 | *		environment pointer for languages which require one |
| 38 | * r12		Volatile register used for exception handling and glink code |
| 39 | * r13		Reserved for use as system thread ID |
| 40 | * |
| 41 | * f0		Volatile register |
| 42 | * f1-f4	Volatile registers used for parameter passing and return values |
| 43 | * f5-f13	Volatile registers used for parameter passing |
| 44 | |
| 45 | * [Start of callee-saved registers] |
| 46 | * r14-r31	Registers used for local variables |
| 47 | * f14-f31	Registers used for local variables |
| 48 | * |
| 49 | */ |
| 50 | |
| 51 | struct reg {				/* base registers */ |
| 52 | 	__register_t fixreg[32]; |
| 53 | 	__register_t lr;			/* Link Register */ |
| 54 | 	int cr;				/* Condition Register */ |
| 55 | 	int xer;			/* SPR 1 */ |
| 56 | 	__register_t ctr;			/* Count Register */ |
| 57 | 	__register_t pc;			/* Program Counter */ |
| 58 | }; |
| 59 | |
| 60 | struct fpreg {				/* Floating Point registers */ |
| 61 | #ifdef _KERNEL |
| 62 | 	uint64_t fpreg[32]; |
| 63 | 	uint64_t fpscr;			/* Status and Control Register */ |
| 64 | #else |
| 65 | 	double fpreg[32]; |
| 66 | 	double fpscr;			/* Status and Control Register */ |
| 67 | #endif |
| 68 | }; |
| 69 | |
| 70 | struct vreg {				/* Vector registers */ |
| 71 | 	uint32_t vreg[32][4]; |
| 72 | 	__register_t vrsave;		/* SPR 256 */ |
| 73 | 	__register_t spare[2];		/* filler */ |
| 74 | 	__register_t vscr;		/* Vector Status And Control Register */ |
| 75 | }; |
| 76 | |
| 77 | #endif /* _POWERPC_REG_H_ */ |