OFSet, OSet)
+GPR_SIZE_IN_BYTES = 8
+BITS_IN_BYTE = 8
+GPR_SIZE_IN_BITS = GPR_SIZE_IN_BYTES * BITS_IN_BYTE
+GPR_VALUE_MASK = (1 << GPR_SIZE_IN_BITS) - 1
+
+
@final
class Fn:
def __init__(self):
_SIM_FNS[SvMAddEDU] = lambda: OpKind.__svmaddedu_sim
_GEN_ASMS[SvMAddEDU] = lambda: OpKind.__svmaddedu_gen_asm
+ @staticmethod
+ def __sradi_sim(op, state):
+ # type: (Op, BaseSimState) -> None
+ rs, = state[op.input_vals[0]]
+ imm = op.immediates[0]
+ if rs >= 1 << (GPR_SIZE_IN_BITS - 1):
+ rs -= 1 << GPR_SIZE_IN_BITS
+ v = rs >> imm
+ RA = v & GPR_VALUE_MASK
+ CA = (RA << imm) != rs
+ state[op.outputs[0]] = RA,
+ state[op.outputs[1]] = CA,
+
+ @staticmethod
+ def __sradi_gen_asm(op, state):
+ # type: (Op, GenAsmState) -> None
+ RA = state.sgpr(op.outputs[0])
+ RS = state.sgpr(op.input_vals[1])
+ imm = op.immediates[0]
+ state.writeln(f"sradi {RA}, {RS}, {imm}")
+ SRADI = GenericOpProperties(
+ demo_asm="sradi RA, RS, imm",
+ inputs=[OD_BASE_SGPR],
+ outputs=[OD_BASE_SGPR.with_write_stage(OpStage.Late),
+ OD_CA.with_write_stage(OpStage.Late)],
+ immediates=[range(GPR_SIZE_IN_BITS)],
+ )
+ _SIM_FNS[SRADI] = lambda: OpKind.__sradi_sim
+ _GEN_ASMS[SRADI] = lambda: OpKind.__sradi_gen_asm
+
@staticmethod
def __setvli_sim(op, state):
# type: (Op, BaseSimState) -> None
self.kind.gen_asm(self, state)
-GPR_SIZE_IN_BYTES = 8
-BITS_IN_BYTE = 8
-GPR_SIZE_IN_BITS = GPR_SIZE_IN_BYTES * BITS_IN_BYTE
-GPR_VALUE_MASK = (1 << GPR_SIZE_IN_BITS) - 1
-
-
@plain_data(frozen=True, repr=False)
class BaseSimState(metaclass=ABCMeta):
__slots__ = "memory",