# for convenience, VL to be calculated and stored in SVSTATE
vlen <- [0] * 7
- SVSTATE[0:31] <- [0] * 32
+ SVSTATE[0:63] <- [0] * 64
# clear out all SVSHAPEs
SVSHAPE0[0:31] <- [0] * 32
SVSHAPE1[0:31] <- [0] * 32
# current "state" (TODO: this in its own Record)
self.msr = Signal(64, reset_less=True)
self.cia = Signal(64, reset_less=True)
- self.svstate = Signal(32, reset_less=True)
+ self.svstate = Signal(64, reset_less=True)
# instruction, type and decoded information
self.insn = Signal(32, reset_less=True) # original instruction
# Simple-V: see https://libre-soc.org/openpower/sv
class SVP64State:
def __init__(self, init=0):
- self.spr = SelectableInt(init, 32)
+ self.spr = SelectableInt(init, 64)
# fields of SVSTATE, see https://libre-soc.org/openpower/sv/sprs/
self.maxvl = FieldSelectableInt(self.spr, tuple(range(0,7)))
self.vl = FieldSelectableInt(self.spr, tuple(range(7,14)))
vl = self.svstate.vl.asint(msb0=True)
log (" srcstep", srcstep)
log (" dststep", dststep)
+ log (" vl", vl)
# check if end reached (we let srcstep overrun, above)
# nothing needs doing (TODO zeroing): just do next instruction
class SVSTATERec(RecordObject):
def __init__(self, name=None):
super().__init__(name=name)
+ self.rsvd = Signal(32) # TODO
self.svstep = Signal(2)
self.subvl = Signal(2)
self.dststep = Signal(7)