1 def sbf(RA
, mask
=None, zero
=False):
2 RT
= RA
if mask
is not None and not zero
else 0
4 # start setting if no predicate or if 1st predicate bit set
5 setting_mode
= mask
is None
8 if not setting_mode
and mask
is not None and (mask
& bit
):
9 setting_mode
= True # back into "setting" mode
10 if setting_mode
and mask
is not None and not (mask
& bit
):
11 setting_mode
= False # disable when no mask bit
13 if RA
& bit
: # found a bit in rs1: stop setting RT
20 if __name__
== '__main__':
22 v3
= 0b10010100 # vmsbf.m v2, v3
24 RT
= sbf(v3
, m
, zero
=True)
25 print(bin(v3
), bin(v2
), bin(RT
))
26 v3
= 0b10010100 # vmsbf.m v2, v3
27 v2
= 0b00000011 # v2 contents
29 print(bin(v3
), bin(v2
), bin(RT
))
30 v3
= 0b10010101 # vmsbf.m v2, v3
33 print(bin(v3
), bin(v2
), bin(RT
))
34 v3
= 0b00000000 # vmsbf.m v2, v3
37 print(bin(v3
), bin(v2
), bin(RT
))