reg.h revision 1.13
11.13Sandvar/*	$NetBSD: reg.h,v 1.13 2021/08/12 20:53:18 andvar 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.13Sandvar *  r31		Used for local variable or "environment 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.12Schristos	__register_t fixreg[32];
531.12Schristos	__register_t lr;			/* Link Register */
541.5Smatt	int cr;				/* Condition Register */
551.5Smatt	int xer;			/* SPR 1 */
561.12Schristos	__register_t ctr;			/* Count Register */
571.12Schristos	__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.12Schristos	__register_t vrsave;		/* SPR 256 */
731.12Schristos	__register_t spare[2];		/* filler */
741.12Schristos	__register_t vscr;		/* Vector Status And Control Register */
751.3Stsubai};
761.5Smatt
771.5Smatt#endif /* _POWERPC_REG_H_ */
78