testutils.inc 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # r0-r3 are used as tmps, consider them call clobbered by these macros.
  2. .macro start
  3. .data
  4. failmsg:
  5. .ascii "fail\n"
  6. passmsg:
  7. .ascii "pass\n"
  8. .text
  9. .global _start
  10. _start:
  11. .endm
  12. .macro exit rc
  13. ldi8 r1, \rc
  14. ldi8 r0, #1
  15. trap #0
  16. .endm
  17. .macro pass
  18. ldi8 r3, 5
  19. ld24 r2, passmsg
  20. ldi8 r1, 1
  21. ldi8 r0, 5
  22. trap #0
  23. exit 0
  24. .endm
  25. .macro fail
  26. ldi8 r3, 5
  27. ld24 r2, failmsg
  28. ldi8 r1, 1
  29. ldi8 r0, 5
  30. trap #0
  31. exit 1
  32. .endm
  33. .macro mvi_h_gr reg, val
  34. .if (\val >= -128) && (\val <= 127)
  35. ldi8 \reg, \val
  36. .else
  37. seth \reg, high(\val)
  38. or3 \reg, \reg, low(\val)
  39. .endif
  40. .endm
  41. .macro mvaddr_h_gr reg, addr
  42. seth \reg, high(\addr)
  43. or3 \reg, \reg, low(\addr)
  44. .endm
  45. # Other macros know this only clobbers r0.
  46. .macro test_h_gr reg, val
  47. mvaddr_h_gr r0, \val
  48. beq \reg, r0, test_gr\@
  49. fail
  50. test_gr\@:
  51. .endm
  52. .macro mvi_h_condbit val
  53. ldi8 r0, 0
  54. ldi8 r1, 1
  55. .if \val
  56. cmp r0, r1
  57. .else
  58. cmp r1, r0
  59. .endif
  60. .endm
  61. .macro test_h_condbit val
  62. .if \val
  63. bc test_c1\@
  64. fail
  65. test_c1\@:
  66. .else
  67. bnc test_c0\@
  68. fail
  69. test_c0\@:
  70. .endif
  71. .endm
  72. .macro mvi_h_accum0 hi, lo
  73. mvi_h_gr r0, \hi
  74. mvtachi r0
  75. mvi_h_gr r0, \lo
  76. mvtaclo r0
  77. .endm
  78. .macro test_h_accum0 hi, lo
  79. mvfachi r1
  80. test_h_gr r1, \hi
  81. mvfaclo r1
  82. test_h_gr r1, \lo
  83. .endm