Advertisement
Guest User

Untitled

a guest
Apr 10th, 2021
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. ALUSrc(value, flags, max_size=32):
  2. if flags == 0b0000:
  3. return BroadcastImmediateReference(value)
  4.  
  5. if flags >> 2 == 0b01: // SEE HERE!
  6. ureg = value | (flags & 1) << 8
  7. if flags & 0b10:
  8. if max_size < 32:
  9. UNDEFINED()
  10. return BroadcastUReg32Reference(ureg >> 1)
  11. else:
  12. return BroadcastUReg16Reference(ureg)
  13.  
  14. if flags & 0b11 == 0b00: UNDEFINED()
  15.  
  16. cache_flag = (flags & 0b11) == 0b10
  17. discard_flag = (flags & 0b11) == 0b11
  18.  
  19. if flags >> 2 == 0b11 and max_size >= 64:
  20. if value & 1: UNDEFINED()
  21. return Reg64Reference(value >> 1, cache=cache_flag, discard=discard_flag)
  22.  
  23. if flags >> 2 >= 0b10 and max_size >= 32:
  24. if flags >> 2 != 0b10: UNDEFINED()
  25. if value & 1: UNDEFINED()
  26. return Reg32Reference(value >> 1, cache=cache_flag, discard=discard_flag)
  27.  
  28. if flags >> 2 >= 0b01 and max_size >= 16:
  29. if flags >> 2 != 0b01: UNDEFINED() // Isn't this always undefined? After all, when "flags >> 2 == 0b01", then we go another branch (see other comment)
  30. return Reg16Reference(value, cache=cache_flag, discard=discard_flag)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement