1 <!-- This defines instructions described in PowerISA Version 3.0 B Book 1 -->
3 <!-- These are not described in book 1 -->
9 * setvl RT, RA, SVi, vf, vs, ms
10 * setvl. RT, RA, SVi, vf, vs, ms
14 if (vf & (¬vs) & ¬(ms)) = 1 then
33 if _RT != 0b00000 then
34 GPR(_RT) <- [0]*57 || VL
37 Special Registers Altered:
45 * svremap SVme, mi0, mi1, mi2, mo0, mo1, pst
49 # registers RA RB RC RT EA/FRS SVSHAPE0-3 indices
55 # enable bit for RA RB RC RT EA/FRS
56 SVSTATE[42:46] <- SVme
57 # persistence bit (applies to more than one instruction)
60 Special Registers Altered:
68 * svshape SVxd, SVyd, SVzd, SVRM, vf
72 # for convenience, VL to be calculated and stored in SVSTATE
74 SVSTATE[0:63] <- [0] * 64
75 # clear out all SVSHAPEs
76 SVSHAPE0[0:31] <- [0] * 32
77 SVSHAPE1[0:31] <- [0] * 32
78 SVSHAPE2[0:31] <- [0] * 32
79 SVSHAPE3[0:31] <- [0] * 32
80 # set schedule up for multiply
81 if (SVRM = 0b0000) then
82 # VL in Matrix Multiply is xd*yd*zd
83 n <- (0b00 || SVxd) * (0b00 || SVyd) * (0b00 || SVzd)
85 # set up template in SVSHAPE0, then copy to 1-3
86 SVSHAPE0[0:5] <- (0b0 || SVxd) # xdim
87 SVSHAPE0[6:11] <- (0b0 || SVyd) # ydim
88 SVSHAPE0[12:17] <- (0b0 || SVzd) # zdim
89 SVSHAPE0[28:29] <- 0b11 # skip z
91 SVSHAPE1[0:31] <- SVSHAPE0[0:31]
92 SVSHAPE2[0:31] <- SVSHAPE0[0:31]
93 SVSHAPE3[0:31] <- SVSHAPE0[0:31]
95 SVSHAPE1[18:20] <- 0b001 # permute x,z,y
96 SVSHAPE1[28:29] <- 0b01 # skip z
98 SVSHAPE2[18:20] <- 0b001 # permute x,z,y
99 SVSHAPE2[28:29] <- 0b11 # skip y
100 # set schedule up for FFT butterfly
101 if (SVRM = 0b0001) then
102 # calculate O(N log2 N)
105 if SVxd[4-n] = 0 then
108 n <- ((0b0 || SVxd) + 1) * n
110 # set up template in SVSHAPE0, then copy to 1-3
112 SVSHAPE0[0:5] <- (0b0 || SVxd) # xdim
113 SVSHAPE0[30:31] <- 0b01 # Butterfly mode
115 SVSHAPE1[0:31] <- SVSHAPE0[0:31]
116 SVSHAPE2[0:31] <- SVSHAPE0[0:31]
118 SVSHAPE1[28:29] <- 0b01 # j+halfstep schedule
120 SVSHAPE2[28:29] <- 0b10 # k schedule
121 # set schedule up for DCT Inner butterfly
122 if (SVRM = 0b0010) then
123 # calculate O(N log2 N)
126 if SVxd[4-n] = 0 then
129 n <- ((0b0 || SVxd) + 1) * n
131 # set up template in SVSHAPE0, then copy to 1-3
133 SVSHAPE0[0:5] <- (0b0 || SVxd) # xdim
134 SVSHAPE0[30:31] <- 0b01 # Butterfly mode
135 SVSHAPE0[18:20] <- 0b001 # DCT Inner Butterfly sub-mode
136 SVSHAPE0[21:23] <- 0b001 # "inverse" on outer loop
138 SVSHAPE1[0:31] <- SVSHAPE0[0:31]
140 SVSHAPE0[28:29] <- 0b01 # j+halfstep schedule
141 # set schedule up for DCT Outer butterfly
142 if (SVRM = 0b0011) then
143 # calculate O(N log2 N) number of outer butterfly overlapping adds
147 itercount[0:6] <- (0b00 || SVxd) + 0b0000001
148 itercount[0:6] <- (0b0 || itercount[0:5])
150 if SVxd[4-n] = 0 then
153 count <- (itercount - 0b0000001) * size
154 vlen[0:6] <- vlen + count[7:13]
155 size[0:6] <- (size[1:6] || 0b0)
156 itercount[0:6] <- (0b0 || itercount[0:5])
157 # set up template in SVSHAPE0, then copy to 1-3
159 SVSHAPE0[0:5] <- (0b0 || SVxd) # xdim
160 SVSHAPE0[30:31] <- 0b01 # Butterfly mode
161 SVSHAPE0[18:20] <- 0b100 # DCT Outer Butterfly sub-mode
163 SVSHAPE1[0:31] <- SVSHAPE0[0:31]
164 SVSHAPE2[0:31] <- SVSHAPE0[0:31]
165 SVSHAPE3[0:31] <- SVSHAPE0[0:31]
167 SVSHAPE1[28:29] <- 0b01 # j+halfstep schedule
168 # for cos coefficient
169 SVSHAPE2[28:29] <- 0b10 # ci schedule
170 SVSHAPE3[28:29] <- 0b11 # size schedule
171 # set VL, MVL and Vertical-First
173 SVSTATE[7:13] <- vlen
176 Special Registers Altered: