alux_sub.tst 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "alu.inc"
  2. .code
  3. prolog
  4. #define SUBX(N, I0, I1, V) ALUX(N, sub, I0, I1, V)
  5. /* nothing */
  6. SUBX(0, 0, 0, 0)
  7. #if __WORDSIZE == 32
  8. /* carry */
  9. SUBX(1, 0x7fffffff, 0xffffffff, 0xffffffff)
  10. /* overflow */
  11. SUBX(2, 0x80000000, 1, 0)
  12. /* carry */
  13. SUBX(3, 0x7fffffff, 0x80000000, 0xffffffff)
  14. /* overflow */
  15. SUBX(4, 0x80000000, 0x7fffffff, 0)
  16. /* carry+overflow */
  17. SUBX(5, 1, 0x80000000, 0xffffffff)
  18. #else
  19. /* carry */
  20. SUBX(1, 0x7fffffff, 0xffffffff, -1)
  21. /* nothing */
  22. SUBX(2, 0x80000000, 1, 0)
  23. /* carry */
  24. SUBX(3, 0x7fffffff, 0x80000000, -1)
  25. /* nothing */
  26. SUBX(4, 0x80000000, 0x7fffffff, 0)
  27. /* carry */
  28. SUBX(5, 1, 0x80000000, -1)
  29. /* carry */
  30. SUBX(6, 0x7fffffffffffffff, 0xffffffffffffffff, -1)
  31. /* overflow */
  32. SUBX(7, 0x8000000000000000, 1, 0)
  33. /* carry */
  34. SUBX(8, 0x7fffffffffffffff, 0x8000000000000000, -1)
  35. /* overflow */
  36. SUBX(9, 0x8000000000000000, 0x7fffffffffffffff, 0)
  37. /* carry+overflow */
  38. SUBX(10,1, 0x8000000000000000, -1)
  39. #endif
  40. prepare
  41. pushargi ok
  42. ellipsis
  43. finishi @printf
  44. ret
  45. epilog