tas.s 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # Hitachi H8 testcase 'tas'
  2. # mach(): h8300s h8sx
  3. # as(h8300): --defsym sim_cpu=0
  4. # as(h8300h): --defsym sim_cpu=1
  5. # as(h8300s): --defsym sim_cpu=2
  6. # as(h8sx): --defsym sim_cpu=3
  7. # ld(h8300h): -m h8300helf
  8. # ld(h8300s): -m h8300self
  9. # ld(h8sx): -m h8300sxelf
  10. .include "testutils.inc"
  11. .data
  12. byte_dst: .byte 0
  13. start
  14. tas_ind: ; test and set instruction
  15. set_grs_a5a5
  16. mov #byte_dst, er4
  17. set_ccr_zero
  18. ;; tas @erd
  19. tas @er4 ; should set zero flag
  20. test_carry_clear
  21. test_neg_clear
  22. test_ovf_clear
  23. test_zero_set
  24. tas @er4 ; should clear zero, set neg
  25. test_carry_clear
  26. test_neg_set
  27. test_ovf_clear
  28. test_zero_clear
  29. test_gr_a5a5 0 ; general regs have not been modified
  30. test_gr_a5a5 1
  31. test_gr_a5a5 2
  32. test_gr_a5a5 3
  33. test_h_gr32 byte_dst, er4
  34. test_gr_a5a5 5
  35. test_gr_a5a5 6
  36. test_gr_a5a5 7
  37. mov.b @byte_dst, r0l ; test variable has MSB set?
  38. test_h_gr8 0x80 r0l
  39. .if (sim_cpu == h8sx) ; h8sx can use any register for tas
  40. tas_h8sx: ; test and set instruction
  41. mov.b #0, @byte_dst
  42. set_grs_a5a5
  43. mov #byte_dst, er3
  44. set_ccr_zero
  45. ;; tas @erd
  46. tas @er3 ; should set zero flag
  47. test_carry_clear
  48. test_neg_clear
  49. test_ovf_clear
  50. test_zero_set
  51. tas @er3 ; should clear zero, set neg
  52. test_carry_clear
  53. test_neg_set
  54. test_ovf_clear
  55. test_zero_clear
  56. test_gr_a5a5 0 ; general regs have not been modified
  57. test_gr_a5a5 1
  58. test_gr_a5a5 2
  59. test_h_gr32 byte_dst, er3
  60. test_gr_a5a5 4
  61. test_gr_a5a5 5
  62. test_gr_a5a5 6
  63. test_gr_a5a5 7
  64. mov.b @byte_dst, r0l ; test variable has MSB set?
  65. test_h_gr8 0x80 r0l
  66. .endif ; h8sx
  67. pass
  68. exit 0