RegisterMask.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. namespace ChocolArm64.IntermediateRepresentation
  3. {
  4. struct RegisterMask : IEquatable<RegisterMask>
  5. {
  6. public long IntMask { get; set; }
  7. public long VecMask { get; set; }
  8. public RegisterMask(long intMask, long vecMask)
  9. {
  10. IntMask = intMask;
  11. VecMask = vecMask;
  12. }
  13. public static RegisterMask operator &(RegisterMask x, RegisterMask y)
  14. {
  15. return new RegisterMask(x.IntMask & y.IntMask, x.VecMask & y.VecMask);
  16. }
  17. public static RegisterMask operator |(RegisterMask x, RegisterMask y)
  18. {
  19. return new RegisterMask(x.IntMask | y.IntMask, x.VecMask | y.VecMask);
  20. }
  21. public static RegisterMask operator ~(RegisterMask x)
  22. {
  23. return new RegisterMask(~x.IntMask, ~x.VecMask);
  24. }
  25. public static bool operator ==(RegisterMask x, RegisterMask y)
  26. {
  27. return x.Equals(y);
  28. }
  29. public static bool operator !=(RegisterMask x, RegisterMask y)
  30. {
  31. return !x.Equals(y);
  32. }
  33. public override bool Equals(object obj)
  34. {
  35. return obj is RegisterMask regMask && Equals(regMask);
  36. }
  37. public bool Equals(RegisterMask other)
  38. {
  39. return IntMask == other.IntMask && VecMask == other.VecMask;
  40. }
  41. public override int GetHashCode()
  42. {
  43. return HashCode.Combine(IntMask, VecMask);
  44. }
  45. }
  46. }