550W Document
550W, a high-end OS
regs.h
浏览该文件的文档.
1
#pragma once
2
3
#define SAVE(x, y) sd x, OFFSET_REG_##y##(sp)
4
#define LOAD(x, y) ld x, OFFSET_REG_##y##(sp)
5
6
/* return address */
7
#define reg_ra 0
8
9
/* pointers */
10
#define reg_sp 1
// stack
11
#define reg_gp 2
// global
12
#define reg_tp 3
// thread
13
14
/* temporary */
15
#define reg_t0 4
16
#define reg_t1 5
17
#define reg_t2 6
18
19
/* saved register */
20
#define reg_s0 7
21
#define reg_s1 8
22
23
/* args */
24
#define reg_a0 9
25
#define reg_a1 10
26
#define reg_a2 11
27
#define reg_a3 12
28
#define reg_a4 13
29
#define reg_a5 14
30
#define reg_a6 15
31
#define reg_a7 16
32
33
/* saved register */
34
#define reg_s2 17
35
#define reg_s3 18
36
#define reg_s4 19
37
#define reg_s5 20
38
#define reg_s6 21
39
#define reg_s7 22
40
#define reg_s8 23
41
#define reg_s9 24
42
#define reg_s10 25
43
#define reg_s11 26
44
45
/* temporary register */
46
#define reg_t3 27
47
#define reg_t4 28
48
#define reg_t5 29
49
#define reg_t6 30
50
51
/* privileged register */
52
#define reg_sstatus 31
53
#define reg_sepc 32
54
#define reg_sbadaddr 33
55
#define reg_scause 34
56
57
/* offsets */
58
59
/* return address */
60
#define OFFSET_REG_RA 0
61
62
/* pointers */
63
#define OFFSET_REG_SP 8
// stack
64
#define OFFSET_REG_GP 16
// global
65
#define OFFSET_REG_TP 24
// thread
66
67
/* temporary */
68
#define OFFSET_REG_T0 32
69
#define OFFSET_REG_T1 40
70
#define OFFSET_REG_T2 48
71
72
/* saved register */
73
#define OFFSET_REG_S0 56
74
#define OFFSET_REG_S1 64
75
76
/* args */
77
#define OFFSET_REG_A0 72
78
#define OFFSET_REG_A1 80
79
#define OFFSET_REG_A2 88
80
#define OFFSET_REG_A3 96
81
#define OFFSET_REG_A4 104
82
#define OFFSET_REG_A5 112
83
#define OFFSET_REG_A6 120
84
#define OFFSET_REG_A7 128
85
86
/* saved register */
87
#define OFFSET_REG_S2 136
88
#define OFFSET_REG_S3 144
89
#define OFFSET_REG_S4 152
90
#define OFFSET_REG_S5 160
91
#define OFFSET_REG_S6 168
92
#define OFFSET_REG_S7 176
93
#define OFFSET_REG_S8 184
94
#define OFFSET_REG_S9 192
95
#define OFFSET_REG_S10 200
96
#define OFFSET_REG_S11 208
97
98
/* temporary register */
99
#define OFFSET_REG_T3 216
100
#define OFFSET_REG_T4 224
101
#define OFFSET_REG_T5 232
102
#define OFFSET_REG_T6 240
103
104
#define OFFSET_REG_SIZE 248
105
106
/* privileged register */
107
#define OFFSET_REG_SSTATUS 248
108
#define OFFSET_REG_SEPC 256
109
#define OFFSET_REG_SBADADDR 264
110
#define OFFSET_REG_SCAUSE 272
111
112
/* Size of stack frame, word/double word alignment */
113
#define OFFSET_ALL_REG_SIZE 280
114
115
#define PCB_KERNEL_SP 0
116
#define PCB_USER_SP 8
117
118
/* registers in switch_to */
119
#define switch_reg_ra 0
120
#define switch_reg_sp 1
121
#define switch_reg_s0 2
122
#define switch_reg_s1 3
123
#define switch_reg_s2 4
124
#define switch_reg_s3 5
125
#define switch_reg_s4 6
126
#define switch_reg_s5 7
127
#define switch_reg_s6 8
128
#define switch_reg_s7 9
129
#define switch_reg_s8 10
130
#define switch_reg_s9 11
131
#define switch_reg_s10 12
132
#define switch_reg_s11 13
133
134
/* offset in switch_to */
135
#define SS(x, y) sd x, SWITCH_TO_##y##(t0)
136
#define LS(x, y) ld x, SWITCH_TO_##y##(t0)
137
#define SWITCH_TO_RA 0
138
#define SWITCH_TO_SP 8
139
#define SWITCH_TO_S0 16
140
#define SWITCH_TO_S1 24
141
#define SWITCH_TO_S2 32
142
#define SWITCH_TO_S3 40
143
#define SWITCH_TO_S4 48
144
#define SWITCH_TO_S5 56
145
#define SWITCH_TO_S6 64
146
#define SWITCH_TO_S7 72
147
#define SWITCH_TO_S8 80
148
#define SWITCH_TO_S9 88
149
#define SWITCH_TO_S10 96
150
#define SWITCH_TO_S11 104
151
152
#define SWITCH_TO_SIZE 112
src
arch
riscv
include
asm
regs.h
制作者
1.9.1