whoops double headings
[libreriscv.git] / openpower / isa / system.mdwn
1 # System Call
2
3 SC-Form
4
5 * sc LEV
6
7 Pseudo-code:
8
9 SRR0 <-iea CIA + 4
10 SRR1[33:36] <- 0
11 SRR1[42:47] <- 0
12 SRR1[0:32] <- MSR[0:32]
13 SRR1[37:41] <- MSR[37:41]
14 SRR1[48:63] <- MSR[48:63]
15 MSR <- new_value
16 NIA <- 0x0000_0000_0000_0C00
17
18 Special Registers Altered:
19
20 SRR0 SRR1 MSR
21
22 # System Call Vectored
23
24 SC-Form
25
26 * scv LEV
27
28 Pseudo-code:
29
30 LR <- CIA + 4
31 SRR1[33:36] <- undefined
32 SRR1[42:47] <- undefined
33 SRR1[0:32] <- MSR[0:32]
34 SRR1[37:41] <- MSR[37:41]
35 SRR1[48:63] <- MSR[48:63]
36 MSR <- new_value
37 NIA <- vectored
38
39 Special Registers Altered:
40
41 LR CTR MSR
42
43 # Return From System Call Vectored
44
45 XL-Form
46
47 * rfscv LEV
48
49 Pseudo-code:
50
51 if (MSR[29:31] != 0b010) | (CTR[29:31] != 0b000) then
52 MSR[29:31] <- CTR[29:31]
53 MSR[48] <- CTR[49]
54 MSR[58] <- CTR[49]
55 MSR[59] <- CTR[49]
56 MSR[0:2] <- CTR[0:2]
57 MSR[4:28] <- CTR[4:28]
58 MSR[32] <- CTR[32]
59 MSR[37:41] <- CTR[37:41]
60 MSR[49:50] <- CTR[49:50]
61 MSR[52:57] <- CTR[52:57]
62 MSR[60:63] <- CTR[60:63]
63 NIA <-iea LR[0:61] || 0b00
64
65 Special Registers Altered:
66
67 MSR
68
69 # Return From Interrupt Doubleword
70
71 XL-Form
72
73 * rfid LEV
74
75 Pseudo-code:
76
77 MSR[51] <- (MSR[3] & SRR1[51]) | ((¬MSR[3] & MSR[51]))
78 MSR[3] <- (MSR[3] & SRR1[3])
79 if (MSR[29:31] != 0b010) | (SRR1[29:31] != 0b000) then
80 MSR[29:31] <- SRR1[29:31]
81 MSR[48] <- SRR1[48] | SRR1[49]
82 MSR[58] <- SRR1[88] | SRR1[49]
83 MSR[59] <- SRR1[59] | SRR1[49]
84 MSR[0:2] <- SRR1[0:2]
85 MSR[4:28] <- SRR1[4:28]
86 MSR[32] <- SRR1[32]
87 MSR[37:41] <- SRR1[37:41]
88 MSR[49:50] <- SRR1[49:50]
89 MSR[52:57] <- SRR1[52:57]
90 MSR[60:63] <- SRR1[60:63]
91 NIA <-iea SRR0[0:61] || 0b00
92
93 Special Registers Altered:
94
95 MSR
96
97 # Hypervisor Return From Interrupt Doubleword
98
99 XL-Form
100
101 * hrfid LEV
102
103 Pseudo-code:
104
105 if (MSR[29:31] != 0b010) | (HSRR1[29:31] != 0b000) then
106 MSR[29:31] <- HSRR1[29:31]
107 MSR[48] <- HSRR1[48] | HSRR1[49]
108 MSR[58] <- HSRR1[88] | HSRR1[49]
109 MSR[59] <- HSRR1[59] | HSRR1[49]
110 MSR[0:28] <- HSRR1[0:28]
111 MSR[32] <- HSRR1[32]
112 MSR[37:41] <- HSRR1[37:41]
113 MSR[49:57] <- HSRR1[49:57]
114 MSR[60:63] <- HSRR1[60:63]
115 NIA <-iea HSRR0[0:61] || 0b00
116
117 Special Registers Altered:
118
119 MSR
120