- # XXX not obvious
- b3 = Mux(load_store_address_low_2[1],
- Mux(load_store_address_low_2[0], self.regs.rs2[0:8],
- self.regs.rs2[8:16]),
- Mux(load_store_address_low_2[0], self.regs.rs2[16:24],
- self.regs.rs2[24:32]))
- b2 = Mux(load_store_address_low_2[1], self.regs.rs2[0:8],
- self.regs.rs2[16:24])
- b1 = Mux(load_store_address_low_2[0], self.regs.rs2[0:8],
- self.regs.rs2[8:16])
- b0 = self.regs.rs2[0:8]
-
- self.comb += mi.rw_data_in.eq(Cat(b0, b1, b2, b3))
-
- # XXX not obvious
- unmasked_loaded_value = Signal(32)
-
- b0 = Mux(load_store_address_low_2[1],
- Mux(load_store_address_low_2[0], mi.rw_data_out[24:32],
- mi.rw_data_out[16:24]),
- Mux(load_store_address_low_2[0], mi.rw_data_out[15:8],
- mi.rw_data_out[0:8]))
- b1 = Mux(load_store_address_low_2[1], mi.rw_data_out[24:31],
- mi.rw_data_out[8:16])
- b23 = mi.rw_data_out[16:32]
-
- self.comb += unmasked_loaded_value.eq(Cat(b0, b1, b23))
-
- # XXX not obvious
- loaded_value = Signal(32)
-
- b0 = unmasked_loaded_value[0:8]
- b1 = Mux(dc.funct3[0:2] == 0,
- Replicate(~dc.funct3[2] & unmasked_loaded_value[7], 8),
- unmasked_loaded_value[8:16])
- b2 = Mux(dc.funct3[1] == 0,
- Replicate(~dc.funct3[2] &
- Mux(dc.funct3[0], unmasked_loaded_value[15],
- unmasked_loaded_value[7]),
- 16),
- unmasked_loaded_value[16:32])
-
- self.comb += loaded_value.eq(Cat(b0, b1, b2))
-