master
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
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#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
70struct 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_ */