sv_binutils: support custom enum tags
[openpower-isa.git] / openpower / isa / system.mdwn
1 <!-- Instructions here described in PowerISA Version 3.0 B Book 1 -->
2
3 <!-- 3.3.1 System Linkage Instructions Page 952 - 956 -->
4
5 <!-- These instructions provide the means by which a program can call upon the system to perform a service. -->
6
7 # System Call
8
9 SC-Form
10
11 * sc LEV
12
13 Pseudo-code:
14
15 SRR0 <-iea CIA + 4
16 SRR1[33:36] <- 0
17 SRR1[42:47] <- 0
18 SRR1[0:32] <- MSR[0:32]
19 SRR1[37:41] <- MSR[37:41]
20 SRR1[48:63] <- MSR[48:63]
21 MSR <- new_value
22 NIA <- 0x0000_0000_0000_0C00
23
24 Special Registers Altered:
25
26 SRR0 SRR1 MSR
27
28 # System Call Vectored
29
30 SC-Form
31
32 * scv LEV
33
34 Pseudo-code:
35
36 LR <- CIA + 4
37 SRR1[33:36] <- undefined([0]*4)
38 SRR1[42:47] <- undefined([0]*6)
39 SRR1[0:32] <- MSR[0:32]
40 SRR1[37:41] <- MSR[37:41]
41 SRR1[48:63] <- MSR[48:63]
42 MSR <- new_value
43 NIA <- vectored
44
45 Special Registers Altered:
46
47 LR CTR MSR
48
49 # Return From System Call Vectored
50
51 XL-Form
52
53 * rfscv
54
55 Pseudo-code:
56
57 if (MSR[29:31] != 0b010) | (CTR[29:31] != 0b000) then
58 MSR[29:31] <- CTR[29:31]
59 MSR[48] <- CTR[49]
60 MSR[58] <- CTR[49]
61 MSR[59] <- CTR[49]
62 MSR[0:2] <- CTR[0:2]
63 MSR[4:28] <- CTR[4:28]
64 MSR[32] <- CTR[32]
65 MSR[37:41] <- CTR[37:41]
66 MSR[49:50] <- CTR[49:50]
67 MSR[52:57] <- CTR[52:57]
68 MSR[60:63] <- CTR[60:63]
69 NIA <-iea LR[0:61] || 0b00
70
71 Special Registers Altered:
72
73 MSR
74
75 # Return From Interrupt Doubleword
76
77 XL-Form
78
79 * rfid
80
81 Pseudo-code:
82
83 MSR[51] <- (MSR[3] & SRR1[51]) | ((¬MSR[3] & MSR[51]))
84 MSR[3] <- (MSR[3] & SRR1[3])
85 if (MSR[29:31] != 0b010) | (SRR1[29:31] != 0b000) then
86 MSR[29:31] <- SRR1[29:31]
87 MSR[48] <- SRR1[48] | SRR1[49]
88 MSR[58] <- SRR1[58] | SRR1[49]
89 MSR[59] <- SRR1[59] | SRR1[49]
90 MSR[0:2] <- SRR1[0:2]
91 MSR[4:28] <- SRR1[4:28]
92 MSR[32] <- SRR1[32]
93 MSR[37:41] <- SRR1[37:41]
94 MSR[49:50] <- SRR1[49:50]
95 MSR[52:57] <- SRR1[52:57]
96 MSR[60:63] <- SRR1[60:63]
97 NIA <-iea SRR0[0:61] || 0b00
98
99 Special Registers Altered:
100
101 MSR
102
103 # Hypervisor Return From Interrupt Doubleword
104
105 XL-Form
106
107 * hrfid
108
109 Pseudo-code:
110
111 if (MSR[29:31] != 0b010) | (HSRR1[29:31] != 0b000) then
112 MSR[29:31] <- HSRR1[29:31]
113 MSR[48] <- HSRR1[48] | HSRR1[49]
114 MSR[58] <- HSRR1[58] | HSRR1[49]
115 MSR[59] <- HSRR1[59] | HSRR1[49]
116 MSR[0:28] <- HSRR1[0:28]
117 MSR[32] <- HSRR1[32]
118 MSR[37:41] <- HSRR1[37:41]
119 MSR[49:57] <- HSRR1[49:57]
120 MSR[60:63] <- HSRR1[60:63]
121 NIA <-iea HSRR0[0:61] || 0b00
122
123 Special Registers Altered:
124
125 MSR
126
127 <!-- Checked March 2021 -->