# Hitachi H8 testcase 'bfld', 'bfst' # mach(): h8sx # as(h8300): --defsym sim_cpu=0 # as(h8300h): --defsym sim_cpu=1 # as(h8300s): --defsym sim_cpu=2 # as(h8sx): --defsym sim_cpu=3 # ld(h8300h): -m h8300helf # ld(h8300s): -m h8300self # ld(h8sx): -m h8300sxelf .include "testutils.inc" .data byte_src: .byte 0xa5 byte_dst: .byte 0 start .if (sim_cpu == h8sx) bfld_imm8_ind: set_grs_a5a5 mov #byte_src, er2 ;; bfld #xx:8, @ers, rd8 set_ccr_zero bfld #1, @er2, r1l test_cc_clear test_h_gr8 1 r1l set_ccr_zero bfld #2, @er2, r1l test_cc_clear test_h_gr8 0 r1l set_ccr_zero bfld #7, @er2, r1l test_cc_clear test_h_gr8 5 r1l set_ccr_zero bfld #0x10, @er2, r1l test_cc_clear test_h_gr8 0 r1l set_ccr_zero bfld #0x20, @er2, r1l test_cc_clear test_h_gr8 1 r1l set_ccr_zero bfld #0xf0, @er2, r1l test_cc_clear test_h_gr8 0xa r1l test_h_gr32 0xa5a5a5a5 er0 test_h_gr32 0xa5a5a50a er1 test_h_gr32 byte_src er2 test_h_gr32 0xa5a5a5a5 er3 test_h_gr32 0xa5a5a5a5 er4 test_h_gr32 0xa5a5a5a5 er5 test_h_gr32 0xa5a5a5a5 er6 test_h_gr32 0xa5a5a5a5 er7 bfld_imm8_abs16: set_grs_a5a5 ;; bfld #xx:8, @aa:16, rd8 set_ccr_zero bfld #0x80, @byte_src:16, r1l test_cc_clear test_h_gr8 1 r1l set_ccr_zero bfld #0x40, @byte_src:16, r1l test_cc_clear test_h_gr8 0 r1l set_ccr_zero bfld #0xe0, @byte_src:16, r1l test_cc_clear test_h_gr8 0x5 r1l set_ccr_zero bfld #0x3c, @byte_src:16, r1l test_cc_clear test_h_gr8 9 r1l set_ccr_zero bfld #0xfe, @byte_src:16, r1l test_cc_clear test_h_gr8 0x52 r1l set_ccr_zero bfld #0, @byte_src:16, r1l test_cc_clear test_h_gr8 0 r1l test_h_gr32 0xa5a5a5a5 er0 test_h_gr32 0xa5a5a500 er1 test_h_gr32 0xa5a5a5a5 er2 test_h_gr32 0xa5a5a5a5 er3 test_h_gr32 0xa5a5a5a5 er4 test_h_gr32 0xa5a5a5a5 er5 test_h_gr32 0xa5a5a5a5 er6 test_h_gr32 0xa5a5a5a5 er7 bfst_imm8_ind: set_grs_a5a5 mov #byte_dst, er2 ;; bfst rd8, #xx:8, @ers mov.b #0, @byte_dst set_ccr_zero bfst r1l, #1, @er2 ;;; .word 0x7d20 ;;; .word 0xf901 test_cc_clear cmp.b #1, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #2, @er2 ;;; .word 0x7d20 ;;; .word 0xf902 test_cc_clear cmp.b #2, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #7, @er2 ;;; .word 0x7d20 ;;; .word 0xf907 test_cc_clear cmp.b #5, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0x10, @er2 ;;; .word 0x7d20 ;;; .word 0xf910 test_cc_clear cmp.b #0x10, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0x20, @er2 ;;; .word 0x7d20 ;;; .word 0xf920 test_cc_clear cmp.b #0x20, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0xf0, @er2 ;;; .word 0x7d20 ;;; .word 0xf9f0 test_cc_clear cmp.b #0x50, @byte_dst bne fail1:16 test_h_gr32 0xa5a5a5a5 er0 test_h_gr32 0xa5a5a5a5 er1 test_h_gr32 byte_dst er2 test_h_gr32 0xa5a5a5a5 er3 test_h_gr32 0xa5a5a5a5 er4 test_h_gr32 0xa5a5a5a5 er5 test_h_gr32 0xa5a5a5a5 er6 test_h_gr32 0xa5a5a5a5 er7 bfst_imm8_abs32: set_grs_a5a5 ;; bfst #xx:8, @aa:32, rd8 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0x80, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf980 test_cc_clear cmp.b #0x80, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0x40, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf940 test_cc_clear cmp.b #0x40, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0xe0, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf9e0 test_cc_clear cmp.b #0xa0, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0x3c, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf93c test_cc_clear cmp.b #0x14, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0xfe, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf9fe test_cc_clear cmp.b #0x4a, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf900 test_cc_clear cmp.b #0x0, @byte_dst bne fail1:16 mov.b #0, @byte_dst set_ccr_zero bfst r1l, #0x38, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf938 test_cc_clear cmp.b #0x28, @byte_dst bne fail1:16 ;; ;; Now let's do one in which the bits in the destination ;; are appropriately combined with the bits in the source. ;; mov.b #0xc3, @byte_dst set_ccr_zero bfst r1l, #0x3c, @byte_dst:32 ;;; .word 0x6a38 ;;; .long byte_dst ;;; .word 0xf93c test_cc_clear cmp.b #0xd7, @byte_dst bne fail1:16 test_grs_a5a5 .endif pass exit 0 fail1: fail