addw.s 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # Hitachi H8 testcase 'add.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. # Instructions tested:
  12. # add.w xx:3, rd ; 0 a 0xxx rd (sx only)
  13. # add.w xx:16, rd ; 7 9 1 rd imm16
  14. # add.w rs, rd ; 0 9 rs rd
  15. #
  16. start
  17. .if (sim_cpu == h8sx) ; 3-bit immediate mode only for h8sx
  18. add_w_imm3:
  19. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  20. ;; fixme set ccr
  21. ;; add.w #xx:3,Rd ; Immediate 3-bit operand
  22. add.w #7, r0 ; FIXME will not assemble yet
  23. ; .word 0x0a70 ; Fake it until assembler will take it.
  24. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  25. test_h_gr16 0xa5ac r0 ; add result: a5a5 + 7
  26. test_h_gr32 0xa5a5a5ac er0 ; add result: a5a5 + 7
  27. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  28. test_gr_a5a5 2
  29. test_gr_a5a5 3
  30. test_gr_a5a5 4
  31. test_gr_a5a5 5
  32. test_gr_a5a5 6
  33. test_gr_a5a5 7
  34. .endif
  35. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  36. add_w_imm16:
  37. ;; add.w immediate not available in h8300 mode.
  38. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  39. ;; fixme set ccr
  40. ;; add.w #xx:16,Rd
  41. add.w #0x111, r0 ; Immediate 16-bit operand
  42. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  43. test_h_gr16 0xa6b6 r0 ; add result: a5a5 + 111
  44. test_h_gr32 0xa5a5a6b6 er0 ; add result: a5a5 + 111
  45. test_gr_a5a5 1 ; Make sure other general regs not disturbed
  46. test_gr_a5a5 2
  47. test_gr_a5a5 3
  48. test_gr_a5a5 4
  49. test_gr_a5a5 5
  50. test_gr_a5a5 6
  51. test_gr_a5a5 7
  52. .endif
  53. add_w_reg:
  54. set_grs_a5a5 ; Fill all general regs with a fixed pattern
  55. ;; fixme set ccr
  56. ;; add.w Rs,Rd
  57. mov.w #0x111, r1
  58. add.w r1, r0 ; Register operand
  59. ;; fixme test ccr ; H=0 N=1 Z=0 V=0 C=0
  60. test_h_gr16 0xa6b6 r0 ; add result: a5a5 + 111
  61. test_h_gr16 0x0111 r1
  62. .if (sim_cpu) ; non-zero means h8300h, s, or sx
  63. test_h_gr32 0xa5a5a6b6 er0 ; add result: a5a5 + 111
  64. test_h_gr32 0xa5a50111 er1
  65. .endif
  66. test_gr_a5a5 2 ; Make sure other general regs not disturbed
  67. test_gr_a5a5 3
  68. test_gr_a5a5 4
  69. test_gr_a5a5 5
  70. test_gr_a5a5 6
  71. test_gr_a5a5 7
  72. pass
  73. exit 0