# R-type: no immediate
for op in [OP.amo, OP.op, OP.op_32, OP.op_fp]:
# R-type: no immediate
for op in [OP.amo, OP.op, OP.op_32, OP.op_fp]:
return self._decode_funct3(DA.jalr, [F3.jalr, ])
def calculate_op_action(self):
return self._decode_funct3(DA.jalr, [F3.jalr, ])
def calculate_op_action(self):
return Case(self.funct3, c)
def calculate_misc_action(self):
return Case(self.funct3, c)
def calculate_misc_action(self):
self.decode_action.eq(DA.fence)
).Else(
self.decode_action.eq(DA.trap_illegal_instruction))
# fence.i
c[F3.fence_i] = \
If((self.immediate[0:12] == immz) & (self.rs1 == regz) & \
self.decode_action.eq(DA.fence)
).Else(
self.decode_action.eq(DA.trap_illegal_instruction))
# fence.i
c[F3.fence_i] = \
If((self.immediate[0:12] == immz) & (self.rs1 == regz) & \
return Case(self.funct3, c)
def calculate_system_action(self):
return Case(self.funct3, c)
def calculate_system_action(self):
- If((self.immediate != ~b1) | (self.rs1 != regz) | \
- (self.rd != regz),
- self.decode_action.eq(DA.trap_illegal_instruction)
+ If((self.immediate == ~b1) & (self.rs1 == regz) & \
+ (self.rd == regz),
+ self.decode_action.eq(DA.trap_ecall_ebreak)
# csrs
for op in [ F3.csrrw, F3.csrrs, F3.csrrc,
F3.csrrwi, F3.csrrsi, F3.csrrci]:
# csrs
for op in [ F3.csrrw, F3.csrrs, F3.csrrc,
F3.csrrwi, F3.csrrsi, F3.csrrci]: