cmpw.s 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # Hitachi H8 testcase 'cmp.w'
  2. # mach(): all
  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. start
  12. .if (sim_cpu == h8sx) ; 3-bit immediate mode only for h8sx
  13. cmp_w_imm3: ;
  14. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  15. ;; fixme set ccr
  16. ;; cmp.w #xx:3,Rd ; Immediate 3-bit operand
  17. mov.w #5, r0
  18. cmp.w #5, r0
  19. beq eq3
  20. fail
  21. eq3:
  22. cmp.w #6, r0
  23. blt lt3
  24. fail
  25. lt3:
  26. cmp.w #4, r0
  27. bgt gt3
  28. fail
  29. gt3:
  30. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  31. test_h_gr32 0xa5a50005 er0 ; er0 unchanged
  32. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  33. test_gr_a5a5 2
  34. test_gr_a5a5 3
  35. test_gr_a5a5 4
  36. test_gr_a5a5 5
  37. test_gr_a5a5 6
  38. test_gr_a5a5 7
  39. .endif
  40. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  41. cmp_w_imm16: ; cmp.w immediate not available in h8300 mode.
  42. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  43. ;; fixme set ccr
  44. ;; cmp.w #xx:16,Rd
  45. cmp.w #0xa5a5, r0 ; Immediate 16-bit operand
  46. beq eqi
  47. fail
  48. eqi: cmp.w #0xa5a6, r0
  49. blt lti
  50. fail
  51. lti: cmp.w #0xa5a4, r0
  52. bgt gti
  53. fail
  54. gti:
  55. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  56. test_h_gr16 0xa5a5 r0 ; r0 unchanged
  57. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  58. test_h_gr32 0xa5a5a5a5 er0 ; er0 unchanged
  59. .endif
  60. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  61. test_gr_a5a5 2
  62. test_gr_a5a5 3
  63. test_gr_a5a5 4
  64. test_gr_a5a5 5
  65. test_gr_a5a5 6
  66. test_gr_a5a5 7
  67. cmp_w_imm16_less_than_zero: ; Test for less-than-zero immediate
  68. set_grs_a5a5
  69. ;; cmp.w #xx:16, Rd, where #xx < 0 (ie. #xx > 0x7fff).
  70. sub.w r0, r0
  71. cmp.w #0x8001, r0
  72. bls ltz
  73. fail
  74. ltz: test_gr_a5a5 1
  75. test_gr_a5a5 2
  76. test_gr_a5a5 3
  77. test_gr_a5a5 4
  78. test_gr_a5a5 5
  79. test_gr_a5a5 6
  80. test_gr_a5a5 7
  81. .endif
  82. cmp_w_reg:
  83. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  84. ;; fixme set ccr
  85. ;; cmp.w Rs,Rd
  86. mov.w #0xa5a5, r1
  87. cmp.w r1, r0 ; Register operand
  88. beq eqr
  89. fail
  90. eqr: mov.w #0xa5a6, r1
  91. cmp.w r1, r0
  92. blt ltr
  93. fail
  94. ltr: mov.w #0xa5a4, r1
  95. cmp.w r1, r0
  96. bgt gtr
  97. fail
  98. gtr:
  99. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  100. test_h_gr16 0xa5a5 r0 ; r0 unchanged.
  101. test_h_gr16 0xa5a4 r1 ; r1 unchanged.
  102. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  103. test_h_gr32 0xa5a5a5a5 er0 ; r0 unchanged
  104. test_h_gr32 0xa5a5a5a4 er1 ; r1 unchanged
  105. .endif
  106. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  107. test_gr_a5a5 3
  108. test_gr_a5a5 4
  109. test_gr_a5a5 5
  110. test_gr_a5a5 6
  111. test_gr_a5a5 7
  112. pass
  113. exit 0