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