a5964858976585252d8d7a0b3c7175db46263ada
[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):
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):
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[7]*4
79 CR <- ((RS)[32:63] & mask) | (CR & ¬mask)
80
81 Special Registers Altered:
82
83 CR fields selected by mask
84
85 # Move From One Condition Register Field
86
87 XFX-Form
88
89 * mfocrf RT,FXM
90
91 RT <- undefined
92 count <- 0
93 do i = 0 to 7
94 if FXM[i] = 1 then
95 n <- i
96 count <- count + 1
97 if count = 1 then
98 RT <- [0]*64
99 RT[4 *n+32:4*n+35] <- CR[4*n+32:4* n+35]
100
101 Special Registers Altered:
102
103 None
104
105 # Move From Condition Register
106
107 XFX-Form
108
109 * mfcr RT
110
111 RT <- [0]*32 || CR
112
113 Special Registers Altered:
114
115 None
116
117 # Set Boolean
118
119 X-Form
120
121 * setb RT,BFA
122
123 if CR[4×BFA+32] = 1 then
124 RT <- 0xFFFF_FFFF_FFFF_FFFF
125 else if CR[4×BFA+33]=1 then
126 RT <- 0x0000_0000_0000_0001
127 else
128 RT <- 0x0000_0000_0000_0000
129
130 Special Registers Altered:
131
132 None
133