1 from nmigen
.hdl
.rec
import Record
, Layout
3 from soc
.decoder
.power_enums
import InternalOp
, Function
, LDSTMode
6 class CompLDSTOpSubset(Record
):
9 a copy of the relevant subset information from Decode2Execute1Type
10 needed for LD/ST operations. use with eq_from_execute1 (below) to
13 note: rc / oe is needed (later) for st*cx when it comes to setting OV/SO
15 def __init__(self
, name
=None):
16 layout
= (('insn_type', InternalOp
),
17 ('imm_data', Layout((("imm", 64), ("imm_ok", 1)))),
19 ('rc', Layout((("rc", 1), ("rc_ok", 1)))), # for later
20 ('oe', Layout((("oe", 1), ("oe_ok", 1)))), # for later
26 ('ldst_mode', LDSTMode
))
28 Record
.__init
__(self
, Layout(layout
), name
=name
)
30 # grrr. Record does not have kwargs
31 self
.insn_type
.reset_less
= True
32 self
.is_32bit
.reset_less
= True
33 self
.zero_a
.reset_less
= True
34 self
.is_signed
.reset_less
= True
35 self
.data_len
.reset_less
= True
36 self
.byte_reverse
.reset_less
= True
37 self
.sign_extend
.reset_less
= True
38 self
.ldst_mode
.reset_less
= True
40 def eq_from_execute1(self
, other
):
41 """ use this to copy in from Decode2Execute1Type
44 for fname
, sig
in self
.fields
.items():
45 eqfrom
= other
.do
.fields
[fname
]
46 res
.append(sig
.eq(eqfrom
))
50 return [self
.insn_type
,