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_ */ 78