0454cc7576e7f864189a7afca4990e4faf9ff106
[libreriscv.git] / openpower / isa / sprset.mdwn
1 # Move To Special Purpose Register
2
3 XFX-Form
4
5 * mtspr SPR,RS
6
7 n <- spr[5:9] || spr[0:4]
8 switch (n)
9 case(13): see(Book_III_p974)
10 case(808, 809, 810, 811): fallthrough
11 default:
12 if length(SPR(n)) = 64 then
13 SPR(n) <- (RS)
14 else
15 SPR(n) <- (RS) [32:63]
16
17 Special Registers Altered:
18
19 See spec 3.3.17
20
21 # Move From Special Purpose Register
22
23 XFX-Form
24
25 * mfspr RT,SPR
26
27 n <- spr[5:9] || spr[0:4]
28 switch (n)
29 case(129): see(Book_III_p975)
30 case(808, 809, 810, 811): fallthrough
31 default:
32 if length(SPR(n)) = 64 then
33 RT <- SPR(n)
34 else
35 RT <- [0]*32 || SPR(n)
36
37 Special Registers Altered:
38
39 None
40
41 # Move to CR from XER Extended
42
43 X-Form
44
45 * mcrxrx BF
46
47 CR[4*BF+32:4*BF+35] <- XER[OV] || XER[OV32] || XER[CA] || XER[CA32]
48
49 Special Registers Altered:
50
51 CR field BF
52
53 # Move To One Condition Register Field
54
55 XFX-Form
56
57 * mtocrf FXM,RS
58
59 count <- 0
60 do i = 0 to 7
61 if FXM[i] = 1 then
62 n <- i
63 count <- count + 1
64 if count = 1 then
65 CR[4*n+32:4*n+35] <- (RS)[4*n+32:4*n+35]
66 else CR <- undefined
67
68 Special Registers Altered:
69
70 CR field selected by FXM
71
72 # Move To Condition Register Fields
73
74 XFX-Form
75
76 * mtcrf FXM,RS
77
78 mask <- (FXM[0]*4 || FXM[1]*4 || FXM[2]*4 || FXM[3]*4 ||
79 FXM[4]*4 || FXM[5]*4 || FXM[6]*4 || FXM[7]*4)
80 CR <- ((RS)[32:63] & mask) | (CR & ¬mask)
81
82 Special Registers Altered:
83
84 CR fields selected by mask
85
86 # Move From One Condition Register Field
87
88 XFX-Form
89
90 * mfocrf RT,FXM
91
92 RT <- undefined
93 count <- 0
94 do i = 0 to 7
95 if FXM[i] = 1 then
96 n <- i
97 count <- count + 1
98 if count = 1 then
99 RT <- [0]*64
100 RT[4*n+32:4*n+35] <- CR[4*n+32:4* n+35]
101
102 Special Registers Altered:
103
104 None
105
106 # Move From Condition Register
107
108 XFX-Form
109
110 * mfcr RT
111
112 RT <- [0]*32 || CR
113
114 Special Registers Altered:
115
116 None
117
118 # Set Boolean
119
120 X-Form
121
122 * setb RT,BFA
123
124 if CR[4*BFA+32] = 1 then
125 RT <- 0xFFFF_FFFF_FFFF_FFFF
126 else if CR[4*BFA+33]=1 then
127 RT <- 0x0000_0000_0000_0001
128 else
129 RT <- 0x0000_0000_0000_0000
130
131 Special Registers Altered:
132
133 None
134