1/* $NetBSD: reg.h,v 1.9 2003/02/08 20:03:22 matt 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 fram 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 "environent 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 fram 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 pointr 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 51struct 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 60struct fpreg { /* Floating Point registers */ 61 double fpreg[32]; 62 double fpscr; /* Status and Control Register */ 63}; 64 65struct vreg { /* Vector registers */ 66 uint32_t vreg[32][4]; 67 register_t vrsave; /* SPR 256 */ 68 register_t spare[2]; /* filler */ 69 register_t vscr; /* Vector Status And Control Register */ 70}; 71 72#endif /* _POWERPC_REG_H_ */ 73