Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ALUSrc(value, flags, max_size=32):
- if flags == 0b0000:
- return BroadcastImmediateReference(value)
- if flags >> 2 == 0b01: // SEE HERE!
- ureg = value | (flags & 1) << 8
- if flags & 0b10:
- if max_size < 32:
- UNDEFINED()
- return BroadcastUReg32Reference(ureg >> 1)
- else:
- return BroadcastUReg16Reference(ureg)
- if flags & 0b11 == 0b00: UNDEFINED()
- cache_flag = (flags & 0b11) == 0b10
- discard_flag = (flags & 0b11) == 0b11
- if flags >> 2 == 0b11 and max_size >= 64:
- if value & 1: UNDEFINED()
- return Reg64Reference(value >> 1, cache=cache_flag, discard=discard_flag)
- if flags >> 2 >= 0b10 and max_size >= 32:
- if flags >> 2 != 0b10: UNDEFINED()
- if value & 1: UNDEFINED()
- return Reg32Reference(value >> 1, cache=cache_flag, discard=discard_flag)
- if flags >> 2 >= 0b01 and max_size >= 16:
- if flags >> 2 != 0b01: UNDEFINED() // Isn't this always undefined? After all, when "flags >> 2 == 0b01", then we go another branch (see other comment)
- return Reg16Reference(value, cache=cache_flag, discard=discard_flag)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement