From 687cdb134c4b219c5efe6e252de5418d6702948a Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Thu, 7 Mar 2024 19:17:37 +0100 Subject: The abs16/abs32 variants of the bit operations seem to have been introduced in the h8s2000 --- src/devices/cpu/h8/h8.lst | 72 ++++++++++++++++++++++---------------------- src/devices/cpu/h8/h8h.h | 28 ++++++++--------- src/devices/cpu/h8/h8s2000.h | 15 +++++++++ 3 files changed, 65 insertions(+), 50 deletions(-) diff --git a/src/devices/cpu/h8/h8.lst b/src/devices/cpu/h8/h8.lst index 82aba817d8c..9d46e2475c7 100644 --- a/src/devices/cpu/h8/h8.lst +++ b/src/devices/cpu/h8/h8.lst @@ -1870,67 +1870,67 @@ macro jsr32 %opc %spreg r8_w(m_IR[0], m_TMP1); prefetch_done(); -6a106300 ffffff0f 1 btst r8h abs16 h +6a106300 ffffff0f 1 btst r8h abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); btst r8_r(m_IR[2] >> 4) prefetch -6a107300 ffffff8f 1 btst imm3 abs16 h +6a107300 ffffff8f 1 btst imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); btst m_IR[2] >> 4 prefetch -6a107400 ffffff8f 1 bor imm3 abs16 h +6a107400 ffffff8f 1 bor imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); bor m_IR[2] >> 4 prefetch -6a107480 ffffff8f 1 bior imm3 abs16 h +6a107480 ffffff8f 1 bior imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); bior m_IR[2] >> 4 prefetch -6a107500 ffffff8f 1 bxor imm3 abs16 h +6a107500 ffffff8f 1 bxor imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); bxor m_IR[2] >> 4 prefetch -6a107580 ffffff8f 1 bixor imm3 abs16 h +6a107580 ffffff8f 1 bixor imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); bixor m_IR[2] >> 4 prefetch -6a107600 ffffff8f 1 band imm3 abs16 h +6a107600 ffffff8f 1 band imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); band m_IR[2] >> 4 prefetch -6a107680 ffffff8f 1 biand imm3 abs16 h +6a107680 ffffff8f 1 biand imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); biand m_IR[2] >> 4 prefetch -6a107700 ffffff8f 1 bld imm3 abs16 h +6a107700 ffffff8f 1 bld imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); bld m_IR[2] >> 4 prefetch -6a107780 ffffff8f 1 bild imm3 abs16 h +6a107780 ffffff8f 1 bild imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); bild m_IR[2] >> 4 prefetch -6a186000 ffffff0f 1 bset r8h abs16 h +6a186000 ffffff0f 1 bset r8h abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1938,7 +1938,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a186100 ffffff0f 1 bnot r8h abs16 h +6a186100 ffffff0f 1 bnot r8h abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1946,7 +1946,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a186200 ffffff0f 1 bclr r8h abs16 h +6a186200 ffffff0f 1 bclr r8h abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1954,7 +1954,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a186700 ffffff8f 1 bst imm3 abs16 h +6a186700 ffffff8f 1 bst imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1962,7 +1962,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a186780 ffffff8f 1 bist imm3 abs16 h +6a186780 ffffff8f 1 bist imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1970,7 +1970,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a187000 ffffff8f 1 bset imm3 abs16 h +6a187000 ffffff8f 1 bset imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1978,7 +1978,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a187100 ffffff8f 1 bnot imm3 abs16 h +6a187100 ffffff8f 1 bnot imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -1986,7 +1986,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a187200 ffffff8f 1 bclr imm3 abs16 h +6a187200 ffffff8f 1 bclr imm3 abs16 s20 m_TMP2 = s16(m_IR[1]); m_TMP1 = read8(m_TMP2); prefetch_start @@ -2001,67 +2001,67 @@ macro jsr32 %opc %spreg r8_w(m_IR[0], m_TMP1); prefetch_done(); -6a306300 ffffff0f 2 btst r8h abs32 h +6a306300 ffffff0f 2 btst r8h abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); btst r8_r(m_IR[3] >> 4) prefetch -6a307300 ffffff8f 2 btst imm3 abs32 h +6a307300 ffffff8f 2 btst imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); btst m_IR[3] >> 4 prefetch -6a307400 ffffff8f 2 bor imm3 abs32 h +6a307400 ffffff8f 2 bor imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); bor m_IR[3] >> 4 prefetch -6a307480 ffffff8f 2 bior imm3 abs32 h +6a307480 ffffff8f 2 bior imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); bior m_IR[3] >> 4 prefetch -6a307500 ffffff8f 2 bxor imm3 abs32 h +6a307500 ffffff8f 2 bxor imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); bxor m_IR[3] >> 4 prefetch -6a307580 ffffff8f 2 bixor imm3 abs32 h +6a307580 ffffff8f 2 bixor imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); bixor m_IR[3] >> 4 prefetch -6a307600 ffffff8f 2 band imm3 abs32 h +6a307600 ffffff8f 2 band imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); band m_IR[3] >> 4 prefetch -6a307680 ffffff8f 2 biand imm3 abs32 h +6a307680 ffffff8f 2 biand imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); biand m_IR[3] >> 4 prefetch -6a307700 ffffff8f 2 bld imm3 abs32 h +6a307700 ffffff8f 2 bld imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); bld m_IR[3] >> 4 prefetch -6a307780 ffffff8f 2 bild imm3 abs32 h +6a307780 ffffff8f 2 bild imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); bild m_IR[3] >> 4 prefetch -6a386000 ffffff0f 2 bset r8h abs32 h +6a386000 ffffff0f 2 bset r8h abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2069,7 +2069,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a386100 ffffff0f 2 bnot r8h abs32 h +6a386100 ffffff0f 2 bnot r8h abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2077,7 +2077,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a386200 ffffff0f 2 bclr r8h abs32 h +6a386200 ffffff0f 2 bclr r8h abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2085,7 +2085,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a386700 ffffff8f 2 bst imm3 abs32 h +6a386700 ffffff8f 2 bst imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2093,7 +2093,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a386780 ffffff8f 2 bist imm3 abs32 h +6a386780 ffffff8f 2 bist imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2101,7 +2101,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a387000 ffffff8f 2 bset imm3 abs32 h +6a387000 ffffff8f 2 bset imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2109,7 +2109,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a387100 ffffff8f 2 bnot imm3 abs32 h +6a387100 ffffff8f 2 bnot imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start @@ -2117,7 +2117,7 @@ macro jsr32 %opc %spreg write8(m_TMP2, m_TMP1); prefetch_done(); -6a387200 ffffff8f 2 bclr imm3 abs32 h +6a387200 ffffff8f 2 bclr imm3 abs32 s20 m_TMP2 = (m_IR[1] << 16) | m_IR[2]; m_TMP1 = read8(m_TMP2); prefetch_start diff --git a/src/devices/cpu/h8/h8h.h b/src/devices/cpu/h8/h8h.h index 11e67d263b9..0c4d6e277ea 100644 --- a/src/devices/cpu/h8/h8h.h +++ b/src/devices/cpu/h8/h8h.h @@ -38,37 +38,37 @@ protected: O(add_w_imm16_r16l); O(add_l_r32h_r32l); O(add_l_imm32_r32l); O(adds_l_four_r32l); O(adds_l_one_r32l); O(adds_l_two_r32l); O(and_w_imm16_r16l); O(and_l_r32h_r32l); O(and_l_imm32_r32l); O(and_w_r16h_r16l); - O(band_imm3_abs16); O(band_imm3_abs32); O(band_imm3_r32ihh); + O(band_imm3_r32ihh); O(bcc_rel16); - O(bclr_imm3_abs16); O(bclr_r8h_abs16); O(bclr_imm3_abs32); O(bclr_imm3_r32ihh); O(bclr_r8h_abs32); O(bclr_r8h_r32ihh); + O(bclr_imm3_r32ihh); O(bclr_r8h_r32ihh); O(bcs_rel16); O(beq_rel16); O(bf_rel16); O(bge_rel16); O(bgt_rel16); O(bhi_rel16); - O(biand_imm3_abs16); O(biand_imm3_abs32); O(biand_imm3_r32ihh); - O(bild_imm3_abs16); O(bild_imm3_abs32); O(bild_imm3_r32ihh); - O(bior_imm3_abs16); O(bior_imm3_abs32); O(bior_imm3_r32ihh); - O(bist_imm3_abs16); O(bist_imm3_abs32); O(bist_imm3_r32ihh); - O(bixor_imm3_abs16); O(bixor_imm3_abs32); O(bixor_imm3_r32ihh); - O(bld_imm3_abs16); O(bld_imm3_abs32); O(bld_imm3_r32ihh); + O(biand_imm3_r32ihh); + O(bild_imm3_r32ihh); + O(bior_imm3_r32ihh); + O(bist_imm3_r32ihh); + O(bixor_imm3_r32ihh); + O(bld_imm3_r32ihh); O(ble_rel16); O(bls_rel16); O(blt_rel16); O(bmi_rel16); O(bne_rel16); - O(bnot_imm3_abs16); O(bnot_r8h_abs16); O(bnot_imm3_abs32); O(bnot_imm3_r32ihh); O(bnot_r8h_abs32); O(bnot_r8h_r32ihh); - O(bor_imm3_abs16); O(bor_imm3_abs32); O(bor_imm3_r32ihh); + O(bnot_imm3_r32ihh); O(bnot_r8h_r32ihh); + O(bor_imm3_r32ihh); O(bpl_rel16); - O(bset_imm3_abs16); O(bset_r8h_abs16); O(bset_imm3_abs32); O(bset_imm3_r32ihh); O(bset_r8h_abs32); O(bset_r8h_r32ihh); + O(bset_imm3_r32ihh); O(bset_r8h_r32ihh); O(bsr_rel16); O(bsr_rel8); - O(bst_imm3_abs16); O(bst_imm3_abs32); O(bst_imm3_r32ihh); + O(bst_imm3_r32ihh); O(bt_rel16); - O(btst_imm3_abs16); O(btst_r8h_abs16); O(btst_imm3_abs32); O(btst_imm3_r32ihh); O(btst_r8h_abs32); O(btst_r8h_r32ihh); + O(btst_imm3_r32ihh); O(btst_r8h_r32ihh); O(bvc_rel16); O(bvs_rel16); - O(bxor_imm3_abs16); O(bxor_imm3_abs32); O(bxor_imm3_r32ihh); + O(bxor_imm3_r32ihh); O(cmp_w_imm16_r16l); O(cmp_l_r32h_r32l); O(cmp_l_imm32_r32l); O(dec_w_one_r16l); O(dec_w_two_r16l); O(dec_l_one_r32l); O(dec_l_two_r32l); O(divxs_b_r8h_r16l); O(divxs_w_r16h_r32l); diff --git a/src/devices/cpu/h8/h8s2000.h b/src/devices/cpu/h8/h8s2000.h index 2acf28abcd3..ac41b1db6e9 100644 --- a/src/devices/cpu/h8/h8s2000.h +++ b/src/devices/cpu/h8/h8s2000.h @@ -33,7 +33,22 @@ protected: virtual void do_exec_partial() override; #define O(o) void o ## _full(); void o ## _partial() + O(andc_imm8_exr); + O(band_imm3_abs16); O(band_imm3_abs32); + O(bclr_imm3_abs16); O(bclr_r8h_abs16); O(bclr_imm3_abs32); O(bclr_r8h_abs32); + O(biand_imm3_abs16); O(biand_imm3_abs32); + O(bild_imm3_abs16); O(bild_imm3_abs32); + O(bior_imm3_abs16); O(bior_imm3_abs32); + O(bist_imm3_abs16); O(bist_imm3_abs32); + O(bixor_imm3_abs16); O(bixor_imm3_abs32); + O(bld_imm3_abs16); O(bld_imm3_abs32); + O(bnot_imm3_abs16); O(bnot_r8h_abs16); O(bnot_imm3_abs32); O(bnot_r8h_abs32); + O(bor_imm3_abs16); O(bor_imm3_abs32); + O(bset_imm3_abs16); O(bset_r8h_abs16); O(bset_imm3_abs32); O(bset_r8h_abs32); + O(bst_imm3_abs16); O(bst_imm3_abs32); + O(btst_imm3_abs16); O(btst_r8h_abs16); O(btst_imm3_abs32); O(btst_r8h_abs32); + O(bxor_imm3_abs16); O(bxor_imm3_abs32); O(ldc_imm8_exr); O(ldc_r8l_exr); O(ldc_w_abs16_exr); O(ldc_w_abs32_exr); O(ldc_w_r32d16h_exr); O(ldc_w_r32d32hh_exr); O(ldc_w_r32ih_exr); O(ldc_w_r32ph_exr); O(ldm_l_spp_r32n2l); O(ldm_l_spp_r32n3l); O(ldm_l_spp_r32n4l); O(orc_imm8_exr); -- cgit v1.2.3