# setvl SVL-Form * setvl RT, RA, SVi, vf, vs, ms * setvl. RT, RA, SVi, vf, vs, ms Pseudo-code: if (vf & (¬vs) & ¬(ms)) = 1 then SVSTATE_NEXT else VLimm <- SVi + 1 if vs = 1 then if _RA != 0 then VL <- (RA|0)[57:63] else VL <- VLimm[0:6] else VL <- SVSTATE[7:13] if ms = 1 then MVL <- VLimm[0:6] else MVL <- SVSTATE[0:6] if VL > MVL then VL = MVL SVSTATE[0:6] <- MVL SVSTATE[7:13] <- VL if _RT != 0b00000 then GPR(_RT) <- [0]*57 || VL MSR[6] <- vf Special Registers Altered: CR0 (if Rc=1) # svremap SVRM-Form * svremap SVme, mi0, mi1, mi2, mo0, mo1 Pseudo-code: # place into SVREMAP SPR SVREMAP[10:14] <- SVme SVREMAP[0:1] <- mi0 SVREMAP[2:3] <- mi1 SVREMAP[4:5] <- mi2 SVREMAP[6:7] <- mo0 SVREMAP[8:9] <- mo1 Special Registers Altered: None # svshape SVM-Form * svshape SVxd, SVyd, SVzd, SVRM, vf Pseudo-code: # for convenience, VL to be calculated and stored in SVSTATE vlen <- [0] * 7 SVSTATE[0:31] <- [0] * 32 # clear out all SVSHAPEs SVSHAPE0[0:31] <- [0] * 32 SVSHAPE1[0:31] <- [0] * 32 SVSHAPE2[0:31] <- [0] * 32 SVSHAPE3[0:31] <- [0] * 32 # set schedule up for multiply if (SVRM = 0b0000) then # VL in Matrix Multiply is xd*yd*zd n <- (0b00 || SVxd) * (0b00 || SVyd) * (0b00 || SVzd) vlen[0:6] <- n[14:20] # set up template in SVSHAPE0, then copy to 1-3 SVSHAPE0[0:5] <- (0b0 || SVxd) # xdim SVSHAPE0[6:11] <- (0b0 || SVyd) # ydim SVSHAPE0[12:17] <- (0b0 || SVzd) # zdim SVSHAPE0[28:29] <- 0b11 # skip z # copy SVSHAPE1[0:31] <- SVSHAPE0[0:31] SVSHAPE2[0:31] <- SVSHAPE0[0:31] SVSHAPE3[0:31] <- SVSHAPE0[0:31] # set up FRA SVSHAPE1[18:20] <- 0b001 # permute x,z,y SVSHAPE1[28:29] <- 0b01 # skip z # FRC SVSHAPE2[18:20] <- 0b001 # permute x,z,y SVSHAPE2[28:29] <- 0b11 # skip y # set schedule up for butterfly if (SVRM = 0b0001) then # calculate O(N log2 N) n <- [0] * 3 do while n < 5 if SVxd[4-n] = 0 then leave n <- n + 1 n <- ((0b0 || SVxd) + 1) * n vlen[0:6] <- n[1:7] # set up template in SVSHAPE0, then copy to 1-3 # for FRA and FRT SVSHAPE0[0:5] <- (0b0 || SVxd) # xdim SVSHAPE0[30:31] <- 0b01 # Butterfly mode # copy SVSHAPE1[0:31] <- SVSHAPE0[0:31] SVSHAPE2[0:31] <- SVSHAPE0[0:31] # set up FRB and FRS SVSHAPE1[28:29] <- 0b01 # j+halfstep schedule # FRC (coefficients) SVSHAPE2[28:29] <- 0b10 # k schedule # set VL, MVL and MSR Vertical-First SVSTATE[0:6] <- vlen SVSTATE[7:13] <- vlen MSR[6] <- vf Special Registers Altered: None