reg.h revision 1.11
11.11Sjoerg/* $NetBSD: reg.h,v 1.11 2014/08/12 20:27:10 joerg Exp $ */ 21.2Sperry 31.5Smatt#ifndef _POWERPC_REG_H_ 41.5Smatt#define _POWERPC_REG_H_ 51.7Smatt 61.7Smatt/* 71.7Smatt * Register Usage according the SVR4 ABI for PPC. 81.7Smatt * 91.9Smatt * Register Usage 101.9Smatt * r0 Volatile register which may be modified during function linkage 111.9Smatt * r1 Stack fram pointer, always valid 121.9Smatt * r2 System-reserved register 131.9Smatt * r3-r4 Volatile registers used for parameter passing and return values 141.9Smatt * r5-r10 Volatile registers used for parameter passing 151.9Smatt * r11-r12 Volatile register which may be modified during function linkage 161.9Smatt * r13 Small data area pointer register 171.9Smatt * f0 Volatile register 181.9Smatt * f1 Volatile registers used for parameter passing and return values 191.9Smatt * f2-f8 Volatile registers used for parameter passing 201.9Smatt * f9-f13 Volatile registers 211.9Smatt * 221.9Smatt * [Start of callee-saved registers] 231.9Smatt * r14-r30 Registers used for local variables 241.9Smatt * r31 Used for local variable or "environent pointers" 251.9Smatt * f14-f31 Registers used for local variables 261.9Smatt * 271.9Smatt * 281.9Smatt * Register Usage according the ELF64 ABI (PowerOpen/AIX) for PPC. 291.9Smatt * 301.9Smatt * Register Usage 311.9Smatt * r0 Volatile register which may be modified during function linkage 321.9Smatt * r1 Stack fram pointer, always valid 331.9Smatt * r2 TOC pointer 341.9Smatt * r3 Volatile register used for parameter passing and return value 351.9Smatt * r4-r10 Volatile registers used for parameter passing 361.9Smatt * r11 Volatile register used in calls by pointer and as an 371.9Smatt * environment pointr for languages which require one 381.9Smatt * r12 Volatile register used for exception handling and glink code 391.9Smatt * r13 Reserved for use as system thread ID 401.9Smatt * 411.9Smatt * f0 Volatile register 421.9Smatt * f1-f4 Volatile registers used for parameter passing and return values 431.9Smatt * f5-f13 Volatile registers used for parameter passing 441.9Smatt 451.7Smatt * [Start of callee-saved registers] 461.9Smatt * r14-r31 Registers used for local variables 471.9Smatt * f14-f31 Registers used for local variables 481.9Smatt * 491.7Smatt */ 501.5Smatt 511.5Smattstruct reg { /* base registers */ 521.3Stsubai register_t fixreg[32]; 531.5Smatt register_t lr; /* Link Register */ 541.5Smatt int cr; /* Condition Register */ 551.5Smatt int xer; /* SPR 1 */ 561.5Smatt register_t ctr; /* Count Register */ 571.5Smatt register_t pc; /* Program Counter */ 581.4Stsubai}; 591.4Stsubai 601.5Smattstruct fpreg { /* Floating Point registers */ 611.11Sjoerg#ifdef _KERNEL 621.11Sjoerg uint64_t fpreg[32]; 631.11Sjoerg uint64_t fpscr; /* Status and Control Register */ 641.11Sjoerg#else 651.4Stsubai double fpreg[32]; 661.5Smatt double fpscr; /* Status and Control Register */ 671.11Sjoerg#endif 681.5Smatt}; 691.5Smatt 701.5Smattstruct vreg { /* Vector registers */ 711.10Smatt uint32_t vreg[32][4]; 721.8Smatt register_t vrsave; /* SPR 256 */ 731.8Smatt register_t spare[2]; /* filler */ 741.5Smatt register_t vscr; /* Vector Status And Control Register */ 751.3Stsubai}; 761.5Smatt 771.5Smatt#endif /* _POWERPC_REG_H_ */ 78