1 # Hitachi H8 testcase 'addx'
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
11 .include "testutils.inc"
13 # Instructions tested:
14 # addx.b #xx:8, rd8 ; 9 rd8 xxxxxxxx
15 # addx.b #xx:8, @erd ; 7 d erd ???? 9 ???? xxxxxxxx
16 # addx.b #xx:8, @erd- ; 0 1 7 6 6 c erd 1??? 9 ???? xxxxxxxx
17 # addx.b rs8, rd8 ; 0 e rs8 rd8
18 # addx.b rs8, @erd ; 7 d erd ???? 0 e rs8 ????
19 # addx.b rs8, @erd- ; 0 1 7 6 6 c erd 1??? 0 e rs8 ????
20 # addx.b @ers, rd8 ; 7 c ers ???? 0 e ???? rd8
21 # addx.b @ers-, rd8 ; 0 1 7 6 6 c ers 00?? 0 e ???? rd8
22 # addx.b @ers, @erd ; 0 1 7 4 6 8 ers d 0 erd 1 ????
23 # addx.b @ers-, @erd- ; 0 1 7 6 6 c ers d a erd 1 ????
38 long_src: .long 0x50505
45 set_grs_a5a5 ; Fill all general regs with a fixed pattern
48 ;; addx.b #xx:8,Rd ; Addx with carry initially zero.
49 addx.b #5, r0l ; Immediate 8-bit operand
51 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
56 test_h_gr16 0xa5aa r0 ; add result: a5 + 5
57 .if (sim_cpu) ; non-zero means h8300h, s, or sx
58 test_h_gr32 0xa5a5a5aa er0 ; add result: a5 + 5
60 test_gr_a5a5 1 ; Make sure other general regs not disturbed
69 set_grs_a5a5 ; Fill all general regs with a fixed pattern
72 ;; addx.b #xx:8,Rd ; Addx with carry initially one.
74 addx.b #5, r0l ; Immediate 8-bit operand
76 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
81 test_h_gr16 0xa5ab r0 ; add result: a5 + 5 + 1
82 .if (sim_cpu) ; non-zero means h8300h, s, or sx
83 test_h_gr32 0xa5a5a5ab er0 ; add result: a5 + 5 + 1
85 test_gr_a5a5 1 ; Make sure other general regs not disturbed
95 set_grs_a5a5 ; Fill all general regs with a fixed pattern
98 ;; addx.b #xx:8,@eRd ; Addx to register indirect
102 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
107 test_h_gr32 byte_dest er0 ; er0 still contains address
109 test_gr_a5a5 1 ; Make sure other general regs not disturbed
117 ;; Now check the result of the add to memory.
123 addx_b_imm8_rdpostdec:
124 set_grs_a5a5 ; Fill all general regs with a fixed pattern
127 ;; addx.b #xx:8,@eRd- ; Addx to register post-decrement
131 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
136 test_h_gr32 byte_dest-1 er0 ; er0 contains address minus one
138 test_gr_a5a5 1 ; Make sure other general regs not disturbed
146 ;; Now check the result of the add to memory.
147 cmp.b #10, @byte_dest
154 set_grs_a5a5 ; Fill all general regs with a fixed pattern
157 ;; addx.b Rs,Rd ; addx with carry initially zero
159 addx.b r0h, r0l ; Register operand
161 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
166 test_h_gr16 0x05aa r0 ; add result: a5 + 5
167 .if (sim_cpu) ; non-zero means h8300h, s, or sx
168 test_h_gr32 0xa5a505aa er0 ; add result: a5 + 5
170 test_gr_a5a5 1 ; Make sure other general regs not disturbed
179 set_grs_a5a5 ; Fill all general regs with a fixed pattern
182 ;; addx.b Rs,Rd ; addx with carry initially one
185 addx.b r0h, r0l ; Register operand
187 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
192 test_h_gr16 0x05ab r0 ; add result: a5 + 5 + 1
193 .if (sim_cpu) ; non-zero means h8300h, s, or sx
194 test_h_gr32 0xa5a505ab er0 ; add result: a5 + 5 + 1
196 test_gr_a5a5 1 ; Make sure other general regs not disturbed
204 .if (sim_cpu == h8sx)
206 set_grs_a5a5 ; Fill all general regs with a fixed pattern
209 ;; addx.b rs8,@eRd ; Addx to register indirect
214 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
219 test_h_gr32 byte_dest er0 ; er0 still contains address
220 test_h_gr32 0xa5a5a505 er1 ; er1 has the test load
222 test_gr_a5a5 2 ; Make sure other general regs not disturbed
229 ;; Now check the result of the add to memory.
230 cmp.b #15, @byte_dest
235 addx_b_reg8_rdpostdec:
236 set_grs_a5a5 ; Fill all general regs with a fixed pattern
239 ;; addx.b rs8,@eRd- ; Addx to register post-decrement
244 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
249 test_h_gr32 byte_dest-1 er0 ; er0 contains address minus one
250 test_h_gr32 0xa5a5a505 er1 ; er1 contains the test load
252 test_gr_a5a5 2 ; Make sure other general regs not disturbed
259 ;; Now check the result of the add to memory.
260 cmp.b #20, @byte_dest
266 set_grs_a5a5 ; Fill all general regs with a fixed pattern
269 ;; addx.b @eRs,rd8 ; Addx from reg indirect to reg
273 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
278 test_h_gr32 byte_src er0 ; er0 still contains address
279 test_h_gr32 0xa5a5a5aa er1 ; er1 contains the sum
281 test_gr_a5a5 2 ; Make sure other general regs not disturbed
288 addx_b_rspostdec_reg8:
289 set_grs_a5a5 ; Fill all general regs with a fixed pattern
292 ;; addx.b @eRs-,rd8 ; Addx to register post-decrement
296 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
301 test_h_gr32 byte_src-1 er0 ; er0 contains address minus one
302 test_h_gr32 0xa5a5a5aa er1 ; er1 contains the sum
304 test_gr_a5a5 2 ; Make sure other general regs not disturbed
312 set_grs_a5a5 ; Fill all general regs with a fixed pattern
315 ;; addx.b @eRs,rd8 ; Addx from reg indirect to reg
320 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
325 test_h_gr32 byte_src er0 ; er0 still contains src address
326 test_h_gr32 byte_dest er1 ; er1 still contains dst address
328 test_gr_a5a5 2 ; Make sure other general regs not disturbed
334 ;; Now check the result of the add to memory.
335 cmp.b #25, @byte_dest
340 addx_b_rspostdec_rspostdec:
341 set_grs_a5a5 ; Fill all general regs with a fixed pattern
344 ;; addx.b @eRs-,rd8 ; Addx to register post-decrement
349 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
354 test_h_gr32 byte_src-1 er0 ; er0 contains src address minus one
355 test_h_gr32 byte_dest-1 er1 ; er1 contains dst address minus one
357 test_gr_a5a5 2 ; Make sure other general regs not disturbed
363 ;; Now check the result of the add to memory.
364 cmp.b #30, @byte_dest
370 set_grs_a5a5 ; Fill all general regs with a fixed pattern
373 ;; addx.w #xx:16,Rd ; Addx with carry initially zero.
374 addx.w #0x505, r0 ; Immediate 16-bit operand
376 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
381 test_h_gr16 0xaaaa r0 ; add result: 0xa5a5 + 0x505
382 test_h_gr32 0xa5a5aaaa er0 ; add result: 0xa5a5 + 0x505
383 test_gr_a5a5 1 ; Make sure other general regs not disturbed
392 set_grs_a5a5 ; Fill all general regs with a fixed pattern
395 ;; addx.w #xx:16,Rd ; Addx with carry initially one.
397 addx.w #0x505, r0 ; Immediate 16-bit operand
399 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
404 test_h_gr16 0xaaab r0 ; add result: 0xa5a5 + 0x505 + 1
405 test_h_gr32 0xa5a5aaab er0 ; add result: 0xa5a5 + 0x505 + 1
406 test_gr_a5a5 1 ; Make sure other general regs not disturbed
415 set_grs_a5a5 ; Fill all general regs with a fixed pattern
418 ;; addx.w #xx:16,@eRd ; Addx to register indirect
422 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
427 test_h_gr32 word_dest er0 ; er0 still contains address
429 test_gr_a5a5 1 ; Make sure other general regs not disturbed
437 ;; Now check the result of the add to memory.
438 cmp.w #0x505, @word_dest
443 addx_w_imm16_rdpostdec:
444 set_grs_a5a5 ; Fill all general regs with a fixed pattern
447 ;; addx.w #xx:16,@eRd- ; Addx to register post-decrement
451 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
456 test_h_gr32 word_dest-2 er0 ; er0 contains address minus one
458 test_gr_a5a5 1 ; Make sure other general regs not disturbed
466 ;; Now check the result of the add to memory.
467 cmp.w #0xa0a, @word_dest
473 set_grs_a5a5 ; Fill all general regs with a fixed pattern
476 ;; addx.w Rs,Rd ; addx with carry initially zero
478 addx.w e0, r0 ; Register operand
480 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
485 test_h_gr32 0x0505aaaa er0 ; add result:
486 test_gr_a5a5 1 ; Make sure other general regs not disturbed
495 set_grs_a5a5 ; Fill all general regs with a fixed pattern
498 ;; addx.w Rs,Rd ; addx with carry initially one
501 addx.w e0, r0 ; Register operand
503 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
508 test_h_gr32 0x0505aaab er0 ; add result:
509 test_gr_a5a5 1 ; Make sure other general regs not disturbed
518 set_grs_a5a5 ; Fill all general regs with a fixed pattern
521 ;; addx.w rs8,@eRd ; Addx to register indirect
526 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
531 test_h_gr32 word_dest er0 ; er0 still contains address
532 test_h_gr32 0xa5a50505 er1 ; er1 has the test load
534 test_gr_a5a5 2 ; Make sure other general regs not disturbed
541 ;; Now check the result of the add to memory.
542 cmp.w #0xf0f, @word_dest
547 addx_w_reg16_rdpostdec:
548 set_grs_a5a5 ; Fill all general regs with a fixed pattern
551 ;; addx.w rs8,@eRd- ; Addx to register post-decrement
556 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
561 test_h_gr32 word_dest-2 er0 ; er0 contains address minus one
562 test_h_gr32 0xa5a50505 er1 ; er1 contains the test load
564 test_gr_a5a5 2 ; Make sure other general regs not disturbed
571 ;; Now check the result of the add to memory.
572 cmp.w #0x1414, @word_dest
578 set_grs_a5a5 ; Fill all general regs with a fixed pattern
581 ;; addx.w @eRs,rd8 ; Addx from reg indirect to reg
585 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
590 test_h_gr32 word_src er0 ; er0 still contains address
591 test_h_gr32 0xa5a5aaaa er1 ; er1 contains the sum
593 test_gr_a5a5 2 ; Make sure other general regs not disturbed
600 addx_w_rspostdec_reg16:
601 set_grs_a5a5 ; Fill all general regs with a fixed pattern
604 ;; addx.w @eRs-,rd8 ; Addx to register post-decrement
608 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
613 test_h_gr32 word_src-2 er0 ; er0 contains address minus one
614 test_h_gr32 0xa5a5aaaa er1 ; er1 contains the sum
616 test_gr_a5a5 2 ; Make sure other general regs not disturbed
624 set_grs_a5a5 ; Fill all general regs with a fixed pattern
627 ;; addx.w @eRs,rd8 ; Addx from reg indirect to reg
632 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
637 test_h_gr32 word_src er0 ; er0 still contains src address
638 test_h_gr32 word_dest er1 ; er1 still contains dst address
640 test_gr_a5a5 2 ; Make sure other general regs not disturbed
646 ;; Now check the result of the add to memory.
647 cmp.w #0x1919, @word_dest
652 addx_w_rspostdec_rdpostdec:
653 set_grs_a5a5 ; Fill all general regs with a fixed pattern
656 ;; addx.w @eRs-,rd8 ; Addx to register post-decrement
661 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
666 test_h_gr32 word_src-2 er0 ; er0 contains src address minus one
667 test_h_gr32 word_dest-2 er1 ; er1 contains dst address minus one
669 test_gr_a5a5 2 ; Make sure other general regs not disturbed
675 ;; Now check the result of the add to memory.
676 cmp.w #0x1e1e, @word_dest
682 set_grs_a5a5 ; Fill all general regs with a fixed pattern
685 ;; addx.l #xx:32,Rd ; Addx with carry initially zero.
686 addx.l #0x50505, er0 ; Immediate 32-bit operand
688 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
693 test_h_gr32 0xa5aaaaaa er0 ; add result:
694 test_gr_a5a5 1 ; Make sure other general regs not disturbed
703 set_grs_a5a5 ; Fill all general regs with a fixed pattern
706 ;; addx.l #xx:32,Rd ; Addx with carry initially one.
708 addx.l #0x50505, er0 ; Immediate 32-bit operand
710 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
715 test_h_gr32 0xa5aaaaab er0 ; add result:
716 test_gr_a5a5 1 ; Make sure other general regs not disturbed
725 set_grs_a5a5 ; Fill all general regs with a fixed pattern
728 ;; addx.l #xx:32,@eRd ; Addx to register indirect
730 addx.l #0x50505, @er0
732 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
737 test_h_gr32 long_dest er0 ; er0 still contains address
739 test_gr_a5a5 1 ; Make sure other general regs not disturbed
747 ;; Now check the result of the add to memory.
748 cmp.l #0x50505, @long_dest
753 addx_l_imm32_rdpostdec:
754 set_grs_a5a5 ; Fill all general regs with a fixed pattern
757 ;; addx.l #xx:32,@eRd- ; Addx to register post-decrement
759 addx.l #0x50505, @er0-
761 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
766 test_h_gr32 long_dest-4 er0 ; er0 contains address minus one
768 test_gr_a5a5 1 ; Make sure other general regs not disturbed
776 ;; Now check the result of the add to memory.
777 cmp.l #0xa0a0a, @long_dest
783 set_grs_a5a5 ; Fill all general regs with a fixed pattern
786 ;; addx.l Rs,Rd ; addx with carry initially zero
788 addx.l er0, er1 ; Register operand
790 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
795 test_h_gr32 0x50505 er0 ; add load
796 test_h_gr32 0xa5aaaaaa er1 ; add result:
797 test_gr_a5a5 2 ; Make sure other general regs not disturbed
805 set_grs_a5a5 ; Fill all general regs with a fixed pattern
808 ;; addx.l Rs,Rd ; addx with carry initially one
811 addx.l er0, er1 ; Register operand
813 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
818 test_h_gr32 0x50505 er0 ; add result:
819 test_h_gr32 0xa5aaaaab er1 ; add result:
820 test_gr_a5a5 2 ; Make sure other general regs not disturbed
828 set_grs_a5a5 ; Fill all general regs with a fixed pattern
831 ;; addx.l rs8,@eRd ; Addx to register indirect
836 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
841 test_h_gr32 long_dest er0 ; er0 still contains address
842 test_h_gr32 0x50505 er1 ; er1 has the test load
844 test_gr_a5a5 2 ; Make sure other general regs not disturbed
851 ;; Now check the result of the add to memory.
852 cmp.l #0xf0f0f, @long_dest
857 addx_l_reg32_rdpostdec:
858 set_grs_a5a5 ; Fill all general regs with a fixed pattern
861 ;; addx.l rs8,@eRd- ; Addx to register post-decrement
866 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
871 test_h_gr32 long_dest-4 er0 ; er0 contains address minus one
872 test_h_gr32 0x50505 er1 ; er1 contains the test load
874 test_gr_a5a5 2 ; Make sure other general regs not disturbed
881 ;; Now check the result of the add to memory.
882 cmp.l #0x141414, @long_dest
888 set_grs_a5a5 ; Fill all general regs with a fixed pattern
891 ;; addx.l @eRs,rd8 ; Addx from reg indirect to reg
895 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
900 test_h_gr32 long_src er0 ; er0 still contains address
901 test_h_gr32 0xa5aaaaaa er1 ; er1 contains the sum
903 test_gr_a5a5 2 ; Make sure other general regs not disturbed
910 addx_l_rspostdec_reg32:
911 set_grs_a5a5 ; Fill all general regs with a fixed pattern
914 ;; addx.l @eRs-,rd8 ; Addx to register post-decrement
918 test_carry_clear ; H=0 N=1 Z=0 V=0 C=0
923 test_h_gr32 long_src-4 er0 ; er0 contains address minus one
924 test_h_gr32 0xa5aaaaaa er1 ; er1 contains the sum
926 test_gr_a5a5 2 ; Make sure other general regs not disturbed
934 set_grs_a5a5 ; Fill all general regs with a fixed pattern
937 ;; addx.l @eRs,rd8 ; Addx from reg indirect to reg
942 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
947 test_h_gr32 long_src er0 ; er0 still contains src address
948 test_h_gr32 long_dest er1 ; er1 still contains dst address
950 test_gr_a5a5 2 ; Make sure other general regs not disturbed
956 ;; Now check the result of the add to memory.
957 cmp.l #0x191919, @long_dest
962 addx_l_rspostdec_rdpostdec:
963 set_grs_a5a5 ; Fill all general regs with a fixed pattern
966 ;; addx.l @eRs-,rd8 ; Addx to register post-decrement
971 test_carry_clear ; H=0 N=0 Z=0 V=0 C=0
976 test_h_gr32 long_src-4 er0 ; er0 contains src address minus one
977 test_h_gr32 long_dest-4 er1 ; er1 contains dst address minus one
979 test_gr_a5a5 2 ; Make sure other general regs not disturbed
985 ;; Now check the result of the add to memory.
986 cmp.l #0x1e1e1e, @long_dest