1 /* Simulator instruction semantics for crisv32f. 2 3 THIS FILE IS MACHINE GENERATED WITH CGEN. 4 5 Copyright (C) 1996-2024 Free Software Foundation, Inc. 6 7 This file is part of the GNU simulators. 8 9 This file is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3, or (at your option) 12 any later version. 13 14 It is distributed in the hope that it will be useful, but WITHOUT 15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 License for more details. 18 19 You should have received a copy of the GNU General Public License along 20 with this program; if not, write to the Free Software Foundation, Inc., 21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22 23 */ 24 25 #ifdef DEFINE_LABELS 26 27 /* The labels have the case they have because the enum of insn types 28 is all uppercase and in the non-stdc case the insn symbol is built 29 into the enum name. */ 30 31 static struct { 32 int index; 33 void *label; 34 } labels[] = { 35 { CRISV32F_INSN_X_INVALID, && case_sem_INSN_X_INVALID }, 36 { CRISV32F_INSN_X_AFTER, && case_sem_INSN_X_AFTER }, 37 { CRISV32F_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE }, 38 { CRISV32F_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN }, 39 { CRISV32F_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN }, 40 { CRISV32F_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN }, 41 { CRISV32F_INSN_MOVE_B_R, && case_sem_INSN_MOVE_B_R }, 42 { CRISV32F_INSN_MOVE_W_R, && case_sem_INSN_MOVE_W_R }, 43 { CRISV32F_INSN_MOVE_D_R, && case_sem_INSN_MOVE_D_R }, 44 { CRISV32F_INSN_MOVEQ, && case_sem_INSN_MOVEQ }, 45 { CRISV32F_INSN_MOVS_B_R, && case_sem_INSN_MOVS_B_R }, 46 { CRISV32F_INSN_MOVS_W_R, && case_sem_INSN_MOVS_W_R }, 47 { CRISV32F_INSN_MOVU_B_R, && case_sem_INSN_MOVU_B_R }, 48 { CRISV32F_INSN_MOVU_W_R, && case_sem_INSN_MOVU_W_R }, 49 { CRISV32F_INSN_MOVECBR, && case_sem_INSN_MOVECBR }, 50 { CRISV32F_INSN_MOVECWR, && case_sem_INSN_MOVECWR }, 51 { CRISV32F_INSN_MOVECDR, && case_sem_INSN_MOVECDR }, 52 { CRISV32F_INSN_MOVSCBR, && case_sem_INSN_MOVSCBR }, 53 { CRISV32F_INSN_MOVSCWR, && case_sem_INSN_MOVSCWR }, 54 { CRISV32F_INSN_MOVUCBR, && case_sem_INSN_MOVUCBR }, 55 { CRISV32F_INSN_MOVUCWR, && case_sem_INSN_MOVUCWR }, 56 { CRISV32F_INSN_ADDQ, && case_sem_INSN_ADDQ }, 57 { CRISV32F_INSN_SUBQ, && case_sem_INSN_SUBQ }, 58 { CRISV32F_INSN_CMP_R_B_R, && case_sem_INSN_CMP_R_B_R }, 59 { CRISV32F_INSN_CMP_R_W_R, && case_sem_INSN_CMP_R_W_R }, 60 { CRISV32F_INSN_CMP_R_D_R, && case_sem_INSN_CMP_R_D_R }, 61 { CRISV32F_INSN_CMP_M_B_M, && case_sem_INSN_CMP_M_B_M }, 62 { CRISV32F_INSN_CMP_M_W_M, && case_sem_INSN_CMP_M_W_M }, 63 { CRISV32F_INSN_CMP_M_D_M, && case_sem_INSN_CMP_M_D_M }, 64 { CRISV32F_INSN_CMPCBR, && case_sem_INSN_CMPCBR }, 65 { CRISV32F_INSN_CMPCWR, && case_sem_INSN_CMPCWR }, 66 { CRISV32F_INSN_CMPCDR, && case_sem_INSN_CMPCDR }, 67 { CRISV32F_INSN_CMPQ, && case_sem_INSN_CMPQ }, 68 { CRISV32F_INSN_CMPS_M_B_M, && case_sem_INSN_CMPS_M_B_M }, 69 { CRISV32F_INSN_CMPS_M_W_M, && case_sem_INSN_CMPS_M_W_M }, 70 { CRISV32F_INSN_CMPSCBR, && case_sem_INSN_CMPSCBR }, 71 { CRISV32F_INSN_CMPSCWR, && case_sem_INSN_CMPSCWR }, 72 { CRISV32F_INSN_CMPU_M_B_M, && case_sem_INSN_CMPU_M_B_M }, 73 { CRISV32F_INSN_CMPU_M_W_M, && case_sem_INSN_CMPU_M_W_M }, 74 { CRISV32F_INSN_CMPUCBR, && case_sem_INSN_CMPUCBR }, 75 { CRISV32F_INSN_CMPUCWR, && case_sem_INSN_CMPUCWR }, 76 { CRISV32F_INSN_MOVE_M_B_M, && case_sem_INSN_MOVE_M_B_M }, 77 { CRISV32F_INSN_MOVE_M_W_M, && case_sem_INSN_MOVE_M_W_M }, 78 { CRISV32F_INSN_MOVE_M_D_M, && case_sem_INSN_MOVE_M_D_M }, 79 { CRISV32F_INSN_MOVS_M_B_M, && case_sem_INSN_MOVS_M_B_M }, 80 { CRISV32F_INSN_MOVS_M_W_M, && case_sem_INSN_MOVS_M_W_M }, 81 { CRISV32F_INSN_MOVU_M_B_M, && case_sem_INSN_MOVU_M_B_M }, 82 { CRISV32F_INSN_MOVU_M_W_M, && case_sem_INSN_MOVU_M_W_M }, 83 { CRISV32F_INSN_MOVE_R_SPRV32, && case_sem_INSN_MOVE_R_SPRV32 }, 84 { CRISV32F_INSN_MOVE_SPR_RV32, && case_sem_INSN_MOVE_SPR_RV32 }, 85 { CRISV32F_INSN_MOVE_M_SPRV32, && case_sem_INSN_MOVE_M_SPRV32 }, 86 { CRISV32F_INSN_MOVE_C_SPRV32_P2, && case_sem_INSN_MOVE_C_SPRV32_P2 }, 87 { CRISV32F_INSN_MOVE_C_SPRV32_P3, && case_sem_INSN_MOVE_C_SPRV32_P3 }, 88 { CRISV32F_INSN_MOVE_C_SPRV32_P5, && case_sem_INSN_MOVE_C_SPRV32_P5 }, 89 { CRISV32F_INSN_MOVE_C_SPRV32_P6, && case_sem_INSN_MOVE_C_SPRV32_P6 }, 90 { CRISV32F_INSN_MOVE_C_SPRV32_P7, && case_sem_INSN_MOVE_C_SPRV32_P7 }, 91 { CRISV32F_INSN_MOVE_C_SPRV32_P9, && case_sem_INSN_MOVE_C_SPRV32_P9 }, 92 { CRISV32F_INSN_MOVE_C_SPRV32_P10, && case_sem_INSN_MOVE_C_SPRV32_P10 }, 93 { CRISV32F_INSN_MOVE_C_SPRV32_P11, && case_sem_INSN_MOVE_C_SPRV32_P11 }, 94 { CRISV32F_INSN_MOVE_C_SPRV32_P12, && case_sem_INSN_MOVE_C_SPRV32_P12 }, 95 { CRISV32F_INSN_MOVE_C_SPRV32_P13, && case_sem_INSN_MOVE_C_SPRV32_P13 }, 96 { CRISV32F_INSN_MOVE_C_SPRV32_P14, && case_sem_INSN_MOVE_C_SPRV32_P14 }, 97 { CRISV32F_INSN_MOVE_C_SPRV32_P15, && case_sem_INSN_MOVE_C_SPRV32_P15 }, 98 { CRISV32F_INSN_MOVE_SPR_MV32, && case_sem_INSN_MOVE_SPR_MV32 }, 99 { CRISV32F_INSN_MOVE_SS_R, && case_sem_INSN_MOVE_SS_R }, 100 { CRISV32F_INSN_MOVE_R_SS, && case_sem_INSN_MOVE_R_SS }, 101 { CRISV32F_INSN_MOVEM_R_M_V32, && case_sem_INSN_MOVEM_R_M_V32 }, 102 { CRISV32F_INSN_MOVEM_M_R_V32, && case_sem_INSN_MOVEM_M_R_V32 }, 103 { CRISV32F_INSN_ADD_B_R, && case_sem_INSN_ADD_B_R }, 104 { CRISV32F_INSN_ADD_W_R, && case_sem_INSN_ADD_W_R }, 105 { CRISV32F_INSN_ADD_D_R, && case_sem_INSN_ADD_D_R }, 106 { CRISV32F_INSN_ADD_M_B_M, && case_sem_INSN_ADD_M_B_M }, 107 { CRISV32F_INSN_ADD_M_W_M, && case_sem_INSN_ADD_M_W_M }, 108 { CRISV32F_INSN_ADD_M_D_M, && case_sem_INSN_ADD_M_D_M }, 109 { CRISV32F_INSN_ADDCBR, && case_sem_INSN_ADDCBR }, 110 { CRISV32F_INSN_ADDCWR, && case_sem_INSN_ADDCWR }, 111 { CRISV32F_INSN_ADDCDR, && case_sem_INSN_ADDCDR }, 112 { CRISV32F_INSN_ADDS_B_R, && case_sem_INSN_ADDS_B_R }, 113 { CRISV32F_INSN_ADDS_W_R, && case_sem_INSN_ADDS_W_R }, 114 { CRISV32F_INSN_ADDS_M_B_M, && case_sem_INSN_ADDS_M_B_M }, 115 { CRISV32F_INSN_ADDS_M_W_M, && case_sem_INSN_ADDS_M_W_M }, 116 { CRISV32F_INSN_ADDSCBR, && case_sem_INSN_ADDSCBR }, 117 { CRISV32F_INSN_ADDSCWR, && case_sem_INSN_ADDSCWR }, 118 { CRISV32F_INSN_ADDU_B_R, && case_sem_INSN_ADDU_B_R }, 119 { CRISV32F_INSN_ADDU_W_R, && case_sem_INSN_ADDU_W_R }, 120 { CRISV32F_INSN_ADDU_M_B_M, && case_sem_INSN_ADDU_M_B_M }, 121 { CRISV32F_INSN_ADDU_M_W_M, && case_sem_INSN_ADDU_M_W_M }, 122 { CRISV32F_INSN_ADDUCBR, && case_sem_INSN_ADDUCBR }, 123 { CRISV32F_INSN_ADDUCWR, && case_sem_INSN_ADDUCWR }, 124 { CRISV32F_INSN_SUB_B_R, && case_sem_INSN_SUB_B_R }, 125 { CRISV32F_INSN_SUB_W_R, && case_sem_INSN_SUB_W_R }, 126 { CRISV32F_INSN_SUB_D_R, && case_sem_INSN_SUB_D_R }, 127 { CRISV32F_INSN_SUB_M_B_M, && case_sem_INSN_SUB_M_B_M }, 128 { CRISV32F_INSN_SUB_M_W_M, && case_sem_INSN_SUB_M_W_M }, 129 { CRISV32F_INSN_SUB_M_D_M, && case_sem_INSN_SUB_M_D_M }, 130 { CRISV32F_INSN_SUBCBR, && case_sem_INSN_SUBCBR }, 131 { CRISV32F_INSN_SUBCWR, && case_sem_INSN_SUBCWR }, 132 { CRISV32F_INSN_SUBCDR, && case_sem_INSN_SUBCDR }, 133 { CRISV32F_INSN_SUBS_B_R, && case_sem_INSN_SUBS_B_R }, 134 { CRISV32F_INSN_SUBS_W_R, && case_sem_INSN_SUBS_W_R }, 135 { CRISV32F_INSN_SUBS_M_B_M, && case_sem_INSN_SUBS_M_B_M }, 136 { CRISV32F_INSN_SUBS_M_W_M, && case_sem_INSN_SUBS_M_W_M }, 137 { CRISV32F_INSN_SUBSCBR, && case_sem_INSN_SUBSCBR }, 138 { CRISV32F_INSN_SUBSCWR, && case_sem_INSN_SUBSCWR }, 139 { CRISV32F_INSN_SUBU_B_R, && case_sem_INSN_SUBU_B_R }, 140 { CRISV32F_INSN_SUBU_W_R, && case_sem_INSN_SUBU_W_R }, 141 { CRISV32F_INSN_SUBU_M_B_M, && case_sem_INSN_SUBU_M_B_M }, 142 { CRISV32F_INSN_SUBU_M_W_M, && case_sem_INSN_SUBU_M_W_M }, 143 { CRISV32F_INSN_SUBUCBR, && case_sem_INSN_SUBUCBR }, 144 { CRISV32F_INSN_SUBUCWR, && case_sem_INSN_SUBUCWR }, 145 { CRISV32F_INSN_ADDC_R, && case_sem_INSN_ADDC_R }, 146 { CRISV32F_INSN_ADDC_M, && case_sem_INSN_ADDC_M }, 147 { CRISV32F_INSN_ADDC_C, && case_sem_INSN_ADDC_C }, 148 { CRISV32F_INSN_LAPC_D, && case_sem_INSN_LAPC_D }, 149 { CRISV32F_INSN_LAPCQ, && case_sem_INSN_LAPCQ }, 150 { CRISV32F_INSN_ADDI_B_R, && case_sem_INSN_ADDI_B_R }, 151 { CRISV32F_INSN_ADDI_W_R, && case_sem_INSN_ADDI_W_R }, 152 { CRISV32F_INSN_ADDI_D_R, && case_sem_INSN_ADDI_D_R }, 153 { CRISV32F_INSN_NEG_B_R, && case_sem_INSN_NEG_B_R }, 154 { CRISV32F_INSN_NEG_W_R, && case_sem_INSN_NEG_W_R }, 155 { CRISV32F_INSN_NEG_D_R, && case_sem_INSN_NEG_D_R }, 156 { CRISV32F_INSN_TEST_M_B_M, && case_sem_INSN_TEST_M_B_M }, 157 { CRISV32F_INSN_TEST_M_W_M, && case_sem_INSN_TEST_M_W_M }, 158 { CRISV32F_INSN_TEST_M_D_M, && case_sem_INSN_TEST_M_D_M }, 159 { CRISV32F_INSN_MOVE_R_M_B_M, && case_sem_INSN_MOVE_R_M_B_M }, 160 { CRISV32F_INSN_MOVE_R_M_W_M, && case_sem_INSN_MOVE_R_M_W_M }, 161 { CRISV32F_INSN_MOVE_R_M_D_M, && case_sem_INSN_MOVE_R_M_D_M }, 162 { CRISV32F_INSN_MULS_B, && case_sem_INSN_MULS_B }, 163 { CRISV32F_INSN_MULS_W, && case_sem_INSN_MULS_W }, 164 { CRISV32F_INSN_MULS_D, && case_sem_INSN_MULS_D }, 165 { CRISV32F_INSN_MULU_B, && case_sem_INSN_MULU_B }, 166 { CRISV32F_INSN_MULU_W, && case_sem_INSN_MULU_W }, 167 { CRISV32F_INSN_MULU_D, && case_sem_INSN_MULU_D }, 168 { CRISV32F_INSN_MCP, && case_sem_INSN_MCP }, 169 { CRISV32F_INSN_DSTEP, && case_sem_INSN_DSTEP }, 170 { CRISV32F_INSN_ABS, && case_sem_INSN_ABS }, 171 { CRISV32F_INSN_AND_B_R, && case_sem_INSN_AND_B_R }, 172 { CRISV32F_INSN_AND_W_R, && case_sem_INSN_AND_W_R }, 173 { CRISV32F_INSN_AND_D_R, && case_sem_INSN_AND_D_R }, 174 { CRISV32F_INSN_AND_M_B_M, && case_sem_INSN_AND_M_B_M }, 175 { CRISV32F_INSN_AND_M_W_M, && case_sem_INSN_AND_M_W_M }, 176 { CRISV32F_INSN_AND_M_D_M, && case_sem_INSN_AND_M_D_M }, 177 { CRISV32F_INSN_ANDCBR, && case_sem_INSN_ANDCBR }, 178 { CRISV32F_INSN_ANDCWR, && case_sem_INSN_ANDCWR }, 179 { CRISV32F_INSN_ANDCDR, && case_sem_INSN_ANDCDR }, 180 { CRISV32F_INSN_ANDQ, && case_sem_INSN_ANDQ }, 181 { CRISV32F_INSN_ORR_B_R, && case_sem_INSN_ORR_B_R }, 182 { CRISV32F_INSN_ORR_W_R, && case_sem_INSN_ORR_W_R }, 183 { CRISV32F_INSN_ORR_D_R, && case_sem_INSN_ORR_D_R }, 184 { CRISV32F_INSN_OR_M_B_M, && case_sem_INSN_OR_M_B_M }, 185 { CRISV32F_INSN_OR_M_W_M, && case_sem_INSN_OR_M_W_M }, 186 { CRISV32F_INSN_OR_M_D_M, && case_sem_INSN_OR_M_D_M }, 187 { CRISV32F_INSN_ORCBR, && case_sem_INSN_ORCBR }, 188 { CRISV32F_INSN_ORCWR, && case_sem_INSN_ORCWR }, 189 { CRISV32F_INSN_ORCDR, && case_sem_INSN_ORCDR }, 190 { CRISV32F_INSN_ORQ, && case_sem_INSN_ORQ }, 191 { CRISV32F_INSN_XOR, && case_sem_INSN_XOR }, 192 { CRISV32F_INSN_SWAP, && case_sem_INSN_SWAP }, 193 { CRISV32F_INSN_ASRR_B_R, && case_sem_INSN_ASRR_B_R }, 194 { CRISV32F_INSN_ASRR_W_R, && case_sem_INSN_ASRR_W_R }, 195 { CRISV32F_INSN_ASRR_D_R, && case_sem_INSN_ASRR_D_R }, 196 { CRISV32F_INSN_ASRQ, && case_sem_INSN_ASRQ }, 197 { CRISV32F_INSN_LSRR_B_R, && case_sem_INSN_LSRR_B_R }, 198 { CRISV32F_INSN_LSRR_W_R, && case_sem_INSN_LSRR_W_R }, 199 { CRISV32F_INSN_LSRR_D_R, && case_sem_INSN_LSRR_D_R }, 200 { CRISV32F_INSN_LSRQ, && case_sem_INSN_LSRQ }, 201 { CRISV32F_INSN_LSLR_B_R, && case_sem_INSN_LSLR_B_R }, 202 { CRISV32F_INSN_LSLR_W_R, && case_sem_INSN_LSLR_W_R }, 203 { CRISV32F_INSN_LSLR_D_R, && case_sem_INSN_LSLR_D_R }, 204 { CRISV32F_INSN_LSLQ, && case_sem_INSN_LSLQ }, 205 { CRISV32F_INSN_BTST, && case_sem_INSN_BTST }, 206 { CRISV32F_INSN_BTSTQ, && case_sem_INSN_BTSTQ }, 207 { CRISV32F_INSN_SETF, && case_sem_INSN_SETF }, 208 { CRISV32F_INSN_CLEARF, && case_sem_INSN_CLEARF }, 209 { CRISV32F_INSN_RFE, && case_sem_INSN_RFE }, 210 { CRISV32F_INSN_SFE, && case_sem_INSN_SFE }, 211 { CRISV32F_INSN_RFG, && case_sem_INSN_RFG }, 212 { CRISV32F_INSN_RFN, && case_sem_INSN_RFN }, 213 { CRISV32F_INSN_HALT, && case_sem_INSN_HALT }, 214 { CRISV32F_INSN_BCC_B, && case_sem_INSN_BCC_B }, 215 { CRISV32F_INSN_BA_B, && case_sem_INSN_BA_B }, 216 { CRISV32F_INSN_BCC_W, && case_sem_INSN_BCC_W }, 217 { CRISV32F_INSN_BA_W, && case_sem_INSN_BA_W }, 218 { CRISV32F_INSN_JAS_R, && case_sem_INSN_JAS_R }, 219 { CRISV32F_INSN_JAS_C, && case_sem_INSN_JAS_C }, 220 { CRISV32F_INSN_JUMP_P, && case_sem_INSN_JUMP_P }, 221 { CRISV32F_INSN_BAS_C, && case_sem_INSN_BAS_C }, 222 { CRISV32F_INSN_JASC_R, && case_sem_INSN_JASC_R }, 223 { CRISV32F_INSN_JASC_C, && case_sem_INSN_JASC_C }, 224 { CRISV32F_INSN_BASC_C, && case_sem_INSN_BASC_C }, 225 { CRISV32F_INSN_BREAK, && case_sem_INSN_BREAK }, 226 { CRISV32F_INSN_BOUND_R_B_R, && case_sem_INSN_BOUND_R_B_R }, 227 { CRISV32F_INSN_BOUND_R_W_R, && case_sem_INSN_BOUND_R_W_R }, 228 { CRISV32F_INSN_BOUND_R_D_R, && case_sem_INSN_BOUND_R_D_R }, 229 { CRISV32F_INSN_BOUND_CB, && case_sem_INSN_BOUND_CB }, 230 { CRISV32F_INSN_BOUND_CW, && case_sem_INSN_BOUND_CW }, 231 { CRISV32F_INSN_BOUND_CD, && case_sem_INSN_BOUND_CD }, 232 { CRISV32F_INSN_SCC, && case_sem_INSN_SCC }, 233 { CRISV32F_INSN_LZ, && case_sem_INSN_LZ }, 234 { CRISV32F_INSN_ADDOQ, && case_sem_INSN_ADDOQ }, 235 { CRISV32F_INSN_ADDO_M_B_M, && case_sem_INSN_ADDO_M_B_M }, 236 { CRISV32F_INSN_ADDO_M_W_M, && case_sem_INSN_ADDO_M_W_M }, 237 { CRISV32F_INSN_ADDO_M_D_M, && case_sem_INSN_ADDO_M_D_M }, 238 { CRISV32F_INSN_ADDO_CB, && case_sem_INSN_ADDO_CB }, 239 { CRISV32F_INSN_ADDO_CW, && case_sem_INSN_ADDO_CW }, 240 { CRISV32F_INSN_ADDO_CD, && case_sem_INSN_ADDO_CD }, 241 { CRISV32F_INSN_ADDI_ACR_B_R, && case_sem_INSN_ADDI_ACR_B_R }, 242 { CRISV32F_INSN_ADDI_ACR_W_R, && case_sem_INSN_ADDI_ACR_W_R }, 243 { CRISV32F_INSN_ADDI_ACR_D_R, && case_sem_INSN_ADDI_ACR_D_R }, 244 { CRISV32F_INSN_FIDXI, && case_sem_INSN_FIDXI }, 245 { CRISV32F_INSN_FTAGI, && case_sem_INSN_FTAGI }, 246 { CRISV32F_INSN_FIDXD, && case_sem_INSN_FIDXD }, 247 { CRISV32F_INSN_FTAGD, && case_sem_INSN_FTAGD }, 248 { 0, 0 } 249 }; 250 int i; 251 252 for (i = 0; labels[i].label != 0; ++i) 253 { 254 #if FAST_P 255 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label; 256 #else 257 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label; 258 #endif 259 } 260 261 #undef DEFINE_LABELS 262 #endif /* DEFINE_LABELS */ 263 264 #ifdef DEFINE_SWITCH 265 266 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn 267 off frills like tracing and profiling. */ 268 /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something 269 that can cause it to be optimized out. Another way would be to emit 270 special handlers into the instruction "stream". */ 271 272 #if FAST_P 273 #undef CGEN_TRACE_RESULT 274 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) 275 #endif 276 277 #undef GET_ATTR 278 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 279 280 { 281 282 #if WITH_SCACHE_PBB 283 284 /* Branch to next handler without going around main loop. */ 285 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case 286 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case) 287 288 #else /* ! WITH_SCACHE_PBB */ 289 290 #define NEXT(vpc) BREAK (sem) 291 #ifdef __GNUC__ 292 #if FAST_P 293 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab) 294 #else 295 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab) 296 #endif 297 #else 298 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num) 299 #endif 300 301 #endif /* ! WITH_SCACHE_PBB */ 302 303 { 304 305 CASE (sem, INSN_X_INVALID) : /* --invalid-- */ 306 { 307 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 308 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 309 #define FLD(f) abuf->fields.sfmt_empty.f 310 int UNUSED written = 0; 311 IADDR UNUSED pc = abuf->addr; 312 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 313 314 { 315 /* Update the recorded pc in the cpu state struct. 316 Only necessary for WITH_SCACHE case, but to avoid the 317 conditional compilation .... */ 318 SET_H_PC (pc); 319 /* Virtual insns have zero size. Overwrite vpc with address of next insn 320 using the default-insn-bitsize spec. When executing insns in parallel 321 we may want to queue the fault and continue execution. */ 322 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 323 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 324 } 325 326 #undef FLD 327 } 328 NEXT (vpc); 329 330 CASE (sem, INSN_X_AFTER) : /* --after-- */ 331 { 332 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 333 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 334 #define FLD(f) abuf->fields.sfmt_empty.f 335 int UNUSED written = 0; 336 IADDR UNUSED pc = abuf->addr; 337 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 338 339 { 340 #if WITH_SCACHE_PBB_CRISV32F 341 crisv32f_pbb_after (current_cpu, sem_arg); 342 #endif 343 } 344 345 #undef FLD 346 } 347 NEXT (vpc); 348 349 CASE (sem, INSN_X_BEFORE) : /* --before-- */ 350 { 351 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 352 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 353 #define FLD(f) abuf->fields.sfmt_empty.f 354 int UNUSED written = 0; 355 IADDR UNUSED pc = abuf->addr; 356 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 357 358 { 359 #if WITH_SCACHE_PBB_CRISV32F 360 crisv32f_pbb_before (current_cpu, sem_arg); 361 #endif 362 } 363 364 #undef FLD 365 } 366 NEXT (vpc); 367 368 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */ 369 { 370 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 371 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 372 #define FLD(f) abuf->fields.sfmt_empty.f 373 int UNUSED written = 0; 374 IADDR UNUSED pc = abuf->addr; 375 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 376 377 { 378 #if WITH_SCACHE_PBB_CRISV32F 379 #ifdef DEFINE_SWITCH 380 vpc = crisv32f_pbb_cti_chain (current_cpu, sem_arg, 381 pbb_br_type, pbb_br_npc); 382 BREAK (sem); 383 #else 384 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 385 vpc = crisv32f_pbb_cti_chain (current_cpu, sem_arg, 386 CPU_PBB_BR_TYPE (current_cpu), 387 CPU_PBB_BR_NPC (current_cpu)); 388 #endif 389 #endif 390 } 391 392 #undef FLD 393 } 394 NEXT (vpc); 395 396 CASE (sem, INSN_X_CHAIN) : /* --chain-- */ 397 { 398 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 399 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 400 #define FLD(f) abuf->fields.sfmt_empty.f 401 int UNUSED written = 0; 402 IADDR UNUSED pc = abuf->addr; 403 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 404 405 { 406 #if WITH_SCACHE_PBB_CRISV32F 407 vpc = crisv32f_pbb_chain (current_cpu, sem_arg); 408 #ifdef DEFINE_SWITCH 409 BREAK (sem); 410 #endif 411 #endif 412 } 413 414 #undef FLD 415 } 416 NEXT (vpc); 417 418 CASE (sem, INSN_X_BEGIN) : /* --begin-- */ 419 { 420 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 421 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 422 #define FLD(f) abuf->fields.sfmt_empty.f 423 int UNUSED written = 0; 424 IADDR UNUSED pc = abuf->addr; 425 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 426 427 { 428 #if WITH_SCACHE_PBB_CRISV32F 429 #if defined DEFINE_SWITCH || defined FAST_P 430 /* In the switch case FAST_P is a constant, allowing several optimizations 431 in any called inline functions. */ 432 vpc = crisv32f_pbb_begin (current_cpu, FAST_P); 433 #else 434 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 435 vpc = crisv32f_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 436 #else 437 vpc = crisv32f_pbb_begin (current_cpu, 0); 438 #endif 439 #endif 440 #endif 441 } 442 443 #undef FLD 444 } 445 NEXT (vpc); 446 447 CASE (sem, INSN_MOVE_B_R) : /* move.b move.m ${Rs},${Rd} */ 448 { 449 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 450 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 451 #define FLD(f) abuf->fields.sfmt_addc_m.f 452 int UNUSED written = 0; 453 IADDR UNUSED pc = abuf->addr; 454 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 455 456 { 457 QI tmp_newval; 458 tmp_newval = GET_H_GR (FLD (f_operand1)); 459 { 460 SI tmp_oldregval; 461 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 462 { 463 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 464 SET_H_GR (FLD (f_operand2), opval); 465 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 466 } 467 } 468 { 469 { 470 BI opval = LTQI (tmp_newval, 0); 471 CPU (h_nbit) = opval; 472 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 473 } 474 { 475 BI opval = ANDIF (EQQI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 476 CPU (h_zbit) = opval; 477 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 478 } 479 SET_H_CBIT_MOVE (0); 480 SET_H_VBIT_MOVE (0); 481 { 482 { 483 BI opval = 0; 484 CPU (h_xbit) = opval; 485 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 486 } 487 { 488 BI opval = 0; 489 SET_H_INSN_PREFIXED_P (opval); 490 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 491 } 492 } 493 } 494 } 495 496 #undef FLD 497 } 498 NEXT (vpc); 499 500 CASE (sem, INSN_MOVE_W_R) : /* move.w move.m ${Rs},${Rd} */ 501 { 502 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 503 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 504 #define FLD(f) abuf->fields.sfmt_addc_m.f 505 int UNUSED written = 0; 506 IADDR UNUSED pc = abuf->addr; 507 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 508 509 { 510 HI tmp_newval; 511 tmp_newval = GET_H_GR (FLD (f_operand1)); 512 { 513 SI tmp_oldregval; 514 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 515 { 516 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 517 SET_H_GR (FLD (f_operand2), opval); 518 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 519 } 520 } 521 { 522 { 523 BI opval = LTHI (tmp_newval, 0); 524 CPU (h_nbit) = opval; 525 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 526 } 527 { 528 BI opval = ANDIF (EQHI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 529 CPU (h_zbit) = opval; 530 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 531 } 532 SET_H_CBIT_MOVE (0); 533 SET_H_VBIT_MOVE (0); 534 { 535 { 536 BI opval = 0; 537 CPU (h_xbit) = opval; 538 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 539 } 540 { 541 BI opval = 0; 542 SET_H_INSN_PREFIXED_P (opval); 543 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 544 } 545 } 546 } 547 } 548 549 #undef FLD 550 } 551 NEXT (vpc); 552 553 CASE (sem, INSN_MOVE_D_R) : /* move.d move.m ${Rs},${Rd} */ 554 { 555 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 556 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 557 #define FLD(f) abuf->fields.sfmt_addc_m.f 558 int UNUSED written = 0; 559 IADDR UNUSED pc = abuf->addr; 560 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 561 562 { 563 SI tmp_newval; 564 tmp_newval = GET_H_GR (FLD (f_operand1)); 565 { 566 SI opval = tmp_newval; 567 SET_H_GR (FLD (f_operand2), opval); 568 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 569 } 570 { 571 { 572 BI opval = LTSI (tmp_newval, 0); 573 CPU (h_nbit) = opval; 574 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 575 } 576 { 577 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 578 CPU (h_zbit) = opval; 579 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 580 } 581 SET_H_CBIT_MOVE (0); 582 SET_H_VBIT_MOVE (0); 583 { 584 { 585 BI opval = 0; 586 CPU (h_xbit) = opval; 587 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 588 } 589 { 590 BI opval = 0; 591 SET_H_INSN_PREFIXED_P (opval); 592 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 593 } 594 } 595 } 596 } 597 598 #undef FLD 599 } 600 NEXT (vpc); 601 602 CASE (sem, INSN_MOVEQ) : /* moveq $i,$Rd */ 603 { 604 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 605 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 606 #define FLD(f) abuf->fields.sfmt_moveq.f 607 int UNUSED written = 0; 608 IADDR UNUSED pc = abuf->addr; 609 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 610 611 { 612 SI tmp_newval; 613 tmp_newval = FLD (f_s6); 614 { 615 SI opval = tmp_newval; 616 SET_H_GR (FLD (f_operand2), opval); 617 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 618 } 619 { 620 SET_H_NBIT_MOVE (LTSI (tmp_newval, 0)); 621 SET_H_ZBIT_MOVE (ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)))); 622 SET_H_CBIT_MOVE (0); 623 SET_H_VBIT_MOVE (0); 624 { 625 { 626 BI opval = 0; 627 CPU (h_xbit) = opval; 628 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 629 } 630 { 631 BI opval = 0; 632 SET_H_INSN_PREFIXED_P (opval); 633 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 634 } 635 } 636 } 637 } 638 639 #undef FLD 640 } 641 NEXT (vpc); 642 643 CASE (sem, INSN_MOVS_B_R) : /* movs.b movs.m ${Rs},${Rd} */ 644 { 645 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 646 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 647 #define FLD(f) abuf->fields.sfmt_muls_b.f 648 int UNUSED written = 0; 649 IADDR UNUSED pc = abuf->addr; 650 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 651 652 { 653 QI tmp_tmpops; 654 SI tmp_newval; 655 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 656 tmp_newval = EXTQISI (tmp_tmpops); 657 { 658 SI opval = tmp_newval; 659 SET_H_GR (FLD (f_operand2), opval); 660 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 661 } 662 { 663 { 664 BI opval = LTSI (tmp_newval, 0); 665 CPU (h_nbit) = opval; 666 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 667 } 668 { 669 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 670 CPU (h_zbit) = opval; 671 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 672 } 673 SET_H_CBIT_MOVE (0); 674 SET_H_VBIT_MOVE (0); 675 { 676 { 677 BI opval = 0; 678 CPU (h_xbit) = opval; 679 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 680 } 681 { 682 BI opval = 0; 683 SET_H_INSN_PREFIXED_P (opval); 684 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 685 } 686 } 687 } 688 } 689 690 #undef FLD 691 } 692 NEXT (vpc); 693 694 CASE (sem, INSN_MOVS_W_R) : /* movs.w movs.m ${Rs},${Rd} */ 695 { 696 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 697 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 698 #define FLD(f) abuf->fields.sfmt_muls_b.f 699 int UNUSED written = 0; 700 IADDR UNUSED pc = abuf->addr; 701 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 702 703 { 704 HI tmp_tmpops; 705 SI tmp_newval; 706 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 707 tmp_newval = EXTHISI (tmp_tmpops); 708 { 709 SI opval = tmp_newval; 710 SET_H_GR (FLD (f_operand2), opval); 711 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 712 } 713 { 714 { 715 BI opval = LTSI (tmp_newval, 0); 716 CPU (h_nbit) = opval; 717 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 718 } 719 { 720 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 721 CPU (h_zbit) = opval; 722 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 723 } 724 SET_H_CBIT_MOVE (0); 725 SET_H_VBIT_MOVE (0); 726 { 727 { 728 BI opval = 0; 729 CPU (h_xbit) = opval; 730 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 731 } 732 { 733 BI opval = 0; 734 SET_H_INSN_PREFIXED_P (opval); 735 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 736 } 737 } 738 } 739 } 740 741 #undef FLD 742 } 743 NEXT (vpc); 744 745 CASE (sem, INSN_MOVU_B_R) : /* movu.b movu.m ${Rs},${Rd} */ 746 { 747 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 748 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 749 #define FLD(f) abuf->fields.sfmt_muls_b.f 750 int UNUSED written = 0; 751 IADDR UNUSED pc = abuf->addr; 752 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 753 754 { 755 QI tmp_tmpops; 756 SI tmp_newval; 757 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 758 tmp_newval = ZEXTQISI (tmp_tmpops); 759 { 760 SI opval = tmp_newval; 761 SET_H_GR (FLD (f_operand2), opval); 762 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 763 } 764 { 765 { 766 BI opval = LTSI (tmp_newval, 0); 767 CPU (h_nbit) = opval; 768 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 769 } 770 { 771 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 772 CPU (h_zbit) = opval; 773 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 774 } 775 SET_H_CBIT_MOVE (0); 776 SET_H_VBIT_MOVE (0); 777 { 778 { 779 BI opval = 0; 780 CPU (h_xbit) = opval; 781 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 782 } 783 { 784 BI opval = 0; 785 SET_H_INSN_PREFIXED_P (opval); 786 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 787 } 788 } 789 } 790 } 791 792 #undef FLD 793 } 794 NEXT (vpc); 795 796 CASE (sem, INSN_MOVU_W_R) : /* movu.w movu.m ${Rs},${Rd} */ 797 { 798 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 799 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 800 #define FLD(f) abuf->fields.sfmt_muls_b.f 801 int UNUSED written = 0; 802 IADDR UNUSED pc = abuf->addr; 803 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 804 805 { 806 HI tmp_tmpops; 807 SI tmp_newval; 808 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 809 tmp_newval = ZEXTHISI (tmp_tmpops); 810 { 811 SI opval = tmp_newval; 812 SET_H_GR (FLD (f_operand2), opval); 813 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 814 } 815 { 816 { 817 BI opval = LTSI (tmp_newval, 0); 818 CPU (h_nbit) = opval; 819 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 820 } 821 { 822 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 823 CPU (h_zbit) = opval; 824 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 825 } 826 SET_H_CBIT_MOVE (0); 827 SET_H_VBIT_MOVE (0); 828 { 829 { 830 BI opval = 0; 831 CPU (h_xbit) = opval; 832 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 833 } 834 { 835 BI opval = 0; 836 SET_H_INSN_PREFIXED_P (opval); 837 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 838 } 839 } 840 } 841 } 842 843 #undef FLD 844 } 845 NEXT (vpc); 846 847 CASE (sem, INSN_MOVECBR) : /* move.b ${sconst8},${Rd} */ 848 { 849 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 850 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 851 #define FLD(f) abuf->fields.sfmt_addcbr.f 852 int UNUSED written = 0; 853 IADDR UNUSED pc = abuf->addr; 854 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 855 856 { 857 QI tmp_newval; 858 tmp_newval = FLD (f_indir_pc__byte); 859 { 860 SI tmp_oldregval; 861 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 862 { 863 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 864 SET_H_GR (FLD (f_operand2), opval); 865 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 866 } 867 } 868 { 869 { 870 BI opval = LTQI (tmp_newval, 0); 871 CPU (h_nbit) = opval; 872 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 873 } 874 { 875 BI opval = ANDIF (EQQI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 876 CPU (h_zbit) = opval; 877 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 878 } 879 SET_H_CBIT_MOVE (0); 880 SET_H_VBIT_MOVE (0); 881 { 882 { 883 BI opval = 0; 884 CPU (h_xbit) = opval; 885 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 886 } 887 { 888 BI opval = 0; 889 SET_H_INSN_PREFIXED_P (opval); 890 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 891 } 892 } 893 } 894 } 895 896 #undef FLD 897 } 898 NEXT (vpc); 899 900 CASE (sem, INSN_MOVECWR) : /* move.w ${sconst16},${Rd} */ 901 { 902 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 903 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 904 #define FLD(f) abuf->fields.sfmt_addcwr.f 905 int UNUSED written = 0; 906 IADDR UNUSED pc = abuf->addr; 907 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 908 909 { 910 HI tmp_newval; 911 tmp_newval = FLD (f_indir_pc__word); 912 { 913 SI tmp_oldregval; 914 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 915 { 916 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 917 SET_H_GR (FLD (f_operand2), opval); 918 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 919 } 920 } 921 { 922 { 923 BI opval = LTHI (tmp_newval, 0); 924 CPU (h_nbit) = opval; 925 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 926 } 927 { 928 BI opval = ANDIF (EQHI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 929 CPU (h_zbit) = opval; 930 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 931 } 932 SET_H_CBIT_MOVE (0); 933 SET_H_VBIT_MOVE (0); 934 { 935 { 936 BI opval = 0; 937 CPU (h_xbit) = opval; 938 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 939 } 940 { 941 BI opval = 0; 942 SET_H_INSN_PREFIXED_P (opval); 943 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 944 } 945 } 946 } 947 } 948 949 #undef FLD 950 } 951 NEXT (vpc); 952 953 CASE (sem, INSN_MOVECDR) : /* move.d ${const32},${Rd} */ 954 { 955 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 956 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 957 #define FLD(f) abuf->fields.sfmt_bound_cd.f 958 int UNUSED written = 0; 959 IADDR UNUSED pc = abuf->addr; 960 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 961 962 { 963 SI tmp_newval; 964 tmp_newval = FLD (f_indir_pc__dword); 965 { 966 SI opval = tmp_newval; 967 SET_H_GR (FLD (f_operand2), opval); 968 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 969 } 970 { 971 { 972 BI opval = LTSI (tmp_newval, 0); 973 CPU (h_nbit) = opval; 974 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 975 } 976 { 977 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 978 CPU (h_zbit) = opval; 979 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 980 } 981 SET_H_CBIT_MOVE (0); 982 SET_H_VBIT_MOVE (0); 983 { 984 { 985 BI opval = 0; 986 CPU (h_xbit) = opval; 987 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 988 } 989 { 990 BI opval = 0; 991 SET_H_INSN_PREFIXED_P (opval); 992 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 993 } 994 } 995 } 996 } 997 998 #undef FLD 999 } 1000 NEXT (vpc); 1001 1002 CASE (sem, INSN_MOVSCBR) : /* movs.b ${sconst8},${Rd} */ 1003 { 1004 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1005 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1006 #define FLD(f) abuf->fields.sfmt_bound_cb.f 1007 int UNUSED written = 0; 1008 IADDR UNUSED pc = abuf->addr; 1009 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1010 1011 { 1012 SI tmp_newval; 1013 tmp_newval = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 1014 { 1015 SI opval = tmp_newval; 1016 SET_H_GR (FLD (f_operand2), opval); 1017 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1018 } 1019 { 1020 { 1021 BI opval = LTSI (tmp_newval, 0); 1022 CPU (h_nbit) = opval; 1023 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1024 } 1025 { 1026 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 1027 CPU (h_zbit) = opval; 1028 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1029 } 1030 SET_H_CBIT_MOVE (0); 1031 SET_H_VBIT_MOVE (0); 1032 { 1033 { 1034 BI opval = 0; 1035 CPU (h_xbit) = opval; 1036 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1037 } 1038 { 1039 BI opval = 0; 1040 SET_H_INSN_PREFIXED_P (opval); 1041 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1042 } 1043 } 1044 } 1045 } 1046 1047 #undef FLD 1048 } 1049 NEXT (vpc); 1050 1051 CASE (sem, INSN_MOVSCWR) : /* movs.w ${sconst16},${Rd} */ 1052 { 1053 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1054 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1055 #define FLD(f) abuf->fields.sfmt_bound_cw.f 1056 int UNUSED written = 0; 1057 IADDR UNUSED pc = abuf->addr; 1058 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1059 1060 { 1061 SI tmp_newval; 1062 tmp_newval = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 1063 { 1064 SI opval = tmp_newval; 1065 SET_H_GR (FLD (f_operand2), opval); 1066 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1067 } 1068 { 1069 { 1070 BI opval = LTSI (tmp_newval, 0); 1071 CPU (h_nbit) = opval; 1072 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1073 } 1074 { 1075 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 1076 CPU (h_zbit) = opval; 1077 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1078 } 1079 SET_H_CBIT_MOVE (0); 1080 SET_H_VBIT_MOVE (0); 1081 { 1082 { 1083 BI opval = 0; 1084 CPU (h_xbit) = opval; 1085 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1086 } 1087 { 1088 BI opval = 0; 1089 SET_H_INSN_PREFIXED_P (opval); 1090 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1091 } 1092 } 1093 } 1094 } 1095 1096 #undef FLD 1097 } 1098 NEXT (vpc); 1099 1100 CASE (sem, INSN_MOVUCBR) : /* movu.b ${uconst8},${Rd} */ 1101 { 1102 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1103 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1104 #define FLD(f) abuf->fields.sfmt_bound_cb.f 1105 int UNUSED written = 0; 1106 IADDR UNUSED pc = abuf->addr; 1107 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1108 1109 { 1110 SI tmp_newval; 1111 tmp_newval = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 1112 { 1113 SI opval = tmp_newval; 1114 SET_H_GR (FLD (f_operand2), opval); 1115 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1116 } 1117 { 1118 { 1119 BI opval = LTSI (tmp_newval, 0); 1120 CPU (h_nbit) = opval; 1121 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1122 } 1123 { 1124 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 1125 CPU (h_zbit) = opval; 1126 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1127 } 1128 SET_H_CBIT_MOVE (0); 1129 SET_H_VBIT_MOVE (0); 1130 { 1131 { 1132 BI opval = 0; 1133 CPU (h_xbit) = opval; 1134 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1135 } 1136 { 1137 BI opval = 0; 1138 SET_H_INSN_PREFIXED_P (opval); 1139 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1140 } 1141 } 1142 } 1143 } 1144 1145 #undef FLD 1146 } 1147 NEXT (vpc); 1148 1149 CASE (sem, INSN_MOVUCWR) : /* movu.w ${uconst16},${Rd} */ 1150 { 1151 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1152 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1153 #define FLD(f) abuf->fields.sfmt_bound_cw.f 1154 int UNUSED written = 0; 1155 IADDR UNUSED pc = abuf->addr; 1156 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1157 1158 { 1159 SI tmp_newval; 1160 tmp_newval = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 1161 { 1162 SI opval = tmp_newval; 1163 SET_H_GR (FLD (f_operand2), opval); 1164 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1165 } 1166 { 1167 { 1168 BI opval = LTSI (tmp_newval, 0); 1169 CPU (h_nbit) = opval; 1170 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1171 } 1172 { 1173 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 1174 CPU (h_zbit) = opval; 1175 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1176 } 1177 SET_H_CBIT_MOVE (0); 1178 SET_H_VBIT_MOVE (0); 1179 { 1180 { 1181 BI opval = 0; 1182 CPU (h_xbit) = opval; 1183 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1184 } 1185 { 1186 BI opval = 0; 1187 SET_H_INSN_PREFIXED_P (opval); 1188 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1189 } 1190 } 1191 } 1192 } 1193 1194 #undef FLD 1195 } 1196 NEXT (vpc); 1197 1198 CASE (sem, INSN_ADDQ) : /* addq $j,$Rd */ 1199 { 1200 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1201 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1202 #define FLD(f) abuf->fields.sfmt_addq.f 1203 int UNUSED written = 0; 1204 IADDR UNUSED pc = abuf->addr; 1205 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1206 1207 { 1208 SI tmp_tmpopd; 1209 SI tmp_tmpops; 1210 BI tmp_carry; 1211 SI tmp_newval; 1212 tmp_tmpops = FLD (f_u6); 1213 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1214 tmp_carry = CPU (h_cbit); 1215 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1216 { 1217 SI opval = tmp_newval; 1218 SET_H_GR (FLD (f_operand2), opval); 1219 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1220 } 1221 { 1222 { 1223 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 1224 CPU (h_cbit) = opval; 1225 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1226 } 1227 { 1228 BI opval = LTSI (tmp_newval, 0); 1229 CPU (h_nbit) = opval; 1230 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1231 } 1232 { 1233 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1234 CPU (h_zbit) = opval; 1235 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1236 } 1237 { 1238 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 1239 CPU (h_vbit) = opval; 1240 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1241 } 1242 { 1243 { 1244 BI opval = 0; 1245 CPU (h_xbit) = opval; 1246 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1247 } 1248 { 1249 BI opval = 0; 1250 SET_H_INSN_PREFIXED_P (opval); 1251 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1252 } 1253 } 1254 } 1255 } 1256 1257 #undef FLD 1258 } 1259 NEXT (vpc); 1260 1261 CASE (sem, INSN_SUBQ) : /* subq $j,$Rd */ 1262 { 1263 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1264 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1265 #define FLD(f) abuf->fields.sfmt_addq.f 1266 int UNUSED written = 0; 1267 IADDR UNUSED pc = abuf->addr; 1268 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1269 1270 { 1271 SI tmp_tmpopd; 1272 SI tmp_tmpops; 1273 BI tmp_carry; 1274 SI tmp_newval; 1275 tmp_tmpops = FLD (f_u6); 1276 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1277 tmp_carry = CPU (h_cbit); 1278 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1279 { 1280 SI opval = tmp_newval; 1281 SET_H_GR (FLD (f_operand2), opval); 1282 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1283 } 1284 { 1285 { 1286 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 1287 CPU (h_cbit) = opval; 1288 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1289 } 1290 { 1291 BI opval = LTSI (tmp_newval, 0); 1292 CPU (h_nbit) = opval; 1293 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1294 } 1295 { 1296 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1297 CPU (h_zbit) = opval; 1298 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1299 } 1300 { 1301 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 1302 CPU (h_vbit) = opval; 1303 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1304 } 1305 { 1306 { 1307 BI opval = 0; 1308 CPU (h_xbit) = opval; 1309 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1310 } 1311 { 1312 BI opval = 0; 1313 SET_H_INSN_PREFIXED_P (opval); 1314 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1315 } 1316 } 1317 } 1318 } 1319 1320 #undef FLD 1321 } 1322 NEXT (vpc); 1323 1324 CASE (sem, INSN_CMP_R_B_R) : /* cmp-r.b $Rs,$Rd */ 1325 { 1326 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1327 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1328 #define FLD(f) abuf->fields.sfmt_muls_b.f 1329 int UNUSED written = 0; 1330 IADDR UNUSED pc = abuf->addr; 1331 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1332 1333 { 1334 QI tmp_tmpopd; 1335 QI tmp_tmpops; 1336 BI tmp_carry; 1337 QI tmp_newval; 1338 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 1339 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1340 tmp_carry = CPU (h_cbit); 1341 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1342 ((void) 0); /*nop*/ 1343 { 1344 { 1345 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 1346 CPU (h_cbit) = opval; 1347 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1348 } 1349 { 1350 BI opval = LTQI (tmp_newval, 0); 1351 CPU (h_nbit) = opval; 1352 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1353 } 1354 { 1355 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1356 CPU (h_zbit) = opval; 1357 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1358 } 1359 { 1360 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 1361 CPU (h_vbit) = opval; 1362 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1363 } 1364 { 1365 { 1366 BI opval = 0; 1367 CPU (h_xbit) = opval; 1368 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1369 } 1370 { 1371 BI opval = 0; 1372 SET_H_INSN_PREFIXED_P (opval); 1373 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1374 } 1375 } 1376 } 1377 } 1378 1379 #undef FLD 1380 } 1381 NEXT (vpc); 1382 1383 CASE (sem, INSN_CMP_R_W_R) : /* cmp-r.w $Rs,$Rd */ 1384 { 1385 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1386 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1387 #define FLD(f) abuf->fields.sfmt_muls_b.f 1388 int UNUSED written = 0; 1389 IADDR UNUSED pc = abuf->addr; 1390 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1391 1392 { 1393 HI tmp_tmpopd; 1394 HI tmp_tmpops; 1395 BI tmp_carry; 1396 HI tmp_newval; 1397 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 1398 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1399 tmp_carry = CPU (h_cbit); 1400 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1401 ((void) 0); /*nop*/ 1402 { 1403 { 1404 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 1405 CPU (h_cbit) = opval; 1406 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1407 } 1408 { 1409 BI opval = LTHI (tmp_newval, 0); 1410 CPU (h_nbit) = opval; 1411 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1412 } 1413 { 1414 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1415 CPU (h_zbit) = opval; 1416 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1417 } 1418 { 1419 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 1420 CPU (h_vbit) = opval; 1421 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1422 } 1423 { 1424 { 1425 BI opval = 0; 1426 CPU (h_xbit) = opval; 1427 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1428 } 1429 { 1430 BI opval = 0; 1431 SET_H_INSN_PREFIXED_P (opval); 1432 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1433 } 1434 } 1435 } 1436 } 1437 1438 #undef FLD 1439 } 1440 NEXT (vpc); 1441 1442 CASE (sem, INSN_CMP_R_D_R) : /* cmp-r.d $Rs,$Rd */ 1443 { 1444 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1445 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1446 #define FLD(f) abuf->fields.sfmt_muls_b.f 1447 int UNUSED written = 0; 1448 IADDR UNUSED pc = abuf->addr; 1449 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1450 1451 { 1452 SI tmp_tmpopd; 1453 SI tmp_tmpops; 1454 BI tmp_carry; 1455 SI tmp_newval; 1456 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 1457 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1458 tmp_carry = CPU (h_cbit); 1459 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1460 ((void) 0); /*nop*/ 1461 { 1462 { 1463 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 1464 CPU (h_cbit) = opval; 1465 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1466 } 1467 { 1468 BI opval = LTSI (tmp_newval, 0); 1469 CPU (h_nbit) = opval; 1470 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1471 } 1472 { 1473 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1474 CPU (h_zbit) = opval; 1475 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1476 } 1477 { 1478 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 1479 CPU (h_vbit) = opval; 1480 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1481 } 1482 { 1483 { 1484 BI opval = 0; 1485 CPU (h_xbit) = opval; 1486 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1487 } 1488 { 1489 BI opval = 0; 1490 SET_H_INSN_PREFIXED_P (opval); 1491 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1492 } 1493 } 1494 } 1495 } 1496 1497 #undef FLD 1498 } 1499 NEXT (vpc); 1500 1501 CASE (sem, INSN_CMP_M_B_M) : /* cmp-m.b [${Rs}${inc}],${Rd} */ 1502 { 1503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1504 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1505 #define FLD(f) abuf->fields.sfmt_addc_m.f 1506 int UNUSED written = 0; 1507 IADDR UNUSED pc = abuf->addr; 1508 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1509 1510 { 1511 QI tmp_tmpopd; 1512 QI tmp_tmpops; 1513 BI tmp_carry; 1514 QI tmp_newval; 1515 tmp_tmpops = ({ SI tmp_addr; 1516 QI tmp_tmp_mem; 1517 BI tmp_postinc; 1518 tmp_postinc = FLD (f_memmode); 1519 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 1520 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 1521 ; if (NEBI (tmp_postinc, 0)) { 1522 { 1523 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 1524 tmp_addr = ADDSI (tmp_addr, 1); 1525 } 1526 { 1527 SI opval = tmp_addr; 1528 SET_H_GR (FLD (f_operand1), opval); 1529 written |= (1 << 9); 1530 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1531 } 1532 } 1533 } 1534 ; tmp_tmp_mem; }); 1535 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1536 tmp_carry = CPU (h_cbit); 1537 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1538 ((void) 0); /*nop*/ 1539 { 1540 { 1541 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 1542 CPU (h_cbit) = opval; 1543 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1544 } 1545 { 1546 BI opval = LTQI (tmp_newval, 0); 1547 CPU (h_nbit) = opval; 1548 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1549 } 1550 { 1551 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1552 CPU (h_zbit) = opval; 1553 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1554 } 1555 { 1556 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 1557 CPU (h_vbit) = opval; 1558 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1559 } 1560 { 1561 { 1562 BI opval = 0; 1563 CPU (h_xbit) = opval; 1564 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1565 } 1566 { 1567 BI opval = 0; 1568 SET_H_INSN_PREFIXED_P (opval); 1569 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1570 } 1571 } 1572 } 1573 } 1574 1575 abuf->written = written; 1576 #undef FLD 1577 } 1578 NEXT (vpc); 1579 1580 CASE (sem, INSN_CMP_M_W_M) : /* cmp-m.w [${Rs}${inc}],${Rd} */ 1581 { 1582 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1583 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1584 #define FLD(f) abuf->fields.sfmt_addc_m.f 1585 int UNUSED written = 0; 1586 IADDR UNUSED pc = abuf->addr; 1587 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1588 1589 { 1590 HI tmp_tmpopd; 1591 HI tmp_tmpops; 1592 BI tmp_carry; 1593 HI tmp_newval; 1594 tmp_tmpops = ({ SI tmp_addr; 1595 HI tmp_tmp_mem; 1596 BI tmp_postinc; 1597 tmp_postinc = FLD (f_memmode); 1598 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 1599 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 1600 ; if (NEBI (tmp_postinc, 0)) { 1601 { 1602 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 1603 tmp_addr = ADDSI (tmp_addr, 2); 1604 } 1605 { 1606 SI opval = tmp_addr; 1607 SET_H_GR (FLD (f_operand1), opval); 1608 written |= (1 << 9); 1609 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1610 } 1611 } 1612 } 1613 ; tmp_tmp_mem; }); 1614 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1615 tmp_carry = CPU (h_cbit); 1616 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1617 ((void) 0); /*nop*/ 1618 { 1619 { 1620 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 1621 CPU (h_cbit) = opval; 1622 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1623 } 1624 { 1625 BI opval = LTHI (tmp_newval, 0); 1626 CPU (h_nbit) = opval; 1627 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1628 } 1629 { 1630 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1631 CPU (h_zbit) = opval; 1632 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1633 } 1634 { 1635 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 1636 CPU (h_vbit) = opval; 1637 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1638 } 1639 { 1640 { 1641 BI opval = 0; 1642 CPU (h_xbit) = opval; 1643 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1644 } 1645 { 1646 BI opval = 0; 1647 SET_H_INSN_PREFIXED_P (opval); 1648 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1649 } 1650 } 1651 } 1652 } 1653 1654 abuf->written = written; 1655 #undef FLD 1656 } 1657 NEXT (vpc); 1658 1659 CASE (sem, INSN_CMP_M_D_M) : /* cmp-m.d [${Rs}${inc}],${Rd} */ 1660 { 1661 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1662 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1663 #define FLD(f) abuf->fields.sfmt_addc_m.f 1664 int UNUSED written = 0; 1665 IADDR UNUSED pc = abuf->addr; 1666 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1667 1668 { 1669 SI tmp_tmpopd; 1670 SI tmp_tmpops; 1671 BI tmp_carry; 1672 SI tmp_newval; 1673 tmp_tmpops = ({ SI tmp_addr; 1674 SI tmp_tmp_mem; 1675 BI tmp_postinc; 1676 tmp_postinc = FLD (f_memmode); 1677 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 1678 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 1679 ; if (NEBI (tmp_postinc, 0)) { 1680 { 1681 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 1682 tmp_addr = ADDSI (tmp_addr, 4); 1683 } 1684 { 1685 SI opval = tmp_addr; 1686 SET_H_GR (FLD (f_operand1), opval); 1687 written |= (1 << 9); 1688 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1689 } 1690 } 1691 } 1692 ; tmp_tmp_mem; }); 1693 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1694 tmp_carry = CPU (h_cbit); 1695 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1696 ((void) 0); /*nop*/ 1697 { 1698 { 1699 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 1700 CPU (h_cbit) = opval; 1701 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1702 } 1703 { 1704 BI opval = LTSI (tmp_newval, 0); 1705 CPU (h_nbit) = opval; 1706 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1707 } 1708 { 1709 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1710 CPU (h_zbit) = opval; 1711 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1712 } 1713 { 1714 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 1715 CPU (h_vbit) = opval; 1716 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1717 } 1718 { 1719 { 1720 BI opval = 0; 1721 CPU (h_xbit) = opval; 1722 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1723 } 1724 { 1725 BI opval = 0; 1726 SET_H_INSN_PREFIXED_P (opval); 1727 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1728 } 1729 } 1730 } 1731 } 1732 1733 abuf->written = written; 1734 #undef FLD 1735 } 1736 NEXT (vpc); 1737 1738 CASE (sem, INSN_CMPCBR) : /* cmp.b $sconst8,$Rd */ 1739 { 1740 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1741 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1742 #define FLD(f) abuf->fields.sfmt_bound_cb.f 1743 int UNUSED written = 0; 1744 IADDR UNUSED pc = abuf->addr; 1745 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1746 1747 { 1748 QI tmp_tmpopd; 1749 QI tmp_tmpops; 1750 BI tmp_carry; 1751 QI tmp_newval; 1752 tmp_tmpops = TRUNCSIQI (FLD (f_indir_pc__byte)); 1753 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1754 tmp_carry = CPU (h_cbit); 1755 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1756 ((void) 0); /*nop*/ 1757 { 1758 { 1759 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 1760 CPU (h_cbit) = opval; 1761 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1762 } 1763 { 1764 BI opval = LTQI (tmp_newval, 0); 1765 CPU (h_nbit) = opval; 1766 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1767 } 1768 { 1769 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1770 CPU (h_zbit) = opval; 1771 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1772 } 1773 { 1774 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 1775 CPU (h_vbit) = opval; 1776 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1777 } 1778 { 1779 { 1780 BI opval = 0; 1781 CPU (h_xbit) = opval; 1782 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1783 } 1784 { 1785 BI opval = 0; 1786 SET_H_INSN_PREFIXED_P (opval); 1787 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1788 } 1789 } 1790 } 1791 } 1792 1793 #undef FLD 1794 } 1795 NEXT (vpc); 1796 1797 CASE (sem, INSN_CMPCWR) : /* cmp.w $sconst16,$Rd */ 1798 { 1799 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1800 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1801 #define FLD(f) abuf->fields.sfmt_bound_cw.f 1802 int UNUSED written = 0; 1803 IADDR UNUSED pc = abuf->addr; 1804 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1805 1806 { 1807 HI tmp_tmpopd; 1808 HI tmp_tmpops; 1809 BI tmp_carry; 1810 HI tmp_newval; 1811 tmp_tmpops = TRUNCSIHI (FLD (f_indir_pc__word)); 1812 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1813 tmp_carry = CPU (h_cbit); 1814 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1815 ((void) 0); /*nop*/ 1816 { 1817 { 1818 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 1819 CPU (h_cbit) = opval; 1820 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1821 } 1822 { 1823 BI opval = LTHI (tmp_newval, 0); 1824 CPU (h_nbit) = opval; 1825 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1826 } 1827 { 1828 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1829 CPU (h_zbit) = opval; 1830 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1831 } 1832 { 1833 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 1834 CPU (h_vbit) = opval; 1835 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1836 } 1837 { 1838 { 1839 BI opval = 0; 1840 CPU (h_xbit) = opval; 1841 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1842 } 1843 { 1844 BI opval = 0; 1845 SET_H_INSN_PREFIXED_P (opval); 1846 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1847 } 1848 } 1849 } 1850 } 1851 1852 #undef FLD 1853 } 1854 NEXT (vpc); 1855 1856 CASE (sem, INSN_CMPCDR) : /* cmp.d $const32,$Rd */ 1857 { 1858 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1859 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1860 #define FLD(f) abuf->fields.sfmt_bound_cd.f 1861 int UNUSED written = 0; 1862 IADDR UNUSED pc = abuf->addr; 1863 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 1864 1865 { 1866 SI tmp_tmpopd; 1867 SI tmp_tmpops; 1868 BI tmp_carry; 1869 SI tmp_newval; 1870 tmp_tmpops = FLD (f_indir_pc__dword); 1871 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1872 tmp_carry = CPU (h_cbit); 1873 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1874 ((void) 0); /*nop*/ 1875 { 1876 { 1877 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 1878 CPU (h_cbit) = opval; 1879 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1880 } 1881 { 1882 BI opval = LTSI (tmp_newval, 0); 1883 CPU (h_nbit) = opval; 1884 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1885 } 1886 { 1887 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1888 CPU (h_zbit) = opval; 1889 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1890 } 1891 { 1892 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 1893 CPU (h_vbit) = opval; 1894 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1895 } 1896 { 1897 { 1898 BI opval = 0; 1899 CPU (h_xbit) = opval; 1900 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1901 } 1902 { 1903 BI opval = 0; 1904 SET_H_INSN_PREFIXED_P (opval); 1905 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1906 } 1907 } 1908 } 1909 } 1910 1911 #undef FLD 1912 } 1913 NEXT (vpc); 1914 1915 CASE (sem, INSN_CMPQ) : /* cmpq $i,$Rd */ 1916 { 1917 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1918 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1919 #define FLD(f) abuf->fields.sfmt_andq.f 1920 int UNUSED written = 0; 1921 IADDR UNUSED pc = abuf->addr; 1922 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1923 1924 { 1925 SI tmp_tmpopd; 1926 SI tmp_tmpops; 1927 BI tmp_carry; 1928 SI tmp_newval; 1929 tmp_tmpops = FLD (f_s6); 1930 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 1931 tmp_carry = CPU (h_cbit); 1932 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 1933 ((void) 0); /*nop*/ 1934 { 1935 { 1936 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 1937 CPU (h_cbit) = opval; 1938 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 1939 } 1940 { 1941 BI opval = LTSI (tmp_newval, 0); 1942 CPU (h_nbit) = opval; 1943 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 1944 } 1945 { 1946 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 1947 CPU (h_zbit) = opval; 1948 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 1949 } 1950 { 1951 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 1952 CPU (h_vbit) = opval; 1953 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 1954 } 1955 { 1956 { 1957 BI opval = 0; 1958 CPU (h_xbit) = opval; 1959 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 1960 } 1961 { 1962 BI opval = 0; 1963 SET_H_INSN_PREFIXED_P (opval); 1964 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 1965 } 1966 } 1967 } 1968 } 1969 1970 #undef FLD 1971 } 1972 NEXT (vpc); 1973 1974 CASE (sem, INSN_CMPS_M_B_M) : /* cmps-m.b [${Rs}${inc}],$Rd */ 1975 { 1976 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1977 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1978 #define FLD(f) abuf->fields.sfmt_addc_m.f 1979 int UNUSED written = 0; 1980 IADDR UNUSED pc = abuf->addr; 1981 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1982 1983 { 1984 SI tmp_tmpopd; 1985 SI tmp_tmpops; 1986 BI tmp_carry; 1987 SI tmp_newval; 1988 tmp_tmpops = EXTQISI (({ SI tmp_addr; 1989 QI tmp_tmp_mem; 1990 BI tmp_postinc; 1991 tmp_postinc = FLD (f_memmode); 1992 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 1993 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 1994 ; if (NEBI (tmp_postinc, 0)) { 1995 { 1996 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 1997 tmp_addr = ADDSI (tmp_addr, 1); 1998 } 1999 { 2000 SI opval = tmp_addr; 2001 SET_H_GR (FLD (f_operand1), opval); 2002 written |= (1 << 9); 2003 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2004 } 2005 } 2006 } 2007 ; tmp_tmp_mem; })); 2008 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2009 tmp_carry = CPU (h_cbit); 2010 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2011 ((void) 0); /*nop*/ 2012 { 2013 { 2014 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2015 CPU (h_cbit) = opval; 2016 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2017 } 2018 { 2019 BI opval = LTSI (tmp_newval, 0); 2020 CPU (h_nbit) = opval; 2021 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2022 } 2023 { 2024 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2025 CPU (h_zbit) = opval; 2026 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2027 } 2028 { 2029 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2030 CPU (h_vbit) = opval; 2031 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2032 } 2033 { 2034 { 2035 BI opval = 0; 2036 CPU (h_xbit) = opval; 2037 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2038 } 2039 { 2040 BI opval = 0; 2041 SET_H_INSN_PREFIXED_P (opval); 2042 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2043 } 2044 } 2045 } 2046 } 2047 2048 abuf->written = written; 2049 #undef FLD 2050 } 2051 NEXT (vpc); 2052 2053 CASE (sem, INSN_CMPS_M_W_M) : /* cmps-m.w [${Rs}${inc}],$Rd */ 2054 { 2055 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2056 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2057 #define FLD(f) abuf->fields.sfmt_addc_m.f 2058 int UNUSED written = 0; 2059 IADDR UNUSED pc = abuf->addr; 2060 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2061 2062 { 2063 SI tmp_tmpopd; 2064 SI tmp_tmpops; 2065 BI tmp_carry; 2066 SI tmp_newval; 2067 tmp_tmpops = EXTHISI (({ SI tmp_addr; 2068 HI tmp_tmp_mem; 2069 BI tmp_postinc; 2070 tmp_postinc = FLD (f_memmode); 2071 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2072 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 2073 ; if (NEBI (tmp_postinc, 0)) { 2074 { 2075 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2076 tmp_addr = ADDSI (tmp_addr, 2); 2077 } 2078 { 2079 SI opval = tmp_addr; 2080 SET_H_GR (FLD (f_operand1), opval); 2081 written |= (1 << 9); 2082 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2083 } 2084 } 2085 } 2086 ; tmp_tmp_mem; })); 2087 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2088 tmp_carry = CPU (h_cbit); 2089 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2090 ((void) 0); /*nop*/ 2091 { 2092 { 2093 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2094 CPU (h_cbit) = opval; 2095 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2096 } 2097 { 2098 BI opval = LTSI (tmp_newval, 0); 2099 CPU (h_nbit) = opval; 2100 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2101 } 2102 { 2103 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2104 CPU (h_zbit) = opval; 2105 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2106 } 2107 { 2108 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2109 CPU (h_vbit) = opval; 2110 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2111 } 2112 { 2113 { 2114 BI opval = 0; 2115 CPU (h_xbit) = opval; 2116 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2117 } 2118 { 2119 BI opval = 0; 2120 SET_H_INSN_PREFIXED_P (opval); 2121 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2122 } 2123 } 2124 } 2125 } 2126 2127 abuf->written = written; 2128 #undef FLD 2129 } 2130 NEXT (vpc); 2131 2132 CASE (sem, INSN_CMPSCBR) : /* [${Rs}${inc}],$Rd */ 2133 { 2134 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2135 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2136 #define FLD(f) abuf->fields.sfmt_bound_cb.f 2137 int UNUSED written = 0; 2138 IADDR UNUSED pc = abuf->addr; 2139 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2140 2141 { 2142 SI tmp_tmpopd; 2143 SI tmp_tmpops; 2144 BI tmp_carry; 2145 SI tmp_newval; 2146 tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 2147 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2148 tmp_carry = CPU (h_cbit); 2149 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2150 ((void) 0); /*nop*/ 2151 { 2152 { 2153 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2154 CPU (h_cbit) = opval; 2155 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2156 } 2157 { 2158 BI opval = LTSI (tmp_newval, 0); 2159 CPU (h_nbit) = opval; 2160 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2161 } 2162 { 2163 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2164 CPU (h_zbit) = opval; 2165 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2166 } 2167 { 2168 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2169 CPU (h_vbit) = opval; 2170 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2171 } 2172 { 2173 { 2174 BI opval = 0; 2175 CPU (h_xbit) = opval; 2176 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2177 } 2178 { 2179 BI opval = 0; 2180 SET_H_INSN_PREFIXED_P (opval); 2181 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2182 } 2183 } 2184 } 2185 } 2186 2187 #undef FLD 2188 } 2189 NEXT (vpc); 2190 2191 CASE (sem, INSN_CMPSCWR) : /* [${Rs}${inc}],$Rd */ 2192 { 2193 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2194 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2195 #define FLD(f) abuf->fields.sfmt_bound_cw.f 2196 int UNUSED written = 0; 2197 IADDR UNUSED pc = abuf->addr; 2198 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2199 2200 { 2201 SI tmp_tmpopd; 2202 SI tmp_tmpops; 2203 BI tmp_carry; 2204 SI tmp_newval; 2205 tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 2206 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2207 tmp_carry = CPU (h_cbit); 2208 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2209 ((void) 0); /*nop*/ 2210 { 2211 { 2212 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2213 CPU (h_cbit) = opval; 2214 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2215 } 2216 { 2217 BI opval = LTSI (tmp_newval, 0); 2218 CPU (h_nbit) = opval; 2219 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2220 } 2221 { 2222 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2223 CPU (h_zbit) = opval; 2224 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2225 } 2226 { 2227 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2228 CPU (h_vbit) = opval; 2229 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2230 } 2231 { 2232 { 2233 BI opval = 0; 2234 CPU (h_xbit) = opval; 2235 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2236 } 2237 { 2238 BI opval = 0; 2239 SET_H_INSN_PREFIXED_P (opval); 2240 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2241 } 2242 } 2243 } 2244 } 2245 2246 #undef FLD 2247 } 2248 NEXT (vpc); 2249 2250 CASE (sem, INSN_CMPU_M_B_M) : /* cmpu-m.b [${Rs}${inc}],$Rd */ 2251 { 2252 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2253 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2254 #define FLD(f) abuf->fields.sfmt_addc_m.f 2255 int UNUSED written = 0; 2256 IADDR UNUSED pc = abuf->addr; 2257 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2258 2259 { 2260 SI tmp_tmpopd; 2261 SI tmp_tmpops; 2262 BI tmp_carry; 2263 SI tmp_newval; 2264 tmp_tmpops = ZEXTQISI (({ SI tmp_addr; 2265 QI tmp_tmp_mem; 2266 BI tmp_postinc; 2267 tmp_postinc = FLD (f_memmode); 2268 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2269 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 2270 ; if (NEBI (tmp_postinc, 0)) { 2271 { 2272 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2273 tmp_addr = ADDSI (tmp_addr, 1); 2274 } 2275 { 2276 SI opval = tmp_addr; 2277 SET_H_GR (FLD (f_operand1), opval); 2278 written |= (1 << 9); 2279 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2280 } 2281 } 2282 } 2283 ; tmp_tmp_mem; })); 2284 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2285 tmp_carry = CPU (h_cbit); 2286 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2287 ((void) 0); /*nop*/ 2288 { 2289 { 2290 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2291 CPU (h_cbit) = opval; 2292 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2293 } 2294 { 2295 BI opval = LTSI (tmp_newval, 0); 2296 CPU (h_nbit) = opval; 2297 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2298 } 2299 { 2300 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2301 CPU (h_zbit) = opval; 2302 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2303 } 2304 { 2305 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2306 CPU (h_vbit) = opval; 2307 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2308 } 2309 { 2310 { 2311 BI opval = 0; 2312 CPU (h_xbit) = opval; 2313 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2314 } 2315 { 2316 BI opval = 0; 2317 SET_H_INSN_PREFIXED_P (opval); 2318 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2319 } 2320 } 2321 } 2322 } 2323 2324 abuf->written = written; 2325 #undef FLD 2326 } 2327 NEXT (vpc); 2328 2329 CASE (sem, INSN_CMPU_M_W_M) : /* cmpu-m.w [${Rs}${inc}],$Rd */ 2330 { 2331 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2332 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2333 #define FLD(f) abuf->fields.sfmt_addc_m.f 2334 int UNUSED written = 0; 2335 IADDR UNUSED pc = abuf->addr; 2336 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2337 2338 { 2339 SI tmp_tmpopd; 2340 SI tmp_tmpops; 2341 BI tmp_carry; 2342 SI tmp_newval; 2343 tmp_tmpops = ZEXTHISI (({ SI tmp_addr; 2344 HI tmp_tmp_mem; 2345 BI tmp_postinc; 2346 tmp_postinc = FLD (f_memmode); 2347 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2348 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 2349 ; if (NEBI (tmp_postinc, 0)) { 2350 { 2351 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2352 tmp_addr = ADDSI (tmp_addr, 2); 2353 } 2354 { 2355 SI opval = tmp_addr; 2356 SET_H_GR (FLD (f_operand1), opval); 2357 written |= (1 << 9); 2358 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2359 } 2360 } 2361 } 2362 ; tmp_tmp_mem; })); 2363 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2364 tmp_carry = CPU (h_cbit); 2365 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2366 ((void) 0); /*nop*/ 2367 { 2368 { 2369 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2370 CPU (h_cbit) = opval; 2371 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2372 } 2373 { 2374 BI opval = LTSI (tmp_newval, 0); 2375 CPU (h_nbit) = opval; 2376 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2377 } 2378 { 2379 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2380 CPU (h_zbit) = opval; 2381 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2382 } 2383 { 2384 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2385 CPU (h_vbit) = opval; 2386 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2387 } 2388 { 2389 { 2390 BI opval = 0; 2391 CPU (h_xbit) = opval; 2392 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2393 } 2394 { 2395 BI opval = 0; 2396 SET_H_INSN_PREFIXED_P (opval); 2397 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2398 } 2399 } 2400 } 2401 } 2402 2403 abuf->written = written; 2404 #undef FLD 2405 } 2406 NEXT (vpc); 2407 2408 CASE (sem, INSN_CMPUCBR) : /* [${Rs}${inc}],$Rd */ 2409 { 2410 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2411 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2412 #define FLD(f) abuf->fields.sfmt_bound_cb.f 2413 int UNUSED written = 0; 2414 IADDR UNUSED pc = abuf->addr; 2415 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2416 2417 { 2418 SI tmp_tmpopd; 2419 SI tmp_tmpops; 2420 BI tmp_carry; 2421 SI tmp_newval; 2422 tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 2423 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2424 tmp_carry = CPU (h_cbit); 2425 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2426 ((void) 0); /*nop*/ 2427 { 2428 { 2429 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2430 CPU (h_cbit) = opval; 2431 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2432 } 2433 { 2434 BI opval = LTSI (tmp_newval, 0); 2435 CPU (h_nbit) = opval; 2436 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2437 } 2438 { 2439 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2440 CPU (h_zbit) = opval; 2441 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2442 } 2443 { 2444 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2445 CPU (h_vbit) = opval; 2446 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2447 } 2448 { 2449 { 2450 BI opval = 0; 2451 CPU (h_xbit) = opval; 2452 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2453 } 2454 { 2455 BI opval = 0; 2456 SET_H_INSN_PREFIXED_P (opval); 2457 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2458 } 2459 } 2460 } 2461 } 2462 2463 #undef FLD 2464 } 2465 NEXT (vpc); 2466 2467 CASE (sem, INSN_CMPUCWR) : /* [${Rs}${inc}],$Rd */ 2468 { 2469 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2470 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2471 #define FLD(f) abuf->fields.sfmt_bound_cw.f 2472 int UNUSED written = 0; 2473 IADDR UNUSED pc = abuf->addr; 2474 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2475 2476 { 2477 SI tmp_tmpopd; 2478 SI tmp_tmpops; 2479 BI tmp_carry; 2480 SI tmp_newval; 2481 tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 2482 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 2483 tmp_carry = CPU (h_cbit); 2484 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 2485 ((void) 0); /*nop*/ 2486 { 2487 { 2488 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 2489 CPU (h_cbit) = opval; 2490 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 2491 } 2492 { 2493 BI opval = LTSI (tmp_newval, 0); 2494 CPU (h_nbit) = opval; 2495 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2496 } 2497 { 2498 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 2499 CPU (h_zbit) = opval; 2500 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2501 } 2502 { 2503 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 2504 CPU (h_vbit) = opval; 2505 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 2506 } 2507 { 2508 { 2509 BI opval = 0; 2510 CPU (h_xbit) = opval; 2511 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2512 } 2513 { 2514 BI opval = 0; 2515 SET_H_INSN_PREFIXED_P (opval); 2516 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2517 } 2518 } 2519 } 2520 } 2521 2522 #undef FLD 2523 } 2524 NEXT (vpc); 2525 2526 CASE (sem, INSN_MOVE_M_B_M) : /* move-m.b [${Rs}${inc}],${Rd} */ 2527 { 2528 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2529 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2530 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 2531 int UNUSED written = 0; 2532 IADDR UNUSED pc = abuf->addr; 2533 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2534 2535 { 2536 SI tmp_tmp; 2537 tmp_tmp = ({ SI tmp_addr; 2538 QI tmp_tmp_mem; 2539 BI tmp_postinc; 2540 tmp_postinc = FLD (f_memmode); 2541 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2542 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 2543 ; if (NEBI (tmp_postinc, 0)) { 2544 { 2545 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2546 tmp_addr = ADDSI (tmp_addr, 1); 2547 } 2548 { 2549 SI opval = tmp_addr; 2550 SET_H_GR (FLD (f_operand1), opval); 2551 written |= (1 << 10); 2552 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2553 } 2554 } 2555 } 2556 ; tmp_tmp_mem; }); 2557 { 2558 SI tmp_oldregval; 2559 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 2560 { 2561 SI opval = ORSI (ANDSI (tmp_tmp, 255), ANDSI (tmp_oldregval, 0xffffff00)); 2562 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 2563 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2564 } 2565 } 2566 { 2567 { 2568 BI opval = LTQI (tmp_tmp, 0); 2569 CPU (h_nbit) = opval; 2570 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2571 } 2572 { 2573 BI opval = ANDIF (EQQI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 2574 CPU (h_zbit) = opval; 2575 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2576 } 2577 SET_H_CBIT_MOVE (0); 2578 SET_H_VBIT_MOVE (0); 2579 { 2580 { 2581 BI opval = 0; 2582 CPU (h_xbit) = opval; 2583 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2584 } 2585 { 2586 BI opval = 0; 2587 SET_H_INSN_PREFIXED_P (opval); 2588 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2589 } 2590 } 2591 } 2592 } 2593 2594 abuf->written = written; 2595 #undef FLD 2596 } 2597 NEXT (vpc); 2598 2599 CASE (sem, INSN_MOVE_M_W_M) : /* move-m.w [${Rs}${inc}],${Rd} */ 2600 { 2601 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2602 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2603 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 2604 int UNUSED written = 0; 2605 IADDR UNUSED pc = abuf->addr; 2606 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2607 2608 { 2609 SI tmp_tmp; 2610 tmp_tmp = ({ SI tmp_addr; 2611 HI tmp_tmp_mem; 2612 BI tmp_postinc; 2613 tmp_postinc = FLD (f_memmode); 2614 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2615 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 2616 ; if (NEBI (tmp_postinc, 0)) { 2617 { 2618 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2619 tmp_addr = ADDSI (tmp_addr, 2); 2620 } 2621 { 2622 SI opval = tmp_addr; 2623 SET_H_GR (FLD (f_operand1), opval); 2624 written |= (1 << 10); 2625 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2626 } 2627 } 2628 } 2629 ; tmp_tmp_mem; }); 2630 { 2631 SI tmp_oldregval; 2632 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 2633 { 2634 SI opval = ORSI (ANDSI (tmp_tmp, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 2635 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 2636 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2637 } 2638 } 2639 { 2640 { 2641 BI opval = LTHI (tmp_tmp, 0); 2642 CPU (h_nbit) = opval; 2643 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2644 } 2645 { 2646 BI opval = ANDIF (EQHI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 2647 CPU (h_zbit) = opval; 2648 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2649 } 2650 SET_H_CBIT_MOVE (0); 2651 SET_H_VBIT_MOVE (0); 2652 { 2653 { 2654 BI opval = 0; 2655 CPU (h_xbit) = opval; 2656 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2657 } 2658 { 2659 BI opval = 0; 2660 SET_H_INSN_PREFIXED_P (opval); 2661 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2662 } 2663 } 2664 } 2665 } 2666 2667 abuf->written = written; 2668 #undef FLD 2669 } 2670 NEXT (vpc); 2671 2672 CASE (sem, INSN_MOVE_M_D_M) : /* move-m.d [${Rs}${inc}],${Rd} */ 2673 { 2674 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2675 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2676 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 2677 int UNUSED written = 0; 2678 IADDR UNUSED pc = abuf->addr; 2679 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2680 2681 { 2682 SI tmp_tmp; 2683 tmp_tmp = ({ SI tmp_addr; 2684 SI tmp_tmp_mem; 2685 BI tmp_postinc; 2686 tmp_postinc = FLD (f_memmode); 2687 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2688 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 2689 ; if (NEBI (tmp_postinc, 0)) { 2690 { 2691 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2692 tmp_addr = ADDSI (tmp_addr, 4); 2693 } 2694 { 2695 SI opval = tmp_addr; 2696 SET_H_GR (FLD (f_operand1), opval); 2697 written |= (1 << 9); 2698 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2699 } 2700 } 2701 } 2702 ; tmp_tmp_mem; }); 2703 { 2704 SI opval = tmp_tmp; 2705 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 2706 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2707 } 2708 { 2709 { 2710 BI opval = LTSI (tmp_tmp, 0); 2711 CPU (h_nbit) = opval; 2712 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2713 } 2714 { 2715 BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 2716 CPU (h_zbit) = opval; 2717 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2718 } 2719 SET_H_CBIT_MOVE (0); 2720 SET_H_VBIT_MOVE (0); 2721 { 2722 { 2723 BI opval = 0; 2724 CPU (h_xbit) = opval; 2725 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2726 } 2727 { 2728 BI opval = 0; 2729 SET_H_INSN_PREFIXED_P (opval); 2730 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2731 } 2732 } 2733 } 2734 } 2735 2736 abuf->written = written; 2737 #undef FLD 2738 } 2739 NEXT (vpc); 2740 2741 CASE (sem, INSN_MOVS_M_B_M) : /* movs-m.b [${Rs}${inc}],${Rd} */ 2742 { 2743 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2744 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2745 #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f 2746 int UNUSED written = 0; 2747 IADDR UNUSED pc = abuf->addr; 2748 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2749 2750 { 2751 SI tmp_tmp; 2752 tmp_tmp = EXTQISI (({ SI tmp_addr; 2753 QI tmp_tmp_mem; 2754 BI tmp_postinc; 2755 tmp_postinc = FLD (f_memmode); 2756 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2757 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 2758 ; if (NEBI (tmp_postinc, 0)) { 2759 { 2760 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2761 tmp_addr = ADDSI (tmp_addr, 1); 2762 } 2763 { 2764 SI opval = tmp_addr; 2765 SET_H_GR (FLD (f_operand1), opval); 2766 written |= (1 << 8); 2767 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2768 } 2769 } 2770 } 2771 ; tmp_tmp_mem; })); 2772 if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) { 2773 { 2774 SI opval = tmp_tmp; 2775 SET_H_GR (FLD (f_operand1), opval); 2776 written |= (1 << 8); 2777 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2778 } 2779 } else { 2780 { 2781 SI opval = tmp_tmp; 2782 SET_H_GR (FLD (f_operand2), opval); 2783 written |= (1 << 7); 2784 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2785 } 2786 } 2787 { 2788 { 2789 BI opval = LTSI (tmp_tmp, 0); 2790 CPU (h_nbit) = opval; 2791 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2792 } 2793 { 2794 BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 2795 CPU (h_zbit) = opval; 2796 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2797 } 2798 SET_H_CBIT_MOVE (0); 2799 SET_H_VBIT_MOVE (0); 2800 { 2801 { 2802 BI opval = 0; 2803 CPU (h_xbit) = opval; 2804 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2805 } 2806 { 2807 BI opval = 0; 2808 SET_H_INSN_PREFIXED_P (opval); 2809 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2810 } 2811 } 2812 } 2813 } 2814 2815 abuf->written = written; 2816 #undef FLD 2817 } 2818 NEXT (vpc); 2819 2820 CASE (sem, INSN_MOVS_M_W_M) : /* movs-m.w [${Rs}${inc}],${Rd} */ 2821 { 2822 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2823 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2824 #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f 2825 int UNUSED written = 0; 2826 IADDR UNUSED pc = abuf->addr; 2827 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2828 2829 { 2830 SI tmp_tmp; 2831 tmp_tmp = EXTHISI (({ SI tmp_addr; 2832 HI tmp_tmp_mem; 2833 BI tmp_postinc; 2834 tmp_postinc = FLD (f_memmode); 2835 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2836 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 2837 ; if (NEBI (tmp_postinc, 0)) { 2838 { 2839 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2840 tmp_addr = ADDSI (tmp_addr, 2); 2841 } 2842 { 2843 SI opval = tmp_addr; 2844 SET_H_GR (FLD (f_operand1), opval); 2845 written |= (1 << 8); 2846 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2847 } 2848 } 2849 } 2850 ; tmp_tmp_mem; })); 2851 if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) { 2852 { 2853 SI opval = tmp_tmp; 2854 SET_H_GR (FLD (f_operand1), opval); 2855 written |= (1 << 8); 2856 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2857 } 2858 } else { 2859 { 2860 SI opval = tmp_tmp; 2861 SET_H_GR (FLD (f_operand2), opval); 2862 written |= (1 << 7); 2863 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2864 } 2865 } 2866 { 2867 { 2868 BI opval = LTSI (tmp_tmp, 0); 2869 CPU (h_nbit) = opval; 2870 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2871 } 2872 { 2873 BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 2874 CPU (h_zbit) = opval; 2875 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2876 } 2877 SET_H_CBIT_MOVE (0); 2878 SET_H_VBIT_MOVE (0); 2879 { 2880 { 2881 BI opval = 0; 2882 CPU (h_xbit) = opval; 2883 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2884 } 2885 { 2886 BI opval = 0; 2887 SET_H_INSN_PREFIXED_P (opval); 2888 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2889 } 2890 } 2891 } 2892 } 2893 2894 abuf->written = written; 2895 #undef FLD 2896 } 2897 NEXT (vpc); 2898 2899 CASE (sem, INSN_MOVU_M_B_M) : /* movu-m.b [${Rs}${inc}],${Rd} */ 2900 { 2901 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2902 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2903 #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f 2904 int UNUSED written = 0; 2905 IADDR UNUSED pc = abuf->addr; 2906 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2907 2908 { 2909 SI tmp_tmp; 2910 tmp_tmp = ZEXTQISI (({ SI tmp_addr; 2911 QI tmp_tmp_mem; 2912 BI tmp_postinc; 2913 tmp_postinc = FLD (f_memmode); 2914 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2915 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 2916 ; if (NEBI (tmp_postinc, 0)) { 2917 { 2918 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2919 tmp_addr = ADDSI (tmp_addr, 1); 2920 } 2921 { 2922 SI opval = tmp_addr; 2923 SET_H_GR (FLD (f_operand1), opval); 2924 written |= (1 << 8); 2925 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2926 } 2927 } 2928 } 2929 ; tmp_tmp_mem; })); 2930 if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) { 2931 { 2932 SI opval = tmp_tmp; 2933 SET_H_GR (FLD (f_operand1), opval); 2934 written |= (1 << 8); 2935 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2936 } 2937 } else { 2938 { 2939 SI opval = tmp_tmp; 2940 SET_H_GR (FLD (f_operand2), opval); 2941 written |= (1 << 7); 2942 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2943 } 2944 } 2945 { 2946 { 2947 BI opval = LTSI (tmp_tmp, 0); 2948 CPU (h_nbit) = opval; 2949 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 2950 } 2951 { 2952 BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 2953 CPU (h_zbit) = opval; 2954 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 2955 } 2956 SET_H_CBIT_MOVE (0); 2957 SET_H_VBIT_MOVE (0); 2958 { 2959 { 2960 BI opval = 0; 2961 CPU (h_xbit) = opval; 2962 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 2963 } 2964 { 2965 BI opval = 0; 2966 SET_H_INSN_PREFIXED_P (opval); 2967 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 2968 } 2969 } 2970 } 2971 } 2972 2973 abuf->written = written; 2974 #undef FLD 2975 } 2976 NEXT (vpc); 2977 2978 CASE (sem, INSN_MOVU_M_W_M) : /* movu-m.w [${Rs}${inc}],${Rd} */ 2979 { 2980 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2981 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2982 #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f 2983 int UNUSED written = 0; 2984 IADDR UNUSED pc = abuf->addr; 2985 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2986 2987 { 2988 SI tmp_tmp; 2989 tmp_tmp = ZEXTHISI (({ SI tmp_addr; 2990 HI tmp_tmp_mem; 2991 BI tmp_postinc; 2992 tmp_postinc = FLD (f_memmode); 2993 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 2994 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 2995 ; if (NEBI (tmp_postinc, 0)) { 2996 { 2997 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 2998 tmp_addr = ADDSI (tmp_addr, 2); 2999 } 3000 { 3001 SI opval = tmp_addr; 3002 SET_H_GR (FLD (f_operand1), opval); 3003 written |= (1 << 8); 3004 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3005 } 3006 } 3007 } 3008 ; tmp_tmp_mem; })); 3009 if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) { 3010 { 3011 SI opval = tmp_tmp; 3012 SET_H_GR (FLD (f_operand1), opval); 3013 written |= (1 << 8); 3014 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3015 } 3016 } else { 3017 { 3018 SI opval = tmp_tmp; 3019 SET_H_GR (FLD (f_operand2), opval); 3020 written |= (1 << 7); 3021 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3022 } 3023 } 3024 { 3025 { 3026 BI opval = LTSI (tmp_tmp, 0); 3027 CPU (h_nbit) = opval; 3028 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 3029 } 3030 { 3031 BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 3032 CPU (h_zbit) = opval; 3033 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 3034 } 3035 SET_H_CBIT_MOVE (0); 3036 SET_H_VBIT_MOVE (0); 3037 { 3038 { 3039 BI opval = 0; 3040 CPU (h_xbit) = opval; 3041 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3042 } 3043 { 3044 BI opval = 0; 3045 SET_H_INSN_PREFIXED_P (opval); 3046 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3047 } 3048 } 3049 } 3050 } 3051 3052 abuf->written = written; 3053 #undef FLD 3054 } 3055 NEXT (vpc); 3056 3057 CASE (sem, INSN_MOVE_R_SPRV32) : /* move ${Rs},${Pd} */ 3058 { 3059 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3060 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3061 #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f 3062 int UNUSED written = 0; 3063 IADDR UNUSED pc = abuf->addr; 3064 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3065 3066 { 3067 SI tmp_tmp; 3068 SI tmp_rno; 3069 tmp_tmp = GET_H_GR (FLD (f_operand1)); 3070 tmp_rno = FLD (f_operand2); 3071 if (ORIF (ORIF (EQSI (tmp_rno, 0), EQSI (tmp_rno, 1)), ORIF (EQSI (tmp_rno, 4), EQSI (tmp_rno, 8)))) { 3072 cgen_rtx_error (current_cpu, "move-r-spr: trying to set a read-only special register"); 3073 } 3074 else { 3075 { 3076 SI opval = tmp_tmp; 3077 SET_H_SR (FLD (f_operand2), opval); 3078 written |= (1 << 2); 3079 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3080 } 3081 } 3082 { 3083 { 3084 BI opval = 0; 3085 CPU (h_xbit) = opval; 3086 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3087 } 3088 { 3089 BI opval = 0; 3090 SET_H_INSN_PREFIXED_P (opval); 3091 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3092 } 3093 } 3094 } 3095 3096 abuf->written = written; 3097 #undef FLD 3098 } 3099 NEXT (vpc); 3100 3101 CASE (sem, INSN_MOVE_SPR_RV32) : /* move ${Ps},${Rd-sfield} */ 3102 { 3103 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3104 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3105 #define FLD(f) abuf->fields.sfmt_mcp.f 3106 int UNUSED written = 0; 3107 IADDR UNUSED pc = abuf->addr; 3108 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3109 3110 { 3111 SI tmp_prno; 3112 SI tmp_newval; 3113 tmp_prno = FLD (f_operand2); 3114 tmp_newval = GET_H_SR (FLD (f_operand2)); 3115 if (EQSI (tmp_prno, 2)) { 3116 { 3117 SI opval = tmp_newval; 3118 SET_H_GR (FLD (f_operand1), opval); 3119 written |= (1 << 4); 3120 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3121 } 3122 } 3123 else if (EQSI (tmp_prno, 3)) { 3124 { 3125 SI tmp_oldregval; 3126 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1)); 3127 { 3128 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 3129 SET_H_GR (FLD (f_operand1), opval); 3130 written |= (1 << 4); 3131 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3132 } 3133 } 3134 } 3135 else if (EQSI (tmp_prno, 5)) { 3136 { 3137 SI opval = tmp_newval; 3138 SET_H_GR (FLD (f_operand1), opval); 3139 written |= (1 << 4); 3140 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3141 } 3142 } 3143 else if (EQSI (tmp_prno, 6)) { 3144 { 3145 SI opval = tmp_newval; 3146 SET_H_GR (FLD (f_operand1), opval); 3147 written |= (1 << 4); 3148 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3149 } 3150 } 3151 else if (EQSI (tmp_prno, 7)) { 3152 { 3153 SI opval = tmp_newval; 3154 SET_H_GR (FLD (f_operand1), opval); 3155 written |= (1 << 4); 3156 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3157 } 3158 } 3159 else if (EQSI (tmp_prno, 9)) { 3160 { 3161 SI opval = tmp_newval; 3162 SET_H_GR (FLD (f_operand1), opval); 3163 written |= (1 << 4); 3164 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3165 } 3166 } 3167 else if (EQSI (tmp_prno, 10)) { 3168 { 3169 SI opval = tmp_newval; 3170 SET_H_GR (FLD (f_operand1), opval); 3171 written |= (1 << 4); 3172 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3173 } 3174 } 3175 else if (EQSI (tmp_prno, 11)) { 3176 { 3177 SI opval = tmp_newval; 3178 SET_H_GR (FLD (f_operand1), opval); 3179 written |= (1 << 4); 3180 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3181 } 3182 } 3183 else if (EQSI (tmp_prno, 12)) { 3184 { 3185 SI opval = tmp_newval; 3186 SET_H_GR (FLD (f_operand1), opval); 3187 written |= (1 << 4); 3188 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3189 } 3190 } 3191 else if (EQSI (tmp_prno, 13)) { 3192 { 3193 SI opval = tmp_newval; 3194 SET_H_GR (FLD (f_operand1), opval); 3195 written |= (1 << 4); 3196 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3197 } 3198 } 3199 else if (EQSI (tmp_prno, 14)) { 3200 { 3201 SI opval = tmp_newval; 3202 SET_H_GR (FLD (f_operand1), opval); 3203 written |= (1 << 4); 3204 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3205 } 3206 } 3207 else if (EQSI (tmp_prno, 15)) { 3208 { 3209 SI opval = tmp_newval; 3210 SET_H_GR (FLD (f_operand1), opval); 3211 written |= (1 << 4); 3212 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3213 } 3214 } 3215 else if (EQSI (tmp_prno, 0)) { 3216 { 3217 SI tmp_oldregval; 3218 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1)); 3219 { 3220 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 3221 SET_H_GR (FLD (f_operand1), opval); 3222 written |= (1 << 4); 3223 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3224 } 3225 } 3226 } 3227 else if (EQSI (tmp_prno, 1)) { 3228 { 3229 SI tmp_oldregval; 3230 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1)); 3231 { 3232 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 3233 SET_H_GR (FLD (f_operand1), opval); 3234 written |= (1 << 4); 3235 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3236 } 3237 } 3238 } 3239 else if (EQSI (tmp_prno, 4)) { 3240 { 3241 SI tmp_oldregval; 3242 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1)); 3243 { 3244 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 3245 SET_H_GR (FLD (f_operand1), opval); 3246 written |= (1 << 4); 3247 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3248 } 3249 } 3250 } 3251 else if (EQSI (tmp_prno, 8)) { 3252 { 3253 SI opval = tmp_newval; 3254 SET_H_GR (FLD (f_operand1), opval); 3255 written |= (1 << 4); 3256 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3257 } 3258 } 3259 else { 3260 cgen_rtx_error (current_cpu, "move-spr-r from unimplemented register"); 3261 } 3262 { 3263 { 3264 BI opval = 0; 3265 CPU (h_xbit) = opval; 3266 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3267 } 3268 { 3269 BI opval = 0; 3270 SET_H_INSN_PREFIXED_P (opval); 3271 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3272 } 3273 } 3274 } 3275 3276 abuf->written = written; 3277 #undef FLD 3278 } 3279 NEXT (vpc); 3280 3281 CASE (sem, INSN_MOVE_M_SPRV32) : /* move [${Rs}${inc}],${Pd} */ 3282 { 3283 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3284 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3285 #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f 3286 int UNUSED written = 0; 3287 IADDR UNUSED pc = abuf->addr; 3288 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3289 3290 { 3291 SI tmp_rno; 3292 SI tmp_newval; 3293 tmp_rno = FLD (f_operand2); 3294 if (EQSI (tmp_rno, 2)) { 3295 tmp_newval = ({ SI tmp_addr; 3296 SI tmp_tmp_mem; 3297 BI tmp_postinc; 3298 tmp_postinc = FLD (f_memmode); 3299 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3300 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3301 ; if (NEBI (tmp_postinc, 0)) { 3302 { 3303 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3304 tmp_addr = ADDSI (tmp_addr, 4); 3305 } 3306 { 3307 SI opval = tmp_addr; 3308 SET_H_GR (FLD (f_operand1), opval); 3309 written |= (1 << 8); 3310 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3311 } 3312 } 3313 } 3314 ; tmp_tmp_mem; }); 3315 } 3316 else if (EQSI (tmp_rno, 3)) { 3317 tmp_newval = EXTQISI (({ SI tmp_addr; 3318 QI tmp_tmp_mem; 3319 BI tmp_postinc; 3320 tmp_postinc = FLD (f_memmode); 3321 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3322 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 3323 ; if (NEBI (tmp_postinc, 0)) { 3324 { 3325 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3326 tmp_addr = ADDSI (tmp_addr, 1); 3327 } 3328 { 3329 SI opval = tmp_addr; 3330 SET_H_GR (FLD (f_operand1), opval); 3331 written |= (1 << 8); 3332 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3333 } 3334 } 3335 } 3336 ; tmp_tmp_mem; })); 3337 } 3338 else if (EQSI (tmp_rno, 5)) { 3339 tmp_newval = ({ SI tmp_addr; 3340 SI tmp_tmp_mem; 3341 BI tmp_postinc; 3342 tmp_postinc = FLD (f_memmode); 3343 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3344 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3345 ; if (NEBI (tmp_postinc, 0)) { 3346 { 3347 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3348 tmp_addr = ADDSI (tmp_addr, 4); 3349 } 3350 { 3351 SI opval = tmp_addr; 3352 SET_H_GR (FLD (f_operand1), opval); 3353 written |= (1 << 8); 3354 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3355 } 3356 } 3357 } 3358 ; tmp_tmp_mem; }); 3359 } 3360 else if (EQSI (tmp_rno, 6)) { 3361 tmp_newval = ({ SI tmp_addr; 3362 SI tmp_tmp_mem; 3363 BI tmp_postinc; 3364 tmp_postinc = FLD (f_memmode); 3365 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3366 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3367 ; if (NEBI (tmp_postinc, 0)) { 3368 { 3369 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3370 tmp_addr = ADDSI (tmp_addr, 4); 3371 } 3372 { 3373 SI opval = tmp_addr; 3374 SET_H_GR (FLD (f_operand1), opval); 3375 written |= (1 << 8); 3376 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3377 } 3378 } 3379 } 3380 ; tmp_tmp_mem; }); 3381 } 3382 else if (EQSI (tmp_rno, 7)) { 3383 tmp_newval = ({ SI tmp_addr; 3384 SI tmp_tmp_mem; 3385 BI tmp_postinc; 3386 tmp_postinc = FLD (f_memmode); 3387 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3388 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3389 ; if (NEBI (tmp_postinc, 0)) { 3390 { 3391 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3392 tmp_addr = ADDSI (tmp_addr, 4); 3393 } 3394 { 3395 SI opval = tmp_addr; 3396 SET_H_GR (FLD (f_operand1), opval); 3397 written |= (1 << 8); 3398 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3399 } 3400 } 3401 } 3402 ; tmp_tmp_mem; }); 3403 } 3404 else if (EQSI (tmp_rno, 9)) { 3405 tmp_newval = ({ SI tmp_addr; 3406 SI tmp_tmp_mem; 3407 BI tmp_postinc; 3408 tmp_postinc = FLD (f_memmode); 3409 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3410 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3411 ; if (NEBI (tmp_postinc, 0)) { 3412 { 3413 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3414 tmp_addr = ADDSI (tmp_addr, 4); 3415 } 3416 { 3417 SI opval = tmp_addr; 3418 SET_H_GR (FLD (f_operand1), opval); 3419 written |= (1 << 8); 3420 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3421 } 3422 } 3423 } 3424 ; tmp_tmp_mem; }); 3425 } 3426 else if (EQSI (tmp_rno, 10)) { 3427 tmp_newval = ({ SI tmp_addr; 3428 SI tmp_tmp_mem; 3429 BI tmp_postinc; 3430 tmp_postinc = FLD (f_memmode); 3431 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3432 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3433 ; if (NEBI (tmp_postinc, 0)) { 3434 { 3435 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3436 tmp_addr = ADDSI (tmp_addr, 4); 3437 } 3438 { 3439 SI opval = tmp_addr; 3440 SET_H_GR (FLD (f_operand1), opval); 3441 written |= (1 << 8); 3442 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3443 } 3444 } 3445 } 3446 ; tmp_tmp_mem; }); 3447 } 3448 else if (EQSI (tmp_rno, 11)) { 3449 tmp_newval = ({ SI tmp_addr; 3450 SI tmp_tmp_mem; 3451 BI tmp_postinc; 3452 tmp_postinc = FLD (f_memmode); 3453 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3454 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3455 ; if (NEBI (tmp_postinc, 0)) { 3456 { 3457 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3458 tmp_addr = ADDSI (tmp_addr, 4); 3459 } 3460 { 3461 SI opval = tmp_addr; 3462 SET_H_GR (FLD (f_operand1), opval); 3463 written |= (1 << 8); 3464 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3465 } 3466 } 3467 } 3468 ; tmp_tmp_mem; }); 3469 } 3470 else if (EQSI (tmp_rno, 12)) { 3471 tmp_newval = ({ SI tmp_addr; 3472 SI tmp_tmp_mem; 3473 BI tmp_postinc; 3474 tmp_postinc = FLD (f_memmode); 3475 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3476 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3477 ; if (NEBI (tmp_postinc, 0)) { 3478 { 3479 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3480 tmp_addr = ADDSI (tmp_addr, 4); 3481 } 3482 { 3483 SI opval = tmp_addr; 3484 SET_H_GR (FLD (f_operand1), opval); 3485 written |= (1 << 8); 3486 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3487 } 3488 } 3489 } 3490 ; tmp_tmp_mem; }); 3491 } 3492 else if (EQSI (tmp_rno, 13)) { 3493 tmp_newval = ({ SI tmp_addr; 3494 SI tmp_tmp_mem; 3495 BI tmp_postinc; 3496 tmp_postinc = FLD (f_memmode); 3497 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3498 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3499 ; if (NEBI (tmp_postinc, 0)) { 3500 { 3501 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3502 tmp_addr = ADDSI (tmp_addr, 4); 3503 } 3504 { 3505 SI opval = tmp_addr; 3506 SET_H_GR (FLD (f_operand1), opval); 3507 written |= (1 << 8); 3508 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3509 } 3510 } 3511 } 3512 ; tmp_tmp_mem; }); 3513 } 3514 else if (EQSI (tmp_rno, 14)) { 3515 tmp_newval = ({ SI tmp_addr; 3516 SI tmp_tmp_mem; 3517 BI tmp_postinc; 3518 tmp_postinc = FLD (f_memmode); 3519 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3520 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3521 ; if (NEBI (tmp_postinc, 0)) { 3522 { 3523 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3524 tmp_addr = ADDSI (tmp_addr, 4); 3525 } 3526 { 3527 SI opval = tmp_addr; 3528 SET_H_GR (FLD (f_operand1), opval); 3529 written |= (1 << 8); 3530 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3531 } 3532 } 3533 } 3534 ; tmp_tmp_mem; }); 3535 } 3536 else if (EQSI (tmp_rno, 15)) { 3537 tmp_newval = ({ SI tmp_addr; 3538 SI tmp_tmp_mem; 3539 BI tmp_postinc; 3540 tmp_postinc = FLD (f_memmode); 3541 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3542 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 3543 ; if (NEBI (tmp_postinc, 0)) { 3544 { 3545 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 3546 tmp_addr = ADDSI (tmp_addr, 4); 3547 } 3548 { 3549 SI opval = tmp_addr; 3550 SET_H_GR (FLD (f_operand1), opval); 3551 written |= (1 << 8); 3552 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3553 } 3554 } 3555 } 3556 ; tmp_tmp_mem; }); 3557 } 3558 else { 3559 cgen_rtx_error (current_cpu, "Trying to set unimplemented special register"); 3560 } 3561 { 3562 SI opval = tmp_newval; 3563 SET_H_SR (FLD (f_operand2), opval); 3564 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3565 } 3566 { 3567 { 3568 BI opval = 0; 3569 CPU (h_xbit) = opval; 3570 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3571 } 3572 { 3573 BI opval = 0; 3574 SET_H_INSN_PREFIXED_P (opval); 3575 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3576 } 3577 } 3578 } 3579 3580 abuf->written = written; 3581 #undef FLD 3582 } 3583 NEXT (vpc); 3584 3585 CASE (sem, INSN_MOVE_C_SPRV32_P2) : /* move ${const32},${Pd} */ 3586 { 3587 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3588 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3589 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3590 int UNUSED written = 0; 3591 IADDR UNUSED pc = abuf->addr; 3592 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3593 3594 { 3595 { 3596 SI opval = FLD (f_indir_pc__dword); 3597 SET_H_SR (FLD (f_operand2), opval); 3598 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3599 } 3600 { 3601 { 3602 BI opval = 0; 3603 CPU (h_xbit) = opval; 3604 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3605 } 3606 { 3607 BI opval = 0; 3608 SET_H_INSN_PREFIXED_P (opval); 3609 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3610 } 3611 } 3612 } 3613 3614 #undef FLD 3615 } 3616 NEXT (vpc); 3617 3618 CASE (sem, INSN_MOVE_C_SPRV32_P3) : /* move ${const32},${Pd} */ 3619 { 3620 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3621 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3622 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3623 int UNUSED written = 0; 3624 IADDR UNUSED pc = abuf->addr; 3625 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3626 3627 { 3628 { 3629 SI opval = FLD (f_indir_pc__dword); 3630 SET_H_SR (FLD (f_operand2), opval); 3631 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3632 } 3633 { 3634 { 3635 BI opval = 0; 3636 CPU (h_xbit) = opval; 3637 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3638 } 3639 { 3640 BI opval = 0; 3641 SET_H_INSN_PREFIXED_P (opval); 3642 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3643 } 3644 } 3645 } 3646 3647 #undef FLD 3648 } 3649 NEXT (vpc); 3650 3651 CASE (sem, INSN_MOVE_C_SPRV32_P5) : /* move ${const32},${Pd} */ 3652 { 3653 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3654 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3655 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3656 int UNUSED written = 0; 3657 IADDR UNUSED pc = abuf->addr; 3658 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3659 3660 { 3661 { 3662 SI opval = FLD (f_indir_pc__dword); 3663 SET_H_SR (FLD (f_operand2), opval); 3664 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3665 } 3666 { 3667 { 3668 BI opval = 0; 3669 CPU (h_xbit) = opval; 3670 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3671 } 3672 { 3673 BI opval = 0; 3674 SET_H_INSN_PREFIXED_P (opval); 3675 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3676 } 3677 } 3678 } 3679 3680 #undef FLD 3681 } 3682 NEXT (vpc); 3683 3684 CASE (sem, INSN_MOVE_C_SPRV32_P6) : /* move ${const32},${Pd} */ 3685 { 3686 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3687 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3688 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3689 int UNUSED written = 0; 3690 IADDR UNUSED pc = abuf->addr; 3691 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3692 3693 { 3694 { 3695 SI opval = FLD (f_indir_pc__dword); 3696 SET_H_SR (FLD (f_operand2), opval); 3697 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3698 } 3699 { 3700 { 3701 BI opval = 0; 3702 CPU (h_xbit) = opval; 3703 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3704 } 3705 { 3706 BI opval = 0; 3707 SET_H_INSN_PREFIXED_P (opval); 3708 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3709 } 3710 } 3711 } 3712 3713 #undef FLD 3714 } 3715 NEXT (vpc); 3716 3717 CASE (sem, INSN_MOVE_C_SPRV32_P7) : /* move ${const32},${Pd} */ 3718 { 3719 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3720 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3721 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3722 int UNUSED written = 0; 3723 IADDR UNUSED pc = abuf->addr; 3724 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3725 3726 { 3727 { 3728 SI opval = FLD (f_indir_pc__dword); 3729 SET_H_SR (FLD (f_operand2), opval); 3730 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3731 } 3732 { 3733 { 3734 BI opval = 0; 3735 CPU (h_xbit) = opval; 3736 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3737 } 3738 { 3739 BI opval = 0; 3740 SET_H_INSN_PREFIXED_P (opval); 3741 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3742 } 3743 } 3744 } 3745 3746 #undef FLD 3747 } 3748 NEXT (vpc); 3749 3750 CASE (sem, INSN_MOVE_C_SPRV32_P9) : /* move ${const32},${Pd} */ 3751 { 3752 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3753 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3754 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3755 int UNUSED written = 0; 3756 IADDR UNUSED pc = abuf->addr; 3757 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3758 3759 { 3760 { 3761 SI opval = FLD (f_indir_pc__dword); 3762 SET_H_SR (FLD (f_operand2), opval); 3763 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3764 } 3765 { 3766 { 3767 BI opval = 0; 3768 CPU (h_xbit) = opval; 3769 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3770 } 3771 { 3772 BI opval = 0; 3773 SET_H_INSN_PREFIXED_P (opval); 3774 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3775 } 3776 } 3777 } 3778 3779 #undef FLD 3780 } 3781 NEXT (vpc); 3782 3783 CASE (sem, INSN_MOVE_C_SPRV32_P10) : /* move ${const32},${Pd} */ 3784 { 3785 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3786 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3787 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3788 int UNUSED written = 0; 3789 IADDR UNUSED pc = abuf->addr; 3790 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3791 3792 { 3793 { 3794 SI opval = FLD (f_indir_pc__dword); 3795 SET_H_SR (FLD (f_operand2), opval); 3796 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3797 } 3798 { 3799 { 3800 BI opval = 0; 3801 CPU (h_xbit) = opval; 3802 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3803 } 3804 { 3805 BI opval = 0; 3806 SET_H_INSN_PREFIXED_P (opval); 3807 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3808 } 3809 } 3810 } 3811 3812 #undef FLD 3813 } 3814 NEXT (vpc); 3815 3816 CASE (sem, INSN_MOVE_C_SPRV32_P11) : /* move ${const32},${Pd} */ 3817 { 3818 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3819 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3820 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3821 int UNUSED written = 0; 3822 IADDR UNUSED pc = abuf->addr; 3823 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3824 3825 { 3826 { 3827 SI opval = FLD (f_indir_pc__dword); 3828 SET_H_SR (FLD (f_operand2), opval); 3829 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3830 } 3831 { 3832 { 3833 BI opval = 0; 3834 CPU (h_xbit) = opval; 3835 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3836 } 3837 { 3838 BI opval = 0; 3839 SET_H_INSN_PREFIXED_P (opval); 3840 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3841 } 3842 } 3843 } 3844 3845 #undef FLD 3846 } 3847 NEXT (vpc); 3848 3849 CASE (sem, INSN_MOVE_C_SPRV32_P12) : /* move ${const32},${Pd} */ 3850 { 3851 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3852 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3853 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3854 int UNUSED written = 0; 3855 IADDR UNUSED pc = abuf->addr; 3856 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3857 3858 { 3859 { 3860 SI opval = FLD (f_indir_pc__dword); 3861 SET_H_SR (FLD (f_operand2), opval); 3862 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3863 } 3864 { 3865 { 3866 BI opval = 0; 3867 CPU (h_xbit) = opval; 3868 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3869 } 3870 { 3871 BI opval = 0; 3872 SET_H_INSN_PREFIXED_P (opval); 3873 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3874 } 3875 } 3876 } 3877 3878 #undef FLD 3879 } 3880 NEXT (vpc); 3881 3882 CASE (sem, INSN_MOVE_C_SPRV32_P13) : /* move ${const32},${Pd} */ 3883 { 3884 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3885 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3886 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3887 int UNUSED written = 0; 3888 IADDR UNUSED pc = abuf->addr; 3889 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3890 3891 { 3892 { 3893 SI opval = FLD (f_indir_pc__dword); 3894 SET_H_SR (FLD (f_operand2), opval); 3895 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3896 } 3897 { 3898 { 3899 BI opval = 0; 3900 CPU (h_xbit) = opval; 3901 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3902 } 3903 { 3904 BI opval = 0; 3905 SET_H_INSN_PREFIXED_P (opval); 3906 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3907 } 3908 } 3909 } 3910 3911 #undef FLD 3912 } 3913 NEXT (vpc); 3914 3915 CASE (sem, INSN_MOVE_C_SPRV32_P14) : /* move ${const32},${Pd} */ 3916 { 3917 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3918 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3919 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3920 int UNUSED written = 0; 3921 IADDR UNUSED pc = abuf->addr; 3922 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3923 3924 { 3925 { 3926 SI opval = FLD (f_indir_pc__dword); 3927 SET_H_SR (FLD (f_operand2), opval); 3928 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3929 } 3930 { 3931 { 3932 BI opval = 0; 3933 CPU (h_xbit) = opval; 3934 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3935 } 3936 { 3937 BI opval = 0; 3938 SET_H_INSN_PREFIXED_P (opval); 3939 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3940 } 3941 } 3942 } 3943 3944 #undef FLD 3945 } 3946 NEXT (vpc); 3947 3948 CASE (sem, INSN_MOVE_C_SPRV32_P15) : /* move ${const32},${Pd} */ 3949 { 3950 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3951 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3952 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 3953 int UNUSED written = 0; 3954 IADDR UNUSED pc = abuf->addr; 3955 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 3956 3957 { 3958 { 3959 SI opval = FLD (f_indir_pc__dword); 3960 SET_H_SR (FLD (f_operand2), opval); 3961 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 3962 } 3963 { 3964 { 3965 BI opval = 0; 3966 CPU (h_xbit) = opval; 3967 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 3968 } 3969 { 3970 BI opval = 0; 3971 SET_H_INSN_PREFIXED_P (opval); 3972 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 3973 } 3974 } 3975 } 3976 3977 #undef FLD 3978 } 3979 NEXT (vpc); 3980 3981 CASE (sem, INSN_MOVE_SPR_MV32) : /* move ${Ps},[${Rd-sfield}${inc}] */ 3982 { 3983 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3984 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3985 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 3986 int UNUSED written = 0; 3987 IADDR UNUSED pc = abuf->addr; 3988 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3989 3990 { 3991 SI tmp_rno; 3992 tmp_rno = FLD (f_operand2); 3993 if (EQSI (tmp_rno, 2)) { 3994 { 3995 SI tmp_addr; 3996 BI tmp_postinc; 3997 tmp_postinc = FLD (f_memmode); 3998 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 3999 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4000 if (EQBI (CPU (h_pbit), 0)) { 4001 { 4002 { 4003 SI opval = GET_H_SR (FLD (f_operand2)); 4004 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4005 written |= (1 << 13); 4006 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4007 } 4008 { 4009 BI opval = CPU (h_pbit); 4010 CPU (h_cbit) = opval; 4011 written |= (1 << 10); 4012 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4013 } 4014 } 4015 } else { 4016 { 4017 BI opval = 1; 4018 CPU (h_cbit) = opval; 4019 written |= (1 << 10); 4020 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4021 } 4022 } 4023 } else { 4024 { 4025 SI opval = GET_H_SR (FLD (f_operand2)); 4026 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4027 written |= (1 << 13); 4028 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4029 } 4030 } 4031 if (NEBI (tmp_postinc, 0)) { 4032 { 4033 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4034 tmp_addr = ADDSI (tmp_addr, 4); 4035 } 4036 { 4037 SI opval = tmp_addr; 4038 SET_H_GR (FLD (f_operand1), opval); 4039 written |= (1 << 9); 4040 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4041 } 4042 } 4043 } 4044 } 4045 } 4046 else if (EQSI (tmp_rno, 3)) { 4047 { 4048 SI tmp_addr; 4049 BI tmp_postinc; 4050 tmp_postinc = FLD (f_memmode); 4051 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4052 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4053 if (EQBI (CPU (h_pbit), 0)) { 4054 { 4055 { 4056 QI opval = GET_H_SR (FLD (f_operand2)); 4057 SETMEMQI (current_cpu, pc, tmp_addr, opval); 4058 written |= (1 << 12); 4059 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4060 } 4061 { 4062 BI opval = CPU (h_pbit); 4063 CPU (h_cbit) = opval; 4064 written |= (1 << 10); 4065 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4066 } 4067 } 4068 } else { 4069 { 4070 BI opval = 1; 4071 CPU (h_cbit) = opval; 4072 written |= (1 << 10); 4073 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4074 } 4075 } 4076 } else { 4077 { 4078 QI opval = GET_H_SR (FLD (f_operand2)); 4079 SETMEMQI (current_cpu, pc, tmp_addr, opval); 4080 written |= (1 << 12); 4081 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4082 } 4083 } 4084 if (NEBI (tmp_postinc, 0)) { 4085 { 4086 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4087 tmp_addr = ADDSI (tmp_addr, 1); 4088 } 4089 { 4090 SI opval = tmp_addr; 4091 SET_H_GR (FLD (f_operand1), opval); 4092 written |= (1 << 9); 4093 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4094 } 4095 } 4096 } 4097 } 4098 } 4099 else if (EQSI (tmp_rno, 5)) { 4100 { 4101 SI tmp_addr; 4102 BI tmp_postinc; 4103 tmp_postinc = FLD (f_memmode); 4104 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4105 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4106 if (EQBI (CPU (h_pbit), 0)) { 4107 { 4108 { 4109 SI opval = GET_H_SR (FLD (f_operand2)); 4110 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4111 written |= (1 << 13); 4112 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4113 } 4114 { 4115 BI opval = CPU (h_pbit); 4116 CPU (h_cbit) = opval; 4117 written |= (1 << 10); 4118 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4119 } 4120 } 4121 } else { 4122 { 4123 BI opval = 1; 4124 CPU (h_cbit) = opval; 4125 written |= (1 << 10); 4126 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4127 } 4128 } 4129 } else { 4130 { 4131 SI opval = GET_H_SR (FLD (f_operand2)); 4132 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4133 written |= (1 << 13); 4134 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4135 } 4136 } 4137 if (NEBI (tmp_postinc, 0)) { 4138 { 4139 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4140 tmp_addr = ADDSI (tmp_addr, 4); 4141 } 4142 { 4143 SI opval = tmp_addr; 4144 SET_H_GR (FLD (f_operand1), opval); 4145 written |= (1 << 9); 4146 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4147 } 4148 } 4149 } 4150 } 4151 } 4152 else if (EQSI (tmp_rno, 6)) { 4153 { 4154 SI tmp_addr; 4155 BI tmp_postinc; 4156 tmp_postinc = FLD (f_memmode); 4157 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4158 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4159 if (EQBI (CPU (h_pbit), 0)) { 4160 { 4161 { 4162 SI opval = GET_H_SR (FLD (f_operand2)); 4163 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4164 written |= (1 << 13); 4165 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4166 } 4167 { 4168 BI opval = CPU (h_pbit); 4169 CPU (h_cbit) = opval; 4170 written |= (1 << 10); 4171 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4172 } 4173 } 4174 } else { 4175 { 4176 BI opval = 1; 4177 CPU (h_cbit) = opval; 4178 written |= (1 << 10); 4179 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4180 } 4181 } 4182 } else { 4183 { 4184 SI opval = GET_H_SR (FLD (f_operand2)); 4185 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4186 written |= (1 << 13); 4187 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4188 } 4189 } 4190 if (NEBI (tmp_postinc, 0)) { 4191 { 4192 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4193 tmp_addr = ADDSI (tmp_addr, 4); 4194 } 4195 { 4196 SI opval = tmp_addr; 4197 SET_H_GR (FLD (f_operand1), opval); 4198 written |= (1 << 9); 4199 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4200 } 4201 } 4202 } 4203 } 4204 } 4205 else if (EQSI (tmp_rno, 7)) { 4206 { 4207 SI tmp_addr; 4208 BI tmp_postinc; 4209 tmp_postinc = FLD (f_memmode); 4210 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4211 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4212 if (EQBI (CPU (h_pbit), 0)) { 4213 { 4214 { 4215 SI opval = GET_H_SR (FLD (f_operand2)); 4216 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4217 written |= (1 << 13); 4218 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4219 } 4220 { 4221 BI opval = CPU (h_pbit); 4222 CPU (h_cbit) = opval; 4223 written |= (1 << 10); 4224 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4225 } 4226 } 4227 } else { 4228 { 4229 BI opval = 1; 4230 CPU (h_cbit) = opval; 4231 written |= (1 << 10); 4232 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4233 } 4234 } 4235 } else { 4236 { 4237 SI opval = GET_H_SR (FLD (f_operand2)); 4238 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4239 written |= (1 << 13); 4240 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4241 } 4242 } 4243 if (NEBI (tmp_postinc, 0)) { 4244 { 4245 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4246 tmp_addr = ADDSI (tmp_addr, 4); 4247 } 4248 { 4249 SI opval = tmp_addr; 4250 SET_H_GR (FLD (f_operand1), opval); 4251 written |= (1 << 9); 4252 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4253 } 4254 } 4255 } 4256 } 4257 } 4258 else if (EQSI (tmp_rno, 9)) { 4259 { 4260 SI tmp_addr; 4261 BI tmp_postinc; 4262 tmp_postinc = FLD (f_memmode); 4263 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4264 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4265 if (EQBI (CPU (h_pbit), 0)) { 4266 { 4267 { 4268 SI opval = GET_H_SR (FLD (f_operand2)); 4269 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4270 written |= (1 << 13); 4271 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4272 } 4273 { 4274 BI opval = CPU (h_pbit); 4275 CPU (h_cbit) = opval; 4276 written |= (1 << 10); 4277 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4278 } 4279 } 4280 } else { 4281 { 4282 BI opval = 1; 4283 CPU (h_cbit) = opval; 4284 written |= (1 << 10); 4285 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4286 } 4287 } 4288 } else { 4289 { 4290 SI opval = GET_H_SR (FLD (f_operand2)); 4291 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4292 written |= (1 << 13); 4293 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4294 } 4295 } 4296 if (NEBI (tmp_postinc, 0)) { 4297 { 4298 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4299 tmp_addr = ADDSI (tmp_addr, 4); 4300 } 4301 { 4302 SI opval = tmp_addr; 4303 SET_H_GR (FLD (f_operand1), opval); 4304 written |= (1 << 9); 4305 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4306 } 4307 } 4308 } 4309 } 4310 } 4311 else if (EQSI (tmp_rno, 10)) { 4312 { 4313 SI tmp_addr; 4314 BI tmp_postinc; 4315 tmp_postinc = FLD (f_memmode); 4316 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4317 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4318 if (EQBI (CPU (h_pbit), 0)) { 4319 { 4320 { 4321 SI opval = GET_H_SR (FLD (f_operand2)); 4322 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4323 written |= (1 << 13); 4324 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4325 } 4326 { 4327 BI opval = CPU (h_pbit); 4328 CPU (h_cbit) = opval; 4329 written |= (1 << 10); 4330 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4331 } 4332 } 4333 } else { 4334 { 4335 BI opval = 1; 4336 CPU (h_cbit) = opval; 4337 written |= (1 << 10); 4338 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4339 } 4340 } 4341 } else { 4342 { 4343 SI opval = GET_H_SR (FLD (f_operand2)); 4344 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4345 written |= (1 << 13); 4346 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4347 } 4348 } 4349 if (NEBI (tmp_postinc, 0)) { 4350 { 4351 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4352 tmp_addr = ADDSI (tmp_addr, 4); 4353 } 4354 { 4355 SI opval = tmp_addr; 4356 SET_H_GR (FLD (f_operand1), opval); 4357 written |= (1 << 9); 4358 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4359 } 4360 } 4361 } 4362 } 4363 } 4364 else if (EQSI (tmp_rno, 11)) { 4365 { 4366 SI tmp_addr; 4367 BI tmp_postinc; 4368 tmp_postinc = FLD (f_memmode); 4369 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4370 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4371 if (EQBI (CPU (h_pbit), 0)) { 4372 { 4373 { 4374 SI opval = GET_H_SR (FLD (f_operand2)); 4375 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4376 written |= (1 << 13); 4377 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4378 } 4379 { 4380 BI opval = CPU (h_pbit); 4381 CPU (h_cbit) = opval; 4382 written |= (1 << 10); 4383 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4384 } 4385 } 4386 } else { 4387 { 4388 BI opval = 1; 4389 CPU (h_cbit) = opval; 4390 written |= (1 << 10); 4391 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4392 } 4393 } 4394 } else { 4395 { 4396 SI opval = GET_H_SR (FLD (f_operand2)); 4397 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4398 written |= (1 << 13); 4399 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4400 } 4401 } 4402 if (NEBI (tmp_postinc, 0)) { 4403 { 4404 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4405 tmp_addr = ADDSI (tmp_addr, 4); 4406 } 4407 { 4408 SI opval = tmp_addr; 4409 SET_H_GR (FLD (f_operand1), opval); 4410 written |= (1 << 9); 4411 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4412 } 4413 } 4414 } 4415 } 4416 } 4417 else if (EQSI (tmp_rno, 12)) { 4418 { 4419 SI tmp_addr; 4420 BI tmp_postinc; 4421 tmp_postinc = FLD (f_memmode); 4422 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4423 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4424 if (EQBI (CPU (h_pbit), 0)) { 4425 { 4426 { 4427 SI opval = GET_H_SR (FLD (f_operand2)); 4428 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4429 written |= (1 << 13); 4430 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4431 } 4432 { 4433 BI opval = CPU (h_pbit); 4434 CPU (h_cbit) = opval; 4435 written |= (1 << 10); 4436 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4437 } 4438 } 4439 } else { 4440 { 4441 BI opval = 1; 4442 CPU (h_cbit) = opval; 4443 written |= (1 << 10); 4444 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4445 } 4446 } 4447 } else { 4448 { 4449 SI opval = GET_H_SR (FLD (f_operand2)); 4450 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4451 written |= (1 << 13); 4452 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4453 } 4454 } 4455 if (NEBI (tmp_postinc, 0)) { 4456 { 4457 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4458 tmp_addr = ADDSI (tmp_addr, 4); 4459 } 4460 { 4461 SI opval = tmp_addr; 4462 SET_H_GR (FLD (f_operand1), opval); 4463 written |= (1 << 9); 4464 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4465 } 4466 } 4467 } 4468 } 4469 } 4470 else if (EQSI (tmp_rno, 13)) { 4471 { 4472 SI tmp_addr; 4473 BI tmp_postinc; 4474 tmp_postinc = FLD (f_memmode); 4475 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4476 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4477 if (EQBI (CPU (h_pbit), 0)) { 4478 { 4479 { 4480 SI opval = GET_H_SR (FLD (f_operand2)); 4481 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4482 written |= (1 << 13); 4483 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4484 } 4485 { 4486 BI opval = CPU (h_pbit); 4487 CPU (h_cbit) = opval; 4488 written |= (1 << 10); 4489 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4490 } 4491 } 4492 } else { 4493 { 4494 BI opval = 1; 4495 CPU (h_cbit) = opval; 4496 written |= (1 << 10); 4497 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4498 } 4499 } 4500 } else { 4501 { 4502 SI opval = GET_H_SR (FLD (f_operand2)); 4503 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4504 written |= (1 << 13); 4505 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4506 } 4507 } 4508 if (NEBI (tmp_postinc, 0)) { 4509 { 4510 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4511 tmp_addr = ADDSI (tmp_addr, 4); 4512 } 4513 { 4514 SI opval = tmp_addr; 4515 SET_H_GR (FLD (f_operand1), opval); 4516 written |= (1 << 9); 4517 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4518 } 4519 } 4520 } 4521 } 4522 } 4523 else if (EQSI (tmp_rno, 14)) { 4524 { 4525 SI tmp_addr; 4526 BI tmp_postinc; 4527 tmp_postinc = FLD (f_memmode); 4528 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4529 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4530 if (EQBI (CPU (h_pbit), 0)) { 4531 { 4532 { 4533 SI opval = GET_H_SR (FLD (f_operand2)); 4534 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4535 written |= (1 << 13); 4536 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4537 } 4538 { 4539 BI opval = CPU (h_pbit); 4540 CPU (h_cbit) = opval; 4541 written |= (1 << 10); 4542 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4543 } 4544 } 4545 } else { 4546 { 4547 BI opval = 1; 4548 CPU (h_cbit) = opval; 4549 written |= (1 << 10); 4550 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4551 } 4552 } 4553 } else { 4554 { 4555 SI opval = GET_H_SR (FLD (f_operand2)); 4556 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4557 written |= (1 << 13); 4558 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4559 } 4560 } 4561 if (NEBI (tmp_postinc, 0)) { 4562 { 4563 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4564 tmp_addr = ADDSI (tmp_addr, 4); 4565 } 4566 { 4567 SI opval = tmp_addr; 4568 SET_H_GR (FLD (f_operand1), opval); 4569 written |= (1 << 9); 4570 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4571 } 4572 } 4573 } 4574 } 4575 } 4576 else if (EQSI (tmp_rno, 15)) { 4577 { 4578 SI tmp_addr; 4579 BI tmp_postinc; 4580 tmp_postinc = FLD (f_memmode); 4581 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4582 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4583 if (EQBI (CPU (h_pbit), 0)) { 4584 { 4585 { 4586 SI opval = GET_H_SR (FLD (f_operand2)); 4587 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4588 written |= (1 << 13); 4589 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4590 } 4591 { 4592 BI opval = CPU (h_pbit); 4593 CPU (h_cbit) = opval; 4594 written |= (1 << 10); 4595 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4596 } 4597 } 4598 } else { 4599 { 4600 BI opval = 1; 4601 CPU (h_cbit) = opval; 4602 written |= (1 << 10); 4603 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4604 } 4605 } 4606 } else { 4607 { 4608 SI opval = GET_H_SR (FLD (f_operand2)); 4609 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4610 written |= (1 << 13); 4611 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4612 } 4613 } 4614 if (NEBI (tmp_postinc, 0)) { 4615 { 4616 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4617 tmp_addr = ADDSI (tmp_addr, 4); 4618 } 4619 { 4620 SI opval = tmp_addr; 4621 SET_H_GR (FLD (f_operand1), opval); 4622 written |= (1 << 9); 4623 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4624 } 4625 } 4626 } 4627 } 4628 } 4629 else if (EQSI (tmp_rno, 0)) { 4630 { 4631 SI tmp_addr; 4632 BI tmp_postinc; 4633 tmp_postinc = FLD (f_memmode); 4634 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4635 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4636 if (EQBI (CPU (h_pbit), 0)) { 4637 { 4638 { 4639 QI opval = GET_H_SR (FLD (f_operand2)); 4640 SETMEMQI (current_cpu, pc, tmp_addr, opval); 4641 written |= (1 << 12); 4642 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4643 } 4644 { 4645 BI opval = CPU (h_pbit); 4646 CPU (h_cbit) = opval; 4647 written |= (1 << 10); 4648 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4649 } 4650 } 4651 } else { 4652 { 4653 BI opval = 1; 4654 CPU (h_cbit) = opval; 4655 written |= (1 << 10); 4656 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4657 } 4658 } 4659 } else { 4660 { 4661 QI opval = GET_H_SR (FLD (f_operand2)); 4662 SETMEMQI (current_cpu, pc, tmp_addr, opval); 4663 written |= (1 << 12); 4664 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4665 } 4666 } 4667 if (NEBI (tmp_postinc, 0)) { 4668 { 4669 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4670 tmp_addr = ADDSI (tmp_addr, 1); 4671 } 4672 { 4673 SI opval = tmp_addr; 4674 SET_H_GR (FLD (f_operand1), opval); 4675 written |= (1 << 9); 4676 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4677 } 4678 } 4679 } 4680 } 4681 } 4682 else if (EQSI (tmp_rno, 1)) { 4683 { 4684 SI tmp_addr; 4685 BI tmp_postinc; 4686 tmp_postinc = FLD (f_memmode); 4687 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4688 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4689 if (EQBI (CPU (h_pbit), 0)) { 4690 { 4691 { 4692 QI opval = GET_H_SR (FLD (f_operand2)); 4693 SETMEMQI (current_cpu, pc, tmp_addr, opval); 4694 written |= (1 << 12); 4695 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4696 } 4697 { 4698 BI opval = CPU (h_pbit); 4699 CPU (h_cbit) = opval; 4700 written |= (1 << 10); 4701 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4702 } 4703 } 4704 } else { 4705 { 4706 BI opval = 1; 4707 CPU (h_cbit) = opval; 4708 written |= (1 << 10); 4709 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4710 } 4711 } 4712 } else { 4713 { 4714 QI opval = GET_H_SR (FLD (f_operand2)); 4715 SETMEMQI (current_cpu, pc, tmp_addr, opval); 4716 written |= (1 << 12); 4717 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4718 } 4719 } 4720 if (NEBI (tmp_postinc, 0)) { 4721 { 4722 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4723 tmp_addr = ADDSI (tmp_addr, 1); 4724 } 4725 { 4726 SI opval = tmp_addr; 4727 SET_H_GR (FLD (f_operand1), opval); 4728 written |= (1 << 9); 4729 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4730 } 4731 } 4732 } 4733 } 4734 } 4735 else if (EQSI (tmp_rno, 4)) { 4736 { 4737 SI tmp_addr; 4738 BI tmp_postinc; 4739 tmp_postinc = FLD (f_memmode); 4740 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4741 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4742 if (EQBI (CPU (h_pbit), 0)) { 4743 { 4744 { 4745 HI opval = GET_H_SR (FLD (f_operand2)); 4746 SETMEMHI (current_cpu, pc, tmp_addr, opval); 4747 written |= (1 << 11); 4748 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4749 } 4750 { 4751 BI opval = CPU (h_pbit); 4752 CPU (h_cbit) = opval; 4753 written |= (1 << 10); 4754 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4755 } 4756 } 4757 } else { 4758 { 4759 BI opval = 1; 4760 CPU (h_cbit) = opval; 4761 written |= (1 << 10); 4762 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4763 } 4764 } 4765 } else { 4766 { 4767 HI opval = GET_H_SR (FLD (f_operand2)); 4768 SETMEMHI (current_cpu, pc, tmp_addr, opval); 4769 written |= (1 << 11); 4770 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4771 } 4772 } 4773 if (NEBI (tmp_postinc, 0)) { 4774 { 4775 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4776 tmp_addr = ADDSI (tmp_addr, 2); 4777 } 4778 { 4779 SI opval = tmp_addr; 4780 SET_H_GR (FLD (f_operand1), opval); 4781 written |= (1 << 9); 4782 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4783 } 4784 } 4785 } 4786 } 4787 } 4788 else if (EQSI (tmp_rno, 8)) { 4789 { 4790 SI tmp_addr; 4791 BI tmp_postinc; 4792 tmp_postinc = FLD (f_memmode); 4793 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 4794 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 4795 if (EQBI (CPU (h_pbit), 0)) { 4796 { 4797 { 4798 SI opval = GET_H_SR (FLD (f_operand2)); 4799 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4800 written |= (1 << 13); 4801 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4802 } 4803 { 4804 BI opval = CPU (h_pbit); 4805 CPU (h_cbit) = opval; 4806 written |= (1 << 10); 4807 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4808 } 4809 } 4810 } else { 4811 { 4812 BI opval = 1; 4813 CPU (h_cbit) = opval; 4814 written |= (1 << 10); 4815 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 4816 } 4817 } 4818 } else { 4819 { 4820 SI opval = GET_H_SR (FLD (f_operand2)); 4821 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4822 written |= (1 << 13); 4823 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4824 } 4825 } 4826 if (NEBI (tmp_postinc, 0)) { 4827 { 4828 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 4829 tmp_addr = ADDSI (tmp_addr, 4); 4830 } 4831 { 4832 SI opval = tmp_addr; 4833 SET_H_GR (FLD (f_operand1), opval); 4834 written |= (1 << 9); 4835 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4836 } 4837 } 4838 } 4839 } 4840 } 4841 else { 4842 cgen_rtx_error (current_cpu, "write from unimplemented special register"); 4843 } 4844 { 4845 { 4846 BI opval = 0; 4847 CPU (h_xbit) = opval; 4848 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 4849 } 4850 { 4851 BI opval = 0; 4852 SET_H_INSN_PREFIXED_P (opval); 4853 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 4854 } 4855 } 4856 } 4857 4858 abuf->written = written; 4859 #undef FLD 4860 } 4861 NEXT (vpc); 4862 4863 CASE (sem, INSN_MOVE_SS_R) : /* move ${Ss},${Rd-sfield} */ 4864 { 4865 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4866 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4867 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 4868 int UNUSED written = 0; 4869 IADDR UNUSED pc = abuf->addr; 4870 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4871 4872 { 4873 { 4874 SI opval = GET_H_SUPR (FLD (f_operand2)); 4875 SET_H_GR (FLD (f_operand1), opval); 4876 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4877 } 4878 { 4879 { 4880 BI opval = 0; 4881 CPU (h_xbit) = opval; 4882 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 4883 } 4884 { 4885 BI opval = 0; 4886 SET_H_INSN_PREFIXED_P (opval); 4887 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 4888 } 4889 } 4890 } 4891 4892 #undef FLD 4893 } 4894 NEXT (vpc); 4895 4896 CASE (sem, INSN_MOVE_R_SS) : /* move ${Rs},${Sd} */ 4897 { 4898 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4899 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4900 #define FLD(f) abuf->fields.sfmt_mcp.f 4901 int UNUSED written = 0; 4902 IADDR UNUSED pc = abuf->addr; 4903 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4904 4905 { 4906 { 4907 SI opval = GET_H_GR (FLD (f_operand1)); 4908 SET_H_SUPR (FLD (f_operand2), opval); 4909 CGEN_TRACE_RESULT (current_cpu, abuf, "supr", 'x', opval); 4910 } 4911 { 4912 { 4913 BI opval = 0; 4914 CPU (h_xbit) = opval; 4915 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 4916 } 4917 { 4918 BI opval = 0; 4919 SET_H_INSN_PREFIXED_P (opval); 4920 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 4921 } 4922 } 4923 } 4924 4925 #undef FLD 4926 } 4927 NEXT (vpc); 4928 4929 CASE (sem, INSN_MOVEM_R_M_V32) : /* movem ${Rs-dfield},[${Rd-sfield}${inc}] */ 4930 { 4931 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4932 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4933 #define FLD(f) abuf->fields.sfmt_movem_r_m_v32.f 4934 int UNUSED written = 0; 4935 IADDR UNUSED pc = abuf->addr; 4936 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4937 4938 { 4939 SI tmp_addr; 4940 BI tmp_postinc; 4941 tmp_postinc = FLD (f_memmode); 4942 { 4943 SI tmp_dummy; 4944 tmp_dummy = GET_H_GR (FLD (f_operand2)); 4945 } 4946 tmp_addr = GET_H_GR (FLD (f_operand1)); 4947 { 4948 if (GESI (FLD (f_operand2), 0)) { 4949 { 4950 SI tmp_tmp; 4951 tmp_tmp = GET_H_GR (((UINT) 0)); 4952 { 4953 SI opval = tmp_tmp; 4954 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4955 written |= (1 << 21); 4956 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4957 } 4958 tmp_addr = ADDSI (tmp_addr, 4); 4959 } 4960 } 4961 if (GESI (FLD (f_operand2), 1)) { 4962 { 4963 SI tmp_tmp; 4964 tmp_tmp = GET_H_GR (((UINT) 1)); 4965 { 4966 SI opval = tmp_tmp; 4967 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4968 written |= (1 << 21); 4969 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4970 } 4971 tmp_addr = ADDSI (tmp_addr, 4); 4972 } 4973 } 4974 if (GESI (FLD (f_operand2), 2)) { 4975 { 4976 SI tmp_tmp; 4977 tmp_tmp = GET_H_GR (((UINT) 2)); 4978 { 4979 SI opval = tmp_tmp; 4980 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4981 written |= (1 << 21); 4982 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4983 } 4984 tmp_addr = ADDSI (tmp_addr, 4); 4985 } 4986 } 4987 if (GESI (FLD (f_operand2), 3)) { 4988 { 4989 SI tmp_tmp; 4990 tmp_tmp = GET_H_GR (((UINT) 3)); 4991 { 4992 SI opval = tmp_tmp; 4993 SETMEMSI (current_cpu, pc, tmp_addr, opval); 4994 written |= (1 << 21); 4995 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4996 } 4997 tmp_addr = ADDSI (tmp_addr, 4); 4998 } 4999 } 5000 if (GESI (FLD (f_operand2), 4)) { 5001 { 5002 SI tmp_tmp; 5003 tmp_tmp = GET_H_GR (((UINT) 4)); 5004 { 5005 SI opval = tmp_tmp; 5006 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5007 written |= (1 << 21); 5008 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5009 } 5010 tmp_addr = ADDSI (tmp_addr, 4); 5011 } 5012 } 5013 if (GESI (FLD (f_operand2), 5)) { 5014 { 5015 SI tmp_tmp; 5016 tmp_tmp = GET_H_GR (((UINT) 5)); 5017 { 5018 SI opval = tmp_tmp; 5019 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5020 written |= (1 << 21); 5021 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5022 } 5023 tmp_addr = ADDSI (tmp_addr, 4); 5024 } 5025 } 5026 if (GESI (FLD (f_operand2), 6)) { 5027 { 5028 SI tmp_tmp; 5029 tmp_tmp = GET_H_GR (((UINT) 6)); 5030 { 5031 SI opval = tmp_tmp; 5032 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5033 written |= (1 << 21); 5034 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5035 } 5036 tmp_addr = ADDSI (tmp_addr, 4); 5037 } 5038 } 5039 if (GESI (FLD (f_operand2), 7)) { 5040 { 5041 SI tmp_tmp; 5042 tmp_tmp = GET_H_GR (((UINT) 7)); 5043 { 5044 SI opval = tmp_tmp; 5045 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5046 written |= (1 << 21); 5047 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5048 } 5049 tmp_addr = ADDSI (tmp_addr, 4); 5050 } 5051 } 5052 if (GESI (FLD (f_operand2), 8)) { 5053 { 5054 SI tmp_tmp; 5055 tmp_tmp = GET_H_GR (((UINT) 8)); 5056 { 5057 SI opval = tmp_tmp; 5058 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5059 written |= (1 << 21); 5060 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5061 } 5062 tmp_addr = ADDSI (tmp_addr, 4); 5063 } 5064 } 5065 if (GESI (FLD (f_operand2), 9)) { 5066 { 5067 SI tmp_tmp; 5068 tmp_tmp = GET_H_GR (((UINT) 9)); 5069 { 5070 SI opval = tmp_tmp; 5071 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5072 written |= (1 << 21); 5073 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5074 } 5075 tmp_addr = ADDSI (tmp_addr, 4); 5076 } 5077 } 5078 if (GESI (FLD (f_operand2), 10)) { 5079 { 5080 SI tmp_tmp; 5081 tmp_tmp = GET_H_GR (((UINT) 10)); 5082 { 5083 SI opval = tmp_tmp; 5084 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5085 written |= (1 << 21); 5086 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5087 } 5088 tmp_addr = ADDSI (tmp_addr, 4); 5089 } 5090 } 5091 if (GESI (FLD (f_operand2), 11)) { 5092 { 5093 SI tmp_tmp; 5094 tmp_tmp = GET_H_GR (((UINT) 11)); 5095 { 5096 SI opval = tmp_tmp; 5097 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5098 written |= (1 << 21); 5099 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5100 } 5101 tmp_addr = ADDSI (tmp_addr, 4); 5102 } 5103 } 5104 if (GESI (FLD (f_operand2), 12)) { 5105 { 5106 SI tmp_tmp; 5107 tmp_tmp = GET_H_GR (((UINT) 12)); 5108 { 5109 SI opval = tmp_tmp; 5110 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5111 written |= (1 << 21); 5112 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5113 } 5114 tmp_addr = ADDSI (tmp_addr, 4); 5115 } 5116 } 5117 if (GESI (FLD (f_operand2), 13)) { 5118 { 5119 SI tmp_tmp; 5120 tmp_tmp = GET_H_GR (((UINT) 13)); 5121 { 5122 SI opval = tmp_tmp; 5123 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5124 written |= (1 << 21); 5125 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5126 } 5127 tmp_addr = ADDSI (tmp_addr, 4); 5128 } 5129 } 5130 if (GESI (FLD (f_operand2), 14)) { 5131 { 5132 SI tmp_tmp; 5133 tmp_tmp = GET_H_GR (((UINT) 14)); 5134 { 5135 SI opval = tmp_tmp; 5136 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5137 written |= (1 << 21); 5138 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5139 } 5140 tmp_addr = ADDSI (tmp_addr, 4); 5141 } 5142 } 5143 if (GESI (FLD (f_operand2), 15)) { 5144 { 5145 SI tmp_tmp; 5146 tmp_tmp = GET_H_GR (((UINT) 15)); 5147 { 5148 SI opval = tmp_tmp; 5149 SETMEMSI (current_cpu, pc, tmp_addr, opval); 5150 written |= (1 << 21); 5151 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5152 } 5153 tmp_addr = ADDSI (tmp_addr, 4); 5154 } 5155 } 5156 } 5157 if (NEBI (tmp_postinc, 0)) { 5158 { 5159 SI opval = tmp_addr; 5160 SET_H_GR (FLD (f_operand1), opval); 5161 written |= (1 << 20); 5162 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5163 } 5164 } 5165 { 5166 { 5167 BI opval = 0; 5168 CPU (h_xbit) = opval; 5169 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5170 } 5171 { 5172 BI opval = 0; 5173 SET_H_INSN_PREFIXED_P (opval); 5174 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5175 } 5176 } 5177 } 5178 5179 abuf->written = written; 5180 #undef FLD 5181 } 5182 NEXT (vpc); 5183 5184 CASE (sem, INSN_MOVEM_M_R_V32) : /* movem [${Rs}${inc}],${Rd} */ 5185 { 5186 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5187 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5188 #define FLD(f) abuf->fields.sfmt_movem_m_r_v32.f 5189 int UNUSED written = 0; 5190 IADDR UNUSED pc = abuf->addr; 5191 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5192 5193 { 5194 SI tmp_addr; 5195 BI tmp_postinc; 5196 tmp_postinc = FLD (f_memmode); 5197 tmp_addr = GET_H_GR (FLD (f_operand1)); 5198 { 5199 SI tmp_dummy; 5200 tmp_dummy = GET_H_GR (FLD (f_operand2)); 5201 } 5202 { 5203 if (GESI (FLD (f_operand2), 0)) { 5204 { 5205 SI tmp_tmp; 5206 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5207 { 5208 SI opval = tmp_tmp; 5209 SET_H_GR (((UINT) 0), opval); 5210 written |= (1 << 6); 5211 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5212 } 5213 tmp_addr = ADDSI (tmp_addr, 4); 5214 } 5215 } 5216 if (GESI (FLD (f_operand2), 1)) { 5217 { 5218 SI tmp_tmp; 5219 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5220 { 5221 SI opval = tmp_tmp; 5222 SET_H_GR (((UINT) 1), opval); 5223 written |= (1 << 7); 5224 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5225 } 5226 tmp_addr = ADDSI (tmp_addr, 4); 5227 } 5228 } 5229 if (GESI (FLD (f_operand2), 2)) { 5230 { 5231 SI tmp_tmp; 5232 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5233 { 5234 SI opval = tmp_tmp; 5235 SET_H_GR (((UINT) 2), opval); 5236 written |= (1 << 14); 5237 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5238 } 5239 tmp_addr = ADDSI (tmp_addr, 4); 5240 } 5241 } 5242 if (GESI (FLD (f_operand2), 3)) { 5243 { 5244 SI tmp_tmp; 5245 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5246 { 5247 SI opval = tmp_tmp; 5248 SET_H_GR (((UINT) 3), opval); 5249 written |= (1 << 15); 5250 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5251 } 5252 tmp_addr = ADDSI (tmp_addr, 4); 5253 } 5254 } 5255 if (GESI (FLD (f_operand2), 4)) { 5256 { 5257 SI tmp_tmp; 5258 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5259 { 5260 SI opval = tmp_tmp; 5261 SET_H_GR (((UINT) 4), opval); 5262 written |= (1 << 16); 5263 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5264 } 5265 tmp_addr = ADDSI (tmp_addr, 4); 5266 } 5267 } 5268 if (GESI (FLD (f_operand2), 5)) { 5269 { 5270 SI tmp_tmp; 5271 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5272 { 5273 SI opval = tmp_tmp; 5274 SET_H_GR (((UINT) 5), opval); 5275 written |= (1 << 17); 5276 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5277 } 5278 tmp_addr = ADDSI (tmp_addr, 4); 5279 } 5280 } 5281 if (GESI (FLD (f_operand2), 6)) { 5282 { 5283 SI tmp_tmp; 5284 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5285 { 5286 SI opval = tmp_tmp; 5287 SET_H_GR (((UINT) 6), opval); 5288 written |= (1 << 18); 5289 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5290 } 5291 tmp_addr = ADDSI (tmp_addr, 4); 5292 } 5293 } 5294 if (GESI (FLD (f_operand2), 7)) { 5295 { 5296 SI tmp_tmp; 5297 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5298 { 5299 SI opval = tmp_tmp; 5300 SET_H_GR (((UINT) 7), opval); 5301 written |= (1 << 19); 5302 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5303 } 5304 tmp_addr = ADDSI (tmp_addr, 4); 5305 } 5306 } 5307 if (GESI (FLD (f_operand2), 8)) { 5308 { 5309 SI tmp_tmp; 5310 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5311 { 5312 SI opval = tmp_tmp; 5313 SET_H_GR (((UINT) 8), opval); 5314 written |= (1 << 20); 5315 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5316 } 5317 tmp_addr = ADDSI (tmp_addr, 4); 5318 } 5319 } 5320 if (GESI (FLD (f_operand2), 9)) { 5321 { 5322 SI tmp_tmp; 5323 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5324 { 5325 SI opval = tmp_tmp; 5326 SET_H_GR (((UINT) 9), opval); 5327 written |= (1 << 21); 5328 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5329 } 5330 tmp_addr = ADDSI (tmp_addr, 4); 5331 } 5332 } 5333 if (GESI (FLD (f_operand2), 10)) { 5334 { 5335 SI tmp_tmp; 5336 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5337 { 5338 SI opval = tmp_tmp; 5339 SET_H_GR (((UINT) 10), opval); 5340 written |= (1 << 8); 5341 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5342 } 5343 tmp_addr = ADDSI (tmp_addr, 4); 5344 } 5345 } 5346 if (GESI (FLD (f_operand2), 11)) { 5347 { 5348 SI tmp_tmp; 5349 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5350 { 5351 SI opval = tmp_tmp; 5352 SET_H_GR (((UINT) 11), opval); 5353 written |= (1 << 9); 5354 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5355 } 5356 tmp_addr = ADDSI (tmp_addr, 4); 5357 } 5358 } 5359 if (GESI (FLD (f_operand2), 12)) { 5360 { 5361 SI tmp_tmp; 5362 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5363 { 5364 SI opval = tmp_tmp; 5365 SET_H_GR (((UINT) 12), opval); 5366 written |= (1 << 10); 5367 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5368 } 5369 tmp_addr = ADDSI (tmp_addr, 4); 5370 } 5371 } 5372 if (GESI (FLD (f_operand2), 13)) { 5373 { 5374 SI tmp_tmp; 5375 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5376 { 5377 SI opval = tmp_tmp; 5378 SET_H_GR (((UINT) 13), opval); 5379 written |= (1 << 11); 5380 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5381 } 5382 tmp_addr = ADDSI (tmp_addr, 4); 5383 } 5384 } 5385 if (GESI (FLD (f_operand2), 14)) { 5386 { 5387 SI tmp_tmp; 5388 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5389 { 5390 SI opval = tmp_tmp; 5391 SET_H_GR (((UINT) 14), opval); 5392 written |= (1 << 12); 5393 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5394 } 5395 tmp_addr = ADDSI (tmp_addr, 4); 5396 } 5397 } 5398 if (GESI (FLD (f_operand2), 15)) { 5399 { 5400 SI tmp_tmp; 5401 tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr); 5402 { 5403 SI opval = tmp_tmp; 5404 SET_H_GR (((UINT) 15), opval); 5405 written |= (1 << 13); 5406 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5407 } 5408 tmp_addr = ADDSI (tmp_addr, 4); 5409 } 5410 } 5411 } 5412 if (NEBI (tmp_postinc, 0)) { 5413 { 5414 SI opval = tmp_addr; 5415 SET_H_GR (FLD (f_operand1), opval); 5416 written |= (1 << 5); 5417 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5418 } 5419 } 5420 { 5421 { 5422 BI opval = 0; 5423 CPU (h_xbit) = opval; 5424 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5425 } 5426 { 5427 BI opval = 0; 5428 SET_H_INSN_PREFIXED_P (opval); 5429 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5430 } 5431 } 5432 } 5433 5434 abuf->written = written; 5435 #undef FLD 5436 } 5437 NEXT (vpc); 5438 5439 CASE (sem, INSN_ADD_B_R) : /* add.b $Rs,$Rd */ 5440 { 5441 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5442 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5443 #define FLD(f) abuf->fields.sfmt_addc_m.f 5444 int UNUSED written = 0; 5445 IADDR UNUSED pc = abuf->addr; 5446 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5447 5448 { 5449 QI tmp_tmpopd; 5450 QI tmp_tmpops; 5451 BI tmp_carry; 5452 QI tmp_newval; 5453 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 5454 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5455 tmp_carry = CPU (h_cbit); 5456 tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5457 { 5458 SI tmp_oldregval; 5459 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 5460 { 5461 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 5462 SET_H_GR (FLD (f_operand2), opval); 5463 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5464 } 5465 } 5466 { 5467 { 5468 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0)))); 5469 CPU (h_cbit) = opval; 5470 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5471 } 5472 { 5473 BI opval = LTQI (tmp_newval, 0); 5474 CPU (h_nbit) = opval; 5475 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5476 } 5477 { 5478 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5479 CPU (h_zbit) = opval; 5480 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5481 } 5482 { 5483 BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 5484 CPU (h_vbit) = opval; 5485 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5486 } 5487 { 5488 { 5489 BI opval = 0; 5490 CPU (h_xbit) = opval; 5491 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5492 } 5493 { 5494 BI opval = 0; 5495 SET_H_INSN_PREFIXED_P (opval); 5496 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5497 } 5498 } 5499 } 5500 } 5501 5502 #undef FLD 5503 } 5504 NEXT (vpc); 5505 5506 CASE (sem, INSN_ADD_W_R) : /* add.w $Rs,$Rd */ 5507 { 5508 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5509 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5510 #define FLD(f) abuf->fields.sfmt_addc_m.f 5511 int UNUSED written = 0; 5512 IADDR UNUSED pc = abuf->addr; 5513 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5514 5515 { 5516 HI tmp_tmpopd; 5517 HI tmp_tmpops; 5518 BI tmp_carry; 5519 HI tmp_newval; 5520 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 5521 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5522 tmp_carry = CPU (h_cbit); 5523 tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5524 { 5525 SI tmp_oldregval; 5526 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 5527 { 5528 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 5529 SET_H_GR (FLD (f_operand2), opval); 5530 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5531 } 5532 } 5533 { 5534 { 5535 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0)))); 5536 CPU (h_cbit) = opval; 5537 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5538 } 5539 { 5540 BI opval = LTHI (tmp_newval, 0); 5541 CPU (h_nbit) = opval; 5542 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5543 } 5544 { 5545 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5546 CPU (h_zbit) = opval; 5547 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5548 } 5549 { 5550 BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 5551 CPU (h_vbit) = opval; 5552 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5553 } 5554 { 5555 { 5556 BI opval = 0; 5557 CPU (h_xbit) = opval; 5558 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5559 } 5560 { 5561 BI opval = 0; 5562 SET_H_INSN_PREFIXED_P (opval); 5563 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5564 } 5565 } 5566 } 5567 } 5568 5569 #undef FLD 5570 } 5571 NEXT (vpc); 5572 5573 CASE (sem, INSN_ADD_D_R) : /* add.d $Rs,$Rd */ 5574 { 5575 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5576 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5577 #define FLD(f) abuf->fields.sfmt_addc_m.f 5578 int UNUSED written = 0; 5579 IADDR UNUSED pc = abuf->addr; 5580 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5581 5582 { 5583 SI tmp_tmpopd; 5584 SI tmp_tmpops; 5585 BI tmp_carry; 5586 SI tmp_newval; 5587 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 5588 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5589 tmp_carry = CPU (h_cbit); 5590 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5591 { 5592 SI opval = tmp_newval; 5593 SET_H_GR (FLD (f_operand2), opval); 5594 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5595 } 5596 { 5597 { 5598 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 5599 CPU (h_cbit) = opval; 5600 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5601 } 5602 { 5603 BI opval = LTSI (tmp_newval, 0); 5604 CPU (h_nbit) = opval; 5605 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5606 } 5607 { 5608 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5609 CPU (h_zbit) = opval; 5610 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5611 } 5612 { 5613 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 5614 CPU (h_vbit) = opval; 5615 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5616 } 5617 { 5618 { 5619 BI opval = 0; 5620 CPU (h_xbit) = opval; 5621 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5622 } 5623 { 5624 BI opval = 0; 5625 SET_H_INSN_PREFIXED_P (opval); 5626 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5627 } 5628 } 5629 } 5630 } 5631 5632 #undef FLD 5633 } 5634 NEXT (vpc); 5635 5636 CASE (sem, INSN_ADD_M_B_M) : /* add-m.b [${Rs}${inc}],${Rd} */ 5637 { 5638 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5639 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5640 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 5641 int UNUSED written = 0; 5642 IADDR UNUSED pc = abuf->addr; 5643 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5644 5645 { 5646 QI tmp_tmpopd; 5647 QI tmp_tmpops; 5648 BI tmp_carry; 5649 QI tmp_newval; 5650 tmp_tmpops = ({ SI tmp_addr; 5651 QI tmp_tmp_mem; 5652 BI tmp_postinc; 5653 tmp_postinc = FLD (f_memmode); 5654 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 5655 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 5656 ; if (NEBI (tmp_postinc, 0)) { 5657 { 5658 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 5659 tmp_addr = ADDSI (tmp_addr, 1); 5660 } 5661 { 5662 SI opval = tmp_addr; 5663 SET_H_GR (FLD (f_operand1), opval); 5664 written |= (1 << 12); 5665 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5666 } 5667 } 5668 } 5669 ; tmp_tmp_mem; }); 5670 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5671 tmp_carry = CPU (h_cbit); 5672 tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5673 { 5674 SI tmp_oldregval; 5675 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 5676 { 5677 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 5678 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 5679 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5680 } 5681 } 5682 { 5683 { 5684 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0)))); 5685 CPU (h_cbit) = opval; 5686 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5687 } 5688 { 5689 BI opval = LTQI (tmp_newval, 0); 5690 CPU (h_nbit) = opval; 5691 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5692 } 5693 { 5694 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5695 CPU (h_zbit) = opval; 5696 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5697 } 5698 { 5699 BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 5700 CPU (h_vbit) = opval; 5701 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5702 } 5703 { 5704 { 5705 BI opval = 0; 5706 CPU (h_xbit) = opval; 5707 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5708 } 5709 { 5710 BI opval = 0; 5711 SET_H_INSN_PREFIXED_P (opval); 5712 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5713 } 5714 } 5715 } 5716 } 5717 5718 abuf->written = written; 5719 #undef FLD 5720 } 5721 NEXT (vpc); 5722 5723 CASE (sem, INSN_ADD_M_W_M) : /* add-m.w [${Rs}${inc}],${Rd} */ 5724 { 5725 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5726 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5727 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 5728 int UNUSED written = 0; 5729 IADDR UNUSED pc = abuf->addr; 5730 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5731 5732 { 5733 HI tmp_tmpopd; 5734 HI tmp_tmpops; 5735 BI tmp_carry; 5736 HI tmp_newval; 5737 tmp_tmpops = ({ SI tmp_addr; 5738 HI tmp_tmp_mem; 5739 BI tmp_postinc; 5740 tmp_postinc = FLD (f_memmode); 5741 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 5742 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 5743 ; if (NEBI (tmp_postinc, 0)) { 5744 { 5745 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 5746 tmp_addr = ADDSI (tmp_addr, 2); 5747 } 5748 { 5749 SI opval = tmp_addr; 5750 SET_H_GR (FLD (f_operand1), opval); 5751 written |= (1 << 12); 5752 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5753 } 5754 } 5755 } 5756 ; tmp_tmp_mem; }); 5757 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5758 tmp_carry = CPU (h_cbit); 5759 tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5760 { 5761 SI tmp_oldregval; 5762 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 5763 { 5764 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 5765 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 5766 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5767 } 5768 } 5769 { 5770 { 5771 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0)))); 5772 CPU (h_cbit) = opval; 5773 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5774 } 5775 { 5776 BI opval = LTHI (tmp_newval, 0); 5777 CPU (h_nbit) = opval; 5778 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5779 } 5780 { 5781 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5782 CPU (h_zbit) = opval; 5783 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5784 } 5785 { 5786 BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 5787 CPU (h_vbit) = opval; 5788 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5789 } 5790 { 5791 { 5792 BI opval = 0; 5793 CPU (h_xbit) = opval; 5794 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5795 } 5796 { 5797 BI opval = 0; 5798 SET_H_INSN_PREFIXED_P (opval); 5799 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5800 } 5801 } 5802 } 5803 } 5804 5805 abuf->written = written; 5806 #undef FLD 5807 } 5808 NEXT (vpc); 5809 5810 CASE (sem, INSN_ADD_M_D_M) : /* add-m.d [${Rs}${inc}],${Rd} */ 5811 { 5812 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5813 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5814 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 5815 int UNUSED written = 0; 5816 IADDR UNUSED pc = abuf->addr; 5817 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5818 5819 { 5820 SI tmp_tmpopd; 5821 SI tmp_tmpops; 5822 BI tmp_carry; 5823 SI tmp_newval; 5824 tmp_tmpops = ({ SI tmp_addr; 5825 SI tmp_tmp_mem; 5826 BI tmp_postinc; 5827 tmp_postinc = FLD (f_memmode); 5828 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 5829 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 5830 ; if (NEBI (tmp_postinc, 0)) { 5831 { 5832 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 5833 tmp_addr = ADDSI (tmp_addr, 4); 5834 } 5835 { 5836 SI opval = tmp_addr; 5837 SET_H_GR (FLD (f_operand1), opval); 5838 written |= (1 << 11); 5839 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5840 } 5841 } 5842 } 5843 ; tmp_tmp_mem; }); 5844 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5845 tmp_carry = CPU (h_cbit); 5846 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5847 { 5848 SI opval = tmp_newval; 5849 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 5850 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5851 } 5852 { 5853 { 5854 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 5855 CPU (h_cbit) = opval; 5856 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5857 } 5858 { 5859 BI opval = LTSI (tmp_newval, 0); 5860 CPU (h_nbit) = opval; 5861 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5862 } 5863 { 5864 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5865 CPU (h_zbit) = opval; 5866 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5867 } 5868 { 5869 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 5870 CPU (h_vbit) = opval; 5871 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5872 } 5873 { 5874 { 5875 BI opval = 0; 5876 CPU (h_xbit) = opval; 5877 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5878 } 5879 { 5880 BI opval = 0; 5881 SET_H_INSN_PREFIXED_P (opval); 5882 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5883 } 5884 } 5885 } 5886 } 5887 5888 abuf->written = written; 5889 #undef FLD 5890 } 5891 NEXT (vpc); 5892 5893 CASE (sem, INSN_ADDCBR) : /* add.b ${sconst8}],${Rd} */ 5894 { 5895 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5896 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5897 #define FLD(f) abuf->fields.sfmt_addcbr.f 5898 int UNUSED written = 0; 5899 IADDR UNUSED pc = abuf->addr; 5900 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5901 5902 { 5903 QI tmp_tmpopd; 5904 QI tmp_tmpops; 5905 BI tmp_carry; 5906 QI tmp_newval; 5907 tmp_tmpops = FLD (f_indir_pc__byte); 5908 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5909 tmp_carry = CPU (h_cbit); 5910 tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5911 { 5912 SI tmp_oldregval; 5913 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 5914 { 5915 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 5916 SET_H_GR (FLD (f_operand2), opval); 5917 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5918 } 5919 } 5920 { 5921 { 5922 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0)))); 5923 CPU (h_cbit) = opval; 5924 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5925 } 5926 { 5927 BI opval = LTQI (tmp_newval, 0); 5928 CPU (h_nbit) = opval; 5929 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5930 } 5931 { 5932 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 5933 CPU (h_zbit) = opval; 5934 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 5935 } 5936 { 5937 BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 5938 CPU (h_vbit) = opval; 5939 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 5940 } 5941 { 5942 { 5943 BI opval = 0; 5944 CPU (h_xbit) = opval; 5945 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 5946 } 5947 { 5948 BI opval = 0; 5949 SET_H_INSN_PREFIXED_P (opval); 5950 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 5951 } 5952 } 5953 } 5954 } 5955 5956 #undef FLD 5957 } 5958 NEXT (vpc); 5959 5960 CASE (sem, INSN_ADDCWR) : /* add.w ${sconst16}],${Rd} */ 5961 { 5962 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5963 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5964 #define FLD(f) abuf->fields.sfmt_addcwr.f 5965 int UNUSED written = 0; 5966 IADDR UNUSED pc = abuf->addr; 5967 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5968 5969 { 5970 HI tmp_tmpopd; 5971 HI tmp_tmpops; 5972 BI tmp_carry; 5973 HI tmp_newval; 5974 tmp_tmpops = FLD (f_indir_pc__word); 5975 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 5976 tmp_carry = CPU (h_cbit); 5977 tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 5978 { 5979 SI tmp_oldregval; 5980 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 5981 { 5982 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 5983 SET_H_GR (FLD (f_operand2), opval); 5984 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5985 } 5986 } 5987 { 5988 { 5989 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0)))); 5990 CPU (h_cbit) = opval; 5991 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 5992 } 5993 { 5994 BI opval = LTHI (tmp_newval, 0); 5995 CPU (h_nbit) = opval; 5996 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 5997 } 5998 { 5999 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6000 CPU (h_zbit) = opval; 6001 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6002 } 6003 { 6004 BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 6005 CPU (h_vbit) = opval; 6006 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6007 } 6008 { 6009 { 6010 BI opval = 0; 6011 CPU (h_xbit) = opval; 6012 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6013 } 6014 { 6015 BI opval = 0; 6016 SET_H_INSN_PREFIXED_P (opval); 6017 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6018 } 6019 } 6020 } 6021 } 6022 6023 #undef FLD 6024 } 6025 NEXT (vpc); 6026 6027 CASE (sem, INSN_ADDCDR) : /* add.d ${const32}],${Rd} */ 6028 { 6029 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6030 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6031 #define FLD(f) abuf->fields.sfmt_addcdr.f 6032 int UNUSED written = 0; 6033 IADDR UNUSED pc = abuf->addr; 6034 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 6035 6036 { 6037 SI tmp_tmpopd; 6038 SI tmp_tmpops; 6039 BI tmp_carry; 6040 SI tmp_newval; 6041 tmp_tmpops = FLD (f_indir_pc__dword); 6042 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6043 tmp_carry = CPU (h_cbit); 6044 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6045 { 6046 SI opval = tmp_newval; 6047 SET_H_GR (FLD (f_operand2), opval); 6048 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6049 } 6050 { 6051 { 6052 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6053 CPU (h_cbit) = opval; 6054 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6055 } 6056 { 6057 BI opval = LTSI (tmp_newval, 0); 6058 CPU (h_nbit) = opval; 6059 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6060 } 6061 { 6062 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6063 CPU (h_zbit) = opval; 6064 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6065 } 6066 { 6067 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6068 CPU (h_vbit) = opval; 6069 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6070 } 6071 { 6072 { 6073 BI opval = 0; 6074 CPU (h_xbit) = opval; 6075 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6076 } 6077 { 6078 BI opval = 0; 6079 SET_H_INSN_PREFIXED_P (opval); 6080 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6081 } 6082 } 6083 } 6084 } 6085 6086 #undef FLD 6087 } 6088 NEXT (vpc); 6089 6090 CASE (sem, INSN_ADDS_B_R) : /* adds.b $Rs,$Rd */ 6091 { 6092 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6093 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6094 #define FLD(f) abuf->fields.sfmt_addc_m.f 6095 int UNUSED written = 0; 6096 IADDR UNUSED pc = abuf->addr; 6097 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6098 6099 { 6100 SI tmp_tmpopd; 6101 SI tmp_tmpops; 6102 BI tmp_carry; 6103 SI tmp_newval; 6104 tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 6105 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6106 tmp_carry = CPU (h_cbit); 6107 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6108 { 6109 SI opval = tmp_newval; 6110 SET_H_GR (FLD (f_operand2), opval); 6111 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6112 } 6113 { 6114 { 6115 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6116 CPU (h_cbit) = opval; 6117 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6118 } 6119 { 6120 BI opval = LTSI (tmp_newval, 0); 6121 CPU (h_nbit) = opval; 6122 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6123 } 6124 { 6125 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6126 CPU (h_zbit) = opval; 6127 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6128 } 6129 { 6130 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6131 CPU (h_vbit) = opval; 6132 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6133 } 6134 { 6135 { 6136 BI opval = 0; 6137 CPU (h_xbit) = opval; 6138 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6139 } 6140 { 6141 BI opval = 0; 6142 SET_H_INSN_PREFIXED_P (opval); 6143 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6144 } 6145 } 6146 } 6147 } 6148 6149 #undef FLD 6150 } 6151 NEXT (vpc); 6152 6153 CASE (sem, INSN_ADDS_W_R) : /* adds.w $Rs,$Rd */ 6154 { 6155 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6156 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6157 #define FLD(f) abuf->fields.sfmt_addc_m.f 6158 int UNUSED written = 0; 6159 IADDR UNUSED pc = abuf->addr; 6160 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6161 6162 { 6163 SI tmp_tmpopd; 6164 SI tmp_tmpops; 6165 BI tmp_carry; 6166 SI tmp_newval; 6167 tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 6168 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6169 tmp_carry = CPU (h_cbit); 6170 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6171 { 6172 SI opval = tmp_newval; 6173 SET_H_GR (FLD (f_operand2), opval); 6174 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6175 } 6176 { 6177 { 6178 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6179 CPU (h_cbit) = opval; 6180 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6181 } 6182 { 6183 BI opval = LTSI (tmp_newval, 0); 6184 CPU (h_nbit) = opval; 6185 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6186 } 6187 { 6188 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6189 CPU (h_zbit) = opval; 6190 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6191 } 6192 { 6193 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6194 CPU (h_vbit) = opval; 6195 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6196 } 6197 { 6198 { 6199 BI opval = 0; 6200 CPU (h_xbit) = opval; 6201 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6202 } 6203 { 6204 BI opval = 0; 6205 SET_H_INSN_PREFIXED_P (opval); 6206 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6207 } 6208 } 6209 } 6210 } 6211 6212 #undef FLD 6213 } 6214 NEXT (vpc); 6215 6216 CASE (sem, INSN_ADDS_M_B_M) : /* adds-m.b [${Rs}${inc}],$Rd */ 6217 { 6218 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6219 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6220 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 6221 int UNUSED written = 0; 6222 IADDR UNUSED pc = abuf->addr; 6223 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6224 6225 { 6226 SI tmp_tmpopd; 6227 SI tmp_tmpops; 6228 BI tmp_carry; 6229 SI tmp_newval; 6230 tmp_tmpops = EXTQISI (({ SI tmp_addr; 6231 QI tmp_tmp_mem; 6232 BI tmp_postinc; 6233 tmp_postinc = FLD (f_memmode); 6234 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 6235 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 6236 ; if (NEBI (tmp_postinc, 0)) { 6237 { 6238 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 6239 tmp_addr = ADDSI (tmp_addr, 1); 6240 } 6241 { 6242 SI opval = tmp_addr; 6243 SET_H_GR (FLD (f_operand1), opval); 6244 written |= (1 << 11); 6245 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6246 } 6247 } 6248 } 6249 ; tmp_tmp_mem; })); 6250 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6251 tmp_carry = CPU (h_cbit); 6252 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6253 { 6254 SI opval = tmp_newval; 6255 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 6256 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6257 } 6258 { 6259 { 6260 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6261 CPU (h_cbit) = opval; 6262 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6263 } 6264 { 6265 BI opval = LTSI (tmp_newval, 0); 6266 CPU (h_nbit) = opval; 6267 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6268 } 6269 { 6270 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6271 CPU (h_zbit) = opval; 6272 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6273 } 6274 { 6275 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6276 CPU (h_vbit) = opval; 6277 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6278 } 6279 { 6280 { 6281 BI opval = 0; 6282 CPU (h_xbit) = opval; 6283 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6284 } 6285 { 6286 BI opval = 0; 6287 SET_H_INSN_PREFIXED_P (opval); 6288 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6289 } 6290 } 6291 } 6292 } 6293 6294 abuf->written = written; 6295 #undef FLD 6296 } 6297 NEXT (vpc); 6298 6299 CASE (sem, INSN_ADDS_M_W_M) : /* adds-m.w [${Rs}${inc}],$Rd */ 6300 { 6301 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6302 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6303 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 6304 int UNUSED written = 0; 6305 IADDR UNUSED pc = abuf->addr; 6306 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6307 6308 { 6309 SI tmp_tmpopd; 6310 SI tmp_tmpops; 6311 BI tmp_carry; 6312 SI tmp_newval; 6313 tmp_tmpops = EXTHISI (({ SI tmp_addr; 6314 HI tmp_tmp_mem; 6315 BI tmp_postinc; 6316 tmp_postinc = FLD (f_memmode); 6317 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 6318 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 6319 ; if (NEBI (tmp_postinc, 0)) { 6320 { 6321 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 6322 tmp_addr = ADDSI (tmp_addr, 2); 6323 } 6324 { 6325 SI opval = tmp_addr; 6326 SET_H_GR (FLD (f_operand1), opval); 6327 written |= (1 << 11); 6328 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6329 } 6330 } 6331 } 6332 ; tmp_tmp_mem; })); 6333 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6334 tmp_carry = CPU (h_cbit); 6335 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6336 { 6337 SI opval = tmp_newval; 6338 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 6339 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6340 } 6341 { 6342 { 6343 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6344 CPU (h_cbit) = opval; 6345 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6346 } 6347 { 6348 BI opval = LTSI (tmp_newval, 0); 6349 CPU (h_nbit) = opval; 6350 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6351 } 6352 { 6353 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6354 CPU (h_zbit) = opval; 6355 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6356 } 6357 { 6358 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6359 CPU (h_vbit) = opval; 6360 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6361 } 6362 { 6363 { 6364 BI opval = 0; 6365 CPU (h_xbit) = opval; 6366 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6367 } 6368 { 6369 BI opval = 0; 6370 SET_H_INSN_PREFIXED_P (opval); 6371 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6372 } 6373 } 6374 } 6375 } 6376 6377 abuf->written = written; 6378 #undef FLD 6379 } 6380 NEXT (vpc); 6381 6382 CASE (sem, INSN_ADDSCBR) : /* [${Rs}${inc}],$Rd */ 6383 { 6384 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6385 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6386 #define FLD(f) abuf->fields.sfmt_addcbr.f 6387 int UNUSED written = 0; 6388 IADDR UNUSED pc = abuf->addr; 6389 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6390 6391 { 6392 SI tmp_tmpopd; 6393 SI tmp_tmpops; 6394 BI tmp_carry; 6395 SI tmp_newval; 6396 tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 6397 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6398 tmp_carry = CPU (h_cbit); 6399 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6400 { 6401 SI opval = tmp_newval; 6402 SET_H_GR (FLD (f_operand2), opval); 6403 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6404 } 6405 { 6406 { 6407 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6408 CPU (h_cbit) = opval; 6409 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6410 } 6411 { 6412 BI opval = LTSI (tmp_newval, 0); 6413 CPU (h_nbit) = opval; 6414 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6415 } 6416 { 6417 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6418 CPU (h_zbit) = opval; 6419 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6420 } 6421 { 6422 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6423 CPU (h_vbit) = opval; 6424 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6425 } 6426 { 6427 { 6428 BI opval = 0; 6429 CPU (h_xbit) = opval; 6430 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6431 } 6432 { 6433 BI opval = 0; 6434 SET_H_INSN_PREFIXED_P (opval); 6435 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6436 } 6437 } 6438 } 6439 } 6440 6441 #undef FLD 6442 } 6443 NEXT (vpc); 6444 6445 CASE (sem, INSN_ADDSCWR) : /* [${Rs}${inc}],$Rd */ 6446 { 6447 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6448 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6449 #define FLD(f) abuf->fields.sfmt_addcwr.f 6450 int UNUSED written = 0; 6451 IADDR UNUSED pc = abuf->addr; 6452 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6453 6454 { 6455 SI tmp_tmpopd; 6456 SI tmp_tmpops; 6457 BI tmp_carry; 6458 SI tmp_newval; 6459 tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 6460 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6461 tmp_carry = CPU (h_cbit); 6462 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6463 { 6464 SI opval = tmp_newval; 6465 SET_H_GR (FLD (f_operand2), opval); 6466 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6467 } 6468 { 6469 { 6470 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6471 CPU (h_cbit) = opval; 6472 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6473 } 6474 { 6475 BI opval = LTSI (tmp_newval, 0); 6476 CPU (h_nbit) = opval; 6477 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6478 } 6479 { 6480 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6481 CPU (h_zbit) = opval; 6482 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6483 } 6484 { 6485 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6486 CPU (h_vbit) = opval; 6487 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6488 } 6489 { 6490 { 6491 BI opval = 0; 6492 CPU (h_xbit) = opval; 6493 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6494 } 6495 { 6496 BI opval = 0; 6497 SET_H_INSN_PREFIXED_P (opval); 6498 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6499 } 6500 } 6501 } 6502 } 6503 6504 #undef FLD 6505 } 6506 NEXT (vpc); 6507 6508 CASE (sem, INSN_ADDU_B_R) : /* addu.b $Rs,$Rd */ 6509 { 6510 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6511 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6512 #define FLD(f) abuf->fields.sfmt_addc_m.f 6513 int UNUSED written = 0; 6514 IADDR UNUSED pc = abuf->addr; 6515 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6516 6517 { 6518 SI tmp_tmpopd; 6519 SI tmp_tmpops; 6520 BI tmp_carry; 6521 SI tmp_newval; 6522 tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 6523 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6524 tmp_carry = CPU (h_cbit); 6525 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6526 { 6527 SI opval = tmp_newval; 6528 SET_H_GR (FLD (f_operand2), opval); 6529 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6530 } 6531 { 6532 { 6533 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6534 CPU (h_cbit) = opval; 6535 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6536 } 6537 { 6538 BI opval = LTSI (tmp_newval, 0); 6539 CPU (h_nbit) = opval; 6540 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6541 } 6542 { 6543 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6544 CPU (h_zbit) = opval; 6545 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6546 } 6547 { 6548 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6549 CPU (h_vbit) = opval; 6550 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6551 } 6552 { 6553 { 6554 BI opval = 0; 6555 CPU (h_xbit) = opval; 6556 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6557 } 6558 { 6559 BI opval = 0; 6560 SET_H_INSN_PREFIXED_P (opval); 6561 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6562 } 6563 } 6564 } 6565 } 6566 6567 #undef FLD 6568 } 6569 NEXT (vpc); 6570 6571 CASE (sem, INSN_ADDU_W_R) : /* addu.w $Rs,$Rd */ 6572 { 6573 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6574 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6575 #define FLD(f) abuf->fields.sfmt_addc_m.f 6576 int UNUSED written = 0; 6577 IADDR UNUSED pc = abuf->addr; 6578 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6579 6580 { 6581 SI tmp_tmpopd; 6582 SI tmp_tmpops; 6583 BI tmp_carry; 6584 SI tmp_newval; 6585 tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 6586 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6587 tmp_carry = CPU (h_cbit); 6588 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6589 { 6590 SI opval = tmp_newval; 6591 SET_H_GR (FLD (f_operand2), opval); 6592 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6593 } 6594 { 6595 { 6596 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6597 CPU (h_cbit) = opval; 6598 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6599 } 6600 { 6601 BI opval = LTSI (tmp_newval, 0); 6602 CPU (h_nbit) = opval; 6603 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6604 } 6605 { 6606 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6607 CPU (h_zbit) = opval; 6608 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6609 } 6610 { 6611 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6612 CPU (h_vbit) = opval; 6613 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6614 } 6615 { 6616 { 6617 BI opval = 0; 6618 CPU (h_xbit) = opval; 6619 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6620 } 6621 { 6622 BI opval = 0; 6623 SET_H_INSN_PREFIXED_P (opval); 6624 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6625 } 6626 } 6627 } 6628 } 6629 6630 #undef FLD 6631 } 6632 NEXT (vpc); 6633 6634 CASE (sem, INSN_ADDU_M_B_M) : /* addu-m.b [${Rs}${inc}],$Rd */ 6635 { 6636 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6637 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6638 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 6639 int UNUSED written = 0; 6640 IADDR UNUSED pc = abuf->addr; 6641 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6642 6643 { 6644 SI tmp_tmpopd; 6645 SI tmp_tmpops; 6646 BI tmp_carry; 6647 SI tmp_newval; 6648 tmp_tmpops = ZEXTQISI (({ SI tmp_addr; 6649 QI tmp_tmp_mem; 6650 BI tmp_postinc; 6651 tmp_postinc = FLD (f_memmode); 6652 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 6653 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 6654 ; if (NEBI (tmp_postinc, 0)) { 6655 { 6656 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 6657 tmp_addr = ADDSI (tmp_addr, 1); 6658 } 6659 { 6660 SI opval = tmp_addr; 6661 SET_H_GR (FLD (f_operand1), opval); 6662 written |= (1 << 11); 6663 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6664 } 6665 } 6666 } 6667 ; tmp_tmp_mem; })); 6668 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6669 tmp_carry = CPU (h_cbit); 6670 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6671 { 6672 SI opval = tmp_newval; 6673 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 6674 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6675 } 6676 { 6677 { 6678 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6679 CPU (h_cbit) = opval; 6680 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6681 } 6682 { 6683 BI opval = LTSI (tmp_newval, 0); 6684 CPU (h_nbit) = opval; 6685 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6686 } 6687 { 6688 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6689 CPU (h_zbit) = opval; 6690 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6691 } 6692 { 6693 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6694 CPU (h_vbit) = opval; 6695 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6696 } 6697 { 6698 { 6699 BI opval = 0; 6700 CPU (h_xbit) = opval; 6701 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6702 } 6703 { 6704 BI opval = 0; 6705 SET_H_INSN_PREFIXED_P (opval); 6706 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6707 } 6708 } 6709 } 6710 } 6711 6712 abuf->written = written; 6713 #undef FLD 6714 } 6715 NEXT (vpc); 6716 6717 CASE (sem, INSN_ADDU_M_W_M) : /* addu-m.w [${Rs}${inc}],$Rd */ 6718 { 6719 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6720 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6721 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 6722 int UNUSED written = 0; 6723 IADDR UNUSED pc = abuf->addr; 6724 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6725 6726 { 6727 SI tmp_tmpopd; 6728 SI tmp_tmpops; 6729 BI tmp_carry; 6730 SI tmp_newval; 6731 tmp_tmpops = ZEXTHISI (({ SI tmp_addr; 6732 HI tmp_tmp_mem; 6733 BI tmp_postinc; 6734 tmp_postinc = FLD (f_memmode); 6735 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 6736 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 6737 ; if (NEBI (tmp_postinc, 0)) { 6738 { 6739 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 6740 tmp_addr = ADDSI (tmp_addr, 2); 6741 } 6742 { 6743 SI opval = tmp_addr; 6744 SET_H_GR (FLD (f_operand1), opval); 6745 written |= (1 << 11); 6746 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6747 } 6748 } 6749 } 6750 ; tmp_tmp_mem; })); 6751 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6752 tmp_carry = CPU (h_cbit); 6753 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6754 { 6755 SI opval = tmp_newval; 6756 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 6757 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6758 } 6759 { 6760 { 6761 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6762 CPU (h_cbit) = opval; 6763 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6764 } 6765 { 6766 BI opval = LTSI (tmp_newval, 0); 6767 CPU (h_nbit) = opval; 6768 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6769 } 6770 { 6771 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6772 CPU (h_zbit) = opval; 6773 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6774 } 6775 { 6776 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6777 CPU (h_vbit) = opval; 6778 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6779 } 6780 { 6781 { 6782 BI opval = 0; 6783 CPU (h_xbit) = opval; 6784 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6785 } 6786 { 6787 BI opval = 0; 6788 SET_H_INSN_PREFIXED_P (opval); 6789 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6790 } 6791 } 6792 } 6793 } 6794 6795 abuf->written = written; 6796 #undef FLD 6797 } 6798 NEXT (vpc); 6799 6800 CASE (sem, INSN_ADDUCBR) : /* [${Rs}${inc}],$Rd */ 6801 { 6802 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6803 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6804 #define FLD(f) abuf->fields.sfmt_addcbr.f 6805 int UNUSED written = 0; 6806 IADDR UNUSED pc = abuf->addr; 6807 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6808 6809 { 6810 SI tmp_tmpopd; 6811 SI tmp_tmpops; 6812 BI tmp_carry; 6813 SI tmp_newval; 6814 tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 6815 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6816 tmp_carry = CPU (h_cbit); 6817 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6818 { 6819 SI opval = tmp_newval; 6820 SET_H_GR (FLD (f_operand2), opval); 6821 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6822 } 6823 { 6824 { 6825 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6826 CPU (h_cbit) = opval; 6827 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6828 } 6829 { 6830 BI opval = LTSI (tmp_newval, 0); 6831 CPU (h_nbit) = opval; 6832 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6833 } 6834 { 6835 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6836 CPU (h_zbit) = opval; 6837 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6838 } 6839 { 6840 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6841 CPU (h_vbit) = opval; 6842 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6843 } 6844 { 6845 { 6846 BI opval = 0; 6847 CPU (h_xbit) = opval; 6848 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6849 } 6850 { 6851 BI opval = 0; 6852 SET_H_INSN_PREFIXED_P (opval); 6853 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6854 } 6855 } 6856 } 6857 } 6858 6859 #undef FLD 6860 } 6861 NEXT (vpc); 6862 6863 CASE (sem, INSN_ADDUCWR) : /* [${Rs}${inc}],$Rd */ 6864 { 6865 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6866 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6867 #define FLD(f) abuf->fields.sfmt_addcwr.f 6868 int UNUSED written = 0; 6869 IADDR UNUSED pc = abuf->addr; 6870 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6871 6872 { 6873 SI tmp_tmpopd; 6874 SI tmp_tmpops; 6875 BI tmp_carry; 6876 SI tmp_newval; 6877 tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 6878 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6879 tmp_carry = CPU (h_cbit); 6880 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6881 { 6882 SI opval = tmp_newval; 6883 SET_H_GR (FLD (f_operand2), opval); 6884 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6885 } 6886 { 6887 { 6888 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 6889 CPU (h_cbit) = opval; 6890 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6891 } 6892 { 6893 BI opval = LTSI (tmp_newval, 0); 6894 CPU (h_nbit) = opval; 6895 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6896 } 6897 { 6898 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6899 CPU (h_zbit) = opval; 6900 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6901 } 6902 { 6903 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 6904 CPU (h_vbit) = opval; 6905 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6906 } 6907 { 6908 { 6909 BI opval = 0; 6910 CPU (h_xbit) = opval; 6911 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6912 } 6913 { 6914 BI opval = 0; 6915 SET_H_INSN_PREFIXED_P (opval); 6916 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6917 } 6918 } 6919 } 6920 } 6921 6922 #undef FLD 6923 } 6924 NEXT (vpc); 6925 6926 CASE (sem, INSN_SUB_B_R) : /* sub.b $Rs,$Rd */ 6927 { 6928 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6929 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6930 #define FLD(f) abuf->fields.sfmt_addc_m.f 6931 int UNUSED written = 0; 6932 IADDR UNUSED pc = abuf->addr; 6933 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6934 6935 { 6936 QI tmp_tmpopd; 6937 QI tmp_tmpops; 6938 BI tmp_carry; 6939 QI tmp_newval; 6940 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 6941 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 6942 tmp_carry = CPU (h_cbit); 6943 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 6944 { 6945 SI tmp_oldregval; 6946 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 6947 { 6948 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 6949 SET_H_GR (FLD (f_operand2), opval); 6950 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6951 } 6952 } 6953 { 6954 { 6955 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 6956 CPU (h_cbit) = opval; 6957 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 6958 } 6959 { 6960 BI opval = LTQI (tmp_newval, 0); 6961 CPU (h_nbit) = opval; 6962 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 6963 } 6964 { 6965 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 6966 CPU (h_zbit) = opval; 6967 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 6968 } 6969 { 6970 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 6971 CPU (h_vbit) = opval; 6972 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 6973 } 6974 { 6975 { 6976 BI opval = 0; 6977 CPU (h_xbit) = opval; 6978 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 6979 } 6980 { 6981 BI opval = 0; 6982 SET_H_INSN_PREFIXED_P (opval); 6983 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 6984 } 6985 } 6986 } 6987 } 6988 6989 #undef FLD 6990 } 6991 NEXT (vpc); 6992 6993 CASE (sem, INSN_SUB_W_R) : /* sub.w $Rs,$Rd */ 6994 { 6995 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6996 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6997 #define FLD(f) abuf->fields.sfmt_addc_m.f 6998 int UNUSED written = 0; 6999 IADDR UNUSED pc = abuf->addr; 7000 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7001 7002 { 7003 HI tmp_tmpopd; 7004 HI tmp_tmpops; 7005 BI tmp_carry; 7006 HI tmp_newval; 7007 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 7008 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7009 tmp_carry = CPU (h_cbit); 7010 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7011 { 7012 SI tmp_oldregval; 7013 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 7014 { 7015 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 7016 SET_H_GR (FLD (f_operand2), opval); 7017 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7018 } 7019 } 7020 { 7021 { 7022 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 7023 CPU (h_cbit) = opval; 7024 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7025 } 7026 { 7027 BI opval = LTHI (tmp_newval, 0); 7028 CPU (h_nbit) = opval; 7029 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7030 } 7031 { 7032 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7033 CPU (h_zbit) = opval; 7034 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7035 } 7036 { 7037 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 7038 CPU (h_vbit) = opval; 7039 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7040 } 7041 { 7042 { 7043 BI opval = 0; 7044 CPU (h_xbit) = opval; 7045 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7046 } 7047 { 7048 BI opval = 0; 7049 SET_H_INSN_PREFIXED_P (opval); 7050 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7051 } 7052 } 7053 } 7054 } 7055 7056 #undef FLD 7057 } 7058 NEXT (vpc); 7059 7060 CASE (sem, INSN_SUB_D_R) : /* sub.d $Rs,$Rd */ 7061 { 7062 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7063 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7064 #define FLD(f) abuf->fields.sfmt_addc_m.f 7065 int UNUSED written = 0; 7066 IADDR UNUSED pc = abuf->addr; 7067 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7068 7069 { 7070 SI tmp_tmpopd; 7071 SI tmp_tmpops; 7072 BI tmp_carry; 7073 SI tmp_newval; 7074 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 7075 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7076 tmp_carry = CPU (h_cbit); 7077 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7078 { 7079 SI opval = tmp_newval; 7080 SET_H_GR (FLD (f_operand2), opval); 7081 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7082 } 7083 { 7084 { 7085 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7086 CPU (h_cbit) = opval; 7087 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7088 } 7089 { 7090 BI opval = LTSI (tmp_newval, 0); 7091 CPU (h_nbit) = opval; 7092 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7093 } 7094 { 7095 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7096 CPU (h_zbit) = opval; 7097 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7098 } 7099 { 7100 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7101 CPU (h_vbit) = opval; 7102 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7103 } 7104 { 7105 { 7106 BI opval = 0; 7107 CPU (h_xbit) = opval; 7108 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7109 } 7110 { 7111 BI opval = 0; 7112 SET_H_INSN_PREFIXED_P (opval); 7113 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7114 } 7115 } 7116 } 7117 } 7118 7119 #undef FLD 7120 } 7121 NEXT (vpc); 7122 7123 CASE (sem, INSN_SUB_M_B_M) : /* sub-m.b [${Rs}${inc}],${Rd} */ 7124 { 7125 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7126 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7127 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 7128 int UNUSED written = 0; 7129 IADDR UNUSED pc = abuf->addr; 7130 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7131 7132 { 7133 QI tmp_tmpopd; 7134 QI tmp_tmpops; 7135 BI tmp_carry; 7136 QI tmp_newval; 7137 tmp_tmpops = ({ SI tmp_addr; 7138 QI tmp_tmp_mem; 7139 BI tmp_postinc; 7140 tmp_postinc = FLD (f_memmode); 7141 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 7142 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 7143 ; if (NEBI (tmp_postinc, 0)) { 7144 { 7145 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 7146 tmp_addr = ADDSI (tmp_addr, 1); 7147 } 7148 { 7149 SI opval = tmp_addr; 7150 SET_H_GR (FLD (f_operand1), opval); 7151 written |= (1 << 12); 7152 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7153 } 7154 } 7155 } 7156 ; tmp_tmp_mem; }); 7157 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7158 tmp_carry = CPU (h_cbit); 7159 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7160 { 7161 SI tmp_oldregval; 7162 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 7163 { 7164 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 7165 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 7166 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7167 } 7168 } 7169 { 7170 { 7171 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 7172 CPU (h_cbit) = opval; 7173 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7174 } 7175 { 7176 BI opval = LTQI (tmp_newval, 0); 7177 CPU (h_nbit) = opval; 7178 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7179 } 7180 { 7181 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7182 CPU (h_zbit) = opval; 7183 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7184 } 7185 { 7186 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 7187 CPU (h_vbit) = opval; 7188 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7189 } 7190 { 7191 { 7192 BI opval = 0; 7193 CPU (h_xbit) = opval; 7194 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7195 } 7196 { 7197 BI opval = 0; 7198 SET_H_INSN_PREFIXED_P (opval); 7199 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7200 } 7201 } 7202 } 7203 } 7204 7205 abuf->written = written; 7206 #undef FLD 7207 } 7208 NEXT (vpc); 7209 7210 CASE (sem, INSN_SUB_M_W_M) : /* sub-m.w [${Rs}${inc}],${Rd} */ 7211 { 7212 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7213 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7214 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 7215 int UNUSED written = 0; 7216 IADDR UNUSED pc = abuf->addr; 7217 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7218 7219 { 7220 HI tmp_tmpopd; 7221 HI tmp_tmpops; 7222 BI tmp_carry; 7223 HI tmp_newval; 7224 tmp_tmpops = ({ SI tmp_addr; 7225 HI tmp_tmp_mem; 7226 BI tmp_postinc; 7227 tmp_postinc = FLD (f_memmode); 7228 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 7229 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 7230 ; if (NEBI (tmp_postinc, 0)) { 7231 { 7232 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 7233 tmp_addr = ADDSI (tmp_addr, 2); 7234 } 7235 { 7236 SI opval = tmp_addr; 7237 SET_H_GR (FLD (f_operand1), opval); 7238 written |= (1 << 12); 7239 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7240 } 7241 } 7242 } 7243 ; tmp_tmp_mem; }); 7244 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7245 tmp_carry = CPU (h_cbit); 7246 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7247 { 7248 SI tmp_oldregval; 7249 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 7250 { 7251 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 7252 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 7253 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7254 } 7255 } 7256 { 7257 { 7258 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 7259 CPU (h_cbit) = opval; 7260 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7261 } 7262 { 7263 BI opval = LTHI (tmp_newval, 0); 7264 CPU (h_nbit) = opval; 7265 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7266 } 7267 { 7268 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7269 CPU (h_zbit) = opval; 7270 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7271 } 7272 { 7273 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 7274 CPU (h_vbit) = opval; 7275 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7276 } 7277 { 7278 { 7279 BI opval = 0; 7280 CPU (h_xbit) = opval; 7281 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7282 } 7283 { 7284 BI opval = 0; 7285 SET_H_INSN_PREFIXED_P (opval); 7286 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7287 } 7288 } 7289 } 7290 } 7291 7292 abuf->written = written; 7293 #undef FLD 7294 } 7295 NEXT (vpc); 7296 7297 CASE (sem, INSN_SUB_M_D_M) : /* sub-m.d [${Rs}${inc}],${Rd} */ 7298 { 7299 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7300 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7301 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 7302 int UNUSED written = 0; 7303 IADDR UNUSED pc = abuf->addr; 7304 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7305 7306 { 7307 SI tmp_tmpopd; 7308 SI tmp_tmpops; 7309 BI tmp_carry; 7310 SI tmp_newval; 7311 tmp_tmpops = ({ SI tmp_addr; 7312 SI tmp_tmp_mem; 7313 BI tmp_postinc; 7314 tmp_postinc = FLD (f_memmode); 7315 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 7316 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 7317 ; if (NEBI (tmp_postinc, 0)) { 7318 { 7319 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 7320 tmp_addr = ADDSI (tmp_addr, 4); 7321 } 7322 { 7323 SI opval = tmp_addr; 7324 SET_H_GR (FLD (f_operand1), opval); 7325 written |= (1 << 11); 7326 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7327 } 7328 } 7329 } 7330 ; tmp_tmp_mem; }); 7331 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7332 tmp_carry = CPU (h_cbit); 7333 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7334 { 7335 SI opval = tmp_newval; 7336 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 7337 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7338 } 7339 { 7340 { 7341 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7342 CPU (h_cbit) = opval; 7343 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7344 } 7345 { 7346 BI opval = LTSI (tmp_newval, 0); 7347 CPU (h_nbit) = opval; 7348 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7349 } 7350 { 7351 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7352 CPU (h_zbit) = opval; 7353 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7354 } 7355 { 7356 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7357 CPU (h_vbit) = opval; 7358 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7359 } 7360 { 7361 { 7362 BI opval = 0; 7363 CPU (h_xbit) = opval; 7364 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7365 } 7366 { 7367 BI opval = 0; 7368 SET_H_INSN_PREFIXED_P (opval); 7369 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7370 } 7371 } 7372 } 7373 } 7374 7375 abuf->written = written; 7376 #undef FLD 7377 } 7378 NEXT (vpc); 7379 7380 CASE (sem, INSN_SUBCBR) : /* sub.b ${sconst8}],${Rd} */ 7381 { 7382 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7383 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7384 #define FLD(f) abuf->fields.sfmt_addcbr.f 7385 int UNUSED written = 0; 7386 IADDR UNUSED pc = abuf->addr; 7387 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7388 7389 { 7390 QI tmp_tmpopd; 7391 QI tmp_tmpops; 7392 BI tmp_carry; 7393 QI tmp_newval; 7394 tmp_tmpops = FLD (f_indir_pc__byte); 7395 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7396 tmp_carry = CPU (h_cbit); 7397 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7398 { 7399 SI tmp_oldregval; 7400 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 7401 { 7402 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 7403 SET_H_GR (FLD (f_operand2), opval); 7404 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7405 } 7406 } 7407 { 7408 { 7409 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 7410 CPU (h_cbit) = opval; 7411 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7412 } 7413 { 7414 BI opval = LTQI (tmp_newval, 0); 7415 CPU (h_nbit) = opval; 7416 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7417 } 7418 { 7419 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7420 CPU (h_zbit) = opval; 7421 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7422 } 7423 { 7424 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 7425 CPU (h_vbit) = opval; 7426 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7427 } 7428 { 7429 { 7430 BI opval = 0; 7431 CPU (h_xbit) = opval; 7432 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7433 } 7434 { 7435 BI opval = 0; 7436 SET_H_INSN_PREFIXED_P (opval); 7437 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7438 } 7439 } 7440 } 7441 } 7442 7443 #undef FLD 7444 } 7445 NEXT (vpc); 7446 7447 CASE (sem, INSN_SUBCWR) : /* sub.w ${sconst16}],${Rd} */ 7448 { 7449 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7450 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7451 #define FLD(f) abuf->fields.sfmt_addcwr.f 7452 int UNUSED written = 0; 7453 IADDR UNUSED pc = abuf->addr; 7454 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7455 7456 { 7457 HI tmp_tmpopd; 7458 HI tmp_tmpops; 7459 BI tmp_carry; 7460 HI tmp_newval; 7461 tmp_tmpops = FLD (f_indir_pc__word); 7462 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7463 tmp_carry = CPU (h_cbit); 7464 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7465 { 7466 SI tmp_oldregval; 7467 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 7468 { 7469 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 7470 SET_H_GR (FLD (f_operand2), opval); 7471 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7472 } 7473 } 7474 { 7475 { 7476 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 7477 CPU (h_cbit) = opval; 7478 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7479 } 7480 { 7481 BI opval = LTHI (tmp_newval, 0); 7482 CPU (h_nbit) = opval; 7483 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7484 } 7485 { 7486 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7487 CPU (h_zbit) = opval; 7488 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7489 } 7490 { 7491 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 7492 CPU (h_vbit) = opval; 7493 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7494 } 7495 { 7496 { 7497 BI opval = 0; 7498 CPU (h_xbit) = opval; 7499 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7500 } 7501 { 7502 BI opval = 0; 7503 SET_H_INSN_PREFIXED_P (opval); 7504 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7505 } 7506 } 7507 } 7508 } 7509 7510 #undef FLD 7511 } 7512 NEXT (vpc); 7513 7514 CASE (sem, INSN_SUBCDR) : /* sub.d ${const32}],${Rd} */ 7515 { 7516 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7517 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7518 #define FLD(f) abuf->fields.sfmt_addcdr.f 7519 int UNUSED written = 0; 7520 IADDR UNUSED pc = abuf->addr; 7521 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 7522 7523 { 7524 SI tmp_tmpopd; 7525 SI tmp_tmpops; 7526 BI tmp_carry; 7527 SI tmp_newval; 7528 tmp_tmpops = FLD (f_indir_pc__dword); 7529 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7530 tmp_carry = CPU (h_cbit); 7531 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7532 { 7533 SI opval = tmp_newval; 7534 SET_H_GR (FLD (f_operand2), opval); 7535 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7536 } 7537 { 7538 { 7539 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7540 CPU (h_cbit) = opval; 7541 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7542 } 7543 { 7544 BI opval = LTSI (tmp_newval, 0); 7545 CPU (h_nbit) = opval; 7546 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7547 } 7548 { 7549 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7550 CPU (h_zbit) = opval; 7551 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7552 } 7553 { 7554 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7555 CPU (h_vbit) = opval; 7556 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7557 } 7558 { 7559 { 7560 BI opval = 0; 7561 CPU (h_xbit) = opval; 7562 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7563 } 7564 { 7565 BI opval = 0; 7566 SET_H_INSN_PREFIXED_P (opval); 7567 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7568 } 7569 } 7570 } 7571 } 7572 7573 #undef FLD 7574 } 7575 NEXT (vpc); 7576 7577 CASE (sem, INSN_SUBS_B_R) : /* subs.b $Rs,$Rd */ 7578 { 7579 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7580 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7581 #define FLD(f) abuf->fields.sfmt_addc_m.f 7582 int UNUSED written = 0; 7583 IADDR UNUSED pc = abuf->addr; 7584 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7585 7586 { 7587 SI tmp_tmpopd; 7588 SI tmp_tmpops; 7589 BI tmp_carry; 7590 SI tmp_newval; 7591 tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 7592 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7593 tmp_carry = CPU (h_cbit); 7594 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7595 { 7596 SI opval = tmp_newval; 7597 SET_H_GR (FLD (f_operand2), opval); 7598 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7599 } 7600 { 7601 { 7602 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7603 CPU (h_cbit) = opval; 7604 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7605 } 7606 { 7607 BI opval = LTSI (tmp_newval, 0); 7608 CPU (h_nbit) = opval; 7609 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7610 } 7611 { 7612 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7613 CPU (h_zbit) = opval; 7614 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7615 } 7616 { 7617 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7618 CPU (h_vbit) = opval; 7619 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7620 } 7621 { 7622 { 7623 BI opval = 0; 7624 CPU (h_xbit) = opval; 7625 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7626 } 7627 { 7628 BI opval = 0; 7629 SET_H_INSN_PREFIXED_P (opval); 7630 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7631 } 7632 } 7633 } 7634 } 7635 7636 #undef FLD 7637 } 7638 NEXT (vpc); 7639 7640 CASE (sem, INSN_SUBS_W_R) : /* subs.w $Rs,$Rd */ 7641 { 7642 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7643 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7644 #define FLD(f) abuf->fields.sfmt_addc_m.f 7645 int UNUSED written = 0; 7646 IADDR UNUSED pc = abuf->addr; 7647 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7648 7649 { 7650 SI tmp_tmpopd; 7651 SI tmp_tmpops; 7652 BI tmp_carry; 7653 SI tmp_newval; 7654 tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 7655 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7656 tmp_carry = CPU (h_cbit); 7657 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7658 { 7659 SI opval = tmp_newval; 7660 SET_H_GR (FLD (f_operand2), opval); 7661 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7662 } 7663 { 7664 { 7665 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7666 CPU (h_cbit) = opval; 7667 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7668 } 7669 { 7670 BI opval = LTSI (tmp_newval, 0); 7671 CPU (h_nbit) = opval; 7672 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7673 } 7674 { 7675 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7676 CPU (h_zbit) = opval; 7677 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7678 } 7679 { 7680 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7681 CPU (h_vbit) = opval; 7682 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7683 } 7684 { 7685 { 7686 BI opval = 0; 7687 CPU (h_xbit) = opval; 7688 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7689 } 7690 { 7691 BI opval = 0; 7692 SET_H_INSN_PREFIXED_P (opval); 7693 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7694 } 7695 } 7696 } 7697 } 7698 7699 #undef FLD 7700 } 7701 NEXT (vpc); 7702 7703 CASE (sem, INSN_SUBS_M_B_M) : /* subs-m.b [${Rs}${inc}],$Rd */ 7704 { 7705 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7706 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7707 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 7708 int UNUSED written = 0; 7709 IADDR UNUSED pc = abuf->addr; 7710 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7711 7712 { 7713 SI tmp_tmpopd; 7714 SI tmp_tmpops; 7715 BI tmp_carry; 7716 SI tmp_newval; 7717 tmp_tmpops = EXTQISI (({ SI tmp_addr; 7718 QI tmp_tmp_mem; 7719 BI tmp_postinc; 7720 tmp_postinc = FLD (f_memmode); 7721 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 7722 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 7723 ; if (NEBI (tmp_postinc, 0)) { 7724 { 7725 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 7726 tmp_addr = ADDSI (tmp_addr, 1); 7727 } 7728 { 7729 SI opval = tmp_addr; 7730 SET_H_GR (FLD (f_operand1), opval); 7731 written |= (1 << 11); 7732 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7733 } 7734 } 7735 } 7736 ; tmp_tmp_mem; })); 7737 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7738 tmp_carry = CPU (h_cbit); 7739 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7740 { 7741 SI opval = tmp_newval; 7742 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 7743 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7744 } 7745 { 7746 { 7747 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7748 CPU (h_cbit) = opval; 7749 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7750 } 7751 { 7752 BI opval = LTSI (tmp_newval, 0); 7753 CPU (h_nbit) = opval; 7754 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7755 } 7756 { 7757 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7758 CPU (h_zbit) = opval; 7759 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7760 } 7761 { 7762 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7763 CPU (h_vbit) = opval; 7764 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7765 } 7766 { 7767 { 7768 BI opval = 0; 7769 CPU (h_xbit) = opval; 7770 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7771 } 7772 { 7773 BI opval = 0; 7774 SET_H_INSN_PREFIXED_P (opval); 7775 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7776 } 7777 } 7778 } 7779 } 7780 7781 abuf->written = written; 7782 #undef FLD 7783 } 7784 NEXT (vpc); 7785 7786 CASE (sem, INSN_SUBS_M_W_M) : /* subs-m.w [${Rs}${inc}],$Rd */ 7787 { 7788 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7789 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7790 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 7791 int UNUSED written = 0; 7792 IADDR UNUSED pc = abuf->addr; 7793 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 7794 7795 { 7796 SI tmp_tmpopd; 7797 SI tmp_tmpops; 7798 BI tmp_carry; 7799 SI tmp_newval; 7800 tmp_tmpops = EXTHISI (({ SI tmp_addr; 7801 HI tmp_tmp_mem; 7802 BI tmp_postinc; 7803 tmp_postinc = FLD (f_memmode); 7804 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 7805 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 7806 ; if (NEBI (tmp_postinc, 0)) { 7807 { 7808 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 7809 tmp_addr = ADDSI (tmp_addr, 2); 7810 } 7811 { 7812 SI opval = tmp_addr; 7813 SET_H_GR (FLD (f_operand1), opval); 7814 written |= (1 << 11); 7815 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7816 } 7817 } 7818 } 7819 ; tmp_tmp_mem; })); 7820 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7821 tmp_carry = CPU (h_cbit); 7822 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7823 { 7824 SI opval = tmp_newval; 7825 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 7826 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7827 } 7828 { 7829 { 7830 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7831 CPU (h_cbit) = opval; 7832 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7833 } 7834 { 7835 BI opval = LTSI (tmp_newval, 0); 7836 CPU (h_nbit) = opval; 7837 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7838 } 7839 { 7840 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7841 CPU (h_zbit) = opval; 7842 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7843 } 7844 { 7845 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7846 CPU (h_vbit) = opval; 7847 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7848 } 7849 { 7850 { 7851 BI opval = 0; 7852 CPU (h_xbit) = opval; 7853 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7854 } 7855 { 7856 BI opval = 0; 7857 SET_H_INSN_PREFIXED_P (opval); 7858 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7859 } 7860 } 7861 } 7862 } 7863 7864 abuf->written = written; 7865 #undef FLD 7866 } 7867 NEXT (vpc); 7868 7869 CASE (sem, INSN_SUBSCBR) : /* [${Rs}${inc}],$Rd */ 7870 { 7871 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7872 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7873 #define FLD(f) abuf->fields.sfmt_addcbr.f 7874 int UNUSED written = 0; 7875 IADDR UNUSED pc = abuf->addr; 7876 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7877 7878 { 7879 SI tmp_tmpopd; 7880 SI tmp_tmpops; 7881 BI tmp_carry; 7882 SI tmp_newval; 7883 tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 7884 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7885 tmp_carry = CPU (h_cbit); 7886 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7887 { 7888 SI opval = tmp_newval; 7889 SET_H_GR (FLD (f_operand2), opval); 7890 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7891 } 7892 { 7893 { 7894 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7895 CPU (h_cbit) = opval; 7896 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7897 } 7898 { 7899 BI opval = LTSI (tmp_newval, 0); 7900 CPU (h_nbit) = opval; 7901 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7902 } 7903 { 7904 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7905 CPU (h_zbit) = opval; 7906 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7907 } 7908 { 7909 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7910 CPU (h_vbit) = opval; 7911 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7912 } 7913 { 7914 { 7915 BI opval = 0; 7916 CPU (h_xbit) = opval; 7917 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7918 } 7919 { 7920 BI opval = 0; 7921 SET_H_INSN_PREFIXED_P (opval); 7922 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7923 } 7924 } 7925 } 7926 } 7927 7928 #undef FLD 7929 } 7930 NEXT (vpc); 7931 7932 CASE (sem, INSN_SUBSCWR) : /* [${Rs}${inc}],$Rd */ 7933 { 7934 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7935 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7936 #define FLD(f) abuf->fields.sfmt_addcwr.f 7937 int UNUSED written = 0; 7938 IADDR UNUSED pc = abuf->addr; 7939 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7940 7941 { 7942 SI tmp_tmpopd; 7943 SI tmp_tmpops; 7944 BI tmp_carry; 7945 SI tmp_newval; 7946 tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 7947 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 7948 tmp_carry = CPU (h_cbit); 7949 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 7950 { 7951 SI opval = tmp_newval; 7952 SET_H_GR (FLD (f_operand2), opval); 7953 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 7954 } 7955 { 7956 { 7957 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 7958 CPU (h_cbit) = opval; 7959 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 7960 } 7961 { 7962 BI opval = LTSI (tmp_newval, 0); 7963 CPU (h_nbit) = opval; 7964 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 7965 } 7966 { 7967 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 7968 CPU (h_zbit) = opval; 7969 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 7970 } 7971 { 7972 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 7973 CPU (h_vbit) = opval; 7974 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 7975 } 7976 { 7977 { 7978 BI opval = 0; 7979 CPU (h_xbit) = opval; 7980 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 7981 } 7982 { 7983 BI opval = 0; 7984 SET_H_INSN_PREFIXED_P (opval); 7985 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 7986 } 7987 } 7988 } 7989 } 7990 7991 #undef FLD 7992 } 7993 NEXT (vpc); 7994 7995 CASE (sem, INSN_SUBU_B_R) : /* subu.b $Rs,$Rd */ 7996 { 7997 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7998 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7999 #define FLD(f) abuf->fields.sfmt_addc_m.f 8000 int UNUSED written = 0; 8001 IADDR UNUSED pc = abuf->addr; 8002 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8003 8004 { 8005 SI tmp_tmpopd; 8006 SI tmp_tmpops; 8007 BI tmp_carry; 8008 SI tmp_newval; 8009 tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 8010 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8011 tmp_carry = CPU (h_cbit); 8012 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8013 { 8014 SI opval = tmp_newval; 8015 SET_H_GR (FLD (f_operand2), opval); 8016 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8017 } 8018 { 8019 { 8020 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8021 CPU (h_cbit) = opval; 8022 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8023 } 8024 { 8025 BI opval = LTSI (tmp_newval, 0); 8026 CPU (h_nbit) = opval; 8027 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8028 } 8029 { 8030 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8031 CPU (h_zbit) = opval; 8032 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8033 } 8034 { 8035 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8036 CPU (h_vbit) = opval; 8037 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8038 } 8039 { 8040 { 8041 BI opval = 0; 8042 CPU (h_xbit) = opval; 8043 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8044 } 8045 { 8046 BI opval = 0; 8047 SET_H_INSN_PREFIXED_P (opval); 8048 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8049 } 8050 } 8051 } 8052 } 8053 8054 #undef FLD 8055 } 8056 NEXT (vpc); 8057 8058 CASE (sem, INSN_SUBU_W_R) : /* subu.w $Rs,$Rd */ 8059 { 8060 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8061 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8062 #define FLD(f) abuf->fields.sfmt_addc_m.f 8063 int UNUSED written = 0; 8064 IADDR UNUSED pc = abuf->addr; 8065 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8066 8067 { 8068 SI tmp_tmpopd; 8069 SI tmp_tmpops; 8070 BI tmp_carry; 8071 SI tmp_newval; 8072 tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 8073 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8074 tmp_carry = CPU (h_cbit); 8075 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8076 { 8077 SI opval = tmp_newval; 8078 SET_H_GR (FLD (f_operand2), opval); 8079 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8080 } 8081 { 8082 { 8083 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8084 CPU (h_cbit) = opval; 8085 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8086 } 8087 { 8088 BI opval = LTSI (tmp_newval, 0); 8089 CPU (h_nbit) = opval; 8090 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8091 } 8092 { 8093 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8094 CPU (h_zbit) = opval; 8095 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8096 } 8097 { 8098 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8099 CPU (h_vbit) = opval; 8100 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8101 } 8102 { 8103 { 8104 BI opval = 0; 8105 CPU (h_xbit) = opval; 8106 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8107 } 8108 { 8109 BI opval = 0; 8110 SET_H_INSN_PREFIXED_P (opval); 8111 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8112 } 8113 } 8114 } 8115 } 8116 8117 #undef FLD 8118 } 8119 NEXT (vpc); 8120 8121 CASE (sem, INSN_SUBU_M_B_M) : /* subu-m.b [${Rs}${inc}],$Rd */ 8122 { 8123 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8124 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8125 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 8126 int UNUSED written = 0; 8127 IADDR UNUSED pc = abuf->addr; 8128 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8129 8130 { 8131 SI tmp_tmpopd; 8132 SI tmp_tmpops; 8133 BI tmp_carry; 8134 SI tmp_newval; 8135 tmp_tmpops = ZEXTQISI (({ SI tmp_addr; 8136 QI tmp_tmp_mem; 8137 BI tmp_postinc; 8138 tmp_postinc = FLD (f_memmode); 8139 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 8140 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 8141 ; if (NEBI (tmp_postinc, 0)) { 8142 { 8143 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 8144 tmp_addr = ADDSI (tmp_addr, 1); 8145 } 8146 { 8147 SI opval = tmp_addr; 8148 SET_H_GR (FLD (f_operand1), opval); 8149 written |= (1 << 11); 8150 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8151 } 8152 } 8153 } 8154 ; tmp_tmp_mem; })); 8155 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8156 tmp_carry = CPU (h_cbit); 8157 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8158 { 8159 SI opval = tmp_newval; 8160 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 8161 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8162 } 8163 { 8164 { 8165 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8166 CPU (h_cbit) = opval; 8167 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8168 } 8169 { 8170 BI opval = LTSI (tmp_newval, 0); 8171 CPU (h_nbit) = opval; 8172 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8173 } 8174 { 8175 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8176 CPU (h_zbit) = opval; 8177 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8178 } 8179 { 8180 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8181 CPU (h_vbit) = opval; 8182 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8183 } 8184 { 8185 { 8186 BI opval = 0; 8187 CPU (h_xbit) = opval; 8188 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8189 } 8190 { 8191 BI opval = 0; 8192 SET_H_INSN_PREFIXED_P (opval); 8193 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8194 } 8195 } 8196 } 8197 } 8198 8199 abuf->written = written; 8200 #undef FLD 8201 } 8202 NEXT (vpc); 8203 8204 CASE (sem, INSN_SUBU_M_W_M) : /* subu-m.w [${Rs}${inc}],$Rd */ 8205 { 8206 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8207 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8208 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 8209 int UNUSED written = 0; 8210 IADDR UNUSED pc = abuf->addr; 8211 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8212 8213 { 8214 SI tmp_tmpopd; 8215 SI tmp_tmpops; 8216 BI tmp_carry; 8217 SI tmp_newval; 8218 tmp_tmpops = ZEXTHISI (({ SI tmp_addr; 8219 HI tmp_tmp_mem; 8220 BI tmp_postinc; 8221 tmp_postinc = FLD (f_memmode); 8222 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 8223 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 8224 ; if (NEBI (tmp_postinc, 0)) { 8225 { 8226 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 8227 tmp_addr = ADDSI (tmp_addr, 2); 8228 } 8229 { 8230 SI opval = tmp_addr; 8231 SET_H_GR (FLD (f_operand1), opval); 8232 written |= (1 << 11); 8233 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8234 } 8235 } 8236 } 8237 ; tmp_tmp_mem; })); 8238 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8239 tmp_carry = CPU (h_cbit); 8240 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8241 { 8242 SI opval = tmp_newval; 8243 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 8244 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8245 } 8246 { 8247 { 8248 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8249 CPU (h_cbit) = opval; 8250 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8251 } 8252 { 8253 BI opval = LTSI (tmp_newval, 0); 8254 CPU (h_nbit) = opval; 8255 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8256 } 8257 { 8258 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8259 CPU (h_zbit) = opval; 8260 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8261 } 8262 { 8263 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8264 CPU (h_vbit) = opval; 8265 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8266 } 8267 { 8268 { 8269 BI opval = 0; 8270 CPU (h_xbit) = opval; 8271 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8272 } 8273 { 8274 BI opval = 0; 8275 SET_H_INSN_PREFIXED_P (opval); 8276 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8277 } 8278 } 8279 } 8280 } 8281 8282 abuf->written = written; 8283 #undef FLD 8284 } 8285 NEXT (vpc); 8286 8287 CASE (sem, INSN_SUBUCBR) : /* [${Rs}${inc}],$Rd */ 8288 { 8289 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8290 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8291 #define FLD(f) abuf->fields.sfmt_addcbr.f 8292 int UNUSED written = 0; 8293 IADDR UNUSED pc = abuf->addr; 8294 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 8295 8296 { 8297 SI tmp_tmpopd; 8298 SI tmp_tmpops; 8299 BI tmp_carry; 8300 SI tmp_newval; 8301 tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 8302 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8303 tmp_carry = CPU (h_cbit); 8304 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8305 { 8306 SI opval = tmp_newval; 8307 SET_H_GR (FLD (f_operand2), opval); 8308 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8309 } 8310 { 8311 { 8312 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8313 CPU (h_cbit) = opval; 8314 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8315 } 8316 { 8317 BI opval = LTSI (tmp_newval, 0); 8318 CPU (h_nbit) = opval; 8319 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8320 } 8321 { 8322 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8323 CPU (h_zbit) = opval; 8324 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8325 } 8326 { 8327 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8328 CPU (h_vbit) = opval; 8329 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8330 } 8331 { 8332 { 8333 BI opval = 0; 8334 CPU (h_xbit) = opval; 8335 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8336 } 8337 { 8338 BI opval = 0; 8339 SET_H_INSN_PREFIXED_P (opval); 8340 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8341 } 8342 } 8343 } 8344 } 8345 8346 #undef FLD 8347 } 8348 NEXT (vpc); 8349 8350 CASE (sem, INSN_SUBUCWR) : /* [${Rs}${inc}],$Rd */ 8351 { 8352 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8353 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8354 #define FLD(f) abuf->fields.sfmt_addcwr.f 8355 int UNUSED written = 0; 8356 IADDR UNUSED pc = abuf->addr; 8357 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 8358 8359 { 8360 SI tmp_tmpopd; 8361 SI tmp_tmpops; 8362 BI tmp_carry; 8363 SI tmp_newval; 8364 tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))); 8365 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8366 tmp_carry = CPU (h_cbit); 8367 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8368 { 8369 SI opval = tmp_newval; 8370 SET_H_GR (FLD (f_operand2), opval); 8371 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8372 } 8373 { 8374 { 8375 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8376 CPU (h_cbit) = opval; 8377 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8378 } 8379 { 8380 BI opval = LTSI (tmp_newval, 0); 8381 CPU (h_nbit) = opval; 8382 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8383 } 8384 { 8385 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8386 CPU (h_zbit) = opval; 8387 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8388 } 8389 { 8390 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8391 CPU (h_vbit) = opval; 8392 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8393 } 8394 { 8395 { 8396 BI opval = 0; 8397 CPU (h_xbit) = opval; 8398 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8399 } 8400 { 8401 BI opval = 0; 8402 SET_H_INSN_PREFIXED_P (opval); 8403 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8404 } 8405 } 8406 } 8407 } 8408 8409 #undef FLD 8410 } 8411 NEXT (vpc); 8412 8413 CASE (sem, INSN_ADDC_R) : /* addc $Rs,$Rd */ 8414 { 8415 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8416 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8417 #define FLD(f) abuf->fields.sfmt_addc_m.f 8418 int UNUSED written = 0; 8419 IADDR UNUSED pc = abuf->addr; 8420 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8421 8422 { 8423 CPU (h_xbit) = 1; 8424 { 8425 SI tmp_tmpopd; 8426 SI tmp_tmpops; 8427 BI tmp_carry; 8428 SI tmp_newval; 8429 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 8430 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8431 tmp_carry = CPU (h_cbit); 8432 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8433 { 8434 SI opval = tmp_newval; 8435 SET_H_GR (FLD (f_operand2), opval); 8436 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8437 } 8438 { 8439 { 8440 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 8441 CPU (h_cbit) = opval; 8442 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8443 } 8444 { 8445 BI opval = LTSI (tmp_newval, 0); 8446 CPU (h_nbit) = opval; 8447 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8448 } 8449 { 8450 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8451 CPU (h_zbit) = opval; 8452 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8453 } 8454 { 8455 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8456 CPU (h_vbit) = opval; 8457 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8458 } 8459 { 8460 { 8461 BI opval = 0; 8462 CPU (h_xbit) = opval; 8463 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8464 } 8465 { 8466 BI opval = 0; 8467 SET_H_INSN_PREFIXED_P (opval); 8468 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8469 } 8470 } 8471 } 8472 } 8473 } 8474 8475 #undef FLD 8476 } 8477 NEXT (vpc); 8478 8479 CASE (sem, INSN_ADDC_M) : /* addc [${Rs}${inc}],${Rd} */ 8480 { 8481 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8482 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8483 #define FLD(f) abuf->fields.sfmt_addc_m.f 8484 int UNUSED written = 0; 8485 IADDR UNUSED pc = abuf->addr; 8486 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8487 8488 { 8489 CPU (h_xbit) = 1; 8490 { 8491 SI tmp_tmpopd; 8492 SI tmp_tmpops; 8493 BI tmp_carry; 8494 SI tmp_newval; 8495 tmp_tmpops = ({ SI tmp_addr; 8496 SI tmp_tmp_mem; 8497 BI tmp_postinc; 8498 tmp_postinc = FLD (f_memmode); 8499 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 8500 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 8501 ; if (NEBI (tmp_postinc, 0)) { 8502 { 8503 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 8504 tmp_addr = ADDSI (tmp_addr, 4); 8505 } 8506 { 8507 SI opval = tmp_addr; 8508 SET_H_GR (FLD (f_operand1), opval); 8509 written |= (1 << 10); 8510 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8511 } 8512 } 8513 } 8514 ; tmp_tmp_mem; }); 8515 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8516 tmp_carry = CPU (h_cbit); 8517 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8518 { 8519 SI opval = tmp_newval; 8520 SET_H_GR (FLD (f_operand2), opval); 8521 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8522 } 8523 { 8524 { 8525 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 8526 CPU (h_cbit) = opval; 8527 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8528 } 8529 { 8530 BI opval = LTSI (tmp_newval, 0); 8531 CPU (h_nbit) = opval; 8532 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8533 } 8534 { 8535 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8536 CPU (h_zbit) = opval; 8537 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8538 } 8539 { 8540 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8541 CPU (h_vbit) = opval; 8542 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8543 } 8544 { 8545 { 8546 BI opval = 0; 8547 CPU (h_xbit) = opval; 8548 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8549 } 8550 { 8551 BI opval = 0; 8552 SET_H_INSN_PREFIXED_P (opval); 8553 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8554 } 8555 } 8556 } 8557 } 8558 } 8559 8560 abuf->written = written; 8561 #undef FLD 8562 } 8563 NEXT (vpc); 8564 8565 CASE (sem, INSN_ADDC_C) : /* addc ${const32},${Rd} */ 8566 { 8567 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8568 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8569 #define FLD(f) abuf->fields.sfmt_addcdr.f 8570 int UNUSED written = 0; 8571 IADDR UNUSED pc = abuf->addr; 8572 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 8573 8574 { 8575 CPU (h_xbit) = 1; 8576 { 8577 SI tmp_tmpopd; 8578 SI tmp_tmpops; 8579 BI tmp_carry; 8580 SI tmp_newval; 8581 tmp_tmpops = FLD (f_indir_pc__dword); 8582 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 8583 tmp_carry = CPU (h_cbit); 8584 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8585 { 8586 SI opval = tmp_newval; 8587 SET_H_GR (FLD (f_operand2), opval); 8588 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8589 } 8590 { 8591 { 8592 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 8593 CPU (h_cbit) = opval; 8594 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8595 } 8596 { 8597 BI opval = LTSI (tmp_newval, 0); 8598 CPU (h_nbit) = opval; 8599 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8600 } 8601 { 8602 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8603 CPU (h_zbit) = opval; 8604 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8605 } 8606 { 8607 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8608 CPU (h_vbit) = opval; 8609 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8610 } 8611 { 8612 { 8613 BI opval = 0; 8614 CPU (h_xbit) = opval; 8615 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8616 } 8617 { 8618 BI opval = 0; 8619 SET_H_INSN_PREFIXED_P (opval); 8620 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8621 } 8622 } 8623 } 8624 } 8625 } 8626 8627 #undef FLD 8628 } 8629 NEXT (vpc); 8630 8631 CASE (sem, INSN_LAPC_D) : /* lapc.d ${const32-pcrel},${Rd} */ 8632 { 8633 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8634 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8635 #define FLD(f) abuf->fields.sfmt_lapc_d.f 8636 int UNUSED written = 0; 8637 IADDR UNUSED pc = abuf->addr; 8638 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 8639 8640 { 8641 { 8642 SI opval = FLD (i_const32_pcrel); 8643 SET_H_GR (FLD (f_operand2), opval); 8644 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8645 } 8646 { 8647 { 8648 BI opval = 0; 8649 CPU (h_xbit) = opval; 8650 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8651 } 8652 { 8653 BI opval = 0; 8654 SET_H_INSN_PREFIXED_P (opval); 8655 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8656 } 8657 } 8658 } 8659 8660 #undef FLD 8661 } 8662 NEXT (vpc); 8663 8664 CASE (sem, INSN_LAPCQ) : /* lapcq ${qo},${Rd} */ 8665 { 8666 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8667 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8668 #define FLD(f) abuf->fields.sfmt_lapcq.f 8669 int UNUSED written = 0; 8670 IADDR UNUSED pc = abuf->addr; 8671 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8672 8673 { 8674 { 8675 SI opval = FLD (i_qo); 8676 SET_H_GR (FLD (f_operand2), opval); 8677 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8678 } 8679 { 8680 { 8681 BI opval = 0; 8682 CPU (h_xbit) = opval; 8683 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8684 } 8685 { 8686 BI opval = 0; 8687 SET_H_INSN_PREFIXED_P (opval); 8688 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8689 } 8690 } 8691 } 8692 8693 #undef FLD 8694 } 8695 NEXT (vpc); 8696 8697 CASE (sem, INSN_ADDI_B_R) : /* addi.b ${Rs-dfield}.m,${Rd-sfield} */ 8698 { 8699 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8700 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8701 #define FLD(f) abuf->fields.sfmt_addc_m.f 8702 int UNUSED written = 0; 8703 IADDR UNUSED pc = abuf->addr; 8704 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8705 8706 { 8707 { 8708 SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1)); 8709 SET_H_GR (FLD (f_operand1), opval); 8710 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8711 } 8712 { 8713 { 8714 BI opval = 0; 8715 CPU (h_xbit) = opval; 8716 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8717 } 8718 { 8719 BI opval = 0; 8720 SET_H_INSN_PREFIXED_P (opval); 8721 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8722 } 8723 } 8724 } 8725 8726 #undef FLD 8727 } 8728 NEXT (vpc); 8729 8730 CASE (sem, INSN_ADDI_W_R) : /* addi.w ${Rs-dfield}.m,${Rd-sfield} */ 8731 { 8732 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8733 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8734 #define FLD(f) abuf->fields.sfmt_addc_m.f 8735 int UNUSED written = 0; 8736 IADDR UNUSED pc = abuf->addr; 8737 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8738 8739 { 8740 { 8741 SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2)); 8742 SET_H_GR (FLD (f_operand1), opval); 8743 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8744 } 8745 { 8746 { 8747 BI opval = 0; 8748 CPU (h_xbit) = opval; 8749 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8750 } 8751 { 8752 BI opval = 0; 8753 SET_H_INSN_PREFIXED_P (opval); 8754 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8755 } 8756 } 8757 } 8758 8759 #undef FLD 8760 } 8761 NEXT (vpc); 8762 8763 CASE (sem, INSN_ADDI_D_R) : /* addi.d ${Rs-dfield}.m,${Rd-sfield} */ 8764 { 8765 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8766 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8767 #define FLD(f) abuf->fields.sfmt_addc_m.f 8768 int UNUSED written = 0; 8769 IADDR UNUSED pc = abuf->addr; 8770 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8771 8772 { 8773 { 8774 SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4)); 8775 SET_H_GR (FLD (f_operand1), opval); 8776 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8777 } 8778 { 8779 { 8780 BI opval = 0; 8781 CPU (h_xbit) = opval; 8782 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8783 } 8784 { 8785 BI opval = 0; 8786 SET_H_INSN_PREFIXED_P (opval); 8787 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8788 } 8789 } 8790 } 8791 8792 #undef FLD 8793 } 8794 NEXT (vpc); 8795 8796 CASE (sem, INSN_NEG_B_R) : /* neg.b $Rs,$Rd */ 8797 { 8798 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8799 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8800 #define FLD(f) abuf->fields.sfmt_addc_m.f 8801 int UNUSED written = 0; 8802 IADDR UNUSED pc = abuf->addr; 8803 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8804 8805 { 8806 QI tmp_tmpopd; 8807 QI tmp_tmpops; 8808 BI tmp_carry; 8809 QI tmp_newval; 8810 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 8811 tmp_tmpopd = 0; 8812 tmp_carry = CPU (h_cbit); 8813 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8814 { 8815 SI tmp_oldregval; 8816 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 8817 { 8818 SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00)); 8819 SET_H_GR (FLD (f_operand2), opval); 8820 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8821 } 8822 } 8823 { 8824 { 8825 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 8826 CPU (h_cbit) = opval; 8827 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8828 } 8829 { 8830 BI opval = LTQI (tmp_newval, 0); 8831 CPU (h_nbit) = opval; 8832 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8833 } 8834 { 8835 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8836 CPU (h_zbit) = opval; 8837 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8838 } 8839 { 8840 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 8841 CPU (h_vbit) = opval; 8842 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8843 } 8844 { 8845 { 8846 BI opval = 0; 8847 CPU (h_xbit) = opval; 8848 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8849 } 8850 { 8851 BI opval = 0; 8852 SET_H_INSN_PREFIXED_P (opval); 8853 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8854 } 8855 } 8856 } 8857 } 8858 8859 #undef FLD 8860 } 8861 NEXT (vpc); 8862 8863 CASE (sem, INSN_NEG_W_R) : /* neg.w $Rs,$Rd */ 8864 { 8865 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8866 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8867 #define FLD(f) abuf->fields.sfmt_addc_m.f 8868 int UNUSED written = 0; 8869 IADDR UNUSED pc = abuf->addr; 8870 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8871 8872 { 8873 HI tmp_tmpopd; 8874 HI tmp_tmpops; 8875 BI tmp_carry; 8876 HI tmp_newval; 8877 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 8878 tmp_tmpopd = 0; 8879 tmp_carry = CPU (h_cbit); 8880 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8881 { 8882 SI tmp_oldregval; 8883 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 8884 { 8885 SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 8886 SET_H_GR (FLD (f_operand2), opval); 8887 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8888 } 8889 } 8890 { 8891 { 8892 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 8893 CPU (h_cbit) = opval; 8894 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8895 } 8896 { 8897 BI opval = LTHI (tmp_newval, 0); 8898 CPU (h_nbit) = opval; 8899 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8900 } 8901 { 8902 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8903 CPU (h_zbit) = opval; 8904 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8905 } 8906 { 8907 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 8908 CPU (h_vbit) = opval; 8909 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8910 } 8911 { 8912 { 8913 BI opval = 0; 8914 CPU (h_xbit) = opval; 8915 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8916 } 8917 { 8918 BI opval = 0; 8919 SET_H_INSN_PREFIXED_P (opval); 8920 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8921 } 8922 } 8923 } 8924 } 8925 8926 #undef FLD 8927 } 8928 NEXT (vpc); 8929 8930 CASE (sem, INSN_NEG_D_R) : /* neg.d $Rs,$Rd */ 8931 { 8932 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8933 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8934 #define FLD(f) abuf->fields.sfmt_addc_m.f 8935 int UNUSED written = 0; 8936 IADDR UNUSED pc = abuf->addr; 8937 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8938 8939 { 8940 SI tmp_tmpopd; 8941 SI tmp_tmpops; 8942 BI tmp_carry; 8943 SI tmp_newval; 8944 tmp_tmpops = GET_H_GR (FLD (f_operand1)); 8945 tmp_tmpopd = 0; 8946 tmp_carry = CPU (h_cbit); 8947 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 8948 { 8949 SI opval = tmp_newval; 8950 SET_H_GR (FLD (f_operand2), opval); 8951 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8952 } 8953 { 8954 { 8955 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 8956 CPU (h_cbit) = opval; 8957 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 8958 } 8959 { 8960 BI opval = LTSI (tmp_newval, 0); 8961 CPU (h_nbit) = opval; 8962 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 8963 } 8964 { 8965 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 8966 CPU (h_zbit) = opval; 8967 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 8968 } 8969 { 8970 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 8971 CPU (h_vbit) = opval; 8972 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 8973 } 8974 { 8975 { 8976 BI opval = 0; 8977 CPU (h_xbit) = opval; 8978 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 8979 } 8980 { 8981 BI opval = 0; 8982 SET_H_INSN_PREFIXED_P (opval); 8983 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 8984 } 8985 } 8986 } 8987 } 8988 8989 #undef FLD 8990 } 8991 NEXT (vpc); 8992 8993 CASE (sem, INSN_TEST_M_B_M) : /* test-m.b [${Rs}${inc}] */ 8994 { 8995 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8996 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8997 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 8998 int UNUSED written = 0; 8999 IADDR UNUSED pc = abuf->addr; 9000 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9001 9002 { 9003 QI tmp_tmpd; 9004 tmp_tmpd = ({ SI tmp_addr; 9005 QI tmp_tmp_mem; 9006 BI tmp_postinc; 9007 tmp_postinc = FLD (f_memmode); 9008 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 9009 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 9010 ; if (NEBI (tmp_postinc, 0)) { 9011 { 9012 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 9013 tmp_addr = ADDSI (tmp_addr, 1); 9014 } 9015 { 9016 SI opval = tmp_addr; 9017 SET_H_GR (FLD (f_operand1), opval); 9018 written |= (1 << 8); 9019 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9020 } 9021 } 9022 } 9023 ; tmp_tmp_mem; }); 9024 { 9025 QI tmp_tmpopd; 9026 QI tmp_tmpops; 9027 BI tmp_carry; 9028 QI tmp_newval; 9029 tmp_tmpops = 0; 9030 tmp_tmpopd = tmp_tmpd; 9031 tmp_carry = CPU (h_cbit); 9032 tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 9033 ((void) 0); /*nop*/ 9034 { 9035 { 9036 BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0)))); 9037 CPU (h_cbit) = opval; 9038 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9039 } 9040 { 9041 BI opval = LTQI (tmp_newval, 0); 9042 CPU (h_nbit) = opval; 9043 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9044 } 9045 { 9046 BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9047 CPU (h_zbit) = opval; 9048 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9049 } 9050 { 9051 BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0))); 9052 CPU (h_vbit) = opval; 9053 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9054 } 9055 { 9056 { 9057 BI opval = 0; 9058 CPU (h_xbit) = opval; 9059 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9060 } 9061 { 9062 BI opval = 0; 9063 SET_H_INSN_PREFIXED_P (opval); 9064 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9065 } 9066 } 9067 } 9068 } 9069 } 9070 9071 abuf->written = written; 9072 #undef FLD 9073 } 9074 NEXT (vpc); 9075 9076 CASE (sem, INSN_TEST_M_W_M) : /* test-m.w [${Rs}${inc}] */ 9077 { 9078 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9079 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9080 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 9081 int UNUSED written = 0; 9082 IADDR UNUSED pc = abuf->addr; 9083 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9084 9085 { 9086 HI tmp_tmpd; 9087 tmp_tmpd = ({ SI tmp_addr; 9088 HI tmp_tmp_mem; 9089 BI tmp_postinc; 9090 tmp_postinc = FLD (f_memmode); 9091 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 9092 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 9093 ; if (NEBI (tmp_postinc, 0)) { 9094 { 9095 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 9096 tmp_addr = ADDSI (tmp_addr, 2); 9097 } 9098 { 9099 SI opval = tmp_addr; 9100 SET_H_GR (FLD (f_operand1), opval); 9101 written |= (1 << 8); 9102 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9103 } 9104 } 9105 } 9106 ; tmp_tmp_mem; }); 9107 { 9108 HI tmp_tmpopd; 9109 HI tmp_tmpops; 9110 BI tmp_carry; 9111 HI tmp_newval; 9112 tmp_tmpops = 0; 9113 tmp_tmpopd = tmp_tmpd; 9114 tmp_carry = CPU (h_cbit); 9115 tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 9116 ((void) 0); /*nop*/ 9117 { 9118 { 9119 BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0)))); 9120 CPU (h_cbit) = opval; 9121 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9122 } 9123 { 9124 BI opval = LTHI (tmp_newval, 0); 9125 CPU (h_nbit) = opval; 9126 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9127 } 9128 { 9129 BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9130 CPU (h_zbit) = opval; 9131 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9132 } 9133 { 9134 BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0))); 9135 CPU (h_vbit) = opval; 9136 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9137 } 9138 { 9139 { 9140 BI opval = 0; 9141 CPU (h_xbit) = opval; 9142 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9143 } 9144 { 9145 BI opval = 0; 9146 SET_H_INSN_PREFIXED_P (opval); 9147 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9148 } 9149 } 9150 } 9151 } 9152 } 9153 9154 abuf->written = written; 9155 #undef FLD 9156 } 9157 NEXT (vpc); 9158 9159 CASE (sem, INSN_TEST_M_D_M) : /* test-m.d [${Rs}${inc}] */ 9160 { 9161 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9162 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9163 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 9164 int UNUSED written = 0; 9165 IADDR UNUSED pc = abuf->addr; 9166 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9167 9168 { 9169 SI tmp_tmpd; 9170 tmp_tmpd = ({ SI tmp_addr; 9171 SI tmp_tmp_mem; 9172 BI tmp_postinc; 9173 tmp_postinc = FLD (f_memmode); 9174 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 9175 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 9176 ; if (NEBI (tmp_postinc, 0)) { 9177 { 9178 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 9179 tmp_addr = ADDSI (tmp_addr, 4); 9180 } 9181 { 9182 SI opval = tmp_addr; 9183 SET_H_GR (FLD (f_operand1), opval); 9184 written |= (1 << 8); 9185 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9186 } 9187 } 9188 } 9189 ; tmp_tmp_mem; }); 9190 { 9191 SI tmp_tmpopd; 9192 SI tmp_tmpops; 9193 BI tmp_carry; 9194 SI tmp_newval; 9195 tmp_tmpops = 0; 9196 tmp_tmpopd = tmp_tmpd; 9197 tmp_carry = CPU (h_cbit); 9198 tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 9199 ((void) 0); /*nop*/ 9200 { 9201 { 9202 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0)))); 9203 CPU (h_cbit) = opval; 9204 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9205 } 9206 { 9207 BI opval = LTSI (tmp_newval, 0); 9208 CPU (h_nbit) = opval; 9209 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9210 } 9211 { 9212 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9213 CPU (h_zbit) = opval; 9214 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9215 } 9216 { 9217 BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 9218 CPU (h_vbit) = opval; 9219 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9220 } 9221 { 9222 { 9223 BI opval = 0; 9224 CPU (h_xbit) = opval; 9225 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9226 } 9227 { 9228 BI opval = 0; 9229 SET_H_INSN_PREFIXED_P (opval); 9230 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9231 } 9232 } 9233 } 9234 } 9235 } 9236 9237 abuf->written = written; 9238 #undef FLD 9239 } 9240 NEXT (vpc); 9241 9242 CASE (sem, INSN_MOVE_R_M_B_M) : /* move-r-m.b ${Rs-dfield},[${Rd-sfield}${inc}] */ 9243 { 9244 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9245 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9246 #define FLD(f) abuf->fields.sfmt_addc_m.f 9247 int UNUSED written = 0; 9248 IADDR UNUSED pc = abuf->addr; 9249 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9250 9251 { 9252 QI tmp_tmpd; 9253 tmp_tmpd = GET_H_GR (FLD (f_operand2)); 9254 { 9255 SI tmp_addr; 9256 BI tmp_postinc; 9257 tmp_postinc = FLD (f_memmode); 9258 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 9259 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 9260 if (EQBI (CPU (h_pbit), 0)) { 9261 { 9262 { 9263 QI opval = tmp_tmpd; 9264 SETMEMQI (current_cpu, pc, tmp_addr, opval); 9265 written |= (1 << 10); 9266 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 9267 } 9268 { 9269 BI opval = CPU (h_pbit); 9270 CPU (h_cbit) = opval; 9271 written |= (1 << 9); 9272 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9273 } 9274 } 9275 } else { 9276 { 9277 BI opval = 1; 9278 CPU (h_cbit) = opval; 9279 written |= (1 << 9); 9280 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9281 } 9282 } 9283 } else { 9284 { 9285 QI opval = tmp_tmpd; 9286 SETMEMQI (current_cpu, pc, tmp_addr, opval); 9287 written |= (1 << 10); 9288 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 9289 } 9290 } 9291 if (NEBI (tmp_postinc, 0)) { 9292 { 9293 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 9294 tmp_addr = ADDSI (tmp_addr, 1); 9295 } 9296 { 9297 SI opval = tmp_addr; 9298 SET_H_GR (FLD (f_operand1), opval); 9299 written |= (1 << 8); 9300 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9301 } 9302 } 9303 } 9304 } 9305 { 9306 { 9307 BI opval = 0; 9308 CPU (h_xbit) = opval; 9309 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9310 } 9311 { 9312 BI opval = 0; 9313 SET_H_INSN_PREFIXED_P (opval); 9314 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9315 } 9316 } 9317 } 9318 9319 abuf->written = written; 9320 #undef FLD 9321 } 9322 NEXT (vpc); 9323 9324 CASE (sem, INSN_MOVE_R_M_W_M) : /* move-r-m.w ${Rs-dfield},[${Rd-sfield}${inc}] */ 9325 { 9326 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9327 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9328 #define FLD(f) abuf->fields.sfmt_addc_m.f 9329 int UNUSED written = 0; 9330 IADDR UNUSED pc = abuf->addr; 9331 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9332 9333 { 9334 HI tmp_tmpd; 9335 tmp_tmpd = GET_H_GR (FLD (f_operand2)); 9336 { 9337 SI tmp_addr; 9338 BI tmp_postinc; 9339 tmp_postinc = FLD (f_memmode); 9340 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 9341 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 9342 if (EQBI (CPU (h_pbit), 0)) { 9343 { 9344 { 9345 HI opval = tmp_tmpd; 9346 SETMEMHI (current_cpu, pc, tmp_addr, opval); 9347 written |= (1 << 10); 9348 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 9349 } 9350 { 9351 BI opval = CPU (h_pbit); 9352 CPU (h_cbit) = opval; 9353 written |= (1 << 9); 9354 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9355 } 9356 } 9357 } else { 9358 { 9359 BI opval = 1; 9360 CPU (h_cbit) = opval; 9361 written |= (1 << 9); 9362 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9363 } 9364 } 9365 } else { 9366 { 9367 HI opval = tmp_tmpd; 9368 SETMEMHI (current_cpu, pc, tmp_addr, opval); 9369 written |= (1 << 10); 9370 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 9371 } 9372 } 9373 if (NEBI (tmp_postinc, 0)) { 9374 { 9375 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 9376 tmp_addr = ADDSI (tmp_addr, 2); 9377 } 9378 { 9379 SI opval = tmp_addr; 9380 SET_H_GR (FLD (f_operand1), opval); 9381 written |= (1 << 8); 9382 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9383 } 9384 } 9385 } 9386 } 9387 { 9388 { 9389 BI opval = 0; 9390 CPU (h_xbit) = opval; 9391 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9392 } 9393 { 9394 BI opval = 0; 9395 SET_H_INSN_PREFIXED_P (opval); 9396 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9397 } 9398 } 9399 } 9400 9401 abuf->written = written; 9402 #undef FLD 9403 } 9404 NEXT (vpc); 9405 9406 CASE (sem, INSN_MOVE_R_M_D_M) : /* move-r-m.d ${Rs-dfield},[${Rd-sfield}${inc}] */ 9407 { 9408 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9409 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9410 #define FLD(f) abuf->fields.sfmt_addc_m.f 9411 int UNUSED written = 0; 9412 IADDR UNUSED pc = abuf->addr; 9413 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9414 9415 { 9416 SI tmp_tmpd; 9417 tmp_tmpd = GET_H_GR (FLD (f_operand2)); 9418 { 9419 SI tmp_addr; 9420 BI tmp_postinc; 9421 tmp_postinc = FLD (f_memmode); 9422 tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 9423 if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) { 9424 if (EQBI (CPU (h_pbit), 0)) { 9425 { 9426 { 9427 SI opval = tmp_tmpd; 9428 SETMEMSI (current_cpu, pc, tmp_addr, opval); 9429 written |= (1 << 10); 9430 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 9431 } 9432 { 9433 BI opval = CPU (h_pbit); 9434 CPU (h_cbit) = opval; 9435 written |= (1 << 9); 9436 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9437 } 9438 } 9439 } else { 9440 { 9441 BI opval = 1; 9442 CPU (h_cbit) = opval; 9443 written |= (1 << 9); 9444 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9445 } 9446 } 9447 } else { 9448 { 9449 SI opval = tmp_tmpd; 9450 SETMEMSI (current_cpu, pc, tmp_addr, opval); 9451 written |= (1 << 10); 9452 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 9453 } 9454 } 9455 if (NEBI (tmp_postinc, 0)) { 9456 { 9457 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 9458 tmp_addr = ADDSI (tmp_addr, 4); 9459 } 9460 { 9461 SI opval = tmp_addr; 9462 SET_H_GR (FLD (f_operand1), opval); 9463 written |= (1 << 8); 9464 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9465 } 9466 } 9467 } 9468 } 9469 { 9470 { 9471 BI opval = 0; 9472 CPU (h_xbit) = opval; 9473 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9474 } 9475 { 9476 BI opval = 0; 9477 SET_H_INSN_PREFIXED_P (opval); 9478 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9479 } 9480 } 9481 } 9482 9483 abuf->written = written; 9484 #undef FLD 9485 } 9486 NEXT (vpc); 9487 9488 CASE (sem, INSN_MULS_B) : /* muls.b $Rs,$Rd */ 9489 { 9490 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9491 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9492 #define FLD(f) abuf->fields.sfmt_muls_b.f 9493 int UNUSED written = 0; 9494 IADDR UNUSED pc = abuf->addr; 9495 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9496 9497 { 9498 DI tmp_src1; 9499 DI tmp_src2; 9500 DI tmp_tmpr; 9501 tmp_src1 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 9502 tmp_src2 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))); 9503 tmp_tmpr = MULDI (tmp_src1, tmp_src2); 9504 { 9505 SI opval = TRUNCDISI (tmp_tmpr); 9506 SET_H_GR (FLD (f_operand2), opval); 9507 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9508 } 9509 { 9510 SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32)); 9511 SET_H_SR (((UINT) 7), opval); 9512 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 9513 } 9514 { 9515 { 9516 BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit)); 9517 CPU (h_cbit) = opval; 9518 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9519 } 9520 { 9521 BI opval = LTDI (tmp_tmpr, 0); 9522 CPU (h_nbit) = opval; 9523 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9524 } 9525 { 9526 BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9527 CPU (h_zbit) = opval; 9528 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9529 } 9530 { 9531 BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr))); 9532 CPU (h_vbit) = opval; 9533 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9534 } 9535 { 9536 { 9537 BI opval = 0; 9538 CPU (h_xbit) = opval; 9539 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9540 } 9541 { 9542 BI opval = 0; 9543 SET_H_INSN_PREFIXED_P (opval); 9544 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9545 } 9546 } 9547 } 9548 } 9549 9550 #undef FLD 9551 } 9552 NEXT (vpc); 9553 9554 CASE (sem, INSN_MULS_W) : /* muls.w $Rs,$Rd */ 9555 { 9556 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9557 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9558 #define FLD(f) abuf->fields.sfmt_muls_b.f 9559 int UNUSED written = 0; 9560 IADDR UNUSED pc = abuf->addr; 9561 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9562 9563 { 9564 DI tmp_src1; 9565 DI tmp_src2; 9566 DI tmp_tmpr; 9567 tmp_src1 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 9568 tmp_src2 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))); 9569 tmp_tmpr = MULDI (tmp_src1, tmp_src2); 9570 { 9571 SI opval = TRUNCDISI (tmp_tmpr); 9572 SET_H_GR (FLD (f_operand2), opval); 9573 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9574 } 9575 { 9576 SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32)); 9577 SET_H_SR (((UINT) 7), opval); 9578 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 9579 } 9580 { 9581 { 9582 BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit)); 9583 CPU (h_cbit) = opval; 9584 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9585 } 9586 { 9587 BI opval = LTDI (tmp_tmpr, 0); 9588 CPU (h_nbit) = opval; 9589 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9590 } 9591 { 9592 BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9593 CPU (h_zbit) = opval; 9594 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9595 } 9596 { 9597 BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr))); 9598 CPU (h_vbit) = opval; 9599 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9600 } 9601 { 9602 { 9603 BI opval = 0; 9604 CPU (h_xbit) = opval; 9605 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9606 } 9607 { 9608 BI opval = 0; 9609 SET_H_INSN_PREFIXED_P (opval); 9610 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9611 } 9612 } 9613 } 9614 } 9615 9616 #undef FLD 9617 } 9618 NEXT (vpc); 9619 9620 CASE (sem, INSN_MULS_D) : /* muls.d $Rs,$Rd */ 9621 { 9622 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9623 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9624 #define FLD(f) abuf->fields.sfmt_muls_b.f 9625 int UNUSED written = 0; 9626 IADDR UNUSED pc = abuf->addr; 9627 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9628 9629 { 9630 DI tmp_src1; 9631 DI tmp_src2; 9632 DI tmp_tmpr; 9633 tmp_src1 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1)))); 9634 tmp_src2 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))); 9635 tmp_tmpr = MULDI (tmp_src1, tmp_src2); 9636 { 9637 SI opval = TRUNCDISI (tmp_tmpr); 9638 SET_H_GR (FLD (f_operand2), opval); 9639 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9640 } 9641 { 9642 SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32)); 9643 SET_H_SR (((UINT) 7), opval); 9644 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 9645 } 9646 { 9647 { 9648 BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit)); 9649 CPU (h_cbit) = opval; 9650 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9651 } 9652 { 9653 BI opval = LTDI (tmp_tmpr, 0); 9654 CPU (h_nbit) = opval; 9655 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9656 } 9657 { 9658 BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9659 CPU (h_zbit) = opval; 9660 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9661 } 9662 { 9663 BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr))); 9664 CPU (h_vbit) = opval; 9665 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9666 } 9667 { 9668 { 9669 BI opval = 0; 9670 CPU (h_xbit) = opval; 9671 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9672 } 9673 { 9674 BI opval = 0; 9675 SET_H_INSN_PREFIXED_P (opval); 9676 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9677 } 9678 } 9679 } 9680 } 9681 9682 #undef FLD 9683 } 9684 NEXT (vpc); 9685 9686 CASE (sem, INSN_MULU_B) : /* mulu.b $Rs,$Rd */ 9687 { 9688 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9689 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9690 #define FLD(f) abuf->fields.sfmt_muls_b.f 9691 int UNUSED written = 0; 9692 IADDR UNUSED pc = abuf->addr; 9693 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9694 9695 { 9696 DI tmp_src1; 9697 DI tmp_src2; 9698 DI tmp_tmpr; 9699 tmp_src1 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 9700 tmp_src2 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))); 9701 tmp_tmpr = MULDI (tmp_src1, tmp_src2); 9702 { 9703 SI opval = TRUNCDISI (tmp_tmpr); 9704 SET_H_GR (FLD (f_operand2), opval); 9705 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9706 } 9707 { 9708 SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32)); 9709 SET_H_SR (((UINT) 7), opval); 9710 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 9711 } 9712 { 9713 { 9714 BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit)); 9715 CPU (h_cbit) = opval; 9716 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9717 } 9718 { 9719 BI opval = LTDI (tmp_tmpr, 0); 9720 CPU (h_nbit) = opval; 9721 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9722 } 9723 { 9724 BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9725 CPU (h_zbit) = opval; 9726 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9727 } 9728 { 9729 BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr))); 9730 CPU (h_vbit) = opval; 9731 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9732 } 9733 { 9734 { 9735 BI opval = 0; 9736 CPU (h_xbit) = opval; 9737 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9738 } 9739 { 9740 BI opval = 0; 9741 SET_H_INSN_PREFIXED_P (opval); 9742 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9743 } 9744 } 9745 } 9746 } 9747 9748 #undef FLD 9749 } 9750 NEXT (vpc); 9751 9752 CASE (sem, INSN_MULU_W) : /* mulu.w $Rs,$Rd */ 9753 { 9754 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9755 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9756 #define FLD(f) abuf->fields.sfmt_muls_b.f 9757 int UNUSED written = 0; 9758 IADDR UNUSED pc = abuf->addr; 9759 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9760 9761 { 9762 DI tmp_src1; 9763 DI tmp_src2; 9764 DI tmp_tmpr; 9765 tmp_src1 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 9766 tmp_src2 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))); 9767 tmp_tmpr = MULDI (tmp_src1, tmp_src2); 9768 { 9769 SI opval = TRUNCDISI (tmp_tmpr); 9770 SET_H_GR (FLD (f_operand2), opval); 9771 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9772 } 9773 { 9774 SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32)); 9775 SET_H_SR (((UINT) 7), opval); 9776 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 9777 } 9778 { 9779 { 9780 BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit)); 9781 CPU (h_cbit) = opval; 9782 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9783 } 9784 { 9785 BI opval = LTDI (tmp_tmpr, 0); 9786 CPU (h_nbit) = opval; 9787 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9788 } 9789 { 9790 BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9791 CPU (h_zbit) = opval; 9792 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9793 } 9794 { 9795 BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr))); 9796 CPU (h_vbit) = opval; 9797 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9798 } 9799 { 9800 { 9801 BI opval = 0; 9802 CPU (h_xbit) = opval; 9803 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9804 } 9805 { 9806 BI opval = 0; 9807 SET_H_INSN_PREFIXED_P (opval); 9808 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9809 } 9810 } 9811 } 9812 } 9813 9814 #undef FLD 9815 } 9816 NEXT (vpc); 9817 9818 CASE (sem, INSN_MULU_D) : /* mulu.d $Rs,$Rd */ 9819 { 9820 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9821 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9822 #define FLD(f) abuf->fields.sfmt_muls_b.f 9823 int UNUSED written = 0; 9824 IADDR UNUSED pc = abuf->addr; 9825 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9826 9827 { 9828 DI tmp_src1; 9829 DI tmp_src2; 9830 DI tmp_tmpr; 9831 tmp_src1 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1)))); 9832 tmp_src2 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))); 9833 tmp_tmpr = MULDI (tmp_src1, tmp_src2); 9834 { 9835 SI opval = TRUNCDISI (tmp_tmpr); 9836 SET_H_GR (FLD (f_operand2), opval); 9837 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9838 } 9839 { 9840 SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32)); 9841 SET_H_SR (((UINT) 7), opval); 9842 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 9843 } 9844 { 9845 { 9846 BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit)); 9847 CPU (h_cbit) = opval; 9848 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 9849 } 9850 { 9851 BI opval = LTDI (tmp_tmpr, 0); 9852 CPU (h_nbit) = opval; 9853 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9854 } 9855 { 9856 BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9857 CPU (h_zbit) = opval; 9858 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9859 } 9860 { 9861 BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr))); 9862 CPU (h_vbit) = opval; 9863 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9864 } 9865 { 9866 { 9867 BI opval = 0; 9868 CPU (h_xbit) = opval; 9869 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9870 } 9871 { 9872 BI opval = 0; 9873 SET_H_INSN_PREFIXED_P (opval); 9874 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9875 } 9876 } 9877 } 9878 } 9879 9880 #undef FLD 9881 } 9882 NEXT (vpc); 9883 9884 CASE (sem, INSN_MCP) : /* mcp $Ps,$Rd */ 9885 { 9886 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9887 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9888 #define FLD(f) abuf->fields.sfmt_mcp.f 9889 int UNUSED written = 0; 9890 IADDR UNUSED pc = abuf->addr; 9891 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9892 9893 { 9894 CPU (h_xbit) = 1; 9895 CPU (h_zbit) = 1; 9896 { 9897 SI tmp_tmpopd; 9898 SI tmp_tmpops; 9899 BI tmp_carry; 9900 SI tmp_newval; 9901 tmp_tmpops = GET_H_SR (FLD (f_operand2)); 9902 tmp_tmpopd = GET_H_GR (FLD (f_operand1)); 9903 tmp_carry = CPU (h_rbit); 9904 tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry))); 9905 { 9906 SI opval = tmp_newval; 9907 SET_H_GR (FLD (f_operand1), opval); 9908 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9909 } 9910 { 9911 { 9912 BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0)))); 9913 CPU (h_rbit) = opval; 9914 CGEN_TRACE_RESULT (current_cpu, abuf, "rbit", 'x', opval); 9915 } 9916 { 9917 BI opval = LTSI (tmp_newval, 0); 9918 CPU (h_nbit) = opval; 9919 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9920 } 9921 { 9922 BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit)))); 9923 CPU (h_zbit) = opval; 9924 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9925 } 9926 { 9927 BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0))); 9928 CPU (h_vbit) = opval; 9929 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 9930 } 9931 { 9932 { 9933 BI opval = 0; 9934 CPU (h_xbit) = opval; 9935 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9936 } 9937 { 9938 BI opval = 0; 9939 SET_H_INSN_PREFIXED_P (opval); 9940 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9941 } 9942 } 9943 } 9944 } 9945 } 9946 9947 #undef FLD 9948 } 9949 NEXT (vpc); 9950 9951 CASE (sem, INSN_DSTEP) : /* dstep $Rs,$Rd */ 9952 { 9953 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9954 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9955 #define FLD(f) abuf->fields.sfmt_muls_b.f 9956 int UNUSED written = 0; 9957 IADDR UNUSED pc = abuf->addr; 9958 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9959 9960 { 9961 SI tmp_tmp; 9962 SI tmp_tmps; 9963 SI tmp_tmpd; 9964 tmp_tmps = GET_H_GR (FLD (f_operand1)); 9965 tmp_tmp = SLLSI (GET_H_GR (FLD (f_operand2)), 1); 9966 tmp_tmpd = ((GEUSI (tmp_tmp, tmp_tmps)) ? (SUBSI (tmp_tmp, tmp_tmps)) : (tmp_tmp)); 9967 { 9968 SI opval = tmp_tmpd; 9969 SET_H_GR (FLD (f_operand2), opval); 9970 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 9971 } 9972 { 9973 { 9974 BI opval = LTSI (tmp_tmpd, 0); 9975 CPU (h_nbit) = opval; 9976 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 9977 } 9978 { 9979 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 9980 CPU (h_zbit) = opval; 9981 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 9982 } 9983 SET_H_CBIT_MOVE (0); 9984 SET_H_VBIT_MOVE (0); 9985 { 9986 { 9987 BI opval = 0; 9988 CPU (h_xbit) = opval; 9989 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 9990 } 9991 { 9992 BI opval = 0; 9993 SET_H_INSN_PREFIXED_P (opval); 9994 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 9995 } 9996 } 9997 } 9998 } 9999 10000 #undef FLD 10001 } 10002 NEXT (vpc); 10003 10004 CASE (sem, INSN_ABS) : /* abs $Rs,$Rd */ 10005 { 10006 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10007 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10008 #define FLD(f) abuf->fields.sfmt_muls_b.f 10009 int UNUSED written = 0; 10010 IADDR UNUSED pc = abuf->addr; 10011 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10012 10013 { 10014 SI tmp_tmpd; 10015 tmp_tmpd = ABSSI (GET_H_GR (FLD (f_operand1))); 10016 { 10017 SI opval = tmp_tmpd; 10018 SET_H_GR (FLD (f_operand2), opval); 10019 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10020 } 10021 { 10022 { 10023 BI opval = LTSI (tmp_tmpd, 0); 10024 CPU (h_nbit) = opval; 10025 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10026 } 10027 { 10028 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10029 CPU (h_zbit) = opval; 10030 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10031 } 10032 SET_H_CBIT_MOVE (0); 10033 SET_H_VBIT_MOVE (0); 10034 { 10035 { 10036 BI opval = 0; 10037 CPU (h_xbit) = opval; 10038 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10039 } 10040 { 10041 BI opval = 0; 10042 SET_H_INSN_PREFIXED_P (opval); 10043 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10044 } 10045 } 10046 } 10047 } 10048 10049 #undef FLD 10050 } 10051 NEXT (vpc); 10052 10053 CASE (sem, INSN_AND_B_R) : /* and.b $Rs,$Rd */ 10054 { 10055 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10056 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10057 #define FLD(f) abuf->fields.sfmt_addc_m.f 10058 int UNUSED written = 0; 10059 IADDR UNUSED pc = abuf->addr; 10060 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10061 10062 { 10063 QI tmp_tmpd; 10064 tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 10065 { 10066 SI tmp_oldregval; 10067 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 10068 { 10069 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 10070 SET_H_GR (FLD (f_operand2), opval); 10071 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10072 } 10073 } 10074 { 10075 { 10076 BI opval = LTQI (tmp_tmpd, 0); 10077 CPU (h_nbit) = opval; 10078 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10079 } 10080 { 10081 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10082 CPU (h_zbit) = opval; 10083 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10084 } 10085 SET_H_CBIT_MOVE (0); 10086 SET_H_VBIT_MOVE (0); 10087 { 10088 { 10089 BI opval = 0; 10090 CPU (h_xbit) = opval; 10091 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10092 } 10093 { 10094 BI opval = 0; 10095 SET_H_INSN_PREFIXED_P (opval); 10096 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10097 } 10098 } 10099 } 10100 } 10101 10102 #undef FLD 10103 } 10104 NEXT (vpc); 10105 10106 CASE (sem, INSN_AND_W_R) : /* and.w $Rs,$Rd */ 10107 { 10108 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10109 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10110 #define FLD(f) abuf->fields.sfmt_addc_m.f 10111 int UNUSED written = 0; 10112 IADDR UNUSED pc = abuf->addr; 10113 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10114 10115 { 10116 HI tmp_tmpd; 10117 tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 10118 { 10119 SI tmp_oldregval; 10120 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 10121 { 10122 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 10123 SET_H_GR (FLD (f_operand2), opval); 10124 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10125 } 10126 } 10127 { 10128 { 10129 BI opval = LTHI (tmp_tmpd, 0); 10130 CPU (h_nbit) = opval; 10131 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10132 } 10133 { 10134 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10135 CPU (h_zbit) = opval; 10136 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10137 } 10138 SET_H_CBIT_MOVE (0); 10139 SET_H_VBIT_MOVE (0); 10140 { 10141 { 10142 BI opval = 0; 10143 CPU (h_xbit) = opval; 10144 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10145 } 10146 { 10147 BI opval = 0; 10148 SET_H_INSN_PREFIXED_P (opval); 10149 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10150 } 10151 } 10152 } 10153 } 10154 10155 #undef FLD 10156 } 10157 NEXT (vpc); 10158 10159 CASE (sem, INSN_AND_D_R) : /* and.d $Rs,$Rd */ 10160 { 10161 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10162 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10163 #define FLD(f) abuf->fields.sfmt_addc_m.f 10164 int UNUSED written = 0; 10165 IADDR UNUSED pc = abuf->addr; 10166 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10167 10168 { 10169 SI tmp_tmpd; 10170 tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 10171 { 10172 SI opval = tmp_tmpd; 10173 SET_H_GR (FLD (f_operand2), opval); 10174 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10175 } 10176 { 10177 { 10178 BI opval = LTSI (tmp_tmpd, 0); 10179 CPU (h_nbit) = opval; 10180 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10181 } 10182 { 10183 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10184 CPU (h_zbit) = opval; 10185 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10186 } 10187 SET_H_CBIT_MOVE (0); 10188 SET_H_VBIT_MOVE (0); 10189 { 10190 { 10191 BI opval = 0; 10192 CPU (h_xbit) = opval; 10193 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10194 } 10195 { 10196 BI opval = 0; 10197 SET_H_INSN_PREFIXED_P (opval); 10198 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10199 } 10200 } 10201 } 10202 } 10203 10204 #undef FLD 10205 } 10206 NEXT (vpc); 10207 10208 CASE (sem, INSN_AND_M_B_M) : /* and-m.b [${Rs}${inc}],${Rd} */ 10209 { 10210 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10211 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10212 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 10213 int UNUSED written = 0; 10214 IADDR UNUSED pc = abuf->addr; 10215 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10216 10217 { 10218 QI tmp_tmpd; 10219 tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr; 10220 QI tmp_tmp_mem; 10221 BI tmp_postinc; 10222 tmp_postinc = FLD (f_memmode); 10223 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 10224 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 10225 ; if (NEBI (tmp_postinc, 0)) { 10226 { 10227 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 10228 tmp_addr = ADDSI (tmp_addr, 1); 10229 } 10230 { 10231 SI opval = tmp_addr; 10232 SET_H_GR (FLD (f_operand1), opval); 10233 written |= (1 << 11); 10234 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10235 } 10236 } 10237 } 10238 ; tmp_tmp_mem; })); 10239 { 10240 SI tmp_oldregval; 10241 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 10242 { 10243 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 10244 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 10245 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10246 } 10247 } 10248 { 10249 { 10250 BI opval = LTQI (tmp_tmpd, 0); 10251 CPU (h_nbit) = opval; 10252 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10253 } 10254 { 10255 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10256 CPU (h_zbit) = opval; 10257 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10258 } 10259 SET_H_CBIT_MOVE (0); 10260 SET_H_VBIT_MOVE (0); 10261 { 10262 { 10263 BI opval = 0; 10264 CPU (h_xbit) = opval; 10265 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10266 } 10267 { 10268 BI opval = 0; 10269 SET_H_INSN_PREFIXED_P (opval); 10270 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10271 } 10272 } 10273 } 10274 } 10275 10276 abuf->written = written; 10277 #undef FLD 10278 } 10279 NEXT (vpc); 10280 10281 CASE (sem, INSN_AND_M_W_M) : /* and-m.w [${Rs}${inc}],${Rd} */ 10282 { 10283 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10284 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10285 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 10286 int UNUSED written = 0; 10287 IADDR UNUSED pc = abuf->addr; 10288 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10289 10290 { 10291 HI tmp_tmpd; 10292 tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr; 10293 HI tmp_tmp_mem; 10294 BI tmp_postinc; 10295 tmp_postinc = FLD (f_memmode); 10296 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 10297 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 10298 ; if (NEBI (tmp_postinc, 0)) { 10299 { 10300 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 10301 tmp_addr = ADDSI (tmp_addr, 2); 10302 } 10303 { 10304 SI opval = tmp_addr; 10305 SET_H_GR (FLD (f_operand1), opval); 10306 written |= (1 << 11); 10307 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10308 } 10309 } 10310 } 10311 ; tmp_tmp_mem; })); 10312 { 10313 SI tmp_oldregval; 10314 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 10315 { 10316 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 10317 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 10318 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10319 } 10320 } 10321 { 10322 { 10323 BI opval = LTHI (tmp_tmpd, 0); 10324 CPU (h_nbit) = opval; 10325 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10326 } 10327 { 10328 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10329 CPU (h_zbit) = opval; 10330 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10331 } 10332 SET_H_CBIT_MOVE (0); 10333 SET_H_VBIT_MOVE (0); 10334 { 10335 { 10336 BI opval = 0; 10337 CPU (h_xbit) = opval; 10338 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10339 } 10340 { 10341 BI opval = 0; 10342 SET_H_INSN_PREFIXED_P (opval); 10343 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10344 } 10345 } 10346 } 10347 } 10348 10349 abuf->written = written; 10350 #undef FLD 10351 } 10352 NEXT (vpc); 10353 10354 CASE (sem, INSN_AND_M_D_M) : /* and-m.d [${Rs}${inc}],${Rd} */ 10355 { 10356 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10357 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10358 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 10359 int UNUSED written = 0; 10360 IADDR UNUSED pc = abuf->addr; 10361 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10362 10363 { 10364 SI tmp_tmpd; 10365 tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr; 10366 SI tmp_tmp_mem; 10367 BI tmp_postinc; 10368 tmp_postinc = FLD (f_memmode); 10369 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 10370 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 10371 ; if (NEBI (tmp_postinc, 0)) { 10372 { 10373 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 10374 tmp_addr = ADDSI (tmp_addr, 4); 10375 } 10376 { 10377 SI opval = tmp_addr; 10378 SET_H_GR (FLD (f_operand1), opval); 10379 written |= (1 << 10); 10380 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10381 } 10382 } 10383 } 10384 ; tmp_tmp_mem; })); 10385 { 10386 SI opval = tmp_tmpd; 10387 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 10388 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10389 } 10390 { 10391 { 10392 BI opval = LTSI (tmp_tmpd, 0); 10393 CPU (h_nbit) = opval; 10394 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10395 } 10396 { 10397 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10398 CPU (h_zbit) = opval; 10399 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10400 } 10401 SET_H_CBIT_MOVE (0); 10402 SET_H_VBIT_MOVE (0); 10403 { 10404 { 10405 BI opval = 0; 10406 CPU (h_xbit) = opval; 10407 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10408 } 10409 { 10410 BI opval = 0; 10411 SET_H_INSN_PREFIXED_P (opval); 10412 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10413 } 10414 } 10415 } 10416 } 10417 10418 abuf->written = written; 10419 #undef FLD 10420 } 10421 NEXT (vpc); 10422 10423 CASE (sem, INSN_ANDCBR) : /* and.b ${sconst8}],${Rd} */ 10424 { 10425 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10426 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10427 #define FLD(f) abuf->fields.sfmt_addcbr.f 10428 int UNUSED written = 0; 10429 IADDR UNUSED pc = abuf->addr; 10430 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 10431 10432 { 10433 QI tmp_tmpd; 10434 tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte)); 10435 { 10436 SI tmp_oldregval; 10437 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 10438 { 10439 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 10440 SET_H_GR (FLD (f_operand2), opval); 10441 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10442 } 10443 } 10444 { 10445 { 10446 BI opval = LTQI (tmp_tmpd, 0); 10447 CPU (h_nbit) = opval; 10448 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10449 } 10450 { 10451 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10452 CPU (h_zbit) = opval; 10453 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10454 } 10455 SET_H_CBIT_MOVE (0); 10456 SET_H_VBIT_MOVE (0); 10457 { 10458 { 10459 BI opval = 0; 10460 CPU (h_xbit) = opval; 10461 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10462 } 10463 { 10464 BI opval = 0; 10465 SET_H_INSN_PREFIXED_P (opval); 10466 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10467 } 10468 } 10469 } 10470 } 10471 10472 #undef FLD 10473 } 10474 NEXT (vpc); 10475 10476 CASE (sem, INSN_ANDCWR) : /* and.w ${sconst16}],${Rd} */ 10477 { 10478 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10479 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10480 #define FLD(f) abuf->fields.sfmt_addcwr.f 10481 int UNUSED written = 0; 10482 IADDR UNUSED pc = abuf->addr; 10483 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 10484 10485 { 10486 HI tmp_tmpd; 10487 tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word)); 10488 { 10489 SI tmp_oldregval; 10490 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 10491 { 10492 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 10493 SET_H_GR (FLD (f_operand2), opval); 10494 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10495 } 10496 } 10497 { 10498 { 10499 BI opval = LTHI (tmp_tmpd, 0); 10500 CPU (h_nbit) = opval; 10501 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10502 } 10503 { 10504 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10505 CPU (h_zbit) = opval; 10506 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10507 } 10508 SET_H_CBIT_MOVE (0); 10509 SET_H_VBIT_MOVE (0); 10510 { 10511 { 10512 BI opval = 0; 10513 CPU (h_xbit) = opval; 10514 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10515 } 10516 { 10517 BI opval = 0; 10518 SET_H_INSN_PREFIXED_P (opval); 10519 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10520 } 10521 } 10522 } 10523 } 10524 10525 #undef FLD 10526 } 10527 NEXT (vpc); 10528 10529 CASE (sem, INSN_ANDCDR) : /* and.d ${const32}],${Rd} */ 10530 { 10531 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10532 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10533 #define FLD(f) abuf->fields.sfmt_addcdr.f 10534 int UNUSED written = 0; 10535 IADDR UNUSED pc = abuf->addr; 10536 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 10537 10538 { 10539 SI tmp_tmpd; 10540 tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword)); 10541 { 10542 SI opval = tmp_tmpd; 10543 SET_H_GR (FLD (f_operand2), opval); 10544 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10545 } 10546 { 10547 { 10548 BI opval = LTSI (tmp_tmpd, 0); 10549 CPU (h_nbit) = opval; 10550 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10551 } 10552 { 10553 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10554 CPU (h_zbit) = opval; 10555 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10556 } 10557 SET_H_CBIT_MOVE (0); 10558 SET_H_VBIT_MOVE (0); 10559 { 10560 { 10561 BI opval = 0; 10562 CPU (h_xbit) = opval; 10563 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10564 } 10565 { 10566 BI opval = 0; 10567 SET_H_INSN_PREFIXED_P (opval); 10568 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10569 } 10570 } 10571 } 10572 } 10573 10574 #undef FLD 10575 } 10576 NEXT (vpc); 10577 10578 CASE (sem, INSN_ANDQ) : /* andq $i,$Rd */ 10579 { 10580 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10581 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10582 #define FLD(f) abuf->fields.sfmt_andq.f 10583 int UNUSED written = 0; 10584 IADDR UNUSED pc = abuf->addr; 10585 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10586 10587 { 10588 SI tmp_tmpd; 10589 tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6)); 10590 { 10591 SI opval = tmp_tmpd; 10592 SET_H_GR (FLD (f_operand2), opval); 10593 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10594 } 10595 { 10596 { 10597 BI opval = LTSI (tmp_tmpd, 0); 10598 CPU (h_nbit) = opval; 10599 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10600 } 10601 { 10602 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10603 CPU (h_zbit) = opval; 10604 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10605 } 10606 SET_H_CBIT_MOVE (0); 10607 SET_H_VBIT_MOVE (0); 10608 { 10609 { 10610 BI opval = 0; 10611 CPU (h_xbit) = opval; 10612 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10613 } 10614 { 10615 BI opval = 0; 10616 SET_H_INSN_PREFIXED_P (opval); 10617 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10618 } 10619 } 10620 } 10621 } 10622 10623 #undef FLD 10624 } 10625 NEXT (vpc); 10626 10627 CASE (sem, INSN_ORR_B_R) : /* orr.b $Rs,$Rd */ 10628 { 10629 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10630 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10631 #define FLD(f) abuf->fields.sfmt_addc_m.f 10632 int UNUSED written = 0; 10633 IADDR UNUSED pc = abuf->addr; 10634 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10635 10636 { 10637 QI tmp_tmpd; 10638 tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 10639 { 10640 SI tmp_oldregval; 10641 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 10642 { 10643 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 10644 SET_H_GR (FLD (f_operand2), opval); 10645 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10646 } 10647 } 10648 { 10649 { 10650 BI opval = LTQI (tmp_tmpd, 0); 10651 CPU (h_nbit) = opval; 10652 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10653 } 10654 { 10655 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10656 CPU (h_zbit) = opval; 10657 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10658 } 10659 SET_H_CBIT_MOVE (0); 10660 SET_H_VBIT_MOVE (0); 10661 { 10662 { 10663 BI opval = 0; 10664 CPU (h_xbit) = opval; 10665 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10666 } 10667 { 10668 BI opval = 0; 10669 SET_H_INSN_PREFIXED_P (opval); 10670 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10671 } 10672 } 10673 } 10674 } 10675 10676 #undef FLD 10677 } 10678 NEXT (vpc); 10679 10680 CASE (sem, INSN_ORR_W_R) : /* orr.w $Rs,$Rd */ 10681 { 10682 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10683 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10684 #define FLD(f) abuf->fields.sfmt_addc_m.f 10685 int UNUSED written = 0; 10686 IADDR UNUSED pc = abuf->addr; 10687 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10688 10689 { 10690 HI tmp_tmpd; 10691 tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 10692 { 10693 SI tmp_oldregval; 10694 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 10695 { 10696 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 10697 SET_H_GR (FLD (f_operand2), opval); 10698 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10699 } 10700 } 10701 { 10702 { 10703 BI opval = LTHI (tmp_tmpd, 0); 10704 CPU (h_nbit) = opval; 10705 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10706 } 10707 { 10708 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10709 CPU (h_zbit) = opval; 10710 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10711 } 10712 SET_H_CBIT_MOVE (0); 10713 SET_H_VBIT_MOVE (0); 10714 { 10715 { 10716 BI opval = 0; 10717 CPU (h_xbit) = opval; 10718 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10719 } 10720 { 10721 BI opval = 0; 10722 SET_H_INSN_PREFIXED_P (opval); 10723 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10724 } 10725 } 10726 } 10727 } 10728 10729 #undef FLD 10730 } 10731 NEXT (vpc); 10732 10733 CASE (sem, INSN_ORR_D_R) : /* orr.d $Rs,$Rd */ 10734 { 10735 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10736 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10737 #define FLD(f) abuf->fields.sfmt_addc_m.f 10738 int UNUSED written = 0; 10739 IADDR UNUSED pc = abuf->addr; 10740 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10741 10742 { 10743 SI tmp_tmpd; 10744 tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 10745 { 10746 SI opval = tmp_tmpd; 10747 SET_H_GR (FLD (f_operand2), opval); 10748 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10749 } 10750 { 10751 { 10752 BI opval = LTSI (tmp_tmpd, 0); 10753 CPU (h_nbit) = opval; 10754 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10755 } 10756 { 10757 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10758 CPU (h_zbit) = opval; 10759 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10760 } 10761 SET_H_CBIT_MOVE (0); 10762 SET_H_VBIT_MOVE (0); 10763 { 10764 { 10765 BI opval = 0; 10766 CPU (h_xbit) = opval; 10767 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10768 } 10769 { 10770 BI opval = 0; 10771 SET_H_INSN_PREFIXED_P (opval); 10772 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10773 } 10774 } 10775 } 10776 } 10777 10778 #undef FLD 10779 } 10780 NEXT (vpc); 10781 10782 CASE (sem, INSN_OR_M_B_M) : /* or-m.b [${Rs}${inc}],${Rd} */ 10783 { 10784 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10785 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10786 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 10787 int UNUSED written = 0; 10788 IADDR UNUSED pc = abuf->addr; 10789 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10790 10791 { 10792 QI tmp_tmpd; 10793 tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr; 10794 QI tmp_tmp_mem; 10795 BI tmp_postinc; 10796 tmp_postinc = FLD (f_memmode); 10797 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 10798 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 10799 ; if (NEBI (tmp_postinc, 0)) { 10800 { 10801 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 10802 tmp_addr = ADDSI (tmp_addr, 1); 10803 } 10804 { 10805 SI opval = tmp_addr; 10806 SET_H_GR (FLD (f_operand1), opval); 10807 written |= (1 << 11); 10808 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10809 } 10810 } 10811 } 10812 ; tmp_tmp_mem; })); 10813 { 10814 SI tmp_oldregval; 10815 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 10816 { 10817 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 10818 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 10819 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10820 } 10821 } 10822 { 10823 { 10824 BI opval = LTQI (tmp_tmpd, 0); 10825 CPU (h_nbit) = opval; 10826 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10827 } 10828 { 10829 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10830 CPU (h_zbit) = opval; 10831 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10832 } 10833 SET_H_CBIT_MOVE (0); 10834 SET_H_VBIT_MOVE (0); 10835 { 10836 { 10837 BI opval = 0; 10838 CPU (h_xbit) = opval; 10839 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10840 } 10841 { 10842 BI opval = 0; 10843 SET_H_INSN_PREFIXED_P (opval); 10844 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10845 } 10846 } 10847 } 10848 } 10849 10850 abuf->written = written; 10851 #undef FLD 10852 } 10853 NEXT (vpc); 10854 10855 CASE (sem, INSN_OR_M_W_M) : /* or-m.w [${Rs}${inc}],${Rd} */ 10856 { 10857 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10858 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10859 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 10860 int UNUSED written = 0; 10861 IADDR UNUSED pc = abuf->addr; 10862 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10863 10864 { 10865 HI tmp_tmpd; 10866 tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr; 10867 HI tmp_tmp_mem; 10868 BI tmp_postinc; 10869 tmp_postinc = FLD (f_memmode); 10870 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 10871 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 10872 ; if (NEBI (tmp_postinc, 0)) { 10873 { 10874 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 10875 tmp_addr = ADDSI (tmp_addr, 2); 10876 } 10877 { 10878 SI opval = tmp_addr; 10879 SET_H_GR (FLD (f_operand1), opval); 10880 written |= (1 << 11); 10881 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10882 } 10883 } 10884 } 10885 ; tmp_tmp_mem; })); 10886 { 10887 SI tmp_oldregval; 10888 tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2)))); 10889 { 10890 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 10891 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 10892 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10893 } 10894 } 10895 { 10896 { 10897 BI opval = LTHI (tmp_tmpd, 0); 10898 CPU (h_nbit) = opval; 10899 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10900 } 10901 { 10902 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10903 CPU (h_zbit) = opval; 10904 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10905 } 10906 SET_H_CBIT_MOVE (0); 10907 SET_H_VBIT_MOVE (0); 10908 { 10909 { 10910 BI opval = 0; 10911 CPU (h_xbit) = opval; 10912 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10913 } 10914 { 10915 BI opval = 0; 10916 SET_H_INSN_PREFIXED_P (opval); 10917 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10918 } 10919 } 10920 } 10921 } 10922 10923 abuf->written = written; 10924 #undef FLD 10925 } 10926 NEXT (vpc); 10927 10928 CASE (sem, INSN_OR_M_D_M) : /* or-m.d [${Rs}${inc}],${Rd} */ 10929 { 10930 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10931 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10932 #define FLD(f) abuf->fields.sfmt_add_m_b_m.f 10933 int UNUSED written = 0; 10934 IADDR UNUSED pc = abuf->addr; 10935 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10936 10937 { 10938 SI tmp_tmpd; 10939 tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr; 10940 SI tmp_tmp_mem; 10941 BI tmp_postinc; 10942 tmp_postinc = FLD (f_memmode); 10943 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 10944 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 10945 ; if (NEBI (tmp_postinc, 0)) { 10946 { 10947 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 10948 tmp_addr = ADDSI (tmp_addr, 4); 10949 } 10950 { 10951 SI opval = tmp_addr; 10952 SET_H_GR (FLD (f_operand1), opval); 10953 written |= (1 << 10); 10954 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10955 } 10956 } 10957 } 10958 ; tmp_tmp_mem; })); 10959 { 10960 SI opval = tmp_tmpd; 10961 SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval); 10962 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10963 } 10964 { 10965 { 10966 BI opval = LTSI (tmp_tmpd, 0); 10967 CPU (h_nbit) = opval; 10968 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 10969 } 10970 { 10971 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 10972 CPU (h_zbit) = opval; 10973 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 10974 } 10975 SET_H_CBIT_MOVE (0); 10976 SET_H_VBIT_MOVE (0); 10977 { 10978 { 10979 BI opval = 0; 10980 CPU (h_xbit) = opval; 10981 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 10982 } 10983 { 10984 BI opval = 0; 10985 SET_H_INSN_PREFIXED_P (opval); 10986 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 10987 } 10988 } 10989 } 10990 } 10991 10992 abuf->written = written; 10993 #undef FLD 10994 } 10995 NEXT (vpc); 10996 10997 CASE (sem, INSN_ORCBR) : /* or.b ${sconst8}],${Rd} */ 10998 { 10999 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11000 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11001 #define FLD(f) abuf->fields.sfmt_addcbr.f 11002 int UNUSED written = 0; 11003 IADDR UNUSED pc = abuf->addr; 11004 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 11005 11006 { 11007 QI tmp_tmpd; 11008 tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte)); 11009 { 11010 SI tmp_oldregval; 11011 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11012 { 11013 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 11014 SET_H_GR (FLD (f_operand2), opval); 11015 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11016 } 11017 } 11018 { 11019 { 11020 BI opval = LTQI (tmp_tmpd, 0); 11021 CPU (h_nbit) = opval; 11022 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11023 } 11024 { 11025 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11026 CPU (h_zbit) = opval; 11027 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11028 } 11029 SET_H_CBIT_MOVE (0); 11030 SET_H_VBIT_MOVE (0); 11031 { 11032 { 11033 BI opval = 0; 11034 CPU (h_xbit) = opval; 11035 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11036 } 11037 { 11038 BI opval = 0; 11039 SET_H_INSN_PREFIXED_P (opval); 11040 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11041 } 11042 } 11043 } 11044 } 11045 11046 #undef FLD 11047 } 11048 NEXT (vpc); 11049 11050 CASE (sem, INSN_ORCWR) : /* or.w ${sconst16}],${Rd} */ 11051 { 11052 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11053 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11054 #define FLD(f) abuf->fields.sfmt_addcwr.f 11055 int UNUSED written = 0; 11056 IADDR UNUSED pc = abuf->addr; 11057 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 11058 11059 { 11060 HI tmp_tmpd; 11061 tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word)); 11062 { 11063 SI tmp_oldregval; 11064 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11065 { 11066 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 11067 SET_H_GR (FLD (f_operand2), opval); 11068 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11069 } 11070 } 11071 { 11072 { 11073 BI opval = LTHI (tmp_tmpd, 0); 11074 CPU (h_nbit) = opval; 11075 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11076 } 11077 { 11078 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11079 CPU (h_zbit) = opval; 11080 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11081 } 11082 SET_H_CBIT_MOVE (0); 11083 SET_H_VBIT_MOVE (0); 11084 { 11085 { 11086 BI opval = 0; 11087 CPU (h_xbit) = opval; 11088 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11089 } 11090 { 11091 BI opval = 0; 11092 SET_H_INSN_PREFIXED_P (opval); 11093 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11094 } 11095 } 11096 } 11097 } 11098 11099 #undef FLD 11100 } 11101 NEXT (vpc); 11102 11103 CASE (sem, INSN_ORCDR) : /* or.d ${const32}],${Rd} */ 11104 { 11105 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11106 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11107 #define FLD(f) abuf->fields.sfmt_addcdr.f 11108 int UNUSED written = 0; 11109 IADDR UNUSED pc = abuf->addr; 11110 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 11111 11112 { 11113 SI tmp_tmpd; 11114 tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword)); 11115 { 11116 SI opval = tmp_tmpd; 11117 SET_H_GR (FLD (f_operand2), opval); 11118 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11119 } 11120 { 11121 { 11122 BI opval = LTSI (tmp_tmpd, 0); 11123 CPU (h_nbit) = opval; 11124 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11125 } 11126 { 11127 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11128 CPU (h_zbit) = opval; 11129 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11130 } 11131 SET_H_CBIT_MOVE (0); 11132 SET_H_VBIT_MOVE (0); 11133 { 11134 { 11135 BI opval = 0; 11136 CPU (h_xbit) = opval; 11137 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11138 } 11139 { 11140 BI opval = 0; 11141 SET_H_INSN_PREFIXED_P (opval); 11142 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11143 } 11144 } 11145 } 11146 } 11147 11148 #undef FLD 11149 } 11150 NEXT (vpc); 11151 11152 CASE (sem, INSN_ORQ) : /* orq $i,$Rd */ 11153 { 11154 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11155 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11156 #define FLD(f) abuf->fields.sfmt_andq.f 11157 int UNUSED written = 0; 11158 IADDR UNUSED pc = abuf->addr; 11159 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11160 11161 { 11162 SI tmp_tmpd; 11163 tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6)); 11164 { 11165 SI opval = tmp_tmpd; 11166 SET_H_GR (FLD (f_operand2), opval); 11167 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11168 } 11169 { 11170 { 11171 BI opval = LTSI (tmp_tmpd, 0); 11172 CPU (h_nbit) = opval; 11173 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11174 } 11175 { 11176 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11177 CPU (h_zbit) = opval; 11178 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11179 } 11180 SET_H_CBIT_MOVE (0); 11181 SET_H_VBIT_MOVE (0); 11182 { 11183 { 11184 BI opval = 0; 11185 CPU (h_xbit) = opval; 11186 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11187 } 11188 { 11189 BI opval = 0; 11190 SET_H_INSN_PREFIXED_P (opval); 11191 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11192 } 11193 } 11194 } 11195 } 11196 11197 #undef FLD 11198 } 11199 NEXT (vpc); 11200 11201 CASE (sem, INSN_XOR) : /* xor $Rs,$Rd */ 11202 { 11203 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11204 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11205 #define FLD(f) abuf->fields.sfmt_muls_b.f 11206 int UNUSED written = 0; 11207 IADDR UNUSED pc = abuf->addr; 11208 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11209 11210 { 11211 SI tmp_tmpd; 11212 tmp_tmpd = XORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1))); 11213 { 11214 SI opval = tmp_tmpd; 11215 SET_H_GR (FLD (f_operand2), opval); 11216 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11217 } 11218 { 11219 { 11220 BI opval = LTSI (tmp_tmpd, 0); 11221 CPU (h_nbit) = opval; 11222 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11223 } 11224 { 11225 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11226 CPU (h_zbit) = opval; 11227 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11228 } 11229 SET_H_CBIT_MOVE (0); 11230 SET_H_VBIT_MOVE (0); 11231 { 11232 { 11233 BI opval = 0; 11234 CPU (h_xbit) = opval; 11235 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11236 } 11237 { 11238 BI opval = 0; 11239 SET_H_INSN_PREFIXED_P (opval); 11240 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11241 } 11242 } 11243 } 11244 } 11245 11246 #undef FLD 11247 } 11248 NEXT (vpc); 11249 11250 CASE (sem, INSN_SWAP) : /* swap${swapoption} ${Rs} */ 11251 { 11252 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11253 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11254 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 11255 int UNUSED written = 0; 11256 IADDR UNUSED pc = abuf->addr; 11257 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11258 11259 { 11260 SI tmp_tmps; 11261 SI tmp_tmpd; 11262 tmp_tmps = GET_H_GR (FLD (f_operand1)); 11263 tmp_tmpd = ({ SI tmp_tmpcode; 11264 SI tmp_tmpval; 11265 SI tmp_tmpres; 11266 tmp_tmpcode = FLD (f_operand2); 11267 ; tmp_tmpval = tmp_tmps; 11268 ; if (EQSI (tmp_tmpcode, 0)) { 11269 tmp_tmpres = (cgen_rtx_error (current_cpu, "SWAP without swap modifier isn't implemented"), 0); 11270 } 11271 else if (EQSI (tmp_tmpcode, 1)) { 11272 tmp_tmpres = ({ SI tmp_tmpr; 11273 tmp_tmpr = tmp_tmpval; 11274 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11275 } 11276 else if (EQSI (tmp_tmpcode, 2)) { 11277 tmp_tmpres = ({ SI tmp_tmpb; 11278 tmp_tmpb = tmp_tmpval; 11279 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11280 } 11281 else if (EQSI (tmp_tmpcode, 3)) { 11282 tmp_tmpres = ({ SI tmp_tmpr; 11283 tmp_tmpr = ({ SI tmp_tmpb; 11284 tmp_tmpb = tmp_tmpval; 11285 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11286 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11287 } 11288 else if (EQSI (tmp_tmpcode, 4)) { 11289 tmp_tmpres = ({ SI tmp_tmpw; 11290 tmp_tmpw = tmp_tmpval; 11291 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11292 } 11293 else if (EQSI (tmp_tmpcode, 5)) { 11294 tmp_tmpres = ({ SI tmp_tmpr; 11295 tmp_tmpr = ({ SI tmp_tmpw; 11296 tmp_tmpw = tmp_tmpval; 11297 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11298 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11299 } 11300 else if (EQSI (tmp_tmpcode, 6)) { 11301 tmp_tmpres = ({ SI tmp_tmpb; 11302 tmp_tmpb = ({ SI tmp_tmpw; 11303 tmp_tmpw = tmp_tmpval; 11304 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11305 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11306 } 11307 else if (EQSI (tmp_tmpcode, 7)) { 11308 tmp_tmpres = ({ SI tmp_tmpr; 11309 tmp_tmpr = ({ SI tmp_tmpb; 11310 tmp_tmpb = ({ SI tmp_tmpw; 11311 tmp_tmpw = tmp_tmpval; 11312 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11313 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11314 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11315 } 11316 else if (EQSI (tmp_tmpcode, 8)) { 11317 tmp_tmpres = INVSI (tmp_tmpval); 11318 } 11319 else if (EQSI (tmp_tmpcode, 9)) { 11320 tmp_tmpres = ({ SI tmp_tmpr; 11321 tmp_tmpr = INVSI (tmp_tmpval); 11322 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11323 } 11324 else if (EQSI (tmp_tmpcode, 10)) { 11325 tmp_tmpres = ({ SI tmp_tmpb; 11326 tmp_tmpb = INVSI (tmp_tmpval); 11327 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11328 } 11329 else if (EQSI (tmp_tmpcode, 11)) { 11330 tmp_tmpres = ({ SI tmp_tmpr; 11331 tmp_tmpr = ({ SI tmp_tmpb; 11332 tmp_tmpb = INVSI (tmp_tmpval); 11333 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11334 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11335 } 11336 else if (EQSI (tmp_tmpcode, 12)) { 11337 tmp_tmpres = ({ SI tmp_tmpw; 11338 tmp_tmpw = INVSI (tmp_tmpval); 11339 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11340 } 11341 else if (EQSI (tmp_tmpcode, 13)) { 11342 tmp_tmpres = ({ SI tmp_tmpr; 11343 tmp_tmpr = ({ SI tmp_tmpw; 11344 tmp_tmpw = INVSI (tmp_tmpval); 11345 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11346 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11347 } 11348 else if (EQSI (tmp_tmpcode, 14)) { 11349 tmp_tmpres = ({ SI tmp_tmpb; 11350 tmp_tmpb = ({ SI tmp_tmpw; 11351 tmp_tmpw = INVSI (tmp_tmpval); 11352 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11353 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11354 } 11355 else if (EQSI (tmp_tmpcode, 15)) { 11356 tmp_tmpres = ({ SI tmp_tmpr; 11357 tmp_tmpr = ({ SI tmp_tmpb; 11358 tmp_tmpb = ({ SI tmp_tmpw; 11359 tmp_tmpw = INVSI (tmp_tmpval); 11360 ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); }); 11361 ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); }); 11362 ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); }); 11363 } 11364 else { 11365 cgen_rtx_error (current_cpu, "Unknown swapcode"); 11366 } 11367 ; tmp_tmpres; }); 11368 { 11369 SI opval = tmp_tmpd; 11370 SET_H_GR (FLD (f_operand1), opval); 11371 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11372 } 11373 { 11374 { 11375 BI opval = LTSI (tmp_tmpd, 0); 11376 CPU (h_nbit) = opval; 11377 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11378 } 11379 { 11380 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11381 CPU (h_zbit) = opval; 11382 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11383 } 11384 SET_H_CBIT_MOVE (0); 11385 SET_H_VBIT_MOVE (0); 11386 { 11387 { 11388 BI opval = 0; 11389 CPU (h_xbit) = opval; 11390 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11391 } 11392 { 11393 BI opval = 0; 11394 SET_H_INSN_PREFIXED_P (opval); 11395 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11396 } 11397 } 11398 } 11399 } 11400 11401 #undef FLD 11402 } 11403 NEXT (vpc); 11404 11405 CASE (sem, INSN_ASRR_B_R) : /* asrr.b $Rs,$Rd */ 11406 { 11407 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11408 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11409 #define FLD(f) abuf->fields.sfmt_addc_m.f 11410 int UNUSED written = 0; 11411 IADDR UNUSED pc = abuf->addr; 11412 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11413 11414 { 11415 QI tmp_tmpd; 11416 SI tmp_cnt1; 11417 SI tmp_cnt2; 11418 tmp_cnt1 = GET_H_GR (FLD (f_operand1)); 11419 tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31))); 11420 tmp_tmpd = SRASI (EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2); 11421 { 11422 SI tmp_oldregval; 11423 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11424 { 11425 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 11426 SET_H_GR (FLD (f_operand2), opval); 11427 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11428 } 11429 } 11430 { 11431 { 11432 BI opval = LTQI (tmp_tmpd, 0); 11433 CPU (h_nbit) = opval; 11434 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11435 } 11436 { 11437 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11438 CPU (h_zbit) = opval; 11439 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11440 } 11441 SET_H_CBIT_MOVE (0); 11442 SET_H_VBIT_MOVE (0); 11443 { 11444 { 11445 BI opval = 0; 11446 CPU (h_xbit) = opval; 11447 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11448 } 11449 { 11450 BI opval = 0; 11451 SET_H_INSN_PREFIXED_P (opval); 11452 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11453 } 11454 } 11455 } 11456 } 11457 11458 #undef FLD 11459 } 11460 NEXT (vpc); 11461 11462 CASE (sem, INSN_ASRR_W_R) : /* asrr.w $Rs,$Rd */ 11463 { 11464 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11465 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11466 #define FLD(f) abuf->fields.sfmt_addc_m.f 11467 int UNUSED written = 0; 11468 IADDR UNUSED pc = abuf->addr; 11469 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11470 11471 { 11472 HI tmp_tmpd; 11473 SI tmp_cnt1; 11474 SI tmp_cnt2; 11475 tmp_cnt1 = GET_H_GR (FLD (f_operand1)); 11476 tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31))); 11477 tmp_tmpd = SRASI (EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2); 11478 { 11479 SI tmp_oldregval; 11480 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11481 { 11482 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 11483 SET_H_GR (FLD (f_operand2), opval); 11484 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11485 } 11486 } 11487 { 11488 { 11489 BI opval = LTHI (tmp_tmpd, 0); 11490 CPU (h_nbit) = opval; 11491 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11492 } 11493 { 11494 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11495 CPU (h_zbit) = opval; 11496 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11497 } 11498 SET_H_CBIT_MOVE (0); 11499 SET_H_VBIT_MOVE (0); 11500 { 11501 { 11502 BI opval = 0; 11503 CPU (h_xbit) = opval; 11504 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11505 } 11506 { 11507 BI opval = 0; 11508 SET_H_INSN_PREFIXED_P (opval); 11509 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11510 } 11511 } 11512 } 11513 } 11514 11515 #undef FLD 11516 } 11517 NEXT (vpc); 11518 11519 CASE (sem, INSN_ASRR_D_R) : /* asrr.d $Rs,$Rd */ 11520 { 11521 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11522 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11523 #define FLD(f) abuf->fields.sfmt_addc_m.f 11524 int UNUSED written = 0; 11525 IADDR UNUSED pc = abuf->addr; 11526 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11527 11528 { 11529 SI tmp_tmpd; 11530 SI tmp_cnt1; 11531 SI tmp_cnt2; 11532 tmp_cnt1 = GET_H_GR (FLD (f_operand1)); 11533 tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31))); 11534 tmp_tmpd = SRASI (EXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2); 11535 { 11536 SI opval = tmp_tmpd; 11537 SET_H_GR (FLD (f_operand2), opval); 11538 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11539 } 11540 { 11541 { 11542 BI opval = LTSI (tmp_tmpd, 0); 11543 CPU (h_nbit) = opval; 11544 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11545 } 11546 { 11547 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11548 CPU (h_zbit) = opval; 11549 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11550 } 11551 SET_H_CBIT_MOVE (0); 11552 SET_H_VBIT_MOVE (0); 11553 { 11554 { 11555 BI opval = 0; 11556 CPU (h_xbit) = opval; 11557 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11558 } 11559 { 11560 BI opval = 0; 11561 SET_H_INSN_PREFIXED_P (opval); 11562 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11563 } 11564 } 11565 } 11566 } 11567 11568 #undef FLD 11569 } 11570 NEXT (vpc); 11571 11572 CASE (sem, INSN_ASRQ) : /* asrq $c,${Rd} */ 11573 { 11574 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11575 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11576 #define FLD(f) abuf->fields.sfmt_asrq.f 11577 int UNUSED written = 0; 11578 IADDR UNUSED pc = abuf->addr; 11579 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11580 11581 { 11582 SI tmp_tmpd; 11583 tmp_tmpd = SRASI (GET_H_GR (FLD (f_operand2)), FLD (f_u5)); 11584 { 11585 SI opval = tmp_tmpd; 11586 SET_H_GR (FLD (f_operand2), opval); 11587 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11588 } 11589 { 11590 { 11591 BI opval = LTSI (tmp_tmpd, 0); 11592 CPU (h_nbit) = opval; 11593 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11594 } 11595 { 11596 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11597 CPU (h_zbit) = opval; 11598 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11599 } 11600 SET_H_CBIT_MOVE (0); 11601 SET_H_VBIT_MOVE (0); 11602 { 11603 { 11604 BI opval = 0; 11605 CPU (h_xbit) = opval; 11606 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11607 } 11608 { 11609 BI opval = 0; 11610 SET_H_INSN_PREFIXED_P (opval); 11611 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11612 } 11613 } 11614 } 11615 } 11616 11617 #undef FLD 11618 } 11619 NEXT (vpc); 11620 11621 CASE (sem, INSN_LSRR_B_R) : /* lsrr.b $Rs,$Rd */ 11622 { 11623 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11624 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11625 #define FLD(f) abuf->fields.sfmt_addc_m.f 11626 int UNUSED written = 0; 11627 IADDR UNUSED pc = abuf->addr; 11628 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11629 11630 { 11631 SI tmp_tmpd; 11632 SI tmp_cnt; 11633 tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63); 11634 tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SRLSI (ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31)))); 11635 { 11636 SI tmp_oldregval; 11637 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11638 { 11639 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 11640 SET_H_GR (FLD (f_operand2), opval); 11641 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11642 } 11643 } 11644 { 11645 { 11646 BI opval = LTQI (tmp_tmpd, 0); 11647 CPU (h_nbit) = opval; 11648 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11649 } 11650 { 11651 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11652 CPU (h_zbit) = opval; 11653 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11654 } 11655 SET_H_CBIT_MOVE (0); 11656 SET_H_VBIT_MOVE (0); 11657 { 11658 { 11659 BI opval = 0; 11660 CPU (h_xbit) = opval; 11661 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11662 } 11663 { 11664 BI opval = 0; 11665 SET_H_INSN_PREFIXED_P (opval); 11666 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11667 } 11668 } 11669 } 11670 } 11671 11672 #undef FLD 11673 } 11674 NEXT (vpc); 11675 11676 CASE (sem, INSN_LSRR_W_R) : /* lsrr.w $Rs,$Rd */ 11677 { 11678 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11679 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11680 #define FLD(f) abuf->fields.sfmt_addc_m.f 11681 int UNUSED written = 0; 11682 IADDR UNUSED pc = abuf->addr; 11683 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11684 11685 { 11686 SI tmp_tmpd; 11687 SI tmp_cnt; 11688 tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63); 11689 tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SRLSI (ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31)))); 11690 { 11691 SI tmp_oldregval; 11692 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11693 { 11694 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 11695 SET_H_GR (FLD (f_operand2), opval); 11696 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11697 } 11698 } 11699 { 11700 { 11701 BI opval = LTHI (tmp_tmpd, 0); 11702 CPU (h_nbit) = opval; 11703 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11704 } 11705 { 11706 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11707 CPU (h_zbit) = opval; 11708 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11709 } 11710 SET_H_CBIT_MOVE (0); 11711 SET_H_VBIT_MOVE (0); 11712 { 11713 { 11714 BI opval = 0; 11715 CPU (h_xbit) = opval; 11716 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11717 } 11718 { 11719 BI opval = 0; 11720 SET_H_INSN_PREFIXED_P (opval); 11721 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11722 } 11723 } 11724 } 11725 } 11726 11727 #undef FLD 11728 } 11729 NEXT (vpc); 11730 11731 CASE (sem, INSN_LSRR_D_R) : /* lsrr.d $Rs,$Rd */ 11732 { 11733 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11734 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11735 #define FLD(f) abuf->fields.sfmt_addc_m.f 11736 int UNUSED written = 0; 11737 IADDR UNUSED pc = abuf->addr; 11738 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11739 11740 { 11741 SI tmp_tmpd; 11742 SI tmp_cnt; 11743 tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63); 11744 tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SRLSI (ZEXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31)))); 11745 { 11746 SI opval = tmp_tmpd; 11747 SET_H_GR (FLD (f_operand2), opval); 11748 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11749 } 11750 { 11751 { 11752 BI opval = LTSI (tmp_tmpd, 0); 11753 CPU (h_nbit) = opval; 11754 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11755 } 11756 { 11757 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11758 CPU (h_zbit) = opval; 11759 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11760 } 11761 SET_H_CBIT_MOVE (0); 11762 SET_H_VBIT_MOVE (0); 11763 { 11764 { 11765 BI opval = 0; 11766 CPU (h_xbit) = opval; 11767 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11768 } 11769 { 11770 BI opval = 0; 11771 SET_H_INSN_PREFIXED_P (opval); 11772 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11773 } 11774 } 11775 } 11776 } 11777 11778 #undef FLD 11779 } 11780 NEXT (vpc); 11781 11782 CASE (sem, INSN_LSRQ) : /* lsrq $c,${Rd} */ 11783 { 11784 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11785 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11786 #define FLD(f) abuf->fields.sfmt_asrq.f 11787 int UNUSED written = 0; 11788 IADDR UNUSED pc = abuf->addr; 11789 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11790 11791 { 11792 SI tmp_tmpd; 11793 tmp_tmpd = SRLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5)); 11794 { 11795 SI opval = tmp_tmpd; 11796 SET_H_GR (FLD (f_operand2), opval); 11797 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11798 } 11799 { 11800 { 11801 BI opval = LTSI (tmp_tmpd, 0); 11802 CPU (h_nbit) = opval; 11803 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11804 } 11805 { 11806 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11807 CPU (h_zbit) = opval; 11808 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11809 } 11810 SET_H_CBIT_MOVE (0); 11811 SET_H_VBIT_MOVE (0); 11812 { 11813 { 11814 BI opval = 0; 11815 CPU (h_xbit) = opval; 11816 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11817 } 11818 { 11819 BI opval = 0; 11820 SET_H_INSN_PREFIXED_P (opval); 11821 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11822 } 11823 } 11824 } 11825 } 11826 11827 #undef FLD 11828 } 11829 NEXT (vpc); 11830 11831 CASE (sem, INSN_LSLR_B_R) : /* lslr.b $Rs,$Rd */ 11832 { 11833 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11834 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11835 #define FLD(f) abuf->fields.sfmt_addc_m.f 11836 int UNUSED written = 0; 11837 IADDR UNUSED pc = abuf->addr; 11838 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11839 11840 { 11841 SI tmp_tmpd; 11842 SI tmp_cnt; 11843 tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63); 11844 tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SLLSI (ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31)))); 11845 { 11846 SI tmp_oldregval; 11847 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11848 { 11849 SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00)); 11850 SET_H_GR (FLD (f_operand2), opval); 11851 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11852 } 11853 } 11854 { 11855 { 11856 BI opval = LTQI (tmp_tmpd, 0); 11857 CPU (h_nbit) = opval; 11858 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11859 } 11860 { 11861 BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11862 CPU (h_zbit) = opval; 11863 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11864 } 11865 SET_H_CBIT_MOVE (0); 11866 SET_H_VBIT_MOVE (0); 11867 { 11868 { 11869 BI opval = 0; 11870 CPU (h_xbit) = opval; 11871 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11872 } 11873 { 11874 BI opval = 0; 11875 SET_H_INSN_PREFIXED_P (opval); 11876 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11877 } 11878 } 11879 } 11880 } 11881 11882 #undef FLD 11883 } 11884 NEXT (vpc); 11885 11886 CASE (sem, INSN_LSLR_W_R) : /* lslr.w $Rs,$Rd */ 11887 { 11888 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11889 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11890 #define FLD(f) abuf->fields.sfmt_addc_m.f 11891 int UNUSED written = 0; 11892 IADDR UNUSED pc = abuf->addr; 11893 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11894 11895 { 11896 SI tmp_tmpd; 11897 SI tmp_cnt; 11898 tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63); 11899 tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SLLSI (ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31)))); 11900 { 11901 SI tmp_oldregval; 11902 tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2)); 11903 { 11904 SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000)); 11905 SET_H_GR (FLD (f_operand2), opval); 11906 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11907 } 11908 } 11909 { 11910 { 11911 BI opval = LTHI (tmp_tmpd, 0); 11912 CPU (h_nbit) = opval; 11913 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11914 } 11915 { 11916 BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11917 CPU (h_zbit) = opval; 11918 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11919 } 11920 SET_H_CBIT_MOVE (0); 11921 SET_H_VBIT_MOVE (0); 11922 { 11923 { 11924 BI opval = 0; 11925 CPU (h_xbit) = opval; 11926 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11927 } 11928 { 11929 BI opval = 0; 11930 SET_H_INSN_PREFIXED_P (opval); 11931 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11932 } 11933 } 11934 } 11935 } 11936 11937 #undef FLD 11938 } 11939 NEXT (vpc); 11940 11941 CASE (sem, INSN_LSLR_D_R) : /* lslr.d $Rs,$Rd */ 11942 { 11943 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11944 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11945 #define FLD(f) abuf->fields.sfmt_addc_m.f 11946 int UNUSED written = 0; 11947 IADDR UNUSED pc = abuf->addr; 11948 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11949 11950 { 11951 SI tmp_tmpd; 11952 SI tmp_cnt; 11953 tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63); 11954 tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SLLSI (ZEXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31)))); 11955 { 11956 SI opval = tmp_tmpd; 11957 SET_H_GR (FLD (f_operand2), opval); 11958 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11959 } 11960 { 11961 { 11962 BI opval = LTSI (tmp_tmpd, 0); 11963 CPU (h_nbit) = opval; 11964 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 11965 } 11966 { 11967 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 11968 CPU (h_zbit) = opval; 11969 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 11970 } 11971 SET_H_CBIT_MOVE (0); 11972 SET_H_VBIT_MOVE (0); 11973 { 11974 { 11975 BI opval = 0; 11976 CPU (h_xbit) = opval; 11977 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 11978 } 11979 { 11980 BI opval = 0; 11981 SET_H_INSN_PREFIXED_P (opval); 11982 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 11983 } 11984 } 11985 } 11986 } 11987 11988 #undef FLD 11989 } 11990 NEXT (vpc); 11991 11992 CASE (sem, INSN_LSLQ) : /* lslq $c,${Rd} */ 11993 { 11994 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11995 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11996 #define FLD(f) abuf->fields.sfmt_asrq.f 11997 int UNUSED written = 0; 11998 IADDR UNUSED pc = abuf->addr; 11999 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12000 12001 { 12002 SI tmp_tmpd; 12003 tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5)); 12004 { 12005 SI opval = tmp_tmpd; 12006 SET_H_GR (FLD (f_operand2), opval); 12007 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 12008 } 12009 { 12010 { 12011 BI opval = LTSI (tmp_tmpd, 0); 12012 CPU (h_nbit) = opval; 12013 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 12014 } 12015 { 12016 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 12017 CPU (h_zbit) = opval; 12018 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 12019 } 12020 SET_H_CBIT_MOVE (0); 12021 SET_H_VBIT_MOVE (0); 12022 { 12023 { 12024 BI opval = 0; 12025 CPU (h_xbit) = opval; 12026 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12027 } 12028 { 12029 BI opval = 0; 12030 SET_H_INSN_PREFIXED_P (opval); 12031 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12032 } 12033 } 12034 } 12035 } 12036 12037 #undef FLD 12038 } 12039 NEXT (vpc); 12040 12041 CASE (sem, INSN_BTST) : /* $Rs,$Rd */ 12042 { 12043 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12044 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12045 #define FLD(f) abuf->fields.sfmt_muls_b.f 12046 int UNUSED written = 0; 12047 IADDR UNUSED pc = abuf->addr; 12048 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12049 12050 { 12051 SI tmp_tmpd; 12052 SI tmp_cnt; 12053 tmp_cnt = SUBSI (31, ANDSI (GET_H_GR (FLD (f_operand1)), 31)); 12054 tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), tmp_cnt); 12055 { 12056 { 12057 BI opval = LTSI (tmp_tmpd, 0); 12058 CPU (h_nbit) = opval; 12059 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 12060 } 12061 { 12062 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 12063 CPU (h_zbit) = opval; 12064 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 12065 } 12066 SET_H_CBIT_MOVE (0); 12067 SET_H_VBIT_MOVE (0); 12068 { 12069 { 12070 BI opval = 0; 12071 CPU (h_xbit) = opval; 12072 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12073 } 12074 { 12075 BI opval = 0; 12076 SET_H_INSN_PREFIXED_P (opval); 12077 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12078 } 12079 } 12080 } 12081 } 12082 12083 #undef FLD 12084 } 12085 NEXT (vpc); 12086 12087 CASE (sem, INSN_BTSTQ) : /* btstq $c,${Rd} */ 12088 { 12089 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12090 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12091 #define FLD(f) abuf->fields.sfmt_asrq.f 12092 int UNUSED written = 0; 12093 IADDR UNUSED pc = abuf->addr; 12094 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12095 12096 { 12097 SI tmp_tmpd; 12098 tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), SUBSI (31, FLD (f_u5))); 12099 { 12100 { 12101 BI opval = LTSI (tmp_tmpd, 0); 12102 CPU (h_nbit) = opval; 12103 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 12104 } 12105 { 12106 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 12107 CPU (h_zbit) = opval; 12108 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 12109 } 12110 SET_H_CBIT_MOVE (0); 12111 SET_H_VBIT_MOVE (0); 12112 { 12113 { 12114 BI opval = 0; 12115 CPU (h_xbit) = opval; 12116 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12117 } 12118 { 12119 BI opval = 0; 12120 SET_H_INSN_PREFIXED_P (opval); 12121 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12122 } 12123 } 12124 } 12125 } 12126 12127 #undef FLD 12128 } 12129 NEXT (vpc); 12130 12131 CASE (sem, INSN_SETF) : /* setf ${list-of-flags} */ 12132 { 12133 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12134 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12135 #define FLD(f) abuf->fields.sfmt_setf.f 12136 int UNUSED written = 0; 12137 IADDR UNUSED pc = abuf->addr; 12138 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12139 12140 { 12141 SI tmp_tmp; 12142 tmp_tmp = FLD (f_dstsrc); 12143 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) { 12144 { 12145 BI opval = 1; 12146 CPU (h_cbit) = opval; 12147 written |= (1 << 1); 12148 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 12149 } 12150 } 12151 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) { 12152 { 12153 BI opval = 1; 12154 CPU (h_vbit) = opval; 12155 written |= (1 << 7); 12156 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 12157 } 12158 } 12159 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) { 12160 { 12161 BI opval = 1; 12162 CPU (h_zbit) = opval; 12163 written |= (1 << 9); 12164 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 12165 } 12166 } 12167 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) { 12168 { 12169 BI opval = 1; 12170 CPU (h_nbit) = opval; 12171 written |= (1 << 3); 12172 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 12173 } 12174 } 12175 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) { 12176 { 12177 BI opval = 1; 12178 CPU (h_xbit) = opval; 12179 written |= (1 << 8); 12180 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12181 } 12182 } 12183 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) { 12184 { 12185 BI opval = 1; 12186 SET_H_IBIT (opval); 12187 written |= (1 << 2); 12188 CGEN_TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval); 12189 } 12190 } 12191 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) { 12192 { 12193 BI opval = 1; 12194 SET_H_UBIT (opval); 12195 written |= (1 << 6); 12196 CGEN_TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval); 12197 } 12198 } 12199 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) { 12200 { 12201 BI opval = 1; 12202 CPU (h_pbit) = opval; 12203 written |= (1 << 4); 12204 CGEN_TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval); 12205 } 12206 } 12207 { 12208 BI opval = 0; 12209 SET_H_INSN_PREFIXED_P (opval); 12210 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12211 } 12212 if (EQSI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) { 12213 { 12214 BI opval = 0; 12215 CPU (h_xbit) = opval; 12216 written |= (1 << 8); 12217 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12218 } 12219 } 12220 } 12221 12222 abuf->written = written; 12223 #undef FLD 12224 } 12225 NEXT (vpc); 12226 12227 CASE (sem, INSN_CLEARF) : /* clearf ${list-of-flags} */ 12228 { 12229 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12230 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12231 #define FLD(f) abuf->fields.sfmt_setf.f 12232 int UNUSED written = 0; 12233 IADDR UNUSED pc = abuf->addr; 12234 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12235 12236 { 12237 SI tmp_tmp; 12238 tmp_tmp = FLD (f_dstsrc); 12239 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) { 12240 { 12241 BI opval = 0; 12242 CPU (h_cbit) = opval; 12243 written |= (1 << 1); 12244 CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval); 12245 } 12246 } 12247 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) { 12248 { 12249 BI opval = 0; 12250 CPU (h_vbit) = opval; 12251 written |= (1 << 7); 12252 CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval); 12253 } 12254 } 12255 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) { 12256 { 12257 BI opval = 0; 12258 CPU (h_zbit) = opval; 12259 written |= (1 << 9); 12260 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 12261 } 12262 } 12263 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) { 12264 { 12265 BI opval = 0; 12266 CPU (h_nbit) = opval; 12267 written |= (1 << 3); 12268 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 12269 } 12270 } 12271 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) { 12272 { 12273 BI opval = 0; 12274 CPU (h_xbit) = opval; 12275 written |= (1 << 8); 12276 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12277 } 12278 } 12279 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) { 12280 { 12281 BI opval = 0; 12282 SET_H_IBIT (opval); 12283 written |= (1 << 2); 12284 CGEN_TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval); 12285 } 12286 } 12287 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) { 12288 { 12289 BI opval = 0; 12290 SET_H_UBIT (opval); 12291 written |= (1 << 6); 12292 CGEN_TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval); 12293 } 12294 } 12295 if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) { 12296 { 12297 BI opval = 0; 12298 CPU (h_pbit) = opval; 12299 written |= (1 << 4); 12300 CGEN_TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval); 12301 } 12302 } 12303 { 12304 { 12305 BI opval = 0; 12306 CPU (h_xbit) = opval; 12307 written |= (1 << 8); 12308 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12309 } 12310 { 12311 BI opval = 0; 12312 SET_H_INSN_PREFIXED_P (opval); 12313 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12314 } 12315 } 12316 } 12317 12318 abuf->written = written; 12319 #undef FLD 12320 } 12321 NEXT (vpc); 12322 12323 CASE (sem, INSN_RFE) : /* rfe */ 12324 { 12325 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12326 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12327 #define FLD(f) abuf->fields.sfmt_rfe.f 12328 int UNUSED written = 0; 12329 IADDR UNUSED pc = abuf->addr; 12330 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12331 12332 { 12333 USI tmp_oldccs; 12334 USI tmp_samebits; 12335 USI tmp_shiftbits; 12336 USI tmp_keepmask; 12337 BI tmp_p1; 12338 tmp_oldccs = GET_H_SR (((UINT) 13)); 12339 tmp_keepmask = 0xc0000000; 12340 tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask); 12341 tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask)); 12342 tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072)); 12343 { 12344 SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128))); 12345 SET_H_SR (((UINT) 13), opval); 12346 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12347 } 12348 } 12349 12350 #undef FLD 12351 } 12352 NEXT (vpc); 12353 12354 CASE (sem, INSN_SFE) : /* sfe */ 12355 { 12356 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12357 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12358 #define FLD(f) abuf->fields.sfmt_rfe.f 12359 int UNUSED written = 0; 12360 IADDR UNUSED pc = abuf->addr; 12361 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12362 12363 { 12364 SI tmp_oldccs; 12365 SI tmp_savemask; 12366 tmp_savemask = 0xc0000000; 12367 tmp_oldccs = GET_H_SR (((UINT) 13)); 12368 { 12369 SI opval = ORSI (ANDSI (tmp_savemask, tmp_oldccs), ANDSI (INVSI (tmp_savemask), SLLSI (tmp_oldccs, 10))); 12370 SET_H_SR (((UINT) 13), opval); 12371 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12372 } 12373 } 12374 12375 #undef FLD 12376 } 12377 NEXT (vpc); 12378 12379 CASE (sem, INSN_RFG) : /* rfg */ 12380 { 12381 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12382 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12383 #define FLD(f) abuf->fields.sfmt_empty.f 12384 int UNUSED written = 0; 12385 IADDR UNUSED pc = abuf->addr; 12386 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12387 12388 crisv32f_rfg_handler (current_cpu, pc); 12389 12390 #undef FLD 12391 } 12392 NEXT (vpc); 12393 12394 CASE (sem, INSN_RFN) : /* rfn */ 12395 { 12396 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12397 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12398 #define FLD(f) abuf->fields.sfmt_rfe.f 12399 int UNUSED written = 0; 12400 IADDR UNUSED pc = abuf->addr; 12401 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12402 12403 { 12404 { 12405 USI tmp_oldccs; 12406 USI tmp_samebits; 12407 USI tmp_shiftbits; 12408 USI tmp_keepmask; 12409 BI tmp_p1; 12410 tmp_oldccs = GET_H_SR (((UINT) 13)); 12411 tmp_keepmask = 0xc0000000; 12412 tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask); 12413 tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask)); 12414 tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072)); 12415 { 12416 SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128))); 12417 SET_H_SR (((UINT) 13), opval); 12418 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12419 } 12420 } 12421 { 12422 BI opval = 1; 12423 SET_H_MBIT (opval); 12424 CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval); 12425 } 12426 } 12427 12428 #undef FLD 12429 } 12430 NEXT (vpc); 12431 12432 CASE (sem, INSN_HALT) : /* halt */ 12433 { 12434 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12435 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12436 #define FLD(f) abuf->fields.sfmt_empty.f 12437 int UNUSED written = 0; 12438 IADDR UNUSED pc = abuf->addr; 12439 SEM_BRANCH_INIT 12440 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12441 12442 { 12443 USI opval = crisv32f_halt_handler (current_cpu, pc); 12444 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 12445 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12446 } 12447 12448 SEM_BRANCH_FINI (vpc); 12449 #undef FLD 12450 } 12451 NEXT (vpc); 12452 12453 CASE (sem, INSN_BCC_B) : /* b${cc} ${o-pcrel} */ 12454 { 12455 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12456 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12457 #define FLD(f) abuf->fields.sfmt_bcc_b.f 12458 int UNUSED written = 0; 12459 IADDR UNUSED pc = abuf->addr; 12460 SEM_BRANCH_INIT 12461 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12462 12463 { 12464 BI tmp_truthval; 12465 tmp_truthval = ({ SI tmp_tmpcond; 12466 BI tmp_condres; 12467 tmp_tmpcond = FLD (f_operand2); 12468 ; if (EQSI (tmp_tmpcond, 0)) { 12469 tmp_condres = NOTBI (CPU (h_cbit)); 12470 } 12471 else if (EQSI (tmp_tmpcond, 1)) { 12472 tmp_condres = CPU (h_cbit); 12473 } 12474 else if (EQSI (tmp_tmpcond, 2)) { 12475 tmp_condres = NOTBI (CPU (h_zbit)); 12476 } 12477 else if (EQSI (tmp_tmpcond, 3)) { 12478 tmp_condres = CPU (h_zbit); 12479 } 12480 else if (EQSI (tmp_tmpcond, 4)) { 12481 tmp_condres = NOTBI (CPU (h_vbit)); 12482 } 12483 else if (EQSI (tmp_tmpcond, 5)) { 12484 tmp_condres = CPU (h_vbit); 12485 } 12486 else if (EQSI (tmp_tmpcond, 6)) { 12487 tmp_condres = NOTBI (CPU (h_nbit)); 12488 } 12489 else if (EQSI (tmp_tmpcond, 7)) { 12490 tmp_condres = CPU (h_nbit); 12491 } 12492 else if (EQSI (tmp_tmpcond, 8)) { 12493 tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit)); 12494 } 12495 else if (EQSI (tmp_tmpcond, 9)) { 12496 tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit))); 12497 } 12498 else if (EQSI (tmp_tmpcond, 10)) { 12499 tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit))); 12500 } 12501 else if (EQSI (tmp_tmpcond, 11)) { 12502 tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit)); 12503 } 12504 else if (EQSI (tmp_tmpcond, 12)) { 12505 tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit))); 12506 } 12507 else if (EQSI (tmp_tmpcond, 13)) { 12508 tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)); 12509 } 12510 else if (EQSI (tmp_tmpcond, 14)) { 12511 tmp_condres = 1; 12512 } 12513 else if (EQSI (tmp_tmpcond, 15)) { 12514 tmp_condres = CPU (h_pbit); 12515 } 12516 else { 12517 cgen_rtx_error (current_cpu, "Unknown condition code"); 12518 } 12519 ; tmp_condres; }); 12520 crisv32f_branch_taken (current_cpu, pc, FLD (i_o_pcrel), tmp_truthval); 12521 { 12522 { 12523 BI opval = 0; 12524 CPU (h_xbit) = opval; 12525 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12526 } 12527 { 12528 BI opval = 0; 12529 SET_H_INSN_PREFIXED_P (opval); 12530 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12531 } 12532 } 12533 if (tmp_truthval) { 12534 { 12535 { 12536 USI opval = FLD (i_o_pcrel); 12537 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 12538 written |= (1 << 8); 12539 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12540 } 12541 } 12542 } 12543 } 12544 12545 abuf->written = written; 12546 SEM_BRANCH_FINI (vpc); 12547 #undef FLD 12548 } 12549 NEXT (vpc); 12550 12551 CASE (sem, INSN_BA_B) : /* ba ${o-pcrel} */ 12552 { 12553 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12554 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12555 #define FLD(f) abuf->fields.sfmt_bcc_b.f 12556 int UNUSED written = 0; 12557 IADDR UNUSED pc = abuf->addr; 12558 SEM_BRANCH_INIT 12559 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12560 12561 { 12562 { 12563 { 12564 BI opval = 0; 12565 CPU (h_xbit) = opval; 12566 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12567 } 12568 { 12569 BI opval = 0; 12570 SET_H_INSN_PREFIXED_P (opval); 12571 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12572 } 12573 } 12574 { 12575 { 12576 USI opval = FLD (i_o_pcrel); 12577 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 12578 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12579 } 12580 } 12581 } 12582 12583 SEM_BRANCH_FINI (vpc); 12584 #undef FLD 12585 } 12586 NEXT (vpc); 12587 12588 CASE (sem, INSN_BCC_W) : /* b${cc} ${o-word-pcrel} */ 12589 { 12590 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12591 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12592 #define FLD(f) abuf->fields.sfmt_bcc_w.f 12593 int UNUSED written = 0; 12594 IADDR UNUSED pc = abuf->addr; 12595 SEM_BRANCH_INIT 12596 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 12597 12598 { 12599 BI tmp_truthval; 12600 tmp_truthval = ({ SI tmp_tmpcond; 12601 BI tmp_condres; 12602 tmp_tmpcond = FLD (f_operand2); 12603 ; if (EQSI (tmp_tmpcond, 0)) { 12604 tmp_condres = NOTBI (CPU (h_cbit)); 12605 } 12606 else if (EQSI (tmp_tmpcond, 1)) { 12607 tmp_condres = CPU (h_cbit); 12608 } 12609 else if (EQSI (tmp_tmpcond, 2)) { 12610 tmp_condres = NOTBI (CPU (h_zbit)); 12611 } 12612 else if (EQSI (tmp_tmpcond, 3)) { 12613 tmp_condres = CPU (h_zbit); 12614 } 12615 else if (EQSI (tmp_tmpcond, 4)) { 12616 tmp_condres = NOTBI (CPU (h_vbit)); 12617 } 12618 else if (EQSI (tmp_tmpcond, 5)) { 12619 tmp_condres = CPU (h_vbit); 12620 } 12621 else if (EQSI (tmp_tmpcond, 6)) { 12622 tmp_condres = NOTBI (CPU (h_nbit)); 12623 } 12624 else if (EQSI (tmp_tmpcond, 7)) { 12625 tmp_condres = CPU (h_nbit); 12626 } 12627 else if (EQSI (tmp_tmpcond, 8)) { 12628 tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit)); 12629 } 12630 else if (EQSI (tmp_tmpcond, 9)) { 12631 tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit))); 12632 } 12633 else if (EQSI (tmp_tmpcond, 10)) { 12634 tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit))); 12635 } 12636 else if (EQSI (tmp_tmpcond, 11)) { 12637 tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit)); 12638 } 12639 else if (EQSI (tmp_tmpcond, 12)) { 12640 tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit))); 12641 } 12642 else if (EQSI (tmp_tmpcond, 13)) { 12643 tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)); 12644 } 12645 else if (EQSI (tmp_tmpcond, 14)) { 12646 tmp_condres = 1; 12647 } 12648 else if (EQSI (tmp_tmpcond, 15)) { 12649 tmp_condres = CPU (h_pbit); 12650 } 12651 else { 12652 cgen_rtx_error (current_cpu, "Unknown condition code"); 12653 } 12654 ; tmp_condres; }); 12655 crisv32f_branch_taken (current_cpu, pc, FLD (i_o_word_pcrel), tmp_truthval); 12656 { 12657 { 12658 BI opval = 0; 12659 CPU (h_xbit) = opval; 12660 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12661 } 12662 { 12663 BI opval = 0; 12664 SET_H_INSN_PREFIXED_P (opval); 12665 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12666 } 12667 } 12668 if (tmp_truthval) { 12669 { 12670 { 12671 USI opval = FLD (i_o_word_pcrel); 12672 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 12673 written |= (1 << 8); 12674 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12675 } 12676 } 12677 } 12678 } 12679 12680 abuf->written = written; 12681 SEM_BRANCH_FINI (vpc); 12682 #undef FLD 12683 } 12684 NEXT (vpc); 12685 12686 CASE (sem, INSN_BA_W) : /* ba ${o-word-pcrel} */ 12687 { 12688 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12689 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12690 #define FLD(f) abuf->fields.sfmt_bcc_w.f 12691 int UNUSED written = 0; 12692 IADDR UNUSED pc = abuf->addr; 12693 SEM_BRANCH_INIT 12694 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 12695 12696 { 12697 { 12698 { 12699 BI opval = 0; 12700 CPU (h_xbit) = opval; 12701 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12702 } 12703 { 12704 BI opval = 0; 12705 SET_H_INSN_PREFIXED_P (opval); 12706 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12707 } 12708 } 12709 { 12710 { 12711 USI opval = FLD (i_o_word_pcrel); 12712 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 12713 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12714 } 12715 } 12716 } 12717 12718 SEM_BRANCH_FINI (vpc); 12719 #undef FLD 12720 } 12721 NEXT (vpc); 12722 12723 CASE (sem, INSN_JAS_R) : /* jas ${Rs},${Pd} */ 12724 { 12725 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12726 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12727 #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f 12728 int UNUSED written = 0; 12729 IADDR UNUSED pc = abuf->addr; 12730 SEM_BRANCH_INIT 12731 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12732 12733 { 12734 { 12735 { 12736 BI opval = 0; 12737 CPU (h_xbit) = opval; 12738 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12739 } 12740 { 12741 BI opval = 0; 12742 SET_H_INSN_PREFIXED_P (opval); 12743 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12744 } 12745 } 12746 if (ANDIF (EQSI (FLD (f_operand1), 1), EQSI (FLD (f_operand2), 11))) { 12747 cris_flush_simulator_decode_cache (current_cpu, pc); 12748 } 12749 { 12750 { 12751 { 12752 SI opval = ADDSI (pc, 4); 12753 SET_H_SR (FLD (f_operand2), opval); 12754 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12755 } 12756 { 12757 USI opval = GET_H_GR (FLD (f_operand1)); 12758 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 12759 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12760 } 12761 } 12762 } 12763 } 12764 12765 SEM_BRANCH_FINI (vpc); 12766 #undef FLD 12767 } 12768 NEXT (vpc); 12769 12770 CASE (sem, INSN_JAS_C) : /* jas ${const32},${Pd} */ 12771 { 12772 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12773 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12774 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 12775 int UNUSED written = 0; 12776 IADDR UNUSED pc = abuf->addr; 12777 SEM_BRANCH_INIT 12778 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 12779 12780 { 12781 { 12782 { 12783 BI opval = 0; 12784 CPU (h_xbit) = opval; 12785 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12786 } 12787 { 12788 BI opval = 0; 12789 SET_H_INSN_PREFIXED_P (opval); 12790 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12791 } 12792 } 12793 { 12794 { 12795 { 12796 SI opval = ADDSI (pc, 8); 12797 SET_H_SR (FLD (f_operand2), opval); 12798 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12799 } 12800 { 12801 USI opval = FLD (f_indir_pc__dword); 12802 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 12803 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12804 } 12805 } 12806 } 12807 } 12808 12809 SEM_BRANCH_FINI (vpc); 12810 #undef FLD 12811 } 12812 NEXT (vpc); 12813 12814 CASE (sem, INSN_JUMP_P) : /* jump ${Ps} */ 12815 { 12816 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12817 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12818 #define FLD(f) abuf->fields.sfmt_mcp.f 12819 int UNUSED written = 0; 12820 IADDR UNUSED pc = abuf->addr; 12821 SEM_BRANCH_INIT 12822 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12823 12824 { 12825 { 12826 { 12827 BI opval = 0; 12828 CPU (h_xbit) = opval; 12829 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12830 } 12831 { 12832 BI opval = 0; 12833 SET_H_INSN_PREFIXED_P (opval); 12834 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12835 } 12836 } 12837 { 12838 { 12839 USI opval = GET_H_SR (FLD (f_operand2)); 12840 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 12841 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12842 } 12843 } 12844 } 12845 12846 SEM_BRANCH_FINI (vpc); 12847 #undef FLD 12848 } 12849 NEXT (vpc); 12850 12851 CASE (sem, INSN_BAS_C) : /* bas ${const32},${Pd} */ 12852 { 12853 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12854 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12855 #define FLD(f) abuf->fields.sfmt_bas_c.f 12856 int UNUSED written = 0; 12857 IADDR UNUSED pc = abuf->addr; 12858 SEM_BRANCH_INIT 12859 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 12860 12861 { 12862 { 12863 { 12864 BI opval = 0; 12865 CPU (h_xbit) = opval; 12866 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12867 } 12868 { 12869 BI opval = 0; 12870 SET_H_INSN_PREFIXED_P (opval); 12871 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12872 } 12873 } 12874 { 12875 { 12876 { 12877 SI opval = ADDSI (pc, 8); 12878 SET_H_SR (FLD (f_operand2), opval); 12879 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12880 } 12881 { 12882 USI opval = FLD (i_const32_pcrel); 12883 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 12884 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12885 } 12886 } 12887 } 12888 } 12889 12890 SEM_BRANCH_FINI (vpc); 12891 #undef FLD 12892 } 12893 NEXT (vpc); 12894 12895 CASE (sem, INSN_JASC_R) : /* jasc ${Rs},${Pd} */ 12896 { 12897 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12898 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12899 #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f 12900 int UNUSED written = 0; 12901 IADDR UNUSED pc = abuf->addr; 12902 SEM_BRANCH_INIT 12903 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12904 12905 { 12906 { 12907 { 12908 BI opval = 0; 12909 CPU (h_xbit) = opval; 12910 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12911 } 12912 { 12913 BI opval = 0; 12914 SET_H_INSN_PREFIXED_P (opval); 12915 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12916 } 12917 } 12918 { 12919 { 12920 { 12921 SI opval = ADDSI (pc, 8); 12922 SET_H_SR (FLD (f_operand2), opval); 12923 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12924 } 12925 { 12926 USI opval = GET_H_GR (FLD (f_operand1)); 12927 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 12928 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12929 } 12930 } 12931 } 12932 } 12933 12934 SEM_BRANCH_FINI (vpc); 12935 #undef FLD 12936 } 12937 NEXT (vpc); 12938 12939 CASE (sem, INSN_JASC_C) : /* jasc ${const32},${Pd} */ 12940 { 12941 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12942 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12943 #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f 12944 int UNUSED written = 0; 12945 IADDR UNUSED pc = abuf->addr; 12946 SEM_BRANCH_INIT 12947 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 12948 12949 { 12950 { 12951 { 12952 BI opval = 0; 12953 CPU (h_xbit) = opval; 12954 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12955 } 12956 { 12957 BI opval = 0; 12958 SET_H_INSN_PREFIXED_P (opval); 12959 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 12960 } 12961 } 12962 { 12963 { 12964 { 12965 SI opval = ADDSI (pc, 12); 12966 SET_H_SR (FLD (f_operand2), opval); 12967 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 12968 } 12969 { 12970 USI opval = FLD (f_indir_pc__dword); 12971 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 12972 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12973 } 12974 } 12975 } 12976 } 12977 12978 SEM_BRANCH_FINI (vpc); 12979 #undef FLD 12980 } 12981 NEXT (vpc); 12982 12983 CASE (sem, INSN_BASC_C) : /* basc ${const32},${Pd} */ 12984 { 12985 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12986 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12987 #define FLD(f) abuf->fields.sfmt_bas_c.f 12988 int UNUSED written = 0; 12989 IADDR UNUSED pc = abuf->addr; 12990 SEM_BRANCH_INIT 12991 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 12992 12993 { 12994 { 12995 { 12996 BI opval = 0; 12997 CPU (h_xbit) = opval; 12998 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 12999 } 13000 { 13001 BI opval = 0; 13002 SET_H_INSN_PREFIXED_P (opval); 13003 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13004 } 13005 } 13006 { 13007 { 13008 { 13009 SI opval = ADDSI (pc, 12); 13010 SET_H_SR (FLD (f_operand2), opval); 13011 CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval); 13012 } 13013 { 13014 USI opval = FLD (i_const32_pcrel); 13015 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 13016 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 13017 } 13018 } 13019 } 13020 } 13021 13022 SEM_BRANCH_FINI (vpc); 13023 #undef FLD 13024 } 13025 NEXT (vpc); 13026 13027 CASE (sem, INSN_BREAK) : /* break $n */ 13028 { 13029 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13030 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13031 #define FLD(f) abuf->fields.sfmt_break.f 13032 int UNUSED written = 0; 13033 IADDR UNUSED pc = abuf->addr; 13034 SEM_BRANCH_INIT 13035 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13036 13037 { 13038 { 13039 { 13040 BI opval = 0; 13041 CPU (h_xbit) = opval; 13042 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13043 } 13044 { 13045 BI opval = 0; 13046 SET_H_INSN_PREFIXED_P (opval); 13047 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13048 } 13049 } 13050 { 13051 USI opval = crisv32f_break_handler (current_cpu, FLD (f_u4), pc); 13052 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 13053 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 13054 } 13055 } 13056 13057 SEM_BRANCH_FINI (vpc); 13058 #undef FLD 13059 } 13060 NEXT (vpc); 13061 13062 CASE (sem, INSN_BOUND_R_B_R) : /* bound-r.b ${Rs},${Rd} */ 13063 { 13064 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13065 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13066 #define FLD(f) abuf->fields.sfmt_muls_b.f 13067 int UNUSED written = 0; 13068 IADDR UNUSED pc = abuf->addr; 13069 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13070 13071 { 13072 SI tmp_tmpopd; 13073 SI tmp_tmpops; 13074 SI tmp_newval; 13075 tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1)))); 13076 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 13077 tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd)); 13078 { 13079 SI opval = tmp_newval; 13080 SET_H_GR (FLD (f_operand2), opval); 13081 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13082 } 13083 { 13084 { 13085 BI opval = LTSI (tmp_newval, 0); 13086 CPU (h_nbit) = opval; 13087 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13088 } 13089 { 13090 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13091 CPU (h_zbit) = opval; 13092 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13093 } 13094 SET_H_CBIT_MOVE (0); 13095 SET_H_VBIT_MOVE (0); 13096 { 13097 { 13098 BI opval = 0; 13099 CPU (h_xbit) = opval; 13100 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13101 } 13102 { 13103 BI opval = 0; 13104 SET_H_INSN_PREFIXED_P (opval); 13105 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13106 } 13107 } 13108 } 13109 } 13110 13111 #undef FLD 13112 } 13113 NEXT (vpc); 13114 13115 CASE (sem, INSN_BOUND_R_W_R) : /* bound-r.w ${Rs},${Rd} */ 13116 { 13117 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13118 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13119 #define FLD(f) abuf->fields.sfmt_muls_b.f 13120 int UNUSED written = 0; 13121 IADDR UNUSED pc = abuf->addr; 13122 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13123 13124 { 13125 SI tmp_tmpopd; 13126 SI tmp_tmpops; 13127 SI tmp_newval; 13128 tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1)))); 13129 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 13130 tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd)); 13131 { 13132 SI opval = tmp_newval; 13133 SET_H_GR (FLD (f_operand2), opval); 13134 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13135 } 13136 { 13137 { 13138 BI opval = LTSI (tmp_newval, 0); 13139 CPU (h_nbit) = opval; 13140 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13141 } 13142 { 13143 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13144 CPU (h_zbit) = opval; 13145 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13146 } 13147 SET_H_CBIT_MOVE (0); 13148 SET_H_VBIT_MOVE (0); 13149 { 13150 { 13151 BI opval = 0; 13152 CPU (h_xbit) = opval; 13153 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13154 } 13155 { 13156 BI opval = 0; 13157 SET_H_INSN_PREFIXED_P (opval); 13158 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13159 } 13160 } 13161 } 13162 } 13163 13164 #undef FLD 13165 } 13166 NEXT (vpc); 13167 13168 CASE (sem, INSN_BOUND_R_D_R) : /* bound-r.d ${Rs},${Rd} */ 13169 { 13170 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13171 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13172 #define FLD(f) abuf->fields.sfmt_muls_b.f 13173 int UNUSED written = 0; 13174 IADDR UNUSED pc = abuf->addr; 13175 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13176 13177 { 13178 SI tmp_tmpopd; 13179 SI tmp_tmpops; 13180 SI tmp_newval; 13181 tmp_tmpops = TRUNCSISI (GET_H_GR (FLD (f_operand1))); 13182 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 13183 tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd)); 13184 { 13185 SI opval = tmp_newval; 13186 SET_H_GR (FLD (f_operand2), opval); 13187 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13188 } 13189 { 13190 { 13191 BI opval = LTSI (tmp_newval, 0); 13192 CPU (h_nbit) = opval; 13193 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13194 } 13195 { 13196 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13197 CPU (h_zbit) = opval; 13198 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13199 } 13200 SET_H_CBIT_MOVE (0); 13201 SET_H_VBIT_MOVE (0); 13202 { 13203 { 13204 BI opval = 0; 13205 CPU (h_xbit) = opval; 13206 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13207 } 13208 { 13209 BI opval = 0; 13210 SET_H_INSN_PREFIXED_P (opval); 13211 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13212 } 13213 } 13214 } 13215 } 13216 13217 #undef FLD 13218 } 13219 NEXT (vpc); 13220 13221 CASE (sem, INSN_BOUND_CB) : /* bound.b [PC+],${Rd} */ 13222 { 13223 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13224 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13225 #define FLD(f) abuf->fields.sfmt_bound_cb.f 13226 int UNUSED written = 0; 13227 IADDR UNUSED pc = abuf->addr; 13228 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13229 13230 { 13231 SI tmp_tmpopd; 13232 SI tmp_tmpops; 13233 SI tmp_newval; 13234 tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))); 13235 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 13236 tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd)); 13237 { 13238 SI opval = tmp_newval; 13239 SET_H_GR (FLD (f_operand2), opval); 13240 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13241 } 13242 { 13243 { 13244 BI opval = LTSI (tmp_newval, 0); 13245 CPU (h_nbit) = opval; 13246 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13247 } 13248 { 13249 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13250 CPU (h_zbit) = opval; 13251 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13252 } 13253 SET_H_CBIT_MOVE (0); 13254 SET_H_VBIT_MOVE (0); 13255 { 13256 { 13257 BI opval = 0; 13258 CPU (h_xbit) = opval; 13259 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13260 } 13261 { 13262 BI opval = 0; 13263 SET_H_INSN_PREFIXED_P (opval); 13264 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13265 } 13266 } 13267 } 13268 } 13269 13270 #undef FLD 13271 } 13272 NEXT (vpc); 13273 13274 CASE (sem, INSN_BOUND_CW) : /* bound.w [PC+],${Rd} */ 13275 { 13276 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13277 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13278 #define FLD(f) abuf->fields.sfmt_bound_cw.f 13279 int UNUSED written = 0; 13280 IADDR UNUSED pc = abuf->addr; 13281 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13282 13283 { 13284 SI tmp_tmpopd; 13285 SI tmp_tmpops; 13286 SI tmp_newval; 13287 tmp_tmpops = ZEXTSISI (FLD (f_indir_pc__word)); 13288 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 13289 tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd)); 13290 { 13291 SI opval = tmp_newval; 13292 SET_H_GR (FLD (f_operand2), opval); 13293 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13294 } 13295 { 13296 { 13297 BI opval = LTSI (tmp_newval, 0); 13298 CPU (h_nbit) = opval; 13299 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13300 } 13301 { 13302 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13303 CPU (h_zbit) = opval; 13304 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13305 } 13306 SET_H_CBIT_MOVE (0); 13307 SET_H_VBIT_MOVE (0); 13308 { 13309 { 13310 BI opval = 0; 13311 CPU (h_xbit) = opval; 13312 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13313 } 13314 { 13315 BI opval = 0; 13316 SET_H_INSN_PREFIXED_P (opval); 13317 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13318 } 13319 } 13320 } 13321 } 13322 13323 #undef FLD 13324 } 13325 NEXT (vpc); 13326 13327 CASE (sem, INSN_BOUND_CD) : /* bound.d [PC+],${Rd} */ 13328 { 13329 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13330 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13331 #define FLD(f) abuf->fields.sfmt_bound_cd.f 13332 int UNUSED written = 0; 13333 IADDR UNUSED pc = abuf->addr; 13334 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 13335 13336 { 13337 SI tmp_tmpopd; 13338 SI tmp_tmpops; 13339 SI tmp_newval; 13340 tmp_tmpops = FLD (f_indir_pc__dword); 13341 tmp_tmpopd = GET_H_GR (FLD (f_operand2)); 13342 tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd)); 13343 { 13344 SI opval = tmp_newval; 13345 SET_H_GR (FLD (f_operand2), opval); 13346 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13347 } 13348 { 13349 { 13350 BI opval = LTSI (tmp_newval, 0); 13351 CPU (h_nbit) = opval; 13352 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13353 } 13354 { 13355 BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13356 CPU (h_zbit) = opval; 13357 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13358 } 13359 SET_H_CBIT_MOVE (0); 13360 SET_H_VBIT_MOVE (0); 13361 { 13362 { 13363 BI opval = 0; 13364 CPU (h_xbit) = opval; 13365 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13366 } 13367 { 13368 BI opval = 0; 13369 SET_H_INSN_PREFIXED_P (opval); 13370 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13371 } 13372 } 13373 } 13374 } 13375 13376 #undef FLD 13377 } 13378 NEXT (vpc); 13379 13380 CASE (sem, INSN_SCC) : /* s${cc} ${Rd-sfield} */ 13381 { 13382 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13383 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13384 #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f 13385 int UNUSED written = 0; 13386 IADDR UNUSED pc = abuf->addr; 13387 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13388 13389 { 13390 BI tmp_truthval; 13391 tmp_truthval = ({ SI tmp_tmpcond; 13392 BI tmp_condres; 13393 tmp_tmpcond = FLD (f_operand2); 13394 ; if (EQSI (tmp_tmpcond, 0)) { 13395 tmp_condres = NOTBI (CPU (h_cbit)); 13396 } 13397 else if (EQSI (tmp_tmpcond, 1)) { 13398 tmp_condres = CPU (h_cbit); 13399 } 13400 else if (EQSI (tmp_tmpcond, 2)) { 13401 tmp_condres = NOTBI (CPU (h_zbit)); 13402 } 13403 else if (EQSI (tmp_tmpcond, 3)) { 13404 tmp_condres = CPU (h_zbit); 13405 } 13406 else if (EQSI (tmp_tmpcond, 4)) { 13407 tmp_condres = NOTBI (CPU (h_vbit)); 13408 } 13409 else if (EQSI (tmp_tmpcond, 5)) { 13410 tmp_condres = CPU (h_vbit); 13411 } 13412 else if (EQSI (tmp_tmpcond, 6)) { 13413 tmp_condres = NOTBI (CPU (h_nbit)); 13414 } 13415 else if (EQSI (tmp_tmpcond, 7)) { 13416 tmp_condres = CPU (h_nbit); 13417 } 13418 else if (EQSI (tmp_tmpcond, 8)) { 13419 tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit)); 13420 } 13421 else if (EQSI (tmp_tmpcond, 9)) { 13422 tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit))); 13423 } 13424 else if (EQSI (tmp_tmpcond, 10)) { 13425 tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit))); 13426 } 13427 else if (EQSI (tmp_tmpcond, 11)) { 13428 tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit)); 13429 } 13430 else if (EQSI (tmp_tmpcond, 12)) { 13431 tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit))); 13432 } 13433 else if (EQSI (tmp_tmpcond, 13)) { 13434 tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)); 13435 } 13436 else if (EQSI (tmp_tmpcond, 14)) { 13437 tmp_condres = 1; 13438 } 13439 else if (EQSI (tmp_tmpcond, 15)) { 13440 tmp_condres = CPU (h_pbit); 13441 } 13442 else { 13443 cgen_rtx_error (current_cpu, "Unknown condition code"); 13444 } 13445 ; tmp_condres; }); 13446 { 13447 SI opval = ZEXTBISI (tmp_truthval); 13448 SET_H_GR (FLD (f_operand1), opval); 13449 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13450 } 13451 { 13452 { 13453 BI opval = 0; 13454 CPU (h_xbit) = opval; 13455 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13456 } 13457 { 13458 BI opval = 0; 13459 SET_H_INSN_PREFIXED_P (opval); 13460 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13461 } 13462 } 13463 } 13464 13465 #undef FLD 13466 } 13467 NEXT (vpc); 13468 13469 CASE (sem, INSN_LZ) : /* lz ${Rs},${Rd} */ 13470 { 13471 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13472 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13473 #define FLD(f) abuf->fields.sfmt_muls_b.f 13474 int UNUSED written = 0; 13475 IADDR UNUSED pc = abuf->addr; 13476 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13477 13478 { 13479 SI tmp_tmpd; 13480 SI tmp_tmp; 13481 tmp_tmp = GET_H_GR (FLD (f_operand1)); 13482 tmp_tmpd = 0; 13483 { 13484 if (GESI (tmp_tmp, 0)) { 13485 { 13486 tmp_tmp = SLLSI (tmp_tmp, 1); 13487 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13488 } 13489 } 13490 if (GESI (tmp_tmp, 0)) { 13491 { 13492 tmp_tmp = SLLSI (tmp_tmp, 1); 13493 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13494 } 13495 } 13496 if (GESI (tmp_tmp, 0)) { 13497 { 13498 tmp_tmp = SLLSI (tmp_tmp, 1); 13499 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13500 } 13501 } 13502 if (GESI (tmp_tmp, 0)) { 13503 { 13504 tmp_tmp = SLLSI (tmp_tmp, 1); 13505 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13506 } 13507 } 13508 if (GESI (tmp_tmp, 0)) { 13509 { 13510 tmp_tmp = SLLSI (tmp_tmp, 1); 13511 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13512 } 13513 } 13514 if (GESI (tmp_tmp, 0)) { 13515 { 13516 tmp_tmp = SLLSI (tmp_tmp, 1); 13517 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13518 } 13519 } 13520 if (GESI (tmp_tmp, 0)) { 13521 { 13522 tmp_tmp = SLLSI (tmp_tmp, 1); 13523 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13524 } 13525 } 13526 if (GESI (tmp_tmp, 0)) { 13527 { 13528 tmp_tmp = SLLSI (tmp_tmp, 1); 13529 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13530 } 13531 } 13532 if (GESI (tmp_tmp, 0)) { 13533 { 13534 tmp_tmp = SLLSI (tmp_tmp, 1); 13535 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13536 } 13537 } 13538 if (GESI (tmp_tmp, 0)) { 13539 { 13540 tmp_tmp = SLLSI (tmp_tmp, 1); 13541 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13542 } 13543 } 13544 if (GESI (tmp_tmp, 0)) { 13545 { 13546 tmp_tmp = SLLSI (tmp_tmp, 1); 13547 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13548 } 13549 } 13550 if (GESI (tmp_tmp, 0)) { 13551 { 13552 tmp_tmp = SLLSI (tmp_tmp, 1); 13553 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13554 } 13555 } 13556 if (GESI (tmp_tmp, 0)) { 13557 { 13558 tmp_tmp = SLLSI (tmp_tmp, 1); 13559 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13560 } 13561 } 13562 if (GESI (tmp_tmp, 0)) { 13563 { 13564 tmp_tmp = SLLSI (tmp_tmp, 1); 13565 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13566 } 13567 } 13568 if (GESI (tmp_tmp, 0)) { 13569 { 13570 tmp_tmp = SLLSI (tmp_tmp, 1); 13571 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13572 } 13573 } 13574 if (GESI (tmp_tmp, 0)) { 13575 { 13576 tmp_tmp = SLLSI (tmp_tmp, 1); 13577 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13578 } 13579 } 13580 if (GESI (tmp_tmp, 0)) { 13581 { 13582 tmp_tmp = SLLSI (tmp_tmp, 1); 13583 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13584 } 13585 } 13586 if (GESI (tmp_tmp, 0)) { 13587 { 13588 tmp_tmp = SLLSI (tmp_tmp, 1); 13589 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13590 } 13591 } 13592 if (GESI (tmp_tmp, 0)) { 13593 { 13594 tmp_tmp = SLLSI (tmp_tmp, 1); 13595 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13596 } 13597 } 13598 if (GESI (tmp_tmp, 0)) { 13599 { 13600 tmp_tmp = SLLSI (tmp_tmp, 1); 13601 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13602 } 13603 } 13604 if (GESI (tmp_tmp, 0)) { 13605 { 13606 tmp_tmp = SLLSI (tmp_tmp, 1); 13607 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13608 } 13609 } 13610 if (GESI (tmp_tmp, 0)) { 13611 { 13612 tmp_tmp = SLLSI (tmp_tmp, 1); 13613 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13614 } 13615 } 13616 if (GESI (tmp_tmp, 0)) { 13617 { 13618 tmp_tmp = SLLSI (tmp_tmp, 1); 13619 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13620 } 13621 } 13622 if (GESI (tmp_tmp, 0)) { 13623 { 13624 tmp_tmp = SLLSI (tmp_tmp, 1); 13625 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13626 } 13627 } 13628 if (GESI (tmp_tmp, 0)) { 13629 { 13630 tmp_tmp = SLLSI (tmp_tmp, 1); 13631 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13632 } 13633 } 13634 if (GESI (tmp_tmp, 0)) { 13635 { 13636 tmp_tmp = SLLSI (tmp_tmp, 1); 13637 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13638 } 13639 } 13640 if (GESI (tmp_tmp, 0)) { 13641 { 13642 tmp_tmp = SLLSI (tmp_tmp, 1); 13643 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13644 } 13645 } 13646 if (GESI (tmp_tmp, 0)) { 13647 { 13648 tmp_tmp = SLLSI (tmp_tmp, 1); 13649 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13650 } 13651 } 13652 if (GESI (tmp_tmp, 0)) { 13653 { 13654 tmp_tmp = SLLSI (tmp_tmp, 1); 13655 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13656 } 13657 } 13658 if (GESI (tmp_tmp, 0)) { 13659 { 13660 tmp_tmp = SLLSI (tmp_tmp, 1); 13661 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13662 } 13663 } 13664 if (GESI (tmp_tmp, 0)) { 13665 { 13666 tmp_tmp = SLLSI (tmp_tmp, 1); 13667 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13668 } 13669 } 13670 if (GESI (tmp_tmp, 0)) { 13671 { 13672 tmp_tmp = SLLSI (tmp_tmp, 1); 13673 tmp_tmpd = ADDSI (tmp_tmpd, 1); 13674 } 13675 } 13676 } 13677 { 13678 SI opval = tmp_tmpd; 13679 SET_H_GR (FLD (f_operand2), opval); 13680 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13681 } 13682 { 13683 { 13684 BI opval = LTSI (tmp_tmpd, 0); 13685 CPU (h_nbit) = opval; 13686 CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval); 13687 } 13688 { 13689 BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))); 13690 CPU (h_zbit) = opval; 13691 CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval); 13692 } 13693 SET_H_CBIT_MOVE (0); 13694 SET_H_VBIT_MOVE (0); 13695 { 13696 { 13697 BI opval = 0; 13698 CPU (h_xbit) = opval; 13699 CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval); 13700 } 13701 { 13702 BI opval = 0; 13703 SET_H_INSN_PREFIXED_P (opval); 13704 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13705 } 13706 } 13707 } 13708 } 13709 13710 #undef FLD 13711 } 13712 NEXT (vpc); 13713 13714 CASE (sem, INSN_ADDOQ) : /* addoq $o,$Rs,ACR */ 13715 { 13716 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13717 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13718 #define FLD(f) abuf->fields.sfmt_addoq.f 13719 int UNUSED written = 0; 13720 IADDR UNUSED pc = abuf->addr; 13721 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13722 13723 { 13724 { 13725 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s8)); 13726 SET_H_PREFIXREG_V32 (opval); 13727 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13728 } 13729 { 13730 BI opval = 1; 13731 SET_H_INSN_PREFIXED_P (opval); 13732 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13733 } 13734 } 13735 13736 #undef FLD 13737 } 13738 NEXT (vpc); 13739 13740 CASE (sem, INSN_ADDO_M_B_M) : /* addo-m.b [${Rs}${inc}],$Rd,ACR */ 13741 { 13742 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13743 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13744 #define FLD(f) abuf->fields.sfmt_addc_m.f 13745 int UNUSED written = 0; 13746 IADDR UNUSED pc = abuf->addr; 13747 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13748 13749 { 13750 QI tmp_tmps; 13751 tmp_tmps = ({ SI tmp_addr; 13752 QI tmp_tmp_mem; 13753 BI tmp_postinc; 13754 tmp_postinc = FLD (f_memmode); 13755 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 13756 ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr); 13757 ; if (NEBI (tmp_postinc, 0)) { 13758 { 13759 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 13760 tmp_addr = ADDSI (tmp_addr, 1); 13761 } 13762 { 13763 SI opval = tmp_addr; 13764 SET_H_GR (FLD (f_operand1), opval); 13765 written |= (1 << 6); 13766 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13767 } 13768 } 13769 } 13770 ; tmp_tmp_mem; }); 13771 { 13772 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (tmp_tmps)); 13773 SET_H_PREFIXREG_V32 (opval); 13774 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13775 } 13776 { 13777 BI opval = 1; 13778 SET_H_INSN_PREFIXED_P (opval); 13779 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13780 } 13781 } 13782 13783 abuf->written = written; 13784 #undef FLD 13785 } 13786 NEXT (vpc); 13787 13788 CASE (sem, INSN_ADDO_M_W_M) : /* addo-m.w [${Rs}${inc}],$Rd,ACR */ 13789 { 13790 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13791 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13792 #define FLD(f) abuf->fields.sfmt_addc_m.f 13793 int UNUSED written = 0; 13794 IADDR UNUSED pc = abuf->addr; 13795 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13796 13797 { 13798 HI tmp_tmps; 13799 tmp_tmps = ({ SI tmp_addr; 13800 HI tmp_tmp_mem; 13801 BI tmp_postinc; 13802 tmp_postinc = FLD (f_memmode); 13803 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 13804 ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr); 13805 ; if (NEBI (tmp_postinc, 0)) { 13806 { 13807 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 13808 tmp_addr = ADDSI (tmp_addr, 2); 13809 } 13810 { 13811 SI opval = tmp_addr; 13812 SET_H_GR (FLD (f_operand1), opval); 13813 written |= (1 << 6); 13814 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13815 } 13816 } 13817 } 13818 ; tmp_tmp_mem; }); 13819 { 13820 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (tmp_tmps)); 13821 SET_H_PREFIXREG_V32 (opval); 13822 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13823 } 13824 { 13825 BI opval = 1; 13826 SET_H_INSN_PREFIXED_P (opval); 13827 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13828 } 13829 } 13830 13831 abuf->written = written; 13832 #undef FLD 13833 } 13834 NEXT (vpc); 13835 13836 CASE (sem, INSN_ADDO_M_D_M) : /* addo-m.d [${Rs}${inc}],$Rd,ACR */ 13837 { 13838 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13839 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13840 #define FLD(f) abuf->fields.sfmt_addc_m.f 13841 int UNUSED written = 0; 13842 IADDR UNUSED pc = abuf->addr; 13843 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13844 13845 { 13846 SI tmp_tmps; 13847 tmp_tmps = ({ SI tmp_addr; 13848 SI tmp_tmp_mem; 13849 BI tmp_postinc; 13850 tmp_postinc = FLD (f_memmode); 13851 ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ())); 13852 ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr); 13853 ; if (NEBI (tmp_postinc, 0)) { 13854 { 13855 if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) { 13856 tmp_addr = ADDSI (tmp_addr, 4); 13857 } 13858 { 13859 SI opval = tmp_addr; 13860 SET_H_GR (FLD (f_operand1), opval); 13861 written |= (1 << 6); 13862 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13863 } 13864 } 13865 } 13866 ; tmp_tmp_mem; }); 13867 { 13868 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), tmp_tmps); 13869 SET_H_PREFIXREG_V32 (opval); 13870 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13871 } 13872 { 13873 BI opval = 1; 13874 SET_H_INSN_PREFIXED_P (opval); 13875 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13876 } 13877 } 13878 13879 abuf->written = written; 13880 #undef FLD 13881 } 13882 NEXT (vpc); 13883 13884 CASE (sem, INSN_ADDO_CB) : /* addo.b [PC+],$Rd,ACR */ 13885 { 13886 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13887 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13888 #define FLD(f) abuf->fields.sfmt_bound_cb.f 13889 int UNUSED written = 0; 13890 IADDR UNUSED pc = abuf->addr; 13891 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13892 13893 { 13894 { 13895 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)))); 13896 SET_H_PREFIXREG_V32 (opval); 13897 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13898 } 13899 { 13900 BI opval = 1; 13901 SET_H_INSN_PREFIXED_P (opval); 13902 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13903 } 13904 } 13905 13906 #undef FLD 13907 } 13908 NEXT (vpc); 13909 13910 CASE (sem, INSN_ADDO_CW) : /* addo.w [PC+],$Rd,ACR */ 13911 { 13912 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13913 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13914 #define FLD(f) abuf->fields.sfmt_bound_cw.f 13915 int UNUSED written = 0; 13916 IADDR UNUSED pc = abuf->addr; 13917 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13918 13919 { 13920 { 13921 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)))); 13922 SET_H_PREFIXREG_V32 (opval); 13923 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13924 } 13925 { 13926 BI opval = 1; 13927 SET_H_INSN_PREFIXED_P (opval); 13928 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13929 } 13930 } 13931 13932 #undef FLD 13933 } 13934 NEXT (vpc); 13935 13936 CASE (sem, INSN_ADDO_CD) : /* addo.d [PC+],$Rd,ACR */ 13937 { 13938 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13939 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13940 #define FLD(f) abuf->fields.sfmt_bound_cd.f 13941 int UNUSED written = 0; 13942 IADDR UNUSED pc = abuf->addr; 13943 vpc = SEM_NEXT_VPC (sem_arg, pc, 6); 13944 13945 { 13946 { 13947 SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword)); 13948 SET_H_PREFIXREG_V32 (opval); 13949 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13950 } 13951 { 13952 BI opval = 1; 13953 SET_H_INSN_PREFIXED_P (opval); 13954 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13955 } 13956 } 13957 13958 #undef FLD 13959 } 13960 NEXT (vpc); 13961 13962 CASE (sem, INSN_ADDI_ACR_B_R) : /* addi-acr.b ${Rs-dfield}.m,${Rd-sfield},ACR */ 13963 { 13964 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13965 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13966 #define FLD(f) abuf->fields.sfmt_muls_b.f 13967 int UNUSED written = 0; 13968 IADDR UNUSED pc = abuf->addr; 13969 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13970 13971 { 13972 { 13973 SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1)); 13974 SET_H_PREFIXREG_V32 (opval); 13975 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 13976 } 13977 { 13978 BI opval = 1; 13979 SET_H_INSN_PREFIXED_P (opval); 13980 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 13981 } 13982 } 13983 13984 #undef FLD 13985 } 13986 NEXT (vpc); 13987 13988 CASE (sem, INSN_ADDI_ACR_W_R) : /* addi-acr.w ${Rs-dfield}.m,${Rd-sfield},ACR */ 13989 { 13990 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13991 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13992 #define FLD(f) abuf->fields.sfmt_muls_b.f 13993 int UNUSED written = 0; 13994 IADDR UNUSED pc = abuf->addr; 13995 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13996 13997 { 13998 { 13999 SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2)); 14000 SET_H_PREFIXREG_V32 (opval); 14001 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 14002 } 14003 { 14004 BI opval = 1; 14005 SET_H_INSN_PREFIXED_P (opval); 14006 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 14007 } 14008 } 14009 14010 #undef FLD 14011 } 14012 NEXT (vpc); 14013 14014 CASE (sem, INSN_ADDI_ACR_D_R) : /* addi-acr.d ${Rs-dfield}.m,${Rd-sfield},ACR */ 14015 { 14016 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14017 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14018 #define FLD(f) abuf->fields.sfmt_muls_b.f 14019 int UNUSED written = 0; 14020 IADDR UNUSED pc = abuf->addr; 14021 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14022 14023 { 14024 { 14025 SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4)); 14026 SET_H_PREFIXREG_V32 (opval); 14027 CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval); 14028 } 14029 { 14030 BI opval = 1; 14031 SET_H_INSN_PREFIXED_P (opval); 14032 CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval); 14033 } 14034 } 14035 14036 #undef FLD 14037 } 14038 NEXT (vpc); 14039 14040 CASE (sem, INSN_FIDXI) : /* fidxi [$Rs] */ 14041 { 14042 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14043 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14044 #define FLD(f) abuf->fields.sfmt_mcp.f 14045 int UNUSED written = 0; 14046 IADDR UNUSED pc = abuf->addr; 14047 SEM_BRANCH_INIT 14048 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14049 14050 { 14051 USI opval = crisv32f_fidxi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1))); 14052 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 14053 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 14054 } 14055 14056 SEM_BRANCH_FINI (vpc); 14057 #undef FLD 14058 } 14059 NEXT (vpc); 14060 14061 CASE (sem, INSN_FTAGI) : /* fidxi [$Rs] */ 14062 { 14063 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14064 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14065 #define FLD(f) abuf->fields.sfmt_mcp.f 14066 int UNUSED written = 0; 14067 IADDR UNUSED pc = abuf->addr; 14068 SEM_BRANCH_INIT 14069 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14070 14071 { 14072 USI opval = crisv32f_ftagi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1))); 14073 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 14074 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 14075 } 14076 14077 SEM_BRANCH_FINI (vpc); 14078 #undef FLD 14079 } 14080 NEXT (vpc); 14081 14082 CASE (sem, INSN_FIDXD) : /* fidxd [$Rs] */ 14083 { 14084 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14085 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14086 #define FLD(f) abuf->fields.sfmt_mcp.f 14087 int UNUSED written = 0; 14088 IADDR UNUSED pc = abuf->addr; 14089 SEM_BRANCH_INIT 14090 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14091 14092 { 14093 USI opval = crisv32f_fidxd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1))); 14094 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 14095 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 14096 } 14097 14098 SEM_BRANCH_FINI (vpc); 14099 #undef FLD 14100 } 14101 NEXT (vpc); 14102 14103 CASE (sem, INSN_FTAGD) : /* ftagd [$Rs] */ 14104 { 14105 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14106 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14107 #define FLD(f) abuf->fields.sfmt_mcp.f 14108 int UNUSED written = 0; 14109 IADDR UNUSED pc = abuf->addr; 14110 SEM_BRANCH_INIT 14111 vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14112 14113 { 14114 USI opval = crisv32f_ftagd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1))); 14115 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 14116 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 14117 } 14118 14119 SEM_BRANCH_FINI (vpc); 14120 #undef FLD 14121 } 14122 NEXT (vpc); 14123 14124 14125 } 14126 ENDSWITCH (sem) /* End of semantic switch. */ 14127 14128 /* At this point `vpc' contains the next insn to execute. */ 14129 } 14130 14131 #undef DEFINE_SWITCH 14132 #endif /* DEFINE_SWITCH */ 14133