1 1.1 christos /* Simulator instruction semantics for iq2000bf. 2 1.1 christos 3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN. 4 1.1 christos 5 1.1.1.12 christos Copyright (C) 1996-2025 Free Software Foundation, Inc. 6 1.1 christos 7 1.1 christos This file is part of the GNU simulators. 8 1.1 christos 9 1.1 christos This file is free software; you can redistribute it and/or modify 10 1.1 christos it under the terms of the GNU General Public License as published by 11 1.1 christos the Free Software Foundation; either version 3, or (at your option) 12 1.1 christos any later version. 13 1.1 christos 14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT 15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 1.1 christos License for more details. 18 1.1 christos 19 1.1 christos You should have received a copy of the GNU General Public License along 20 1.1.1.11 christos with this program; if not, write to the Free Software Foundation, Inc., 21 1.1.1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22 1.1 christos 23 1.1 christos */ 24 1.1 christos 25 1.1 christos #ifdef DEFINE_LABELS 26 1.1 christos 27 1.1 christos /* The labels have the case they have because the enum of insn types 28 1.1 christos is all uppercase and in the non-stdc case the insn symbol is built 29 1.1 christos into the enum name. */ 30 1.1 christos 31 1.1 christos static struct { 32 1.1 christos int index; 33 1.1 christos void *label; 34 1.1 christos } labels[] = { 35 1.1 christos { IQ2000BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID }, 36 1.1 christos { IQ2000BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER }, 37 1.1 christos { IQ2000BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE }, 38 1.1 christos { IQ2000BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN }, 39 1.1 christos { IQ2000BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN }, 40 1.1 christos { IQ2000BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN }, 41 1.1 christos { IQ2000BF_INSN_ADD, && case_sem_INSN_ADD }, 42 1.1 christos { IQ2000BF_INSN_ADDI, && case_sem_INSN_ADDI }, 43 1.1 christos { IQ2000BF_INSN_ADDIU, && case_sem_INSN_ADDIU }, 44 1.1 christos { IQ2000BF_INSN_ADDU, && case_sem_INSN_ADDU }, 45 1.1 christos { IQ2000BF_INSN_ADO16, && case_sem_INSN_ADO16 }, 46 1.1 christos { IQ2000BF_INSN_AND, && case_sem_INSN_AND }, 47 1.1 christos { IQ2000BF_INSN_ANDI, && case_sem_INSN_ANDI }, 48 1.1 christos { IQ2000BF_INSN_ANDOI, && case_sem_INSN_ANDOI }, 49 1.1 christos { IQ2000BF_INSN_NOR, && case_sem_INSN_NOR }, 50 1.1 christos { IQ2000BF_INSN_OR, && case_sem_INSN_OR }, 51 1.1 christos { IQ2000BF_INSN_ORI, && case_sem_INSN_ORI }, 52 1.1 christos { IQ2000BF_INSN_RAM, && case_sem_INSN_RAM }, 53 1.1 christos { IQ2000BF_INSN_SLL, && case_sem_INSN_SLL }, 54 1.1 christos { IQ2000BF_INSN_SLLV, && case_sem_INSN_SLLV }, 55 1.1 christos { IQ2000BF_INSN_SLMV, && case_sem_INSN_SLMV }, 56 1.1 christos { IQ2000BF_INSN_SLT, && case_sem_INSN_SLT }, 57 1.1 christos { IQ2000BF_INSN_SLTI, && case_sem_INSN_SLTI }, 58 1.1 christos { IQ2000BF_INSN_SLTIU, && case_sem_INSN_SLTIU }, 59 1.1 christos { IQ2000BF_INSN_SLTU, && case_sem_INSN_SLTU }, 60 1.1 christos { IQ2000BF_INSN_SRA, && case_sem_INSN_SRA }, 61 1.1 christos { IQ2000BF_INSN_SRAV, && case_sem_INSN_SRAV }, 62 1.1 christos { IQ2000BF_INSN_SRL, && case_sem_INSN_SRL }, 63 1.1 christos { IQ2000BF_INSN_SRLV, && case_sem_INSN_SRLV }, 64 1.1 christos { IQ2000BF_INSN_SRMV, && case_sem_INSN_SRMV }, 65 1.1 christos { IQ2000BF_INSN_SUB, && case_sem_INSN_SUB }, 66 1.1 christos { IQ2000BF_INSN_SUBU, && case_sem_INSN_SUBU }, 67 1.1 christos { IQ2000BF_INSN_XOR, && case_sem_INSN_XOR }, 68 1.1 christos { IQ2000BF_INSN_XORI, && case_sem_INSN_XORI }, 69 1.1 christos { IQ2000BF_INSN_BBI, && case_sem_INSN_BBI }, 70 1.1 christos { IQ2000BF_INSN_BBIN, && case_sem_INSN_BBIN }, 71 1.1 christos { IQ2000BF_INSN_BBV, && case_sem_INSN_BBV }, 72 1.1 christos { IQ2000BF_INSN_BBVN, && case_sem_INSN_BBVN }, 73 1.1 christos { IQ2000BF_INSN_BEQ, && case_sem_INSN_BEQ }, 74 1.1 christos { IQ2000BF_INSN_BEQL, && case_sem_INSN_BEQL }, 75 1.1 christos { IQ2000BF_INSN_BGEZ, && case_sem_INSN_BGEZ }, 76 1.1 christos { IQ2000BF_INSN_BGEZAL, && case_sem_INSN_BGEZAL }, 77 1.1 christos { IQ2000BF_INSN_BGEZALL, && case_sem_INSN_BGEZALL }, 78 1.1 christos { IQ2000BF_INSN_BGEZL, && case_sem_INSN_BGEZL }, 79 1.1 christos { IQ2000BF_INSN_BLTZ, && case_sem_INSN_BLTZ }, 80 1.1 christos { IQ2000BF_INSN_BLTZL, && case_sem_INSN_BLTZL }, 81 1.1 christos { IQ2000BF_INSN_BLTZAL, && case_sem_INSN_BLTZAL }, 82 1.1 christos { IQ2000BF_INSN_BLTZALL, && case_sem_INSN_BLTZALL }, 83 1.1 christos { IQ2000BF_INSN_BMB0, && case_sem_INSN_BMB0 }, 84 1.1 christos { IQ2000BF_INSN_BMB1, && case_sem_INSN_BMB1 }, 85 1.1 christos { IQ2000BF_INSN_BMB2, && case_sem_INSN_BMB2 }, 86 1.1 christos { IQ2000BF_INSN_BMB3, && case_sem_INSN_BMB3 }, 87 1.1 christos { IQ2000BF_INSN_BNE, && case_sem_INSN_BNE }, 88 1.1 christos { IQ2000BF_INSN_BNEL, && case_sem_INSN_BNEL }, 89 1.1 christos { IQ2000BF_INSN_JALR, && case_sem_INSN_JALR }, 90 1.1 christos { IQ2000BF_INSN_JR, && case_sem_INSN_JR }, 91 1.1 christos { IQ2000BF_INSN_LB, && case_sem_INSN_LB }, 92 1.1 christos { IQ2000BF_INSN_LBU, && case_sem_INSN_LBU }, 93 1.1 christos { IQ2000BF_INSN_LH, && case_sem_INSN_LH }, 94 1.1 christos { IQ2000BF_INSN_LHU, && case_sem_INSN_LHU }, 95 1.1 christos { IQ2000BF_INSN_LUI, && case_sem_INSN_LUI }, 96 1.1 christos { IQ2000BF_INSN_LW, && case_sem_INSN_LW }, 97 1.1 christos { IQ2000BF_INSN_SB, && case_sem_INSN_SB }, 98 1.1 christos { IQ2000BF_INSN_SH, && case_sem_INSN_SH }, 99 1.1 christos { IQ2000BF_INSN_SW, && case_sem_INSN_SW }, 100 1.1 christos { IQ2000BF_INSN_BREAK, && case_sem_INSN_BREAK }, 101 1.1 christos { IQ2000BF_INSN_SYSCALL, && case_sem_INSN_SYSCALL }, 102 1.1 christos { IQ2000BF_INSN_ANDOUI, && case_sem_INSN_ANDOUI }, 103 1.1 christos { IQ2000BF_INSN_ORUI, && case_sem_INSN_ORUI }, 104 1.1 christos { IQ2000BF_INSN_BGTZ, && case_sem_INSN_BGTZ }, 105 1.1 christos { IQ2000BF_INSN_BGTZL, && case_sem_INSN_BGTZL }, 106 1.1 christos { IQ2000BF_INSN_BLEZ, && case_sem_INSN_BLEZ }, 107 1.1 christos { IQ2000BF_INSN_BLEZL, && case_sem_INSN_BLEZL }, 108 1.1 christos { IQ2000BF_INSN_MRGB, && case_sem_INSN_MRGB }, 109 1.1 christos { IQ2000BF_INSN_BCTXT, && case_sem_INSN_BCTXT }, 110 1.1 christos { IQ2000BF_INSN_BC0F, && case_sem_INSN_BC0F }, 111 1.1 christos { IQ2000BF_INSN_BC0FL, && case_sem_INSN_BC0FL }, 112 1.1 christos { IQ2000BF_INSN_BC3F, && case_sem_INSN_BC3F }, 113 1.1 christos { IQ2000BF_INSN_BC3FL, && case_sem_INSN_BC3FL }, 114 1.1 christos { IQ2000BF_INSN_BC0T, && case_sem_INSN_BC0T }, 115 1.1 christos { IQ2000BF_INSN_BC0TL, && case_sem_INSN_BC0TL }, 116 1.1 christos { IQ2000BF_INSN_BC3T, && case_sem_INSN_BC3T }, 117 1.1 christos { IQ2000BF_INSN_BC3TL, && case_sem_INSN_BC3TL }, 118 1.1 christos { IQ2000BF_INSN_CFC0, && case_sem_INSN_CFC0 }, 119 1.1 christos { IQ2000BF_INSN_CFC1, && case_sem_INSN_CFC1 }, 120 1.1 christos { IQ2000BF_INSN_CFC2, && case_sem_INSN_CFC2 }, 121 1.1 christos { IQ2000BF_INSN_CFC3, && case_sem_INSN_CFC3 }, 122 1.1 christos { IQ2000BF_INSN_CHKHDR, && case_sem_INSN_CHKHDR }, 123 1.1 christos { IQ2000BF_INSN_CTC0, && case_sem_INSN_CTC0 }, 124 1.1 christos { IQ2000BF_INSN_CTC1, && case_sem_INSN_CTC1 }, 125 1.1 christos { IQ2000BF_INSN_CTC2, && case_sem_INSN_CTC2 }, 126 1.1 christos { IQ2000BF_INSN_CTC3, && case_sem_INSN_CTC3 }, 127 1.1 christos { IQ2000BF_INSN_JCR, && case_sem_INSN_JCR }, 128 1.1 christos { IQ2000BF_INSN_LUC32, && case_sem_INSN_LUC32 }, 129 1.1 christos { IQ2000BF_INSN_LUC32L, && case_sem_INSN_LUC32L }, 130 1.1 christos { IQ2000BF_INSN_LUC64, && case_sem_INSN_LUC64 }, 131 1.1 christos { IQ2000BF_INSN_LUC64L, && case_sem_INSN_LUC64L }, 132 1.1 christos { IQ2000BF_INSN_LUK, && case_sem_INSN_LUK }, 133 1.1 christos { IQ2000BF_INSN_LULCK, && case_sem_INSN_LULCK }, 134 1.1 christos { IQ2000BF_INSN_LUM32, && case_sem_INSN_LUM32 }, 135 1.1 christos { IQ2000BF_INSN_LUM32L, && case_sem_INSN_LUM32L }, 136 1.1 christos { IQ2000BF_INSN_LUM64, && case_sem_INSN_LUM64 }, 137 1.1 christos { IQ2000BF_INSN_LUM64L, && case_sem_INSN_LUM64L }, 138 1.1 christos { IQ2000BF_INSN_LUR, && case_sem_INSN_LUR }, 139 1.1 christos { IQ2000BF_INSN_LURL, && case_sem_INSN_LURL }, 140 1.1 christos { IQ2000BF_INSN_LUULCK, && case_sem_INSN_LUULCK }, 141 1.1 christos { IQ2000BF_INSN_MFC0, && case_sem_INSN_MFC0 }, 142 1.1 christos { IQ2000BF_INSN_MFC1, && case_sem_INSN_MFC1 }, 143 1.1 christos { IQ2000BF_INSN_MFC2, && case_sem_INSN_MFC2 }, 144 1.1 christos { IQ2000BF_INSN_MFC3, && case_sem_INSN_MFC3 }, 145 1.1 christos { IQ2000BF_INSN_MTC0, && case_sem_INSN_MTC0 }, 146 1.1 christos { IQ2000BF_INSN_MTC1, && case_sem_INSN_MTC1 }, 147 1.1 christos { IQ2000BF_INSN_MTC2, && case_sem_INSN_MTC2 }, 148 1.1 christos { IQ2000BF_INSN_MTC3, && case_sem_INSN_MTC3 }, 149 1.1 christos { IQ2000BF_INSN_PKRL, && case_sem_INSN_PKRL }, 150 1.1 christos { IQ2000BF_INSN_PKRLR1, && case_sem_INSN_PKRLR1 }, 151 1.1 christos { IQ2000BF_INSN_PKRLR30, && case_sem_INSN_PKRLR30 }, 152 1.1 christos { IQ2000BF_INSN_RB, && case_sem_INSN_RB }, 153 1.1 christos { IQ2000BF_INSN_RBR1, && case_sem_INSN_RBR1 }, 154 1.1 christos { IQ2000BF_INSN_RBR30, && case_sem_INSN_RBR30 }, 155 1.1 christos { IQ2000BF_INSN_RFE, && case_sem_INSN_RFE }, 156 1.1 christos { IQ2000BF_INSN_RX, && case_sem_INSN_RX }, 157 1.1 christos { IQ2000BF_INSN_RXR1, && case_sem_INSN_RXR1 }, 158 1.1 christos { IQ2000BF_INSN_RXR30, && case_sem_INSN_RXR30 }, 159 1.1 christos { IQ2000BF_INSN_SLEEP, && case_sem_INSN_SLEEP }, 160 1.1 christos { IQ2000BF_INSN_SRRD, && case_sem_INSN_SRRD }, 161 1.1 christos { IQ2000BF_INSN_SRRDL, && case_sem_INSN_SRRDL }, 162 1.1 christos { IQ2000BF_INSN_SRULCK, && case_sem_INSN_SRULCK }, 163 1.1 christos { IQ2000BF_INSN_SRWR, && case_sem_INSN_SRWR }, 164 1.1 christos { IQ2000BF_INSN_SRWRU, && case_sem_INSN_SRWRU }, 165 1.1 christos { IQ2000BF_INSN_TRAPQFL, && case_sem_INSN_TRAPQFL }, 166 1.1 christos { IQ2000BF_INSN_TRAPQNE, && case_sem_INSN_TRAPQNE }, 167 1.1 christos { IQ2000BF_INSN_TRAPREL, && case_sem_INSN_TRAPREL }, 168 1.1 christos { IQ2000BF_INSN_WB, && case_sem_INSN_WB }, 169 1.1 christos { IQ2000BF_INSN_WBU, && case_sem_INSN_WBU }, 170 1.1 christos { IQ2000BF_INSN_WBR1, && case_sem_INSN_WBR1 }, 171 1.1 christos { IQ2000BF_INSN_WBR1U, && case_sem_INSN_WBR1U }, 172 1.1 christos { IQ2000BF_INSN_WBR30, && case_sem_INSN_WBR30 }, 173 1.1 christos { IQ2000BF_INSN_WBR30U, && case_sem_INSN_WBR30U }, 174 1.1 christos { IQ2000BF_INSN_WX, && case_sem_INSN_WX }, 175 1.1 christos { IQ2000BF_INSN_WXU, && case_sem_INSN_WXU }, 176 1.1 christos { IQ2000BF_INSN_WXR1, && case_sem_INSN_WXR1 }, 177 1.1 christos { IQ2000BF_INSN_WXR1U, && case_sem_INSN_WXR1U }, 178 1.1 christos { IQ2000BF_INSN_WXR30, && case_sem_INSN_WXR30 }, 179 1.1 christos { IQ2000BF_INSN_WXR30U, && case_sem_INSN_WXR30U }, 180 1.1 christos { IQ2000BF_INSN_LDW, && case_sem_INSN_LDW }, 181 1.1 christos { IQ2000BF_INSN_SDW, && case_sem_INSN_SDW }, 182 1.1 christos { IQ2000BF_INSN_J, && case_sem_INSN_J }, 183 1.1 christos { IQ2000BF_INSN_JAL, && case_sem_INSN_JAL }, 184 1.1 christos { IQ2000BF_INSN_BMB, && case_sem_INSN_BMB }, 185 1.1 christos { 0, 0 } 186 1.1 christos }; 187 1.1 christos int i; 188 1.1 christos 189 1.1 christos for (i = 0; labels[i].label != 0; ++i) 190 1.1 christos { 191 1.1 christos #if FAST_P 192 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label; 193 1.1 christos #else 194 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label; 195 1.1 christos #endif 196 1.1 christos } 197 1.1 christos 198 1.1 christos #undef DEFINE_LABELS 199 1.1 christos #endif /* DEFINE_LABELS */ 200 1.1 christos 201 1.1 christos #ifdef DEFINE_SWITCH 202 1.1 christos 203 1.1 christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn 204 1.1 christos off frills like tracing and profiling. */ 205 1.1.1.5 christos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something 206 1.1 christos that can cause it to be optimized out. Another way would be to emit 207 1.1 christos special handlers into the instruction "stream". */ 208 1.1 christos 209 1.1 christos #if FAST_P 210 1.1.1.5 christos #undef CGEN_TRACE_RESULT 211 1.1.1.5 christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) 212 1.1 christos #endif 213 1.1 christos 214 1.1 christos #undef GET_ATTR 215 1.1 christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 216 1.1 christos 217 1.1 christos { 218 1.1 christos 219 1.1 christos #if WITH_SCACHE_PBB 220 1.1 christos 221 1.1 christos /* Branch to next handler without going around main loop. */ 222 1.1 christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case 223 1.1 christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case) 224 1.1 christos 225 1.1 christos #else /* ! WITH_SCACHE_PBB */ 226 1.1 christos 227 1.1 christos #define NEXT(vpc) BREAK (sem) 228 1.1 christos #ifdef __GNUC__ 229 1.1 christos #if FAST_P 230 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab) 231 1.1 christos #else 232 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab) 233 1.1 christos #endif 234 1.1 christos #else 235 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num) 236 1.1 christos #endif 237 1.1 christos 238 1.1 christos #endif /* ! WITH_SCACHE_PBB */ 239 1.1 christos 240 1.1 christos { 241 1.1 christos 242 1.1 christos CASE (sem, INSN_X_INVALID) : /* --invalid-- */ 243 1.1 christos { 244 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 245 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 246 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 247 1.1 christos int UNUSED written = 0; 248 1.1 christos IADDR UNUSED pc = abuf->addr; 249 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 250 1.1 christos 251 1.1 christos { 252 1.1 christos /* Update the recorded pc in the cpu state struct. 253 1.1 christos Only necessary for WITH_SCACHE case, but to avoid the 254 1.1 christos conditional compilation .... */ 255 1.1 christos SET_H_PC (pc); 256 1.1 christos /* Virtual insns have zero size. Overwrite vpc with address of next insn 257 1.1 christos using the default-insn-bitsize spec. When executing insns in parallel 258 1.1 christos we may want to queue the fault and continue execution. */ 259 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 260 1.1 christos vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 261 1.1 christos } 262 1.1 christos 263 1.1 christos #undef FLD 264 1.1 christos } 265 1.1 christos NEXT (vpc); 266 1.1 christos 267 1.1 christos CASE (sem, INSN_X_AFTER) : /* --after-- */ 268 1.1 christos { 269 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 270 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 271 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 272 1.1 christos int UNUSED written = 0; 273 1.1 christos IADDR UNUSED pc = abuf->addr; 274 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 275 1.1 christos 276 1.1 christos { 277 1.1 christos #if WITH_SCACHE_PBB_IQ2000BF 278 1.1 christos iq2000bf_pbb_after (current_cpu, sem_arg); 279 1.1 christos #endif 280 1.1 christos } 281 1.1 christos 282 1.1 christos #undef FLD 283 1.1 christos } 284 1.1 christos NEXT (vpc); 285 1.1 christos 286 1.1 christos CASE (sem, INSN_X_BEFORE) : /* --before-- */ 287 1.1 christos { 288 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 289 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 290 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 291 1.1 christos int UNUSED written = 0; 292 1.1 christos IADDR UNUSED pc = abuf->addr; 293 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 294 1.1 christos 295 1.1 christos { 296 1.1 christos #if WITH_SCACHE_PBB_IQ2000BF 297 1.1 christos iq2000bf_pbb_before (current_cpu, sem_arg); 298 1.1 christos #endif 299 1.1 christos } 300 1.1 christos 301 1.1 christos #undef FLD 302 1.1 christos } 303 1.1 christos NEXT (vpc); 304 1.1 christos 305 1.1 christos CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */ 306 1.1 christos { 307 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 308 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 309 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 310 1.1 christos int UNUSED written = 0; 311 1.1 christos IADDR UNUSED pc = abuf->addr; 312 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 313 1.1 christos 314 1.1 christos { 315 1.1 christos #if WITH_SCACHE_PBB_IQ2000BF 316 1.1 christos #ifdef DEFINE_SWITCH 317 1.1 christos vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg, 318 1.1 christos pbb_br_type, pbb_br_npc); 319 1.1 christos BREAK (sem); 320 1.1 christos #else 321 1.1 christos /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 322 1.1 christos vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg, 323 1.1 christos CPU_PBB_BR_TYPE (current_cpu), 324 1.1 christos CPU_PBB_BR_NPC (current_cpu)); 325 1.1 christos #endif 326 1.1 christos #endif 327 1.1 christos } 328 1.1 christos 329 1.1 christos #undef FLD 330 1.1 christos } 331 1.1 christos NEXT (vpc); 332 1.1 christos 333 1.1 christos CASE (sem, INSN_X_CHAIN) : /* --chain-- */ 334 1.1 christos { 335 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 336 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 337 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 338 1.1 christos int UNUSED written = 0; 339 1.1 christos IADDR UNUSED pc = abuf->addr; 340 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 341 1.1 christos 342 1.1 christos { 343 1.1 christos #if WITH_SCACHE_PBB_IQ2000BF 344 1.1 christos vpc = iq2000bf_pbb_chain (current_cpu, sem_arg); 345 1.1 christos #ifdef DEFINE_SWITCH 346 1.1 christos BREAK (sem); 347 1.1 christos #endif 348 1.1 christos #endif 349 1.1 christos } 350 1.1 christos 351 1.1 christos #undef FLD 352 1.1 christos } 353 1.1 christos NEXT (vpc); 354 1.1 christos 355 1.1 christos CASE (sem, INSN_X_BEGIN) : /* --begin-- */ 356 1.1 christos { 357 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 358 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 359 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 360 1.1 christos int UNUSED written = 0; 361 1.1 christos IADDR UNUSED pc = abuf->addr; 362 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 363 1.1 christos 364 1.1 christos { 365 1.1 christos #if WITH_SCACHE_PBB_IQ2000BF 366 1.1 christos #if defined DEFINE_SWITCH || defined FAST_P 367 1.1 christos /* In the switch case FAST_P is a constant, allowing several optimizations 368 1.1 christos in any called inline functions. */ 369 1.1 christos vpc = iq2000bf_pbb_begin (current_cpu, FAST_P); 370 1.1 christos #else 371 1.1 christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 372 1.1 christos vpc = iq2000bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 373 1.1 christos #else 374 1.1 christos vpc = iq2000bf_pbb_begin (current_cpu, 0); 375 1.1 christos #endif 376 1.1 christos #endif 377 1.1 christos #endif 378 1.1 christos } 379 1.1 christos 380 1.1 christos #undef FLD 381 1.1 christos } 382 1.1 christos NEXT (vpc); 383 1.1 christos 384 1.1 christos CASE (sem, INSN_ADD) : /* add $rd,$rs,$rt */ 385 1.1 christos { 386 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 387 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 388 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 389 1.1 christos int UNUSED written = 0; 390 1.1 christos IADDR UNUSED pc = abuf->addr; 391 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 392 1.1 christos 393 1.1 christos { 394 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 395 1.1 christos SET_H_GR (FLD (f_rd), opval); 396 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 397 1.1 christos } 398 1.1 christos 399 1.1 christos #undef FLD 400 1.1 christos } 401 1.1 christos NEXT (vpc); 402 1.1 christos 403 1.1 christos CASE (sem, INSN_ADDI) : /* addi $rt,$rs,$lo16 */ 404 1.1 christos { 405 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 406 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 407 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 408 1.1 christos int UNUSED written = 0; 409 1.1 christos IADDR UNUSED pc = abuf->addr; 410 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 411 1.1 christos 412 1.1 christos { 413 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))); 414 1.1 christos SET_H_GR (FLD (f_rt), opval); 415 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 416 1.1 christos } 417 1.1 christos 418 1.1 christos #undef FLD 419 1.1 christos } 420 1.1 christos NEXT (vpc); 421 1.1 christos 422 1.1 christos CASE (sem, INSN_ADDIU) : /* addiu $rt,$rs,$lo16 */ 423 1.1 christos { 424 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 425 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 426 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 427 1.1 christos int UNUSED written = 0; 428 1.1 christos IADDR UNUSED pc = abuf->addr; 429 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 430 1.1 christos 431 1.1 christos { 432 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))); 433 1.1 christos SET_H_GR (FLD (f_rt), opval); 434 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 435 1.1 christos } 436 1.1 christos 437 1.1 christos #undef FLD 438 1.1 christos } 439 1.1 christos NEXT (vpc); 440 1.1 christos 441 1.1 christos CASE (sem, INSN_ADDU) : /* addu $rd,$rs,$rt */ 442 1.1 christos { 443 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 444 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 445 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 446 1.1 christos int UNUSED written = 0; 447 1.1 christos IADDR UNUSED pc = abuf->addr; 448 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 449 1.1 christos 450 1.1 christos { 451 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 452 1.1 christos SET_H_GR (FLD (f_rd), opval); 453 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 454 1.1 christos } 455 1.1 christos 456 1.1 christos #undef FLD 457 1.1 christos } 458 1.1 christos NEXT (vpc); 459 1.1 christos 460 1.1 christos CASE (sem, INSN_ADO16) : /* ado16 $rd,$rs,$rt */ 461 1.1 christos { 462 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 463 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 464 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 465 1.1 christos int UNUSED written = 0; 466 1.1 christos IADDR UNUSED pc = abuf->addr; 467 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 468 1.1 christos 469 1.1 christos { 470 1.1 christos HI tmp_high; 471 1.1 christos HI tmp_low; 472 1.1 christos tmp_low = ADDHI (ANDHI (GET_H_GR (FLD (f_rs)), 65535), ANDHI (GET_H_GR (FLD (f_rt)), 65535)); 473 1.1 christos tmp_high = ADDHI (SRLSI (GET_H_GR (FLD (f_rs)), 16), SRLSI (GET_H_GR (FLD (f_rt)), 16)); 474 1.1 christos { 475 1.1 christos SI opval = ORSI (SLLSI (tmp_high, 16), tmp_low); 476 1.1 christos SET_H_GR (FLD (f_rd), opval); 477 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 478 1.1 christos } 479 1.1 christos } 480 1.1 christos 481 1.1 christos #undef FLD 482 1.1 christos } 483 1.1 christos NEXT (vpc); 484 1.1 christos 485 1.1 christos CASE (sem, INSN_AND) : /* and $rd,$rs,$rt */ 486 1.1 christos { 487 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 488 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 489 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 490 1.1 christos int UNUSED written = 0; 491 1.1 christos IADDR UNUSED pc = abuf->addr; 492 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 493 1.1 christos 494 1.1 christos { 495 1.1 christos SI opval = ANDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 496 1.1 christos SET_H_GR (FLD (f_rd), opval); 497 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 498 1.1 christos } 499 1.1 christos 500 1.1 christos #undef FLD 501 1.1 christos } 502 1.1 christos NEXT (vpc); 503 1.1 christos 504 1.1 christos CASE (sem, INSN_ANDI) : /* andi $rt,$rs,$lo16 */ 505 1.1 christos { 506 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 507 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 508 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 509 1.1 christos int UNUSED written = 0; 510 1.1 christos IADDR UNUSED pc = abuf->addr; 511 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 512 1.1 christos 513 1.1 christos { 514 1.1 christos SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm))); 515 1.1 christos SET_H_GR (FLD (f_rt), opval); 516 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 517 1.1 christos } 518 1.1 christos 519 1.1 christos #undef FLD 520 1.1 christos } 521 1.1 christos NEXT (vpc); 522 1.1 christos 523 1.1 christos CASE (sem, INSN_ANDOI) : /* andoi $rt,$rs,$lo16 */ 524 1.1 christos { 525 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 526 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 527 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 528 1.1 christos int UNUSED written = 0; 529 1.1 christos IADDR UNUSED pc = abuf->addr; 530 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 531 1.1 christos 532 1.1 christos { 533 1.1 christos SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm))))); 534 1.1 christos SET_H_GR (FLD (f_rt), opval); 535 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 536 1.1 christos } 537 1.1 christos 538 1.1 christos #undef FLD 539 1.1 christos } 540 1.1 christos NEXT (vpc); 541 1.1 christos 542 1.1 christos CASE (sem, INSN_NOR) : /* nor $rd,$rs,$rt */ 543 1.1 christos { 544 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 545 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 546 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 547 1.1 christos int UNUSED written = 0; 548 1.1 christos IADDR UNUSED pc = abuf->addr; 549 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 550 1.1 christos 551 1.1 christos { 552 1.1 christos SI opval = INVSI (ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))); 553 1.1 christos SET_H_GR (FLD (f_rd), opval); 554 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 555 1.1 christos } 556 1.1 christos 557 1.1 christos #undef FLD 558 1.1 christos } 559 1.1 christos NEXT (vpc); 560 1.1 christos 561 1.1 christos CASE (sem, INSN_OR) : /* or $rd,$rs,$rt */ 562 1.1 christos { 563 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 564 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 565 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 566 1.1 christos int UNUSED written = 0; 567 1.1 christos IADDR UNUSED pc = abuf->addr; 568 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 569 1.1 christos 570 1.1 christos { 571 1.1 christos SI opval = ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 572 1.1 christos SET_H_GR (FLD (f_rd), opval); 573 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 574 1.1 christos } 575 1.1 christos 576 1.1 christos #undef FLD 577 1.1 christos } 578 1.1 christos NEXT (vpc); 579 1.1 christos 580 1.1 christos CASE (sem, INSN_ORI) : /* ori $rt,$rs,$lo16 */ 581 1.1 christos { 582 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 583 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 584 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 585 1.1 christos int UNUSED written = 0; 586 1.1 christos IADDR UNUSED pc = abuf->addr; 587 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 588 1.1 christos 589 1.1 christos { 590 1.1 christos SI opval = ORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm))); 591 1.1 christos SET_H_GR (FLD (f_rt), opval); 592 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 593 1.1 christos } 594 1.1 christos 595 1.1 christos #undef FLD 596 1.1 christos } 597 1.1 christos NEXT (vpc); 598 1.1 christos 599 1.1 christos CASE (sem, INSN_RAM) : /* ram $rd,$rt,$shamt,$maskl,$maskr */ 600 1.1 christos { 601 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 602 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 603 1.1 christos #define FLD(f) abuf->fields.sfmt_ram.f 604 1.1 christos int UNUSED written = 0; 605 1.1 christos IADDR UNUSED pc = abuf->addr; 606 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 607 1.1 christos 608 1.1 christos { 609 1.1 christos { 610 1.1 christos SI opval = RORSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 611 1.1 christos SET_H_GR (FLD (f_rd), opval); 612 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 613 1.1 christos } 614 1.1 christos { 615 1.1 christos SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SRLSI (0xffffffff, FLD (f_maskl))); 616 1.1 christos SET_H_GR (FLD (f_rd), opval); 617 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 618 1.1 christos } 619 1.1 christos { 620 1.1 christos SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SLLSI (0xffffffff, FLD (f_rs))); 621 1.1 christos SET_H_GR (FLD (f_rd), opval); 622 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 623 1.1 christos } 624 1.1 christos } 625 1.1 christos 626 1.1 christos #undef FLD 627 1.1 christos } 628 1.1 christos NEXT (vpc); 629 1.1 christos 630 1.1 christos CASE (sem, INSN_SLL) : /* sll $rd,$rt,$shamt */ 631 1.1 christos { 632 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 633 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 634 1.1 christos #define FLD(f) abuf->fields.sfmt_ram.f 635 1.1 christos int UNUSED written = 0; 636 1.1 christos IADDR UNUSED pc = abuf->addr; 637 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 638 1.1 christos 639 1.1 christos { 640 1.1 christos SI opval = SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 641 1.1 christos SET_H_GR (FLD (f_rd), opval); 642 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 643 1.1 christos } 644 1.1 christos 645 1.1 christos #undef FLD 646 1.1 christos } 647 1.1 christos NEXT (vpc); 648 1.1 christos 649 1.1 christos CASE (sem, INSN_SLLV) : /* sllv $rd,$rt,$rs */ 650 1.1 christos { 651 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 652 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 653 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 654 1.1 christos int UNUSED written = 0; 655 1.1 christos IADDR UNUSED pc = abuf->addr; 656 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 657 1.1 christos 658 1.1 christos { 659 1.1 christos SI opval = SLLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31)); 660 1.1 christos SET_H_GR (FLD (f_rd), opval); 661 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 662 1.1 christos } 663 1.1 christos 664 1.1 christos #undef FLD 665 1.1 christos } 666 1.1 christos NEXT (vpc); 667 1.1 christos 668 1.1 christos CASE (sem, INSN_SLMV) : /* slmv $rd,$rt,$rs,$shamt */ 669 1.1 christos { 670 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 671 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 672 1.1 christos #define FLD(f) abuf->fields.sfmt_ram.f 673 1.1 christos int UNUSED written = 0; 674 1.1 christos IADDR UNUSED pc = abuf->addr; 675 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 676 1.1 christos 677 1.1 christos { 678 1.1 christos SI opval = ANDSI (SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs)))); 679 1.1 christos SET_H_GR (FLD (f_rd), opval); 680 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 681 1.1 christos } 682 1.1 christos 683 1.1 christos #undef FLD 684 1.1 christos } 685 1.1 christos NEXT (vpc); 686 1.1 christos 687 1.1 christos CASE (sem, INSN_SLT) : /* slt $rd,$rs,$rt */ 688 1.1 christos { 689 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 690 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 691 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 692 1.1 christos int UNUSED written = 0; 693 1.1 christos IADDR UNUSED pc = abuf->addr; 694 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 695 1.1 christos 696 1.1 christos if (LTSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 697 1.1 christos { 698 1.1 christos SI opval = 1; 699 1.1 christos SET_H_GR (FLD (f_rd), opval); 700 1.1 christos written |= (1 << 2); 701 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 702 1.1 christos } 703 1.1 christos } else { 704 1.1 christos { 705 1.1 christos SI opval = 0; 706 1.1 christos SET_H_GR (FLD (f_rd), opval); 707 1.1 christos written |= (1 << 2); 708 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 709 1.1 christos } 710 1.1 christos } 711 1.1 christos 712 1.1 christos abuf->written = written; 713 1.1 christos #undef FLD 714 1.1 christos } 715 1.1 christos NEXT (vpc); 716 1.1 christos 717 1.1 christos CASE (sem, INSN_SLTI) : /* slti $rt,$rs,$imm */ 718 1.1 christos { 719 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 720 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 721 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 722 1.1 christos int UNUSED written = 0; 723 1.1 christos IADDR UNUSED pc = abuf->addr; 724 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 725 1.1 christos 726 1.1 christos if (LTSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) { 727 1.1 christos { 728 1.1 christos SI opval = 1; 729 1.1 christos SET_H_GR (FLD (f_rt), opval); 730 1.1 christos written |= (1 << 2); 731 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 732 1.1 christos } 733 1.1 christos } else { 734 1.1 christos { 735 1.1 christos SI opval = 0; 736 1.1 christos SET_H_GR (FLD (f_rt), opval); 737 1.1 christos written |= (1 << 2); 738 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 739 1.1 christos } 740 1.1 christos } 741 1.1 christos 742 1.1 christos abuf->written = written; 743 1.1 christos #undef FLD 744 1.1 christos } 745 1.1 christos NEXT (vpc); 746 1.1 christos 747 1.1 christos CASE (sem, INSN_SLTIU) : /* sltiu $rt,$rs,$imm */ 748 1.1 christos { 749 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 750 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 751 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 752 1.1 christos int UNUSED written = 0; 753 1.1 christos IADDR UNUSED pc = abuf->addr; 754 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 755 1.1 christos 756 1.1 christos if (LTUSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) { 757 1.1 christos { 758 1.1 christos SI opval = 1; 759 1.1 christos SET_H_GR (FLD (f_rt), opval); 760 1.1 christos written |= (1 << 2); 761 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 762 1.1 christos } 763 1.1 christos } else { 764 1.1 christos { 765 1.1 christos SI opval = 0; 766 1.1 christos SET_H_GR (FLD (f_rt), opval); 767 1.1 christos written |= (1 << 2); 768 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 769 1.1 christos } 770 1.1 christos } 771 1.1 christos 772 1.1 christos abuf->written = written; 773 1.1 christos #undef FLD 774 1.1 christos } 775 1.1 christos NEXT (vpc); 776 1.1 christos 777 1.1 christos CASE (sem, INSN_SLTU) : /* sltu $rd,$rs,$rt */ 778 1.1 christos { 779 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 780 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 781 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 782 1.1 christos int UNUSED written = 0; 783 1.1 christos IADDR UNUSED pc = abuf->addr; 784 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 785 1.1 christos 786 1.1 christos if (LTUSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 787 1.1 christos { 788 1.1 christos SI opval = 1; 789 1.1 christos SET_H_GR (FLD (f_rd), opval); 790 1.1 christos written |= (1 << 2); 791 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 792 1.1 christos } 793 1.1 christos } else { 794 1.1 christos { 795 1.1 christos SI opval = 0; 796 1.1 christos SET_H_GR (FLD (f_rd), opval); 797 1.1 christos written |= (1 << 2); 798 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 799 1.1 christos } 800 1.1 christos } 801 1.1 christos 802 1.1 christos abuf->written = written; 803 1.1 christos #undef FLD 804 1.1 christos } 805 1.1 christos NEXT (vpc); 806 1.1 christos 807 1.1 christos CASE (sem, INSN_SRA) : /* sra $rd,$rt,$shamt */ 808 1.1 christos { 809 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 810 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 811 1.1 christos #define FLD(f) abuf->fields.sfmt_ram.f 812 1.1 christos int UNUSED written = 0; 813 1.1 christos IADDR UNUSED pc = abuf->addr; 814 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 815 1.1 christos 816 1.1 christos { 817 1.1 christos SI opval = SRASI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 818 1.1 christos SET_H_GR (FLD (f_rd), opval); 819 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 820 1.1 christos } 821 1.1 christos 822 1.1 christos #undef FLD 823 1.1 christos } 824 1.1 christos NEXT (vpc); 825 1.1 christos 826 1.1 christos CASE (sem, INSN_SRAV) : /* srav $rd,$rt,$rs */ 827 1.1 christos { 828 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 829 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 830 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 831 1.1 christos int UNUSED written = 0; 832 1.1 christos IADDR UNUSED pc = abuf->addr; 833 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 834 1.1 christos 835 1.1 christos { 836 1.1 christos SI opval = SRASI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31)); 837 1.1 christos SET_H_GR (FLD (f_rd), opval); 838 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 839 1.1 christos } 840 1.1 christos 841 1.1 christos #undef FLD 842 1.1 christos } 843 1.1 christos NEXT (vpc); 844 1.1 christos 845 1.1 christos CASE (sem, INSN_SRL) : /* srl $rd,$rt,$shamt */ 846 1.1 christos { 847 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 848 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 849 1.1 christos #define FLD(f) abuf->fields.sfmt_ram.f 850 1.1 christos int UNUSED written = 0; 851 1.1 christos IADDR UNUSED pc = abuf->addr; 852 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 853 1.1 christos 854 1.1 christos { 855 1.1 christos SI opval = SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 856 1.1 christos SET_H_GR (FLD (f_rd), opval); 857 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 858 1.1 christos } 859 1.1 christos 860 1.1 christos #undef FLD 861 1.1 christos } 862 1.1 christos NEXT (vpc); 863 1.1 christos 864 1.1 christos CASE (sem, INSN_SRLV) : /* srlv $rd,$rt,$rs */ 865 1.1 christos { 866 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 867 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 868 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 869 1.1 christos int UNUSED written = 0; 870 1.1 christos IADDR UNUSED pc = abuf->addr; 871 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 872 1.1 christos 873 1.1 christos { 874 1.1 christos SI opval = SRLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31)); 875 1.1 christos SET_H_GR (FLD (f_rd), opval); 876 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 877 1.1 christos } 878 1.1 christos 879 1.1 christos #undef FLD 880 1.1 christos } 881 1.1 christos NEXT (vpc); 882 1.1 christos 883 1.1 christos CASE (sem, INSN_SRMV) : /* srmv $rd,$rt,$rs,$shamt */ 884 1.1 christos { 885 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 886 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 887 1.1 christos #define FLD(f) abuf->fields.sfmt_ram.f 888 1.1 christos int UNUSED written = 0; 889 1.1 christos IADDR UNUSED pc = abuf->addr; 890 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 891 1.1 christos 892 1.1 christos { 893 1.1 christos SI opval = ANDSI (SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs)))); 894 1.1 christos SET_H_GR (FLD (f_rd), opval); 895 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 896 1.1 christos } 897 1.1 christos 898 1.1 christos #undef FLD 899 1.1 christos } 900 1.1 christos NEXT (vpc); 901 1.1 christos 902 1.1 christos CASE (sem, INSN_SUB) : /* sub $rd,$rs,$rt */ 903 1.1 christos { 904 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 905 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 906 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 907 1.1 christos int UNUSED written = 0; 908 1.1 christos IADDR UNUSED pc = abuf->addr; 909 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 910 1.1 christos 911 1.1 christos { 912 1.1 christos SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 913 1.1 christos SET_H_GR (FLD (f_rd), opval); 914 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 915 1.1 christos } 916 1.1 christos 917 1.1 christos #undef FLD 918 1.1 christos } 919 1.1 christos NEXT (vpc); 920 1.1 christos 921 1.1 christos CASE (sem, INSN_SUBU) : /* subu $rd,$rs,$rt */ 922 1.1 christos { 923 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 924 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 925 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 926 1.1 christos int UNUSED written = 0; 927 1.1 christos IADDR UNUSED pc = abuf->addr; 928 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 929 1.1 christos 930 1.1 christos { 931 1.1 christos SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 932 1.1 christos SET_H_GR (FLD (f_rd), opval); 933 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 934 1.1 christos } 935 1.1 christos 936 1.1 christos #undef FLD 937 1.1 christos } 938 1.1 christos NEXT (vpc); 939 1.1 christos 940 1.1 christos CASE (sem, INSN_XOR) : /* xor $rd,$rs,$rt */ 941 1.1 christos { 942 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 943 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 944 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 945 1.1 christos int UNUSED written = 0; 946 1.1 christos IADDR UNUSED pc = abuf->addr; 947 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 948 1.1 christos 949 1.1 christos { 950 1.1 christos SI opval = XORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 951 1.1 christos SET_H_GR (FLD (f_rd), opval); 952 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 953 1.1 christos } 954 1.1 christos 955 1.1 christos #undef FLD 956 1.1 christos } 957 1.1 christos NEXT (vpc); 958 1.1 christos 959 1.1 christos CASE (sem, INSN_XORI) : /* xori $rt,$rs,$lo16 */ 960 1.1 christos { 961 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 962 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 963 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 964 1.1 christos int UNUSED written = 0; 965 1.1 christos IADDR UNUSED pc = abuf->addr; 966 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 967 1.1 christos 968 1.1 christos { 969 1.1 christos SI opval = XORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm))); 970 1.1 christos SET_H_GR (FLD (f_rt), opval); 971 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 972 1.1 christos } 973 1.1 christos 974 1.1 christos #undef FLD 975 1.1 christos } 976 1.1 christos NEXT (vpc); 977 1.1 christos 978 1.1 christos CASE (sem, INSN_BBI) : /* bbi $rs($bitnum),$offset */ 979 1.1 christos { 980 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 981 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 982 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 983 1.1 christos int UNUSED written = 0; 984 1.1 christos IADDR UNUSED pc = abuf->addr; 985 1.1 christos SEM_BRANCH_INIT 986 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 987 1.1 christos 988 1.1 christos if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt)))) { 989 1.1 christos { 990 1.1 christos { 991 1.1 christos USI opval = FLD (i_offset); 992 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 993 1.1 christos written |= (1 << 3); 994 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 995 1.1 christos } 996 1.1 christos } 997 1.1 christos } 998 1.1 christos 999 1.1 christos abuf->written = written; 1000 1.1 christos SEM_BRANCH_FINI (vpc); 1001 1.1 christos #undef FLD 1002 1.1 christos } 1003 1.1 christos NEXT (vpc); 1004 1.1 christos 1005 1.1 christos CASE (sem, INSN_BBIN) : /* bbin $rs($bitnum),$offset */ 1006 1.1 christos { 1007 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1008 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1009 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1010 1.1 christos int UNUSED written = 0; 1011 1.1 christos IADDR UNUSED pc = abuf->addr; 1012 1.1 christos SEM_BRANCH_INIT 1013 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1014 1.1 christos 1015 1.1 christos if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt))))) { 1016 1.1 christos { 1017 1.1 christos { 1018 1.1 christos USI opval = FLD (i_offset); 1019 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1020 1.1 christos written |= (1 << 3); 1021 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1022 1.1 christos } 1023 1.1 christos } 1024 1.1 christos } 1025 1.1 christos 1026 1.1 christos abuf->written = written; 1027 1.1 christos SEM_BRANCH_FINI (vpc); 1028 1.1 christos #undef FLD 1029 1.1 christos } 1030 1.1 christos NEXT (vpc); 1031 1.1 christos 1032 1.1 christos CASE (sem, INSN_BBV) : /* bbv $rs,$rt,$offset */ 1033 1.1 christos { 1034 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1035 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1036 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1037 1.1 christos int UNUSED written = 0; 1038 1.1 christos IADDR UNUSED pc = abuf->addr; 1039 1.1 christos SEM_BRANCH_INIT 1040 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1041 1.1 christos 1042 1.1 christos if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31)))) { 1043 1.1 christos { 1044 1.1 christos { 1045 1.1 christos USI opval = FLD (i_offset); 1046 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1047 1.1 christos written |= (1 << 3); 1048 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1049 1.1 christos } 1050 1.1 christos } 1051 1.1 christos } 1052 1.1 christos 1053 1.1 christos abuf->written = written; 1054 1.1 christos SEM_BRANCH_FINI (vpc); 1055 1.1 christos #undef FLD 1056 1.1 christos } 1057 1.1 christos NEXT (vpc); 1058 1.1 christos 1059 1.1 christos CASE (sem, INSN_BBVN) : /* bbvn $rs,$rt,$offset */ 1060 1.1 christos { 1061 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1062 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1063 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1064 1.1 christos int UNUSED written = 0; 1065 1.1 christos IADDR UNUSED pc = abuf->addr; 1066 1.1 christos SEM_BRANCH_INIT 1067 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1068 1.1 christos 1069 1.1 christos if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31))))) { 1070 1.1 christos { 1071 1.1 christos { 1072 1.1 christos USI opval = FLD (i_offset); 1073 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1074 1.1 christos written |= (1 << 3); 1075 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1076 1.1 christos } 1077 1.1 christos } 1078 1.1 christos } 1079 1.1 christos 1080 1.1 christos abuf->written = written; 1081 1.1 christos SEM_BRANCH_FINI (vpc); 1082 1.1 christos #undef FLD 1083 1.1 christos } 1084 1.1 christos NEXT (vpc); 1085 1.1 christos 1086 1.1 christos CASE (sem, INSN_BEQ) : /* beq $rs,$rt,$offset */ 1087 1.1 christos { 1088 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1089 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1090 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1091 1.1 christos int UNUSED written = 0; 1092 1.1 christos IADDR UNUSED pc = abuf->addr; 1093 1.1 christos SEM_BRANCH_INIT 1094 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1095 1.1 christos 1096 1.1 christos if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1097 1.1 christos { 1098 1.1 christos { 1099 1.1 christos USI opval = FLD (i_offset); 1100 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1101 1.1 christos written |= (1 << 3); 1102 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1103 1.1 christos } 1104 1.1 christos } 1105 1.1 christos } 1106 1.1 christos 1107 1.1 christos abuf->written = written; 1108 1.1 christos SEM_BRANCH_FINI (vpc); 1109 1.1 christos #undef FLD 1110 1.1 christos } 1111 1.1 christos NEXT (vpc); 1112 1.1 christos 1113 1.1 christos CASE (sem, INSN_BEQL) : /* beql $rs,$rt,$offset */ 1114 1.1 christos { 1115 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1116 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1117 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1118 1.1 christos int UNUSED written = 0; 1119 1.1 christos IADDR UNUSED pc = abuf->addr; 1120 1.1 christos SEM_BRANCH_INIT 1121 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1122 1.1 christos 1123 1.1 christos if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1124 1.1 christos { 1125 1.1 christos { 1126 1.1 christos USI opval = FLD (i_offset); 1127 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1128 1.1 christos written |= (1 << 3); 1129 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1130 1.1 christos } 1131 1.1 christos } 1132 1.1 christos } else { 1133 1.1 christos if (1) 1134 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1135 1.1 christos } 1136 1.1 christos 1137 1.1 christos abuf->written = written; 1138 1.1 christos SEM_BRANCH_FINI (vpc); 1139 1.1 christos #undef FLD 1140 1.1 christos } 1141 1.1 christos NEXT (vpc); 1142 1.1 christos 1143 1.1 christos CASE (sem, INSN_BGEZ) : /* bgez $rs,$offset */ 1144 1.1 christos { 1145 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1146 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1147 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1148 1.1 christos int UNUSED written = 0; 1149 1.1 christos IADDR UNUSED pc = abuf->addr; 1150 1.1 christos SEM_BRANCH_INIT 1151 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1152 1.1 christos 1153 1.1 christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1154 1.1 christos { 1155 1.1 christos { 1156 1.1 christos USI opval = FLD (i_offset); 1157 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1158 1.1 christos written |= (1 << 2); 1159 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1160 1.1 christos } 1161 1.1 christos } 1162 1.1 christos } 1163 1.1 christos 1164 1.1 christos abuf->written = written; 1165 1.1 christos SEM_BRANCH_FINI (vpc); 1166 1.1 christos #undef FLD 1167 1.1 christos } 1168 1.1 christos NEXT (vpc); 1169 1.1 christos 1170 1.1 christos CASE (sem, INSN_BGEZAL) : /* bgezal $rs,$offset */ 1171 1.1 christos { 1172 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1173 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1174 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1175 1.1 christos int UNUSED written = 0; 1176 1.1 christos IADDR UNUSED pc = abuf->addr; 1177 1.1 christos SEM_BRANCH_INIT 1178 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1179 1.1 christos 1180 1.1 christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1181 1.1 christos { 1182 1.1 christos { 1183 1.1 christos SI opval = ADDSI (pc, 8); 1184 1.1 christos SET_H_GR (((UINT) 31), opval); 1185 1.1 christos written |= (1 << 3); 1186 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1187 1.1 christos } 1188 1.1 christos { 1189 1.1 christos { 1190 1.1 christos USI opval = FLD (i_offset); 1191 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1192 1.1 christos written |= (1 << 4); 1193 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1194 1.1 christos } 1195 1.1 christos } 1196 1.1 christos } 1197 1.1 christos } 1198 1.1 christos 1199 1.1 christos abuf->written = written; 1200 1.1 christos SEM_BRANCH_FINI (vpc); 1201 1.1 christos #undef FLD 1202 1.1 christos } 1203 1.1 christos NEXT (vpc); 1204 1.1 christos 1205 1.1 christos CASE (sem, INSN_BGEZALL) : /* bgezall $rs,$offset */ 1206 1.1 christos { 1207 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1208 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1209 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1210 1.1 christos int UNUSED written = 0; 1211 1.1 christos IADDR UNUSED pc = abuf->addr; 1212 1.1 christos SEM_BRANCH_INIT 1213 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1214 1.1 christos 1215 1.1 christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1216 1.1 christos { 1217 1.1 christos { 1218 1.1 christos SI opval = ADDSI (pc, 8); 1219 1.1 christos SET_H_GR (((UINT) 31), opval); 1220 1.1 christos written |= (1 << 3); 1221 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1222 1.1 christos } 1223 1.1 christos { 1224 1.1 christos { 1225 1.1 christos USI opval = FLD (i_offset); 1226 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1227 1.1 christos written |= (1 << 4); 1228 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1229 1.1 christos } 1230 1.1 christos } 1231 1.1 christos } 1232 1.1 christos } else { 1233 1.1 christos if (1) 1234 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1235 1.1 christos } 1236 1.1 christos 1237 1.1 christos abuf->written = written; 1238 1.1 christos SEM_BRANCH_FINI (vpc); 1239 1.1 christos #undef FLD 1240 1.1 christos } 1241 1.1 christos NEXT (vpc); 1242 1.1 christos 1243 1.1 christos CASE (sem, INSN_BGEZL) : /* bgezl $rs,$offset */ 1244 1.1 christos { 1245 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1246 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1247 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1248 1.1 christos int UNUSED written = 0; 1249 1.1 christos IADDR UNUSED pc = abuf->addr; 1250 1.1 christos SEM_BRANCH_INIT 1251 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1252 1.1 christos 1253 1.1 christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1254 1.1 christos { 1255 1.1 christos { 1256 1.1 christos USI opval = FLD (i_offset); 1257 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1258 1.1 christos written |= (1 << 2); 1259 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1260 1.1 christos } 1261 1.1 christos } 1262 1.1 christos } else { 1263 1.1 christos if (1) 1264 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1265 1.1 christos } 1266 1.1 christos 1267 1.1 christos abuf->written = written; 1268 1.1 christos SEM_BRANCH_FINI (vpc); 1269 1.1 christos #undef FLD 1270 1.1 christos } 1271 1.1 christos NEXT (vpc); 1272 1.1 christos 1273 1.1 christos CASE (sem, INSN_BLTZ) : /* bltz $rs,$offset */ 1274 1.1 christos { 1275 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1276 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1277 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1278 1.1 christos int UNUSED written = 0; 1279 1.1 christos IADDR UNUSED pc = abuf->addr; 1280 1.1 christos SEM_BRANCH_INIT 1281 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1282 1.1 christos 1283 1.1 christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1284 1.1 christos { 1285 1.1 christos { 1286 1.1 christos USI opval = FLD (i_offset); 1287 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1288 1.1 christos written |= (1 << 2); 1289 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1290 1.1 christos } 1291 1.1 christos } 1292 1.1 christos } 1293 1.1 christos 1294 1.1 christos abuf->written = written; 1295 1.1 christos SEM_BRANCH_FINI (vpc); 1296 1.1 christos #undef FLD 1297 1.1 christos } 1298 1.1 christos NEXT (vpc); 1299 1.1 christos 1300 1.1 christos CASE (sem, INSN_BLTZL) : /* bltzl $rs,$offset */ 1301 1.1 christos { 1302 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1303 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1304 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1305 1.1 christos int UNUSED written = 0; 1306 1.1 christos IADDR UNUSED pc = abuf->addr; 1307 1.1 christos SEM_BRANCH_INIT 1308 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1309 1.1 christos 1310 1.1 christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1311 1.1 christos { 1312 1.1 christos { 1313 1.1 christos USI opval = FLD (i_offset); 1314 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1315 1.1 christos written |= (1 << 2); 1316 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1317 1.1 christos } 1318 1.1 christos } 1319 1.1 christos } else { 1320 1.1 christos if (1) 1321 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1322 1.1 christos } 1323 1.1 christos 1324 1.1 christos abuf->written = written; 1325 1.1 christos SEM_BRANCH_FINI (vpc); 1326 1.1 christos #undef FLD 1327 1.1 christos } 1328 1.1 christos NEXT (vpc); 1329 1.1 christos 1330 1.1 christos CASE (sem, INSN_BLTZAL) : /* bltzal $rs,$offset */ 1331 1.1 christos { 1332 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1333 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1334 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1335 1.1 christos int UNUSED written = 0; 1336 1.1 christos IADDR UNUSED pc = abuf->addr; 1337 1.1 christos SEM_BRANCH_INIT 1338 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1339 1.1 christos 1340 1.1 christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1341 1.1 christos { 1342 1.1 christos { 1343 1.1 christos SI opval = ADDSI (pc, 8); 1344 1.1 christos SET_H_GR (((UINT) 31), opval); 1345 1.1 christos written |= (1 << 3); 1346 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1347 1.1 christos } 1348 1.1 christos { 1349 1.1 christos { 1350 1.1 christos USI opval = FLD (i_offset); 1351 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1352 1.1 christos written |= (1 << 4); 1353 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1354 1.1 christos } 1355 1.1 christos } 1356 1.1 christos } 1357 1.1 christos } 1358 1.1 christos 1359 1.1 christos abuf->written = written; 1360 1.1 christos SEM_BRANCH_FINI (vpc); 1361 1.1 christos #undef FLD 1362 1.1 christos } 1363 1.1 christos NEXT (vpc); 1364 1.1 christos 1365 1.1 christos CASE (sem, INSN_BLTZALL) : /* bltzall $rs,$offset */ 1366 1.1 christos { 1367 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1368 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1369 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1370 1.1 christos int UNUSED written = 0; 1371 1.1 christos IADDR UNUSED pc = abuf->addr; 1372 1.1 christos SEM_BRANCH_INIT 1373 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1374 1.1 christos 1375 1.1 christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1376 1.1 christos { 1377 1.1 christos { 1378 1.1 christos SI opval = ADDSI (pc, 8); 1379 1.1 christos SET_H_GR (((UINT) 31), opval); 1380 1.1 christos written |= (1 << 3); 1381 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1382 1.1 christos } 1383 1.1 christos { 1384 1.1 christos { 1385 1.1 christos USI opval = FLD (i_offset); 1386 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1387 1.1 christos written |= (1 << 4); 1388 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1389 1.1 christos } 1390 1.1 christos } 1391 1.1 christos } 1392 1.1 christos } else { 1393 1.1 christos if (1) 1394 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1395 1.1 christos } 1396 1.1 christos 1397 1.1 christos abuf->written = written; 1398 1.1 christos SEM_BRANCH_FINI (vpc); 1399 1.1 christos #undef FLD 1400 1.1 christos } 1401 1.1 christos NEXT (vpc); 1402 1.1 christos 1403 1.1 christos CASE (sem, INSN_BMB0) : /* bmb0 $rs,$rt,$offset */ 1404 1.1 christos { 1405 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1406 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1407 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1408 1.1 christos int UNUSED written = 0; 1409 1.1 christos IADDR UNUSED pc = abuf->addr; 1410 1.1 christos SEM_BRANCH_INIT 1411 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1412 1.1 christos 1413 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) { 1414 1.1 christos { 1415 1.1 christos { 1416 1.1 christos USI opval = FLD (i_offset); 1417 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1418 1.1 christos written |= (1 << 3); 1419 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1420 1.1 christos } 1421 1.1 christos } 1422 1.1 christos } 1423 1.1 christos 1424 1.1 christos abuf->written = written; 1425 1.1 christos SEM_BRANCH_FINI (vpc); 1426 1.1 christos #undef FLD 1427 1.1 christos } 1428 1.1 christos NEXT (vpc); 1429 1.1 christos 1430 1.1 christos CASE (sem, INSN_BMB1) : /* bmb1 $rs,$rt,$offset */ 1431 1.1 christos { 1432 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1433 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1434 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1435 1.1 christos int UNUSED written = 0; 1436 1.1 christos IADDR UNUSED pc = abuf->addr; 1437 1.1 christos SEM_BRANCH_INIT 1438 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1439 1.1 christos 1440 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) { 1441 1.1 christos { 1442 1.1 christos { 1443 1.1 christos USI opval = FLD (i_offset); 1444 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1445 1.1 christos written |= (1 << 3); 1446 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1447 1.1 christos } 1448 1.1 christos } 1449 1.1 christos } 1450 1.1 christos 1451 1.1 christos abuf->written = written; 1452 1.1 christos SEM_BRANCH_FINI (vpc); 1453 1.1 christos #undef FLD 1454 1.1 christos } 1455 1.1 christos NEXT (vpc); 1456 1.1 christos 1457 1.1 christos CASE (sem, INSN_BMB2) : /* bmb2 $rs,$rt,$offset */ 1458 1.1 christos { 1459 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1460 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1461 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1462 1.1 christos int UNUSED written = 0; 1463 1.1 christos IADDR UNUSED pc = abuf->addr; 1464 1.1 christos SEM_BRANCH_INIT 1465 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1466 1.1 christos 1467 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) { 1468 1.1 christos { 1469 1.1 christos { 1470 1.1 christos USI opval = FLD (i_offset); 1471 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1472 1.1 christos written |= (1 << 3); 1473 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1474 1.1 christos } 1475 1.1 christos } 1476 1.1 christos } 1477 1.1 christos 1478 1.1 christos abuf->written = written; 1479 1.1 christos SEM_BRANCH_FINI (vpc); 1480 1.1 christos #undef FLD 1481 1.1 christos } 1482 1.1 christos NEXT (vpc); 1483 1.1 christos 1484 1.1 christos CASE (sem, INSN_BMB3) : /* bmb3 $rs,$rt,$offset */ 1485 1.1 christos { 1486 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1487 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1488 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1489 1.1 christos int UNUSED written = 0; 1490 1.1 christos IADDR UNUSED pc = abuf->addr; 1491 1.1 christos SEM_BRANCH_INIT 1492 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1493 1.1 christos 1494 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) { 1495 1.1 christos { 1496 1.1 christos { 1497 1.1 christos USI opval = FLD (i_offset); 1498 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1499 1.1 christos written |= (1 << 3); 1500 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1501 1.1 christos } 1502 1.1 christos } 1503 1.1 christos } 1504 1.1 christos 1505 1.1 christos abuf->written = written; 1506 1.1 christos SEM_BRANCH_FINI (vpc); 1507 1.1 christos #undef FLD 1508 1.1 christos } 1509 1.1 christos NEXT (vpc); 1510 1.1 christos 1511 1.1 christos CASE (sem, INSN_BNE) : /* bne $rs,$rt,$offset */ 1512 1.1 christos { 1513 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1514 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1515 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1516 1.1 christos int UNUSED written = 0; 1517 1.1 christos IADDR UNUSED pc = abuf->addr; 1518 1.1 christos SEM_BRANCH_INIT 1519 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1520 1.1 christos 1521 1.1 christos if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1522 1.1 christos { 1523 1.1 christos { 1524 1.1 christos USI opval = FLD (i_offset); 1525 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1526 1.1 christos written |= (1 << 3); 1527 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1528 1.1 christos } 1529 1.1 christos } 1530 1.1 christos } 1531 1.1 christos 1532 1.1 christos abuf->written = written; 1533 1.1 christos SEM_BRANCH_FINI (vpc); 1534 1.1 christos #undef FLD 1535 1.1 christos } 1536 1.1 christos NEXT (vpc); 1537 1.1 christos 1538 1.1 christos CASE (sem, INSN_BNEL) : /* bnel $rs,$rt,$offset */ 1539 1.1 christos { 1540 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1541 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1542 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1543 1.1 christos int UNUSED written = 0; 1544 1.1 christos IADDR UNUSED pc = abuf->addr; 1545 1.1 christos SEM_BRANCH_INIT 1546 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1547 1.1 christos 1548 1.1 christos if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1549 1.1 christos { 1550 1.1 christos { 1551 1.1 christos USI opval = FLD (i_offset); 1552 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1553 1.1 christos written |= (1 << 3); 1554 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1555 1.1 christos } 1556 1.1 christos } 1557 1.1 christos } else { 1558 1.1 christos if (1) 1559 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1560 1.1 christos } 1561 1.1 christos 1562 1.1 christos abuf->written = written; 1563 1.1 christos SEM_BRANCH_FINI (vpc); 1564 1.1 christos #undef FLD 1565 1.1 christos } 1566 1.1 christos NEXT (vpc); 1567 1.1 christos 1568 1.1 christos CASE (sem, INSN_JALR) : /* jalr $rd,$rs */ 1569 1.1 christos { 1570 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1571 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1572 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 1573 1.1 christos int UNUSED written = 0; 1574 1.1 christos IADDR UNUSED pc = abuf->addr; 1575 1.1 christos SEM_BRANCH_INIT 1576 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1577 1.1 christos 1578 1.1 christos { 1579 1.1 christos { 1580 1.1 christos { 1581 1.1 christos SI opval = ADDSI (pc, 8); 1582 1.1 christos SET_H_GR (FLD (f_rd), opval); 1583 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1584 1.1 christos } 1585 1.1 christos { 1586 1.1 christos USI opval = GET_H_GR (FLD (f_rs)); 1587 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1588 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1589 1.1 christos } 1590 1.1 christos } 1591 1.1 christos } 1592 1.1 christos 1593 1.1 christos SEM_BRANCH_FINI (vpc); 1594 1.1 christos #undef FLD 1595 1.1 christos } 1596 1.1 christos NEXT (vpc); 1597 1.1 christos 1598 1.1 christos CASE (sem, INSN_JR) : /* jr $rs */ 1599 1.1 christos { 1600 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1601 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1602 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1603 1.1 christos int UNUSED written = 0; 1604 1.1 christos IADDR UNUSED pc = abuf->addr; 1605 1.1 christos SEM_BRANCH_INIT 1606 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1607 1.1 christos 1608 1.1 christos { 1609 1.1 christos { 1610 1.1 christos USI opval = GET_H_GR (FLD (f_rs)); 1611 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1612 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1613 1.1 christos } 1614 1.1 christos } 1615 1.1 christos 1616 1.1 christos SEM_BRANCH_FINI (vpc); 1617 1.1 christos #undef FLD 1618 1.1 christos } 1619 1.1 christos NEXT (vpc); 1620 1.1 christos 1621 1.1 christos CASE (sem, INSN_LB) : /* lb $rt,$lo16($base) */ 1622 1.1 christos { 1623 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1624 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1625 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1626 1.1 christos int UNUSED written = 0; 1627 1.1 christos IADDR UNUSED pc = abuf->addr; 1628 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1629 1.1 christos 1630 1.1 christos { 1631 1.1 christos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1632 1.1 christos SET_H_GR (FLD (f_rt), opval); 1633 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1634 1.1 christos } 1635 1.1 christos 1636 1.1 christos #undef FLD 1637 1.1 christos } 1638 1.1 christos NEXT (vpc); 1639 1.1 christos 1640 1.1 christos CASE (sem, INSN_LBU) : /* lbu $rt,$lo16($base) */ 1641 1.1 christos { 1642 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1643 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1644 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1645 1.1 christos int UNUSED written = 0; 1646 1.1 christos IADDR UNUSED pc = abuf->addr; 1647 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1648 1.1 christos 1649 1.1 christos { 1650 1.1 christos SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1651 1.1 christos SET_H_GR (FLD (f_rt), opval); 1652 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1653 1.1 christos } 1654 1.1 christos 1655 1.1 christos #undef FLD 1656 1.1 christos } 1657 1.1 christos NEXT (vpc); 1658 1.1 christos 1659 1.1 christos CASE (sem, INSN_LH) : /* lh $rt,$lo16($base) */ 1660 1.1 christos { 1661 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1662 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1663 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1664 1.1 christos int UNUSED written = 0; 1665 1.1 christos IADDR UNUSED pc = abuf->addr; 1666 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1667 1.1 christos 1668 1.1 christos { 1669 1.1 christos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1670 1.1 christos SET_H_GR (FLD (f_rt), opval); 1671 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1672 1.1 christos } 1673 1.1 christos 1674 1.1 christos #undef FLD 1675 1.1 christos } 1676 1.1 christos NEXT (vpc); 1677 1.1 christos 1678 1.1 christos CASE (sem, INSN_LHU) : /* lhu $rt,$lo16($base) */ 1679 1.1 christos { 1680 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1681 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1682 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1683 1.1 christos int UNUSED written = 0; 1684 1.1 christos IADDR UNUSED pc = abuf->addr; 1685 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1686 1.1 christos 1687 1.1 christos { 1688 1.1 christos SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1689 1.1 christos SET_H_GR (FLD (f_rt), opval); 1690 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1691 1.1 christos } 1692 1.1 christos 1693 1.1 christos #undef FLD 1694 1.1 christos } 1695 1.1 christos NEXT (vpc); 1696 1.1 christos 1697 1.1 christos CASE (sem, INSN_LUI) : /* lui $rt,$hi16 */ 1698 1.1 christos { 1699 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1700 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1701 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1702 1.1 christos int UNUSED written = 0; 1703 1.1 christos IADDR UNUSED pc = abuf->addr; 1704 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1705 1.1 christos 1706 1.1 christos { 1707 1.1 christos SI opval = SLLSI (FLD (f_imm), 16); 1708 1.1 christos SET_H_GR (FLD (f_rt), opval); 1709 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1710 1.1 christos } 1711 1.1 christos 1712 1.1 christos #undef FLD 1713 1.1 christos } 1714 1.1 christos NEXT (vpc); 1715 1.1 christos 1716 1.1 christos CASE (sem, INSN_LW) : /* lw $rt,$lo16($base) */ 1717 1.1 christos { 1718 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1719 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1720 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1721 1.1 christos int UNUSED written = 0; 1722 1.1 christos IADDR UNUSED pc = abuf->addr; 1723 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1724 1.1 christos 1725 1.1 christos { 1726 1.1 christos SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))); 1727 1.1 christos SET_H_GR (FLD (f_rt), opval); 1728 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1729 1.1 christos } 1730 1.1 christos 1731 1.1 christos #undef FLD 1732 1.1 christos } 1733 1.1 christos NEXT (vpc); 1734 1.1 christos 1735 1.1 christos CASE (sem, INSN_SB) : /* sb $rt,$lo16($base) */ 1736 1.1 christos { 1737 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1738 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1739 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1740 1.1 christos int UNUSED written = 0; 1741 1.1 christos IADDR UNUSED pc = abuf->addr; 1742 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1743 1.1 christos 1744 1.1 christos { 1745 1.1 christos QI opval = ANDQI (GET_H_GR (FLD (f_rt)), 255); 1746 1.1 christos SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval); 1747 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 1748 1.1 christos } 1749 1.1 christos 1750 1.1 christos #undef FLD 1751 1.1 christos } 1752 1.1 christos NEXT (vpc); 1753 1.1 christos 1754 1.1 christos CASE (sem, INSN_SH) : /* sh $rt,$lo16($base) */ 1755 1.1 christos { 1756 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1757 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1758 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1759 1.1 christos int UNUSED written = 0; 1760 1.1 christos IADDR UNUSED pc = abuf->addr; 1761 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1762 1.1 christos 1763 1.1 christos { 1764 1.1 christos HI opval = ANDHI (GET_H_GR (FLD (f_rt)), 65535); 1765 1.1 christos SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval); 1766 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 1767 1.1 christos } 1768 1.1 christos 1769 1.1 christos #undef FLD 1770 1.1 christos } 1771 1.1 christos NEXT (vpc); 1772 1.1 christos 1773 1.1 christos CASE (sem, INSN_SW) : /* sw $rt,$lo16($base) */ 1774 1.1 christos { 1775 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1776 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1777 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1778 1.1 christos int UNUSED written = 0; 1779 1.1 christos IADDR UNUSED pc = abuf->addr; 1780 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1781 1.1 christos 1782 1.1 christos { 1783 1.1 christos SI opval = GET_H_GR (FLD (f_rt)); 1784 1.1 christos SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval); 1785 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 1786 1.1 christos } 1787 1.1 christos 1788 1.1 christos #undef FLD 1789 1.1 christos } 1790 1.1 christos NEXT (vpc); 1791 1.1 christos 1792 1.1 christos CASE (sem, INSN_BREAK) : /* break */ 1793 1.1 christos { 1794 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1795 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1796 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 1797 1.1 christos int UNUSED written = 0; 1798 1.1 christos IADDR UNUSED pc = abuf->addr; 1799 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1800 1.1 christos 1801 1.1 christos do_break (current_cpu, pc); 1802 1.1 christos 1803 1.1 christos #undef FLD 1804 1.1 christos } 1805 1.1 christos NEXT (vpc); 1806 1.1 christos 1807 1.1 christos CASE (sem, INSN_SYSCALL) : /* syscall */ 1808 1.1 christos { 1809 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1810 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1811 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 1812 1.1 christos int UNUSED written = 0; 1813 1.1.1.11 christos IADDR UNUSED pc = abuf->addr; 1814 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1815 1.1 christos 1816 1.1.1.11 christos do_syscall (current_cpu, pc); 1817 1.1 christos 1818 1.1 christos #undef FLD 1819 1.1 christos } 1820 1.1 christos NEXT (vpc); 1821 1.1 christos 1822 1.1 christos CASE (sem, INSN_ANDOUI) : /* andoui $rt,$rs,$hi16 */ 1823 1.1 christos { 1824 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1825 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1826 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1827 1.1 christos int UNUSED written = 0; 1828 1.1 christos IADDR UNUSED pc = abuf->addr; 1829 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1830 1.1 christos 1831 1.1 christos { 1832 1.1 christos SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (SLLSI (FLD (f_imm), 16), 65535)); 1833 1.1 christos SET_H_GR (FLD (f_rt), opval); 1834 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1835 1.1 christos } 1836 1.1 christos 1837 1.1 christos #undef FLD 1838 1.1 christos } 1839 1.1 christos NEXT (vpc); 1840 1.1 christos 1841 1.1 christos CASE (sem, INSN_ORUI) : /* orui $rt,$rs,$hi16 */ 1842 1.1 christos { 1843 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1844 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1845 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1846 1.1 christos int UNUSED written = 0; 1847 1.1 christos IADDR UNUSED pc = abuf->addr; 1848 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1849 1.1 christos 1850 1.1 christos { 1851 1.1 christos SI opval = ORSI (GET_H_GR (FLD (f_rs)), SLLSI (FLD (f_imm), 16)); 1852 1.1 christos SET_H_GR (FLD (f_rt), opval); 1853 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1854 1.1 christos } 1855 1.1 christos 1856 1.1 christos #undef FLD 1857 1.1 christos } 1858 1.1 christos NEXT (vpc); 1859 1.1 christos 1860 1.1 christos CASE (sem, INSN_BGTZ) : /* bgtz $rs,$offset */ 1861 1.1 christos { 1862 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1863 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1864 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1865 1.1 christos int UNUSED written = 0; 1866 1.1 christos IADDR UNUSED pc = abuf->addr; 1867 1.1 christos SEM_BRANCH_INIT 1868 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1869 1.1 christos 1870 1.1 christos if (GTSI (GET_H_GR (FLD (f_rs)), 0)) { 1871 1.1 christos { 1872 1.1 christos { 1873 1.1 christos USI opval = FLD (i_offset); 1874 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1875 1.1 christos written |= (1 << 2); 1876 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1877 1.1 christos } 1878 1.1 christos } 1879 1.1 christos } 1880 1.1 christos 1881 1.1 christos abuf->written = written; 1882 1.1 christos SEM_BRANCH_FINI (vpc); 1883 1.1 christos #undef FLD 1884 1.1 christos } 1885 1.1 christos NEXT (vpc); 1886 1.1 christos 1887 1.1 christos CASE (sem, INSN_BGTZL) : /* bgtzl $rs,$offset */ 1888 1.1 christos { 1889 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1890 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1891 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1892 1.1 christos int UNUSED written = 0; 1893 1.1 christos IADDR UNUSED pc = abuf->addr; 1894 1.1 christos SEM_BRANCH_INIT 1895 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1896 1.1 christos 1897 1.1 christos if (GTSI (GET_H_GR (FLD (f_rs)), 0)) { 1898 1.1 christos { 1899 1.1 christos { 1900 1.1 christos USI opval = FLD (i_offset); 1901 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1902 1.1 christos written |= (1 << 2); 1903 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1904 1.1 christos } 1905 1.1 christos } 1906 1.1 christos } else { 1907 1.1 christos if (1) 1908 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1909 1.1 christos } 1910 1.1 christos 1911 1.1 christos abuf->written = written; 1912 1.1 christos SEM_BRANCH_FINI (vpc); 1913 1.1 christos #undef FLD 1914 1.1 christos } 1915 1.1 christos NEXT (vpc); 1916 1.1 christos 1917 1.1 christos CASE (sem, INSN_BLEZ) : /* blez $rs,$offset */ 1918 1.1 christos { 1919 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1920 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1921 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1922 1.1 christos int UNUSED written = 0; 1923 1.1 christos IADDR UNUSED pc = abuf->addr; 1924 1.1 christos SEM_BRANCH_INIT 1925 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1926 1.1 christos 1927 1.1 christos if (LESI (GET_H_GR (FLD (f_rs)), 0)) { 1928 1.1 christos { 1929 1.1 christos { 1930 1.1 christos USI opval = FLD (i_offset); 1931 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1932 1.1 christos written |= (1 << 2); 1933 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1934 1.1 christos } 1935 1.1 christos } 1936 1.1 christos } 1937 1.1 christos 1938 1.1 christos abuf->written = written; 1939 1.1 christos SEM_BRANCH_FINI (vpc); 1940 1.1 christos #undef FLD 1941 1.1 christos } 1942 1.1 christos NEXT (vpc); 1943 1.1 christos 1944 1.1 christos CASE (sem, INSN_BLEZL) : /* blezl $rs,$offset */ 1945 1.1 christos { 1946 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1947 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1948 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 1949 1.1 christos int UNUSED written = 0; 1950 1.1 christos IADDR UNUSED pc = abuf->addr; 1951 1.1 christos SEM_BRANCH_INIT 1952 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1953 1.1 christos 1954 1.1 christos if (LESI (GET_H_GR (FLD (f_rs)), 0)) { 1955 1.1 christos { 1956 1.1 christos { 1957 1.1 christos USI opval = FLD (i_offset); 1958 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1959 1.1 christos written |= (1 << 2); 1960 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1961 1.1 christos } 1962 1.1 christos } 1963 1.1 christos } else { 1964 1.1 christos if (1) 1965 1.1 christos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1966 1.1 christos } 1967 1.1 christos 1968 1.1 christos abuf->written = written; 1969 1.1 christos SEM_BRANCH_FINI (vpc); 1970 1.1 christos #undef FLD 1971 1.1 christos } 1972 1.1 christos NEXT (vpc); 1973 1.1 christos 1974 1.1 christos CASE (sem, INSN_MRGB) : /* mrgb $rd,$rs,$rt,$mask */ 1975 1.1 christos { 1976 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1977 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1978 1.1 christos #define FLD(f) abuf->fields.sfmt_mrgb.f 1979 1.1 christos int UNUSED written = 0; 1980 1.1 christos IADDR UNUSED pc = abuf->addr; 1981 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1982 1.1 christos 1983 1.1 christos { 1984 1.1 christos SI tmp_temp; 1985 1.1 christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 0)))) { 1986 1.1 christos tmp_temp = ANDSI (GET_H_GR (FLD (f_rs)), 255); 1987 1.1 christos } else { 1988 1.1 christos tmp_temp = ANDSI (GET_H_GR (FLD (f_rt)), 255); 1989 1.1 christos } 1990 1.1 christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 1)))) { 1991 1.1 christos tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 65280)); 1992 1.1 christos } else { 1993 1.1 christos tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 65280)); 1994 1.1 christos } 1995 1.1 christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 2)))) { 1996 1.1 christos tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 16711680)); 1997 1.1 christos } else { 1998 1.1 christos tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 16711680)); 1999 1.1 christos } 2000 1.1 christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 3)))) { 2001 1.1 christos tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000)); 2002 1.1 christos } else { 2003 1.1 christos tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000)); 2004 1.1 christos } 2005 1.1 christos { 2006 1.1 christos SI opval = tmp_temp; 2007 1.1 christos SET_H_GR (FLD (f_rd), opval); 2008 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2009 1.1 christos } 2010 1.1 christos } 2011 1.1 christos 2012 1.1 christos #undef FLD 2013 1.1 christos } 2014 1.1 christos NEXT (vpc); 2015 1.1 christos 2016 1.1 christos CASE (sem, INSN_BCTXT) : /* bctxt $rs,$offset */ 2017 1.1 christos { 2018 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2019 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2020 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2021 1.1 christos int UNUSED written = 0; 2022 1.1 christos IADDR UNUSED pc = abuf->addr; 2023 1.1 christos SEM_BRANCH_INIT 2024 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2025 1.1 christos 2026 1.1 christos ((void) 0); /*nop*/ 2027 1.1 christos 2028 1.1 christos SEM_BRANCH_FINI (vpc); 2029 1.1 christos #undef FLD 2030 1.1 christos } 2031 1.1 christos NEXT (vpc); 2032 1.1 christos 2033 1.1 christos CASE (sem, INSN_BC0F) : /* bc0f $offset */ 2034 1.1 christos { 2035 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2036 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2037 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2038 1.1 christos int UNUSED written = 0; 2039 1.1 christos IADDR UNUSED pc = abuf->addr; 2040 1.1 christos SEM_BRANCH_INIT 2041 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2042 1.1 christos 2043 1.1 christos ((void) 0); /*nop*/ 2044 1.1 christos 2045 1.1 christos SEM_BRANCH_FINI (vpc); 2046 1.1 christos #undef FLD 2047 1.1 christos } 2048 1.1 christos NEXT (vpc); 2049 1.1 christos 2050 1.1 christos CASE (sem, INSN_BC0FL) : /* bc0fl $offset */ 2051 1.1 christos { 2052 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2053 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2054 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2055 1.1 christos int UNUSED written = 0; 2056 1.1 christos IADDR UNUSED pc = abuf->addr; 2057 1.1 christos SEM_BRANCH_INIT 2058 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2059 1.1 christos 2060 1.1 christos ((void) 0); /*nop*/ 2061 1.1 christos 2062 1.1 christos SEM_BRANCH_FINI (vpc); 2063 1.1 christos #undef FLD 2064 1.1 christos } 2065 1.1 christos NEXT (vpc); 2066 1.1 christos 2067 1.1 christos CASE (sem, INSN_BC3F) : /* bc3f $offset */ 2068 1.1 christos { 2069 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2070 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2071 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2072 1.1 christos int UNUSED written = 0; 2073 1.1 christos IADDR UNUSED pc = abuf->addr; 2074 1.1 christos SEM_BRANCH_INIT 2075 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2076 1.1 christos 2077 1.1 christos ((void) 0); /*nop*/ 2078 1.1 christos 2079 1.1 christos SEM_BRANCH_FINI (vpc); 2080 1.1 christos #undef FLD 2081 1.1 christos } 2082 1.1 christos NEXT (vpc); 2083 1.1 christos 2084 1.1 christos CASE (sem, INSN_BC3FL) : /* bc3fl $offset */ 2085 1.1 christos { 2086 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2087 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2088 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2089 1.1 christos int UNUSED written = 0; 2090 1.1 christos IADDR UNUSED pc = abuf->addr; 2091 1.1 christos SEM_BRANCH_INIT 2092 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2093 1.1 christos 2094 1.1 christos ((void) 0); /*nop*/ 2095 1.1 christos 2096 1.1 christos SEM_BRANCH_FINI (vpc); 2097 1.1 christos #undef FLD 2098 1.1 christos } 2099 1.1 christos NEXT (vpc); 2100 1.1 christos 2101 1.1 christos CASE (sem, INSN_BC0T) : /* bc0t $offset */ 2102 1.1 christos { 2103 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2104 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2105 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2106 1.1 christos int UNUSED written = 0; 2107 1.1 christos IADDR UNUSED pc = abuf->addr; 2108 1.1 christos SEM_BRANCH_INIT 2109 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2110 1.1 christos 2111 1.1 christos ((void) 0); /*nop*/ 2112 1.1 christos 2113 1.1 christos SEM_BRANCH_FINI (vpc); 2114 1.1 christos #undef FLD 2115 1.1 christos } 2116 1.1 christos NEXT (vpc); 2117 1.1 christos 2118 1.1 christos CASE (sem, INSN_BC0TL) : /* bc0tl $offset */ 2119 1.1 christos { 2120 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2121 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2122 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2123 1.1 christos int UNUSED written = 0; 2124 1.1 christos IADDR UNUSED pc = abuf->addr; 2125 1.1 christos SEM_BRANCH_INIT 2126 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2127 1.1 christos 2128 1.1 christos ((void) 0); /*nop*/ 2129 1.1 christos 2130 1.1 christos SEM_BRANCH_FINI (vpc); 2131 1.1 christos #undef FLD 2132 1.1 christos } 2133 1.1 christos NEXT (vpc); 2134 1.1 christos 2135 1.1 christos CASE (sem, INSN_BC3T) : /* bc3t $offset */ 2136 1.1 christos { 2137 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2138 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2139 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2140 1.1 christos int UNUSED written = 0; 2141 1.1 christos IADDR UNUSED pc = abuf->addr; 2142 1.1 christos SEM_BRANCH_INIT 2143 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2144 1.1 christos 2145 1.1 christos ((void) 0); /*nop*/ 2146 1.1 christos 2147 1.1 christos SEM_BRANCH_FINI (vpc); 2148 1.1 christos #undef FLD 2149 1.1 christos } 2150 1.1 christos NEXT (vpc); 2151 1.1 christos 2152 1.1 christos CASE (sem, INSN_BC3TL) : /* bc3tl $offset */ 2153 1.1 christos { 2154 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2155 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2156 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2157 1.1 christos int UNUSED written = 0; 2158 1.1 christos IADDR UNUSED pc = abuf->addr; 2159 1.1 christos SEM_BRANCH_INIT 2160 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2161 1.1 christos 2162 1.1 christos ((void) 0); /*nop*/ 2163 1.1 christos 2164 1.1 christos SEM_BRANCH_FINI (vpc); 2165 1.1 christos #undef FLD 2166 1.1 christos } 2167 1.1 christos NEXT (vpc); 2168 1.1 christos 2169 1.1 christos CASE (sem, INSN_CFC0) : /* cfc0 $rt,$rd */ 2170 1.1 christos { 2171 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2172 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2173 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2174 1.1 christos int UNUSED written = 0; 2175 1.1 christos IADDR UNUSED pc = abuf->addr; 2176 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2177 1.1 christos 2178 1.1 christos ((void) 0); /*nop*/ 2179 1.1 christos 2180 1.1 christos #undef FLD 2181 1.1 christos } 2182 1.1 christos NEXT (vpc); 2183 1.1 christos 2184 1.1 christos CASE (sem, INSN_CFC1) : /* cfc1 $rt,$rd */ 2185 1.1 christos { 2186 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2187 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2188 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2189 1.1 christos int UNUSED written = 0; 2190 1.1 christos IADDR UNUSED pc = abuf->addr; 2191 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2192 1.1 christos 2193 1.1 christos ((void) 0); /*nop*/ 2194 1.1 christos 2195 1.1 christos #undef FLD 2196 1.1 christos } 2197 1.1 christos NEXT (vpc); 2198 1.1 christos 2199 1.1 christos CASE (sem, INSN_CFC2) : /* cfc2 $rt,$rd */ 2200 1.1 christos { 2201 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2202 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2203 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2204 1.1 christos int UNUSED written = 0; 2205 1.1 christos IADDR UNUSED pc = abuf->addr; 2206 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2207 1.1 christos 2208 1.1 christos ((void) 0); /*nop*/ 2209 1.1 christos 2210 1.1 christos #undef FLD 2211 1.1 christos } 2212 1.1 christos NEXT (vpc); 2213 1.1 christos 2214 1.1 christos CASE (sem, INSN_CFC3) : /* cfc3 $rt,$rd */ 2215 1.1 christos { 2216 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2217 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2218 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2219 1.1 christos int UNUSED written = 0; 2220 1.1 christos IADDR UNUSED pc = abuf->addr; 2221 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2222 1.1 christos 2223 1.1 christos ((void) 0); /*nop*/ 2224 1.1 christos 2225 1.1 christos #undef FLD 2226 1.1 christos } 2227 1.1 christos NEXT (vpc); 2228 1.1 christos 2229 1.1 christos CASE (sem, INSN_CHKHDR) : /* chkhdr $rd,$rt */ 2230 1.1 christos { 2231 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2232 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2233 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2234 1.1 christos int UNUSED written = 0; 2235 1.1 christos IADDR UNUSED pc = abuf->addr; 2236 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2237 1.1 christos 2238 1.1 christos ((void) 0); /*nop*/ 2239 1.1 christos 2240 1.1 christos #undef FLD 2241 1.1 christos } 2242 1.1 christos NEXT (vpc); 2243 1.1 christos 2244 1.1 christos CASE (sem, INSN_CTC0) : /* ctc0 $rt,$rd */ 2245 1.1 christos { 2246 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2247 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2248 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2249 1.1 christos int UNUSED written = 0; 2250 1.1 christos IADDR UNUSED pc = abuf->addr; 2251 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2252 1.1 christos 2253 1.1 christos ((void) 0); /*nop*/ 2254 1.1 christos 2255 1.1 christos #undef FLD 2256 1.1 christos } 2257 1.1 christos NEXT (vpc); 2258 1.1 christos 2259 1.1 christos CASE (sem, INSN_CTC1) : /* ctc1 $rt,$rd */ 2260 1.1 christos { 2261 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2262 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2263 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2264 1.1 christos int UNUSED written = 0; 2265 1.1 christos IADDR UNUSED pc = abuf->addr; 2266 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2267 1.1 christos 2268 1.1 christos ((void) 0); /*nop*/ 2269 1.1 christos 2270 1.1 christos #undef FLD 2271 1.1 christos } 2272 1.1 christos NEXT (vpc); 2273 1.1 christos 2274 1.1 christos CASE (sem, INSN_CTC2) : /* ctc2 $rt,$rd */ 2275 1.1 christos { 2276 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2277 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2278 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2279 1.1 christos int UNUSED written = 0; 2280 1.1 christos IADDR UNUSED pc = abuf->addr; 2281 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2282 1.1 christos 2283 1.1 christos ((void) 0); /*nop*/ 2284 1.1 christos 2285 1.1 christos #undef FLD 2286 1.1 christos } 2287 1.1 christos NEXT (vpc); 2288 1.1 christos 2289 1.1 christos CASE (sem, INSN_CTC3) : /* ctc3 $rt,$rd */ 2290 1.1 christos { 2291 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2292 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2293 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2294 1.1 christos int UNUSED written = 0; 2295 1.1 christos IADDR UNUSED pc = abuf->addr; 2296 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2297 1.1 christos 2298 1.1 christos ((void) 0); /*nop*/ 2299 1.1 christos 2300 1.1 christos #undef FLD 2301 1.1 christos } 2302 1.1 christos NEXT (vpc); 2303 1.1 christos 2304 1.1 christos CASE (sem, INSN_JCR) : /* jcr $rs */ 2305 1.1 christos { 2306 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2307 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2308 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2309 1.1 christos int UNUSED written = 0; 2310 1.1 christos IADDR UNUSED pc = abuf->addr; 2311 1.1 christos SEM_BRANCH_INIT 2312 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2313 1.1 christos 2314 1.1 christos ((void) 0); /*nop*/ 2315 1.1 christos 2316 1.1 christos SEM_BRANCH_FINI (vpc); 2317 1.1 christos #undef FLD 2318 1.1 christos } 2319 1.1 christos NEXT (vpc); 2320 1.1 christos 2321 1.1 christos CASE (sem, INSN_LUC32) : /* luc32 $rt,$rd */ 2322 1.1 christos { 2323 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2324 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2325 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2326 1.1 christos int UNUSED written = 0; 2327 1.1 christos IADDR UNUSED pc = abuf->addr; 2328 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2329 1.1 christos 2330 1.1 christos ((void) 0); /*nop*/ 2331 1.1 christos 2332 1.1 christos #undef FLD 2333 1.1 christos } 2334 1.1 christos NEXT (vpc); 2335 1.1 christos 2336 1.1 christos CASE (sem, INSN_LUC32L) : /* luc32l $rt,$rd */ 2337 1.1 christos { 2338 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2339 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2340 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2341 1.1 christos int UNUSED written = 0; 2342 1.1 christos IADDR UNUSED pc = abuf->addr; 2343 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2344 1.1 christos 2345 1.1 christos ((void) 0); /*nop*/ 2346 1.1 christos 2347 1.1 christos #undef FLD 2348 1.1 christos } 2349 1.1 christos NEXT (vpc); 2350 1.1 christos 2351 1.1 christos CASE (sem, INSN_LUC64) : /* luc64 $rt,$rd */ 2352 1.1 christos { 2353 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2354 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2355 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2356 1.1 christos int UNUSED written = 0; 2357 1.1 christos IADDR UNUSED pc = abuf->addr; 2358 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2359 1.1 christos 2360 1.1 christos ((void) 0); /*nop*/ 2361 1.1 christos 2362 1.1 christos #undef FLD 2363 1.1 christos } 2364 1.1 christos NEXT (vpc); 2365 1.1 christos 2366 1.1 christos CASE (sem, INSN_LUC64L) : /* luc64l $rt,$rd */ 2367 1.1 christos { 2368 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2369 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2370 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2371 1.1 christos int UNUSED written = 0; 2372 1.1 christos IADDR UNUSED pc = abuf->addr; 2373 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2374 1.1 christos 2375 1.1 christos ((void) 0); /*nop*/ 2376 1.1 christos 2377 1.1 christos #undef FLD 2378 1.1 christos } 2379 1.1 christos NEXT (vpc); 2380 1.1 christos 2381 1.1 christos CASE (sem, INSN_LUK) : /* luk $rt,$rd */ 2382 1.1 christos { 2383 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2384 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2385 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2386 1.1 christos int UNUSED written = 0; 2387 1.1 christos IADDR UNUSED pc = abuf->addr; 2388 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2389 1.1 christos 2390 1.1 christos ((void) 0); /*nop*/ 2391 1.1 christos 2392 1.1 christos #undef FLD 2393 1.1 christos } 2394 1.1 christos NEXT (vpc); 2395 1.1 christos 2396 1.1 christos CASE (sem, INSN_LULCK) : /* lulck $rt */ 2397 1.1 christos { 2398 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2399 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2400 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2401 1.1 christos int UNUSED written = 0; 2402 1.1 christos IADDR UNUSED pc = abuf->addr; 2403 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2404 1.1 christos 2405 1.1 christos ((void) 0); /*nop*/ 2406 1.1 christos 2407 1.1 christos #undef FLD 2408 1.1 christos } 2409 1.1 christos NEXT (vpc); 2410 1.1 christos 2411 1.1 christos CASE (sem, INSN_LUM32) : /* lum32 $rt,$rd */ 2412 1.1 christos { 2413 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2414 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2415 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2416 1.1 christos int UNUSED written = 0; 2417 1.1 christos IADDR UNUSED pc = abuf->addr; 2418 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2419 1.1 christos 2420 1.1 christos ((void) 0); /*nop*/ 2421 1.1 christos 2422 1.1 christos #undef FLD 2423 1.1 christos } 2424 1.1 christos NEXT (vpc); 2425 1.1 christos 2426 1.1 christos CASE (sem, INSN_LUM32L) : /* lum32l $rt,$rd */ 2427 1.1 christos { 2428 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2429 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2430 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2431 1.1 christos int UNUSED written = 0; 2432 1.1 christos IADDR UNUSED pc = abuf->addr; 2433 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2434 1.1 christos 2435 1.1 christos ((void) 0); /*nop*/ 2436 1.1 christos 2437 1.1 christos #undef FLD 2438 1.1 christos } 2439 1.1 christos NEXT (vpc); 2440 1.1 christos 2441 1.1 christos CASE (sem, INSN_LUM64) : /* lum64 $rt,$rd */ 2442 1.1 christos { 2443 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2444 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2445 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2446 1.1 christos int UNUSED written = 0; 2447 1.1 christos IADDR UNUSED pc = abuf->addr; 2448 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2449 1.1 christos 2450 1.1 christos ((void) 0); /*nop*/ 2451 1.1 christos 2452 1.1 christos #undef FLD 2453 1.1 christos } 2454 1.1 christos NEXT (vpc); 2455 1.1 christos 2456 1.1 christos CASE (sem, INSN_LUM64L) : /* lum64l $rt,$rd */ 2457 1.1 christos { 2458 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2459 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2460 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2461 1.1 christos int UNUSED written = 0; 2462 1.1 christos IADDR UNUSED pc = abuf->addr; 2463 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2464 1.1 christos 2465 1.1 christos ((void) 0); /*nop*/ 2466 1.1 christos 2467 1.1 christos #undef FLD 2468 1.1 christos } 2469 1.1 christos NEXT (vpc); 2470 1.1 christos 2471 1.1 christos CASE (sem, INSN_LUR) : /* lur $rt,$rd */ 2472 1.1 christos { 2473 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2474 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2475 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2476 1.1 christos int UNUSED written = 0; 2477 1.1 christos IADDR UNUSED pc = abuf->addr; 2478 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2479 1.1 christos 2480 1.1 christos ((void) 0); /*nop*/ 2481 1.1 christos 2482 1.1 christos #undef FLD 2483 1.1 christos } 2484 1.1 christos NEXT (vpc); 2485 1.1 christos 2486 1.1 christos CASE (sem, INSN_LURL) : /* lurl $rt,$rd */ 2487 1.1 christos { 2488 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2489 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2490 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2491 1.1 christos int UNUSED written = 0; 2492 1.1 christos IADDR UNUSED pc = abuf->addr; 2493 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2494 1.1 christos 2495 1.1 christos ((void) 0); /*nop*/ 2496 1.1 christos 2497 1.1 christos #undef FLD 2498 1.1 christos } 2499 1.1 christos NEXT (vpc); 2500 1.1 christos 2501 1.1 christos CASE (sem, INSN_LUULCK) : /* luulck $rt */ 2502 1.1 christos { 2503 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2504 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2505 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2506 1.1 christos int UNUSED written = 0; 2507 1.1 christos IADDR UNUSED pc = abuf->addr; 2508 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2509 1.1 christos 2510 1.1 christos ((void) 0); /*nop*/ 2511 1.1 christos 2512 1.1 christos #undef FLD 2513 1.1 christos } 2514 1.1 christos NEXT (vpc); 2515 1.1 christos 2516 1.1 christos CASE (sem, INSN_MFC0) : /* mfc0 $rt,$rd */ 2517 1.1 christos { 2518 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2519 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2520 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2521 1.1 christos int UNUSED written = 0; 2522 1.1 christos IADDR UNUSED pc = abuf->addr; 2523 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2524 1.1 christos 2525 1.1 christos ((void) 0); /*nop*/ 2526 1.1 christos 2527 1.1 christos #undef FLD 2528 1.1 christos } 2529 1.1 christos NEXT (vpc); 2530 1.1 christos 2531 1.1 christos CASE (sem, INSN_MFC1) : /* mfc1 $rt,$rd */ 2532 1.1 christos { 2533 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2534 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2535 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2536 1.1 christos int UNUSED written = 0; 2537 1.1 christos IADDR UNUSED pc = abuf->addr; 2538 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2539 1.1 christos 2540 1.1 christos ((void) 0); /*nop*/ 2541 1.1 christos 2542 1.1 christos #undef FLD 2543 1.1 christos } 2544 1.1 christos NEXT (vpc); 2545 1.1 christos 2546 1.1 christos CASE (sem, INSN_MFC2) : /* mfc2 $rt,$rd */ 2547 1.1 christos { 2548 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2549 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2550 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2551 1.1 christos int UNUSED written = 0; 2552 1.1 christos IADDR UNUSED pc = abuf->addr; 2553 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2554 1.1 christos 2555 1.1 christos ((void) 0); /*nop*/ 2556 1.1 christos 2557 1.1 christos #undef FLD 2558 1.1 christos } 2559 1.1 christos NEXT (vpc); 2560 1.1 christos 2561 1.1 christos CASE (sem, INSN_MFC3) : /* mfc3 $rt,$rd */ 2562 1.1 christos { 2563 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2564 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2565 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2566 1.1 christos int UNUSED written = 0; 2567 1.1 christos IADDR UNUSED pc = abuf->addr; 2568 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2569 1.1 christos 2570 1.1 christos ((void) 0); /*nop*/ 2571 1.1 christos 2572 1.1 christos #undef FLD 2573 1.1 christos } 2574 1.1 christos NEXT (vpc); 2575 1.1 christos 2576 1.1 christos CASE (sem, INSN_MTC0) : /* mtc0 $rt,$rd */ 2577 1.1 christos { 2578 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2579 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2580 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2581 1.1 christos int UNUSED written = 0; 2582 1.1 christos IADDR UNUSED pc = abuf->addr; 2583 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2584 1.1 christos 2585 1.1 christos ((void) 0); /*nop*/ 2586 1.1 christos 2587 1.1 christos #undef FLD 2588 1.1 christos } 2589 1.1 christos NEXT (vpc); 2590 1.1 christos 2591 1.1 christos CASE (sem, INSN_MTC1) : /* mtc1 $rt,$rd */ 2592 1.1 christos { 2593 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2594 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2595 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2596 1.1 christos int UNUSED written = 0; 2597 1.1 christos IADDR UNUSED pc = abuf->addr; 2598 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2599 1.1 christos 2600 1.1 christos ((void) 0); /*nop*/ 2601 1.1 christos 2602 1.1 christos #undef FLD 2603 1.1 christos } 2604 1.1 christos NEXT (vpc); 2605 1.1 christos 2606 1.1 christos CASE (sem, INSN_MTC2) : /* mtc2 $rt,$rd */ 2607 1.1 christos { 2608 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2609 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2610 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2611 1.1 christos int UNUSED written = 0; 2612 1.1 christos IADDR UNUSED pc = abuf->addr; 2613 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2614 1.1 christos 2615 1.1 christos ((void) 0); /*nop*/ 2616 1.1 christos 2617 1.1 christos #undef FLD 2618 1.1 christos } 2619 1.1 christos NEXT (vpc); 2620 1.1 christos 2621 1.1 christos CASE (sem, INSN_MTC3) : /* mtc3 $rt,$rd */ 2622 1.1 christos { 2623 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2624 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2625 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2626 1.1 christos int UNUSED written = 0; 2627 1.1 christos IADDR UNUSED pc = abuf->addr; 2628 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2629 1.1 christos 2630 1.1 christos ((void) 0); /*nop*/ 2631 1.1 christos 2632 1.1 christos #undef FLD 2633 1.1 christos } 2634 1.1 christos NEXT (vpc); 2635 1.1 christos 2636 1.1 christos CASE (sem, INSN_PKRL) : /* pkrl $rd,$rt */ 2637 1.1 christos { 2638 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2639 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2640 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2641 1.1 christos int UNUSED written = 0; 2642 1.1 christos IADDR UNUSED pc = abuf->addr; 2643 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2644 1.1 christos 2645 1.1 christos ((void) 0); /*nop*/ 2646 1.1 christos 2647 1.1 christos #undef FLD 2648 1.1 christos } 2649 1.1 christos NEXT (vpc); 2650 1.1 christos 2651 1.1 christos CASE (sem, INSN_PKRLR1) : /* pkrlr1 $rt,$_index,$count */ 2652 1.1 christos { 2653 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2654 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2655 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2656 1.1 christos int UNUSED written = 0; 2657 1.1 christos IADDR UNUSED pc = abuf->addr; 2658 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2659 1.1 christos 2660 1.1 christos ((void) 0); /*nop*/ 2661 1.1 christos 2662 1.1 christos #undef FLD 2663 1.1 christos } 2664 1.1 christos NEXT (vpc); 2665 1.1 christos 2666 1.1 christos CASE (sem, INSN_PKRLR30) : /* pkrlr30 $rt,$_index,$count */ 2667 1.1 christos { 2668 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2669 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2670 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2671 1.1 christos int UNUSED written = 0; 2672 1.1 christos IADDR UNUSED pc = abuf->addr; 2673 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2674 1.1 christos 2675 1.1 christos ((void) 0); /*nop*/ 2676 1.1 christos 2677 1.1 christos #undef FLD 2678 1.1 christos } 2679 1.1 christos NEXT (vpc); 2680 1.1 christos 2681 1.1 christos CASE (sem, INSN_RB) : /* rb $rd,$rt */ 2682 1.1 christos { 2683 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2684 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2685 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2686 1.1 christos int UNUSED written = 0; 2687 1.1 christos IADDR UNUSED pc = abuf->addr; 2688 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2689 1.1 christos 2690 1.1 christos ((void) 0); /*nop*/ 2691 1.1 christos 2692 1.1 christos #undef FLD 2693 1.1 christos } 2694 1.1 christos NEXT (vpc); 2695 1.1 christos 2696 1.1 christos CASE (sem, INSN_RBR1) : /* rbr1 $rt,$_index,$count */ 2697 1.1 christos { 2698 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2699 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2700 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2701 1.1 christos int UNUSED written = 0; 2702 1.1 christos IADDR UNUSED pc = abuf->addr; 2703 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2704 1.1 christos 2705 1.1 christos ((void) 0); /*nop*/ 2706 1.1 christos 2707 1.1 christos #undef FLD 2708 1.1 christos } 2709 1.1 christos NEXT (vpc); 2710 1.1 christos 2711 1.1 christos CASE (sem, INSN_RBR30) : /* rbr30 $rt,$_index,$count */ 2712 1.1 christos { 2713 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2714 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2715 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2716 1.1 christos int UNUSED written = 0; 2717 1.1 christos IADDR UNUSED pc = abuf->addr; 2718 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2719 1.1 christos 2720 1.1 christos ((void) 0); /*nop*/ 2721 1.1 christos 2722 1.1 christos #undef FLD 2723 1.1 christos } 2724 1.1 christos NEXT (vpc); 2725 1.1 christos 2726 1.1 christos CASE (sem, INSN_RFE) : /* rfe */ 2727 1.1 christos { 2728 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2729 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2730 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2731 1.1 christos int UNUSED written = 0; 2732 1.1 christos IADDR UNUSED pc = abuf->addr; 2733 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2734 1.1 christos 2735 1.1 christos ((void) 0); /*nop*/ 2736 1.1 christos 2737 1.1 christos #undef FLD 2738 1.1 christos } 2739 1.1 christos NEXT (vpc); 2740 1.1 christos 2741 1.1 christos CASE (sem, INSN_RX) : /* rx $rd,$rt */ 2742 1.1 christos { 2743 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2744 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2745 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2746 1.1 christos int UNUSED written = 0; 2747 1.1 christos IADDR UNUSED pc = abuf->addr; 2748 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2749 1.1 christos 2750 1.1 christos ((void) 0); /*nop*/ 2751 1.1 christos 2752 1.1 christos #undef FLD 2753 1.1 christos } 2754 1.1 christos NEXT (vpc); 2755 1.1 christos 2756 1.1 christos CASE (sem, INSN_RXR1) : /* rxr1 $rt,$_index,$count */ 2757 1.1 christos { 2758 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2759 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2760 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2761 1.1 christos int UNUSED written = 0; 2762 1.1 christos IADDR UNUSED pc = abuf->addr; 2763 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2764 1.1 christos 2765 1.1 christos ((void) 0); /*nop*/ 2766 1.1 christos 2767 1.1 christos #undef FLD 2768 1.1 christos } 2769 1.1 christos NEXT (vpc); 2770 1.1 christos 2771 1.1 christos CASE (sem, INSN_RXR30) : /* rxr30 $rt,$_index,$count */ 2772 1.1 christos { 2773 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2774 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2775 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2776 1.1 christos int UNUSED written = 0; 2777 1.1 christos IADDR UNUSED pc = abuf->addr; 2778 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2779 1.1 christos 2780 1.1 christos ((void) 0); /*nop*/ 2781 1.1 christos 2782 1.1 christos #undef FLD 2783 1.1 christos } 2784 1.1 christos NEXT (vpc); 2785 1.1 christos 2786 1.1 christos CASE (sem, INSN_SLEEP) : /* sleep */ 2787 1.1 christos { 2788 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2789 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2790 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2791 1.1 christos int UNUSED written = 0; 2792 1.1 christos IADDR UNUSED pc = abuf->addr; 2793 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2794 1.1 christos 2795 1.1 christos ((void) 0); /*nop*/ 2796 1.1 christos 2797 1.1 christos #undef FLD 2798 1.1 christos } 2799 1.1 christos NEXT (vpc); 2800 1.1 christos 2801 1.1 christos CASE (sem, INSN_SRRD) : /* srrd $rt */ 2802 1.1 christos { 2803 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2804 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2805 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2806 1.1 christos int UNUSED written = 0; 2807 1.1 christos IADDR UNUSED pc = abuf->addr; 2808 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2809 1.1 christos 2810 1.1 christos ((void) 0); /*nop*/ 2811 1.1 christos 2812 1.1 christos #undef FLD 2813 1.1 christos } 2814 1.1 christos NEXT (vpc); 2815 1.1 christos 2816 1.1 christos CASE (sem, INSN_SRRDL) : /* srrdl $rt */ 2817 1.1 christos { 2818 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2819 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2820 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2821 1.1 christos int UNUSED written = 0; 2822 1.1 christos IADDR UNUSED pc = abuf->addr; 2823 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2824 1.1 christos 2825 1.1 christos ((void) 0); /*nop*/ 2826 1.1 christos 2827 1.1 christos #undef FLD 2828 1.1 christos } 2829 1.1 christos NEXT (vpc); 2830 1.1 christos 2831 1.1 christos CASE (sem, INSN_SRULCK) : /* srulck $rt */ 2832 1.1 christos { 2833 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2834 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2835 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2836 1.1 christos int UNUSED written = 0; 2837 1.1 christos IADDR UNUSED pc = abuf->addr; 2838 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2839 1.1 christos 2840 1.1 christos ((void) 0); /*nop*/ 2841 1.1 christos 2842 1.1 christos #undef FLD 2843 1.1 christos } 2844 1.1 christos NEXT (vpc); 2845 1.1 christos 2846 1.1 christos CASE (sem, INSN_SRWR) : /* srwr $rt,$rd */ 2847 1.1 christos { 2848 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2849 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2850 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2851 1.1 christos int UNUSED written = 0; 2852 1.1 christos IADDR UNUSED pc = abuf->addr; 2853 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2854 1.1 christos 2855 1.1 christos ((void) 0); /*nop*/ 2856 1.1 christos 2857 1.1 christos #undef FLD 2858 1.1 christos } 2859 1.1 christos NEXT (vpc); 2860 1.1 christos 2861 1.1 christos CASE (sem, INSN_SRWRU) : /* srwru $rt,$rd */ 2862 1.1 christos { 2863 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2864 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2865 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2866 1.1 christos int UNUSED written = 0; 2867 1.1 christos IADDR UNUSED pc = abuf->addr; 2868 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2869 1.1 christos 2870 1.1 christos ((void) 0); /*nop*/ 2871 1.1 christos 2872 1.1 christos #undef FLD 2873 1.1 christos } 2874 1.1 christos NEXT (vpc); 2875 1.1 christos 2876 1.1 christos CASE (sem, INSN_TRAPQFL) : /* trapqfl */ 2877 1.1 christos { 2878 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2879 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2880 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2881 1.1 christos int UNUSED written = 0; 2882 1.1 christos IADDR UNUSED pc = abuf->addr; 2883 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2884 1.1 christos 2885 1.1 christos ((void) 0); /*nop*/ 2886 1.1 christos 2887 1.1 christos #undef FLD 2888 1.1 christos } 2889 1.1 christos NEXT (vpc); 2890 1.1 christos 2891 1.1 christos CASE (sem, INSN_TRAPQNE) : /* trapqne */ 2892 1.1 christos { 2893 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2894 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2895 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2896 1.1 christos int UNUSED written = 0; 2897 1.1 christos IADDR UNUSED pc = abuf->addr; 2898 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2899 1.1 christos 2900 1.1 christos ((void) 0); /*nop*/ 2901 1.1 christos 2902 1.1 christos #undef FLD 2903 1.1 christos } 2904 1.1 christos NEXT (vpc); 2905 1.1 christos 2906 1.1 christos CASE (sem, INSN_TRAPREL) : /* traprel $rt */ 2907 1.1 christos { 2908 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2909 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2910 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2911 1.1 christos int UNUSED written = 0; 2912 1.1 christos IADDR UNUSED pc = abuf->addr; 2913 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2914 1.1 christos 2915 1.1 christos ((void) 0); /*nop*/ 2916 1.1 christos 2917 1.1 christos #undef FLD 2918 1.1 christos } 2919 1.1 christos NEXT (vpc); 2920 1.1 christos 2921 1.1 christos CASE (sem, INSN_WB) : /* wb $rd,$rt */ 2922 1.1 christos { 2923 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2924 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2925 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2926 1.1 christos int UNUSED written = 0; 2927 1.1 christos IADDR UNUSED pc = abuf->addr; 2928 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2929 1.1 christos 2930 1.1 christos ((void) 0); /*nop*/ 2931 1.1 christos 2932 1.1 christos #undef FLD 2933 1.1 christos } 2934 1.1 christos NEXT (vpc); 2935 1.1 christos 2936 1.1 christos CASE (sem, INSN_WBU) : /* wbu $rd,$rt */ 2937 1.1 christos { 2938 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2939 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2940 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2941 1.1 christos int UNUSED written = 0; 2942 1.1 christos IADDR UNUSED pc = abuf->addr; 2943 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2944 1.1 christos 2945 1.1 christos ((void) 0); /*nop*/ 2946 1.1 christos 2947 1.1 christos #undef FLD 2948 1.1 christos } 2949 1.1 christos NEXT (vpc); 2950 1.1 christos 2951 1.1 christos CASE (sem, INSN_WBR1) : /* wbr1 $rt,$_index,$count */ 2952 1.1 christos { 2953 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2954 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2955 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2956 1.1 christos int UNUSED written = 0; 2957 1.1 christos IADDR UNUSED pc = abuf->addr; 2958 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2959 1.1 christos 2960 1.1 christos ((void) 0); /*nop*/ 2961 1.1 christos 2962 1.1 christos #undef FLD 2963 1.1 christos } 2964 1.1 christos NEXT (vpc); 2965 1.1 christos 2966 1.1 christos CASE (sem, INSN_WBR1U) : /* wbr1u $rt,$_index,$count */ 2967 1.1 christos { 2968 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2969 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2970 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2971 1.1 christos int UNUSED written = 0; 2972 1.1 christos IADDR UNUSED pc = abuf->addr; 2973 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2974 1.1 christos 2975 1.1 christos ((void) 0); /*nop*/ 2976 1.1 christos 2977 1.1 christos #undef FLD 2978 1.1 christos } 2979 1.1 christos NEXT (vpc); 2980 1.1 christos 2981 1.1 christos CASE (sem, INSN_WBR30) : /* wbr30 $rt,$_index,$count */ 2982 1.1 christos { 2983 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2984 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2985 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2986 1.1 christos int UNUSED written = 0; 2987 1.1 christos IADDR UNUSED pc = abuf->addr; 2988 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2989 1.1 christos 2990 1.1 christos ((void) 0); /*nop*/ 2991 1.1 christos 2992 1.1 christos #undef FLD 2993 1.1 christos } 2994 1.1 christos NEXT (vpc); 2995 1.1 christos 2996 1.1 christos CASE (sem, INSN_WBR30U) : /* wbr30u $rt,$_index,$count */ 2997 1.1 christos { 2998 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2999 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3000 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3001 1.1 christos int UNUSED written = 0; 3002 1.1 christos IADDR UNUSED pc = abuf->addr; 3003 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3004 1.1 christos 3005 1.1 christos ((void) 0); /*nop*/ 3006 1.1 christos 3007 1.1 christos #undef FLD 3008 1.1 christos } 3009 1.1 christos NEXT (vpc); 3010 1.1 christos 3011 1.1 christos CASE (sem, INSN_WX) : /* wx $rd,$rt */ 3012 1.1 christos { 3013 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3014 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3015 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3016 1.1 christos int UNUSED written = 0; 3017 1.1 christos IADDR UNUSED pc = abuf->addr; 3018 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3019 1.1 christos 3020 1.1 christos ((void) 0); /*nop*/ 3021 1.1 christos 3022 1.1 christos #undef FLD 3023 1.1 christos } 3024 1.1 christos NEXT (vpc); 3025 1.1 christos 3026 1.1 christos CASE (sem, INSN_WXU) : /* wxu $rd,$rt */ 3027 1.1 christos { 3028 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3029 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3030 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3031 1.1 christos int UNUSED written = 0; 3032 1.1 christos IADDR UNUSED pc = abuf->addr; 3033 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3034 1.1 christos 3035 1.1 christos ((void) 0); /*nop*/ 3036 1.1 christos 3037 1.1 christos #undef FLD 3038 1.1 christos } 3039 1.1 christos NEXT (vpc); 3040 1.1 christos 3041 1.1 christos CASE (sem, INSN_WXR1) : /* wxr1 $rt,$_index,$count */ 3042 1.1 christos { 3043 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3044 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3045 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3046 1.1 christos int UNUSED written = 0; 3047 1.1 christos IADDR UNUSED pc = abuf->addr; 3048 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3049 1.1 christos 3050 1.1 christos ((void) 0); /*nop*/ 3051 1.1 christos 3052 1.1 christos #undef FLD 3053 1.1 christos } 3054 1.1 christos NEXT (vpc); 3055 1.1 christos 3056 1.1 christos CASE (sem, INSN_WXR1U) : /* wxr1u $rt,$_index,$count */ 3057 1.1 christos { 3058 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3059 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3060 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3061 1.1 christos int UNUSED written = 0; 3062 1.1 christos IADDR UNUSED pc = abuf->addr; 3063 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3064 1.1 christos 3065 1.1 christos ((void) 0); /*nop*/ 3066 1.1 christos 3067 1.1 christos #undef FLD 3068 1.1 christos } 3069 1.1 christos NEXT (vpc); 3070 1.1 christos 3071 1.1 christos CASE (sem, INSN_WXR30) : /* wxr30 $rt,$_index,$count */ 3072 1.1 christos { 3073 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3074 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3075 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3076 1.1 christos int UNUSED written = 0; 3077 1.1 christos IADDR UNUSED pc = abuf->addr; 3078 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3079 1.1 christos 3080 1.1 christos ((void) 0); /*nop*/ 3081 1.1 christos 3082 1.1 christos #undef FLD 3083 1.1 christos } 3084 1.1 christos NEXT (vpc); 3085 1.1 christos 3086 1.1 christos CASE (sem, INSN_WXR30U) : /* wxr30u $rt,$_index,$count */ 3087 1.1 christos { 3088 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3089 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3090 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 3091 1.1 christos int UNUSED written = 0; 3092 1.1 christos IADDR UNUSED pc = abuf->addr; 3093 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3094 1.1 christos 3095 1.1 christos ((void) 0); /*nop*/ 3096 1.1 christos 3097 1.1 christos #undef FLD 3098 1.1 christos } 3099 1.1 christos NEXT (vpc); 3100 1.1 christos 3101 1.1 christos CASE (sem, INSN_LDW) : /* ldw $rt,$lo16($base) */ 3102 1.1 christos { 3103 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3104 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3105 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 3106 1.1 christos int UNUSED written = 0; 3107 1.1 christos IADDR UNUSED pc = abuf->addr; 3108 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3109 1.1 christos 3110 1.1 christos { 3111 1.1 christos SI tmp_addr; 3112 1.1 christos tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3)); 3113 1.1 christos { 3114 1.1 christos SI opval = GETMEMSI (current_cpu, pc, tmp_addr); 3115 1.1 christos SET_H_GR (ADDSI (FLD (f_rt), 1), opval); 3116 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3117 1.1 christos } 3118 1.1 christos { 3119 1.1 christos SI opval = GETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4)); 3120 1.1 christos SET_H_GR (FLD (f_rt), opval); 3121 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3122 1.1 christos } 3123 1.1 christos } 3124 1.1 christos 3125 1.1 christos #undef FLD 3126 1.1 christos } 3127 1.1 christos NEXT (vpc); 3128 1.1 christos 3129 1.1 christos CASE (sem, INSN_SDW) : /* sdw $rt,$lo16($base) */ 3130 1.1 christos { 3131 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3132 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3133 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 3134 1.1 christos int UNUSED written = 0; 3135 1.1 christos IADDR UNUSED pc = abuf->addr; 3136 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3137 1.1 christos 3138 1.1 christos { 3139 1.1 christos SI tmp_addr; 3140 1.1 christos tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3)); 3141 1.1 christos { 3142 1.1 christos SI opval = GET_H_GR (FLD (f_rt)); 3143 1.1 christos SETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4), opval); 3144 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3145 1.1 christos } 3146 1.1 christos { 3147 1.1 christos SI opval = GET_H_GR (ADDSI (FLD (f_rt), 1)); 3148 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval); 3149 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3150 1.1 christos } 3151 1.1 christos } 3152 1.1 christos 3153 1.1 christos #undef FLD 3154 1.1 christos } 3155 1.1 christos NEXT (vpc); 3156 1.1 christos 3157 1.1 christos CASE (sem, INSN_J) : /* j $jmptarg */ 3158 1.1 christos { 3159 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3160 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3161 1.1 christos #define FLD(f) abuf->fields.sfmt_j.f 3162 1.1 christos int UNUSED written = 0; 3163 1.1 christos IADDR UNUSED pc = abuf->addr; 3164 1.1 christos SEM_BRANCH_INIT 3165 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3166 1.1 christos 3167 1.1 christos { 3168 1.1 christos { 3169 1.1 christos USI opval = FLD (i_jmptarg); 3170 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 3171 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3172 1.1 christos } 3173 1.1 christos } 3174 1.1 christos 3175 1.1 christos SEM_BRANCH_FINI (vpc); 3176 1.1 christos #undef FLD 3177 1.1 christos } 3178 1.1 christos NEXT (vpc); 3179 1.1 christos 3180 1.1 christos CASE (sem, INSN_JAL) : /* jal $jmptarg */ 3181 1.1 christos { 3182 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3183 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3184 1.1 christos #define FLD(f) abuf->fields.sfmt_j.f 3185 1.1 christos int UNUSED written = 0; 3186 1.1 christos IADDR UNUSED pc = abuf->addr; 3187 1.1 christos SEM_BRANCH_INIT 3188 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3189 1.1 christos 3190 1.1 christos { 3191 1.1 christos { 3192 1.1 christos { 3193 1.1 christos SI opval = ADDSI (pc, 8); 3194 1.1 christos SET_H_GR (((UINT) 31), opval); 3195 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3196 1.1 christos } 3197 1.1 christos { 3198 1.1 christos USI opval = FLD (i_jmptarg); 3199 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 3200 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3201 1.1 christos } 3202 1.1 christos } 3203 1.1 christos } 3204 1.1 christos 3205 1.1 christos SEM_BRANCH_FINI (vpc); 3206 1.1 christos #undef FLD 3207 1.1 christos } 3208 1.1 christos NEXT (vpc); 3209 1.1 christos 3210 1.1 christos CASE (sem, INSN_BMB) : /* bmb $rs,$rt,$offset */ 3211 1.1 christos { 3212 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3213 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3214 1.1 christos #define FLD(f) abuf->fields.sfmt_bbi.f 3215 1.1 christos int UNUSED written = 0; 3216 1.1 christos IADDR UNUSED pc = abuf->addr; 3217 1.1 christos SEM_BRANCH_INIT 3218 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3219 1.1 christos 3220 1.1 christos { 3221 1.1 christos BI tmp_branch_; 3222 1.1 christos tmp_branch_ = 0; 3223 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) { 3224 1.1 christos tmp_branch_ = 1; 3225 1.1 christos } 3226 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) { 3227 1.1 christos tmp_branch_ = 1; 3228 1.1 christos } 3229 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) { 3230 1.1 christos tmp_branch_ = 1; 3231 1.1 christos } 3232 1.1 christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) { 3233 1.1 christos tmp_branch_ = 1; 3234 1.1 christos } 3235 1.1 christos if (tmp_branch_) { 3236 1.1 christos { 3237 1.1 christos { 3238 1.1 christos USI opval = FLD (i_offset); 3239 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 3240 1.1 christos written |= (1 << 3); 3241 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3242 1.1 christos } 3243 1.1 christos } 3244 1.1 christos } 3245 1.1 christos } 3246 1.1 christos 3247 1.1 christos abuf->written = written; 3248 1.1 christos SEM_BRANCH_FINI (vpc); 3249 1.1 christos #undef FLD 3250 1.1 christos } 3251 1.1 christos NEXT (vpc); 3252 1.1 christos 3253 1.1 christos 3254 1.1 christos } 3255 1.1 christos ENDSWITCH (sem) /* End of semantic switch. */ 3256 1.1 christos 3257 1.1 christos /* At this point `vpc' contains the next insn to execute. */ 3258 1.1 christos } 3259 1.1 christos 3260 1.1 christos #undef DEFINE_SWITCH 3261 1.1 christos #endif /* DEFINE_SWITCH */ 3262