isel2.ssa 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # tests that NaN is handled properly by
  2. # floating point comparisons
  3. export function w $lt(d %x, d %y) {
  4. @start
  5. %r =w cltd %x, %y
  6. ret %r
  7. }
  8. export function w $le(d %x, d %y) {
  9. @start
  10. %r =w cled %x, %y
  11. ret %r
  12. }
  13. export function w $gt(d %x, d %y) {
  14. @start
  15. %r =w cgtd %x, %y
  16. ret %r
  17. }
  18. export function w $ge(d %x, d %y) {
  19. @start
  20. %r =w cged %x, %y
  21. ret %r
  22. }
  23. export function w $eq1(d %x, d %y) {
  24. @start
  25. %r =w ceqd %x, %y
  26. ret %r
  27. }
  28. export function w $eq2(d %x, d %y) {
  29. @start
  30. %r =w ceqd %x, %y
  31. jnz %r, @true, @false
  32. @true
  33. ret 1
  34. @false
  35. ret 0
  36. }
  37. export function w $eq3(d %x, d %y) {
  38. @start
  39. %r =w ceqd %x, %y
  40. jnz %r, @true, @false
  41. @true
  42. ret %r
  43. @false
  44. ret 0
  45. }
  46. export function w $ne1(d %x, d %y) {
  47. @start
  48. %r =w cned %x, %y
  49. ret %r
  50. }
  51. export function w $ne2(d %x, d %y) {
  52. @start
  53. %r =w cned %x, %y
  54. jnz %r, @true, @false
  55. @true
  56. ret 1
  57. @false
  58. ret 0
  59. }
  60. export function w $ne3(d %x, d %y) {
  61. @start
  62. %r =w cned %x, %y
  63. jnz %r, @true, @false
  64. @true
  65. ret %r
  66. @false
  67. ret 0
  68. }
  69. export function w $o(d %x, d %y) {
  70. @start
  71. %r =w cod %x, %y
  72. ret %r
  73. }
  74. export function w $uo(d %x, d %y) {
  75. @start
  76. %r =w cuod %x, %y
  77. ret %r
  78. }
  79. # >>> driver
  80. # #include <math.h>
  81. # extern int lt(double, double);
  82. # extern int le(double, double);
  83. # extern int gt(double, double);
  84. # extern int ge(double, double);
  85. # extern int eq1(double, double);
  86. # extern int eq2(double, double);
  87. # extern int eq3(double, double);
  88. # extern int ne1(double, double);
  89. # extern int ne2(double, double);
  90. # extern int ne3(double, double);
  91. # extern int o(double, double);
  92. # extern int uo(double, double);
  93. # int main(void) {
  94. # /* LessThan Equal GreaterThan Unordered */
  95. # return !lt(0, 1) + lt(0, 0) + lt(1, 0) + lt(NAN, NAN)
  96. # + !le(0, 1) + !le(0, 0) + le(1, 0) + le(NAN, NAN)
  97. # + gt(0, 1) + gt(0, 0) + !gt(1, 0) + gt(NAN, NAN)
  98. # + ge(0, 1) + !ge(0, 0) + !ge(1, 0) + ge(NAN, NAN)
  99. # + eq1(0, 1) + !eq1(0, 0) + eq1(1, 0) + eq1(NAN, NAN)
  100. # + eq2(0, 1) + !eq2(0, 0) + eq2(1, 0) + eq2(NAN, NAN)
  101. # + eq3(0, 1) + !eq3(0, 0) + eq3(1, 0) + eq3(NAN, NAN)
  102. # + !ne1(0, 1) + ne1(0, 0) + !ne1(1, 0) + !ne1(NAN, NAN)
  103. # + !ne2(0, 1) + ne2(0, 0) + !ne2(1, 0) + !ne2(NAN, NAN)
  104. # + !ne3(0, 1) + ne3(0, 0) + !ne3(1, 0) + !ne3(NAN, NAN)
  105. # + !o(0, 1) + !o(0, 0) + !o(1, 0) + o(NAN, NAN)
  106. # + uo(0, 1) + uo(0, 0) + uo(1, 0) + !uo(NAN, NAN)
  107. # ;
  108. # }
  109. # <<<