ArmCondition.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using ARMeilleure.IntermediateRepresentation;
  2. using System;
  3. namespace ARMeilleure.CodeGen.Arm64
  4. {
  5. enum ArmCondition
  6. {
  7. Eq = 0,
  8. Ne = 1,
  9. GeUn = 2,
  10. LtUn = 3,
  11. Mi = 4,
  12. Pl = 5,
  13. Vs = 6,
  14. Vc = 7,
  15. GtUn = 8,
  16. LeUn = 9,
  17. Ge = 10,
  18. Lt = 11,
  19. Gt = 12,
  20. Le = 13,
  21. Al = 14,
  22. Nv = 15
  23. }
  24. static class ComparisonArm64Extensions
  25. {
  26. public static ArmCondition ToArmCondition(this Comparison comp)
  27. {
  28. return comp switch
  29. {
  30. Comparison.Equal => ArmCondition.Eq,
  31. Comparison.NotEqual => ArmCondition.Ne,
  32. Comparison.Greater => ArmCondition.Gt,
  33. Comparison.LessOrEqual => ArmCondition.Le,
  34. Comparison.GreaterUI => ArmCondition.GtUn,
  35. Comparison.LessOrEqualUI => ArmCondition.LeUn,
  36. Comparison.GreaterOrEqual => ArmCondition.Ge,
  37. Comparison.Less => ArmCondition.Lt,
  38. Comparison.GreaterOrEqualUI => ArmCondition.GeUn,
  39. Comparison.LessUI => ArmCondition.LtUn,
  40. _ => throw new ArgumentException(null, nameof(comp))
  41. };
  42. }
  43. }
  44. }