1/* Simulator instruction semantics for sh64. 2 3THIS FILE IS MACHINE GENERATED WITH CGEN. 4 5Copyright 1996-2005 Free Software Foundation, Inc. 6 7This file is part of the GNU simulators. 8 9This program is free software; you can redistribute it and/or modify 10it under the terms of the GNU General Public License as published by 11the Free Software Foundation; either version 3 of the License, or 12(at your option) any later version. 13 14This program is distributed in the hope that it will be useful, 15but WITHOUT ANY WARRANTY; without even the implied warranty of 16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17GNU General Public License for more details. 18 19You should have received a copy of the GNU General Public License 20along with this program. If not, see <http://www.gnu.org/licenses/>. 21 22*/ 23 24#ifdef DEFINE_LABELS 25 26 /* The labels have the case they have because the enum of insn types 27 is all uppercase and in the non-stdc case the insn symbol is built 28 into the enum name. */ 29 30 static struct { 31 int index; 32 void *label; 33 } labels[] = { 34 { SH64_MEDIA_INSN_X_INVALID, && case_sem_INSN_X_INVALID }, 35 { SH64_MEDIA_INSN_X_AFTER, && case_sem_INSN_X_AFTER }, 36 { SH64_MEDIA_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE }, 37 { SH64_MEDIA_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN }, 38 { SH64_MEDIA_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN }, 39 { SH64_MEDIA_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN }, 40 { SH64_MEDIA_INSN_ADD, && case_sem_INSN_ADD }, 41 { SH64_MEDIA_INSN_ADDL, && case_sem_INSN_ADDL }, 42 { SH64_MEDIA_INSN_ADDI, && case_sem_INSN_ADDI }, 43 { SH64_MEDIA_INSN_ADDIL, && case_sem_INSN_ADDIL }, 44 { SH64_MEDIA_INSN_ADDZL, && case_sem_INSN_ADDZL }, 45 { SH64_MEDIA_INSN_ALLOCO, && case_sem_INSN_ALLOCO }, 46 { SH64_MEDIA_INSN_AND, && case_sem_INSN_AND }, 47 { SH64_MEDIA_INSN_ANDC, && case_sem_INSN_ANDC }, 48 { SH64_MEDIA_INSN_ANDI, && case_sem_INSN_ANDI }, 49 { SH64_MEDIA_INSN_BEQ, && case_sem_INSN_BEQ }, 50 { SH64_MEDIA_INSN_BEQI, && case_sem_INSN_BEQI }, 51 { SH64_MEDIA_INSN_BGE, && case_sem_INSN_BGE }, 52 { SH64_MEDIA_INSN_BGEU, && case_sem_INSN_BGEU }, 53 { SH64_MEDIA_INSN_BGT, && case_sem_INSN_BGT }, 54 { SH64_MEDIA_INSN_BGTU, && case_sem_INSN_BGTU }, 55 { SH64_MEDIA_INSN_BLINK, && case_sem_INSN_BLINK }, 56 { SH64_MEDIA_INSN_BNE, && case_sem_INSN_BNE }, 57 { SH64_MEDIA_INSN_BNEI, && case_sem_INSN_BNEI }, 58 { SH64_MEDIA_INSN_BRK, && case_sem_INSN_BRK }, 59 { SH64_MEDIA_INSN_BYTEREV, && case_sem_INSN_BYTEREV }, 60 { SH64_MEDIA_INSN_CMPEQ, && case_sem_INSN_CMPEQ }, 61 { SH64_MEDIA_INSN_CMPGT, && case_sem_INSN_CMPGT }, 62 { SH64_MEDIA_INSN_CMPGTU, && case_sem_INSN_CMPGTU }, 63 { SH64_MEDIA_INSN_CMVEQ, && case_sem_INSN_CMVEQ }, 64 { SH64_MEDIA_INSN_CMVNE, && case_sem_INSN_CMVNE }, 65 { SH64_MEDIA_INSN_FABSD, && case_sem_INSN_FABSD }, 66 { SH64_MEDIA_INSN_FABSS, && case_sem_INSN_FABSS }, 67 { SH64_MEDIA_INSN_FADDD, && case_sem_INSN_FADDD }, 68 { SH64_MEDIA_INSN_FADDS, && case_sem_INSN_FADDS }, 69 { SH64_MEDIA_INSN_FCMPEQD, && case_sem_INSN_FCMPEQD }, 70 { SH64_MEDIA_INSN_FCMPEQS, && case_sem_INSN_FCMPEQS }, 71 { SH64_MEDIA_INSN_FCMPGED, && case_sem_INSN_FCMPGED }, 72 { SH64_MEDIA_INSN_FCMPGES, && case_sem_INSN_FCMPGES }, 73 { SH64_MEDIA_INSN_FCMPGTD, && case_sem_INSN_FCMPGTD }, 74 { SH64_MEDIA_INSN_FCMPGTS, && case_sem_INSN_FCMPGTS }, 75 { SH64_MEDIA_INSN_FCMPUND, && case_sem_INSN_FCMPUND }, 76 { SH64_MEDIA_INSN_FCMPUNS, && case_sem_INSN_FCMPUNS }, 77 { SH64_MEDIA_INSN_FCNVDS, && case_sem_INSN_FCNVDS }, 78 { SH64_MEDIA_INSN_FCNVSD, && case_sem_INSN_FCNVSD }, 79 { SH64_MEDIA_INSN_FDIVD, && case_sem_INSN_FDIVD }, 80 { SH64_MEDIA_INSN_FDIVS, && case_sem_INSN_FDIVS }, 81 { SH64_MEDIA_INSN_FGETSCR, && case_sem_INSN_FGETSCR }, 82 { SH64_MEDIA_INSN_FIPRS, && case_sem_INSN_FIPRS }, 83 { SH64_MEDIA_INSN_FLDD, && case_sem_INSN_FLDD }, 84 { SH64_MEDIA_INSN_FLDP, && case_sem_INSN_FLDP }, 85 { SH64_MEDIA_INSN_FLDS, && case_sem_INSN_FLDS }, 86 { SH64_MEDIA_INSN_FLDXD, && case_sem_INSN_FLDXD }, 87 { SH64_MEDIA_INSN_FLDXP, && case_sem_INSN_FLDXP }, 88 { SH64_MEDIA_INSN_FLDXS, && case_sem_INSN_FLDXS }, 89 { SH64_MEDIA_INSN_FLOATLD, && case_sem_INSN_FLOATLD }, 90 { SH64_MEDIA_INSN_FLOATLS, && case_sem_INSN_FLOATLS }, 91 { SH64_MEDIA_INSN_FLOATQD, && case_sem_INSN_FLOATQD }, 92 { SH64_MEDIA_INSN_FLOATQS, && case_sem_INSN_FLOATQS }, 93 { SH64_MEDIA_INSN_FMACS, && case_sem_INSN_FMACS }, 94 { SH64_MEDIA_INSN_FMOVD, && case_sem_INSN_FMOVD }, 95 { SH64_MEDIA_INSN_FMOVDQ, && case_sem_INSN_FMOVDQ }, 96 { SH64_MEDIA_INSN_FMOVLS, && case_sem_INSN_FMOVLS }, 97 { SH64_MEDIA_INSN_FMOVQD, && case_sem_INSN_FMOVQD }, 98 { SH64_MEDIA_INSN_FMOVS, && case_sem_INSN_FMOVS }, 99 { SH64_MEDIA_INSN_FMOVSL, && case_sem_INSN_FMOVSL }, 100 { SH64_MEDIA_INSN_FMULD, && case_sem_INSN_FMULD }, 101 { SH64_MEDIA_INSN_FMULS, && case_sem_INSN_FMULS }, 102 { SH64_MEDIA_INSN_FNEGD, && case_sem_INSN_FNEGD }, 103 { SH64_MEDIA_INSN_FNEGS, && case_sem_INSN_FNEGS }, 104 { SH64_MEDIA_INSN_FPUTSCR, && case_sem_INSN_FPUTSCR }, 105 { SH64_MEDIA_INSN_FSQRTD, && case_sem_INSN_FSQRTD }, 106 { SH64_MEDIA_INSN_FSQRTS, && case_sem_INSN_FSQRTS }, 107 { SH64_MEDIA_INSN_FSTD, && case_sem_INSN_FSTD }, 108 { SH64_MEDIA_INSN_FSTP, && case_sem_INSN_FSTP }, 109 { SH64_MEDIA_INSN_FSTS, && case_sem_INSN_FSTS }, 110 { SH64_MEDIA_INSN_FSTXD, && case_sem_INSN_FSTXD }, 111 { SH64_MEDIA_INSN_FSTXP, && case_sem_INSN_FSTXP }, 112 { SH64_MEDIA_INSN_FSTXS, && case_sem_INSN_FSTXS }, 113 { SH64_MEDIA_INSN_FSUBD, && case_sem_INSN_FSUBD }, 114 { SH64_MEDIA_INSN_FSUBS, && case_sem_INSN_FSUBS }, 115 { SH64_MEDIA_INSN_FTRCDL, && case_sem_INSN_FTRCDL }, 116 { SH64_MEDIA_INSN_FTRCSL, && case_sem_INSN_FTRCSL }, 117 { SH64_MEDIA_INSN_FTRCDQ, && case_sem_INSN_FTRCDQ }, 118 { SH64_MEDIA_INSN_FTRCSQ, && case_sem_INSN_FTRCSQ }, 119 { SH64_MEDIA_INSN_FTRVS, && case_sem_INSN_FTRVS }, 120 { SH64_MEDIA_INSN_GETCFG, && case_sem_INSN_GETCFG }, 121 { SH64_MEDIA_INSN_GETCON, && case_sem_INSN_GETCON }, 122 { SH64_MEDIA_INSN_GETTR, && case_sem_INSN_GETTR }, 123 { SH64_MEDIA_INSN_ICBI, && case_sem_INSN_ICBI }, 124 { SH64_MEDIA_INSN_LDB, && case_sem_INSN_LDB }, 125 { SH64_MEDIA_INSN_LDL, && case_sem_INSN_LDL }, 126 { SH64_MEDIA_INSN_LDQ, && case_sem_INSN_LDQ }, 127 { SH64_MEDIA_INSN_LDUB, && case_sem_INSN_LDUB }, 128 { SH64_MEDIA_INSN_LDUW, && case_sem_INSN_LDUW }, 129 { SH64_MEDIA_INSN_LDW, && case_sem_INSN_LDW }, 130 { SH64_MEDIA_INSN_LDHIL, && case_sem_INSN_LDHIL }, 131 { SH64_MEDIA_INSN_LDHIQ, && case_sem_INSN_LDHIQ }, 132 { SH64_MEDIA_INSN_LDLOL, && case_sem_INSN_LDLOL }, 133 { SH64_MEDIA_INSN_LDLOQ, && case_sem_INSN_LDLOQ }, 134 { SH64_MEDIA_INSN_LDXB, && case_sem_INSN_LDXB }, 135 { SH64_MEDIA_INSN_LDXL, && case_sem_INSN_LDXL }, 136 { SH64_MEDIA_INSN_LDXQ, && case_sem_INSN_LDXQ }, 137 { SH64_MEDIA_INSN_LDXUB, && case_sem_INSN_LDXUB }, 138 { SH64_MEDIA_INSN_LDXUW, && case_sem_INSN_LDXUW }, 139 { SH64_MEDIA_INSN_LDXW, && case_sem_INSN_LDXW }, 140 { SH64_MEDIA_INSN_MABSL, && case_sem_INSN_MABSL }, 141 { SH64_MEDIA_INSN_MABSW, && case_sem_INSN_MABSW }, 142 { SH64_MEDIA_INSN_MADDL, && case_sem_INSN_MADDL }, 143 { SH64_MEDIA_INSN_MADDW, && case_sem_INSN_MADDW }, 144 { SH64_MEDIA_INSN_MADDSL, && case_sem_INSN_MADDSL }, 145 { SH64_MEDIA_INSN_MADDSUB, && case_sem_INSN_MADDSUB }, 146 { SH64_MEDIA_INSN_MADDSW, && case_sem_INSN_MADDSW }, 147 { SH64_MEDIA_INSN_MCMPEQB, && case_sem_INSN_MCMPEQB }, 148 { SH64_MEDIA_INSN_MCMPEQL, && case_sem_INSN_MCMPEQL }, 149 { SH64_MEDIA_INSN_MCMPEQW, && case_sem_INSN_MCMPEQW }, 150 { SH64_MEDIA_INSN_MCMPGTL, && case_sem_INSN_MCMPGTL }, 151 { SH64_MEDIA_INSN_MCMPGTUB, && case_sem_INSN_MCMPGTUB }, 152 { SH64_MEDIA_INSN_MCMPGTW, && case_sem_INSN_MCMPGTW }, 153 { SH64_MEDIA_INSN_MCMV, && case_sem_INSN_MCMV }, 154 { SH64_MEDIA_INSN_MCNVSLW, && case_sem_INSN_MCNVSLW }, 155 { SH64_MEDIA_INSN_MCNVSWB, && case_sem_INSN_MCNVSWB }, 156 { SH64_MEDIA_INSN_MCNVSWUB, && case_sem_INSN_MCNVSWUB }, 157 { SH64_MEDIA_INSN_MEXTR1, && case_sem_INSN_MEXTR1 }, 158 { SH64_MEDIA_INSN_MEXTR2, && case_sem_INSN_MEXTR2 }, 159 { SH64_MEDIA_INSN_MEXTR3, && case_sem_INSN_MEXTR3 }, 160 { SH64_MEDIA_INSN_MEXTR4, && case_sem_INSN_MEXTR4 }, 161 { SH64_MEDIA_INSN_MEXTR5, && case_sem_INSN_MEXTR5 }, 162 { SH64_MEDIA_INSN_MEXTR6, && case_sem_INSN_MEXTR6 }, 163 { SH64_MEDIA_INSN_MEXTR7, && case_sem_INSN_MEXTR7 }, 164 { SH64_MEDIA_INSN_MMACFXWL, && case_sem_INSN_MMACFXWL }, 165 { SH64_MEDIA_INSN_MMACNFX_WL, && case_sem_INSN_MMACNFX_WL }, 166 { SH64_MEDIA_INSN_MMULL, && case_sem_INSN_MMULL }, 167 { SH64_MEDIA_INSN_MMULW, && case_sem_INSN_MMULW }, 168 { SH64_MEDIA_INSN_MMULFXL, && case_sem_INSN_MMULFXL }, 169 { SH64_MEDIA_INSN_MMULFXW, && case_sem_INSN_MMULFXW }, 170 { SH64_MEDIA_INSN_MMULFXRPW, && case_sem_INSN_MMULFXRPW }, 171 { SH64_MEDIA_INSN_MMULHIWL, && case_sem_INSN_MMULHIWL }, 172 { SH64_MEDIA_INSN_MMULLOWL, && case_sem_INSN_MMULLOWL }, 173 { SH64_MEDIA_INSN_MMULSUMWQ, && case_sem_INSN_MMULSUMWQ }, 174 { SH64_MEDIA_INSN_MOVI, && case_sem_INSN_MOVI }, 175 { SH64_MEDIA_INSN_MPERMW, && case_sem_INSN_MPERMW }, 176 { SH64_MEDIA_INSN_MSADUBQ, && case_sem_INSN_MSADUBQ }, 177 { SH64_MEDIA_INSN_MSHALDSL, && case_sem_INSN_MSHALDSL }, 178 { SH64_MEDIA_INSN_MSHALDSW, && case_sem_INSN_MSHALDSW }, 179 { SH64_MEDIA_INSN_MSHARDL, && case_sem_INSN_MSHARDL }, 180 { SH64_MEDIA_INSN_MSHARDW, && case_sem_INSN_MSHARDW }, 181 { SH64_MEDIA_INSN_MSHARDSQ, && case_sem_INSN_MSHARDSQ }, 182 { SH64_MEDIA_INSN_MSHFHIB, && case_sem_INSN_MSHFHIB }, 183 { SH64_MEDIA_INSN_MSHFHIL, && case_sem_INSN_MSHFHIL }, 184 { SH64_MEDIA_INSN_MSHFHIW, && case_sem_INSN_MSHFHIW }, 185 { SH64_MEDIA_INSN_MSHFLOB, && case_sem_INSN_MSHFLOB }, 186 { SH64_MEDIA_INSN_MSHFLOL, && case_sem_INSN_MSHFLOL }, 187 { SH64_MEDIA_INSN_MSHFLOW, && case_sem_INSN_MSHFLOW }, 188 { SH64_MEDIA_INSN_MSHLLDL, && case_sem_INSN_MSHLLDL }, 189 { SH64_MEDIA_INSN_MSHLLDW, && case_sem_INSN_MSHLLDW }, 190 { SH64_MEDIA_INSN_MSHLRDL, && case_sem_INSN_MSHLRDL }, 191 { SH64_MEDIA_INSN_MSHLRDW, && case_sem_INSN_MSHLRDW }, 192 { SH64_MEDIA_INSN_MSUBL, && case_sem_INSN_MSUBL }, 193 { SH64_MEDIA_INSN_MSUBW, && case_sem_INSN_MSUBW }, 194 { SH64_MEDIA_INSN_MSUBSL, && case_sem_INSN_MSUBSL }, 195 { SH64_MEDIA_INSN_MSUBSUB, && case_sem_INSN_MSUBSUB }, 196 { SH64_MEDIA_INSN_MSUBSW, && case_sem_INSN_MSUBSW }, 197 { SH64_MEDIA_INSN_MULSL, && case_sem_INSN_MULSL }, 198 { SH64_MEDIA_INSN_MULUL, && case_sem_INSN_MULUL }, 199 { SH64_MEDIA_INSN_NOP, && case_sem_INSN_NOP }, 200 { SH64_MEDIA_INSN_NSB, && case_sem_INSN_NSB }, 201 { SH64_MEDIA_INSN_OCBI, && case_sem_INSN_OCBI }, 202 { SH64_MEDIA_INSN_OCBP, && case_sem_INSN_OCBP }, 203 { SH64_MEDIA_INSN_OCBWB, && case_sem_INSN_OCBWB }, 204 { SH64_MEDIA_INSN_OR, && case_sem_INSN_OR }, 205 { SH64_MEDIA_INSN_ORI, && case_sem_INSN_ORI }, 206 { SH64_MEDIA_INSN_PREFI, && case_sem_INSN_PREFI }, 207 { SH64_MEDIA_INSN_PTA, && case_sem_INSN_PTA }, 208 { SH64_MEDIA_INSN_PTABS, && case_sem_INSN_PTABS }, 209 { SH64_MEDIA_INSN_PTB, && case_sem_INSN_PTB }, 210 { SH64_MEDIA_INSN_PTREL, && case_sem_INSN_PTREL }, 211 { SH64_MEDIA_INSN_PUTCFG, && case_sem_INSN_PUTCFG }, 212 { SH64_MEDIA_INSN_PUTCON, && case_sem_INSN_PUTCON }, 213 { SH64_MEDIA_INSN_RTE, && case_sem_INSN_RTE }, 214 { SH64_MEDIA_INSN_SHARD, && case_sem_INSN_SHARD }, 215 { SH64_MEDIA_INSN_SHARDL, && case_sem_INSN_SHARDL }, 216 { SH64_MEDIA_INSN_SHARI, && case_sem_INSN_SHARI }, 217 { SH64_MEDIA_INSN_SHARIL, && case_sem_INSN_SHARIL }, 218 { SH64_MEDIA_INSN_SHLLD, && case_sem_INSN_SHLLD }, 219 { SH64_MEDIA_INSN_SHLLDL, && case_sem_INSN_SHLLDL }, 220 { SH64_MEDIA_INSN_SHLLI, && case_sem_INSN_SHLLI }, 221 { SH64_MEDIA_INSN_SHLLIL, && case_sem_INSN_SHLLIL }, 222 { SH64_MEDIA_INSN_SHLRD, && case_sem_INSN_SHLRD }, 223 { SH64_MEDIA_INSN_SHLRDL, && case_sem_INSN_SHLRDL }, 224 { SH64_MEDIA_INSN_SHLRI, && case_sem_INSN_SHLRI }, 225 { SH64_MEDIA_INSN_SHLRIL, && case_sem_INSN_SHLRIL }, 226 { SH64_MEDIA_INSN_SHORI, && case_sem_INSN_SHORI }, 227 { SH64_MEDIA_INSN_SLEEP, && case_sem_INSN_SLEEP }, 228 { SH64_MEDIA_INSN_STB, && case_sem_INSN_STB }, 229 { SH64_MEDIA_INSN_STL, && case_sem_INSN_STL }, 230 { SH64_MEDIA_INSN_STQ, && case_sem_INSN_STQ }, 231 { SH64_MEDIA_INSN_STW, && case_sem_INSN_STW }, 232 { SH64_MEDIA_INSN_STHIL, && case_sem_INSN_STHIL }, 233 { SH64_MEDIA_INSN_STHIQ, && case_sem_INSN_STHIQ }, 234 { SH64_MEDIA_INSN_STLOL, && case_sem_INSN_STLOL }, 235 { SH64_MEDIA_INSN_STLOQ, && case_sem_INSN_STLOQ }, 236 { SH64_MEDIA_INSN_STXB, && case_sem_INSN_STXB }, 237 { SH64_MEDIA_INSN_STXL, && case_sem_INSN_STXL }, 238 { SH64_MEDIA_INSN_STXQ, && case_sem_INSN_STXQ }, 239 { SH64_MEDIA_INSN_STXW, && case_sem_INSN_STXW }, 240 { SH64_MEDIA_INSN_SUB, && case_sem_INSN_SUB }, 241 { SH64_MEDIA_INSN_SUBL, && case_sem_INSN_SUBL }, 242 { SH64_MEDIA_INSN_SWAPQ, && case_sem_INSN_SWAPQ }, 243 { SH64_MEDIA_INSN_SYNCI, && case_sem_INSN_SYNCI }, 244 { SH64_MEDIA_INSN_SYNCO, && case_sem_INSN_SYNCO }, 245 { SH64_MEDIA_INSN_TRAPA, && case_sem_INSN_TRAPA }, 246 { SH64_MEDIA_INSN_XOR, && case_sem_INSN_XOR }, 247 { SH64_MEDIA_INSN_XORI, && case_sem_INSN_XORI }, 248 { 0, 0 } 249 }; 250 int i; 251 252 for (i = 0; labels[i].label != 0; ++i) 253 { 254#if FAST_P 255 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label; 256#else 257 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label; 258#endif 259 } 260 261#undef DEFINE_LABELS 262#endif /* DEFINE_LABELS */ 263 264#ifdef DEFINE_SWITCH 265 266/* If hyper-fast [well not unnecessarily slow] execution is selected, turn 267 off frills like tracing and profiling. */ 268/* FIXME: A better way would be to have TRACE_RESULT check for something 269 that can cause it to be optimized out. Another way would be to emit 270 special handlers into the instruction "stream". */ 271 272#if FAST_P 273#undef TRACE_RESULT 274#define TRACE_RESULT(cpu, abuf, name, type, val) 275#endif 276 277#undef GET_ATTR 278#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 279#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 280#else 281#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr) 282#endif 283 284{ 285 286#if WITH_SCACHE_PBB 287 288/* Branch to next handler without going around main loop. */ 289#define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case 290SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case) 291 292#else /* ! WITH_SCACHE_PBB */ 293 294#define NEXT(vpc) BREAK (sem) 295#ifdef __GNUC__ 296#if FAST_P 297 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab) 298#else 299 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab) 300#endif 301#else 302 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num) 303#endif 304 305#endif /* ! WITH_SCACHE_PBB */ 306 307 { 308 309 CASE (sem, INSN_X_INVALID) : /* --invalid-- */ 310{ 311 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 312 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 313#define FLD(f) abuf->fields.fmt_empty.f 314 int UNUSED written = 0; 315 IADDR UNUSED pc = abuf->addr; 316 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 317 318 { 319 /* Update the recorded pc in the cpu state struct. 320 Only necessary for WITH_SCACHE case, but to avoid the 321 conditional compilation .... */ 322 SET_H_PC (pc); 323 /* Virtual insns have zero size. Overwrite vpc with address of next insn 324 using the default-insn-bitsize spec. When executing insns in parallel 325 we may want to queue the fault and continue execution. */ 326 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 327 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 328 } 329 330#undef FLD 331} 332 NEXT (vpc); 333 334 CASE (sem, INSN_X_AFTER) : /* --after-- */ 335{ 336 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 337 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 338#define FLD(f) abuf->fields.fmt_empty.f 339 int UNUSED written = 0; 340 IADDR UNUSED pc = abuf->addr; 341 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 342 343 { 344#if WITH_SCACHE_PBB_SH64_MEDIA 345 sh64_media_pbb_after (current_cpu, sem_arg); 346#endif 347 } 348 349#undef FLD 350} 351 NEXT (vpc); 352 353 CASE (sem, INSN_X_BEFORE) : /* --before-- */ 354{ 355 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 356 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 357#define FLD(f) abuf->fields.fmt_empty.f 358 int UNUSED written = 0; 359 IADDR UNUSED pc = abuf->addr; 360 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 361 362 { 363#if WITH_SCACHE_PBB_SH64_MEDIA 364 sh64_media_pbb_before (current_cpu, sem_arg); 365#endif 366 } 367 368#undef FLD 369} 370 NEXT (vpc); 371 372 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */ 373{ 374 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 375 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 376#define FLD(f) abuf->fields.fmt_empty.f 377 int UNUSED written = 0; 378 IADDR UNUSED pc = abuf->addr; 379 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 380 381 { 382#if WITH_SCACHE_PBB_SH64_MEDIA 383#ifdef DEFINE_SWITCH 384 vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg, 385 pbb_br_type, pbb_br_npc); 386 BREAK (sem); 387#else 388 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 389 vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg, 390 CPU_PBB_BR_TYPE (current_cpu), 391 CPU_PBB_BR_NPC (current_cpu)); 392#endif 393#endif 394 } 395 396#undef FLD 397} 398 NEXT (vpc); 399 400 CASE (sem, INSN_X_CHAIN) : /* --chain-- */ 401{ 402 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 403 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 404#define FLD(f) abuf->fields.fmt_empty.f 405 int UNUSED written = 0; 406 IADDR UNUSED pc = abuf->addr; 407 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 408 409 { 410#if WITH_SCACHE_PBB_SH64_MEDIA 411 vpc = sh64_media_pbb_chain (current_cpu, sem_arg); 412#ifdef DEFINE_SWITCH 413 BREAK (sem); 414#endif 415#endif 416 } 417 418#undef FLD 419} 420 NEXT (vpc); 421 422 CASE (sem, INSN_X_BEGIN) : /* --begin-- */ 423{ 424 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 425 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 426#define FLD(f) abuf->fields.fmt_empty.f 427 int UNUSED written = 0; 428 IADDR UNUSED pc = abuf->addr; 429 vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 430 431 { 432#if WITH_SCACHE_PBB_SH64_MEDIA 433#if defined DEFINE_SWITCH || defined FAST_P 434 /* In the switch case FAST_P is a constant, allowing several optimizations 435 in any called inline functions. */ 436 vpc = sh64_media_pbb_begin (current_cpu, FAST_P); 437#else 438#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 439 vpc = sh64_media_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 440#else 441 vpc = sh64_media_pbb_begin (current_cpu, 0); 442#endif 443#endif 444#endif 445 } 446 447#undef FLD 448} 449 NEXT (vpc); 450 451 CASE (sem, INSN_ADD) : /* add $rm, $rn, $rd */ 452{ 453 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 454 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 455#define FLD(f) abuf->fields.sfmt_add.f 456 int UNUSED written = 0; 457 IADDR UNUSED pc = abuf->addr; 458 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 459 460 { 461 DI opval = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 462 SET_H_GR (FLD (f_dest), opval); 463 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 464 } 465 466#undef FLD 467} 468 NEXT (vpc); 469 470 CASE (sem, INSN_ADDL) : /* add.l $rm, $rn, $rd */ 471{ 472 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 473 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 474#define FLD(f) abuf->fields.sfmt_add.f 475 int UNUSED written = 0; 476 IADDR UNUSED pc = abuf->addr; 477 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 478 479 { 480 DI opval = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 481 SET_H_GR (FLD (f_dest), opval); 482 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 483 } 484 485#undef FLD 486} 487 NEXT (vpc); 488 489 CASE (sem, INSN_ADDI) : /* addi $rm, $disp10, $rd */ 490{ 491 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 492 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 493#define FLD(f) abuf->fields.sfmt_addi.f 494 int UNUSED written = 0; 495 IADDR UNUSED pc = abuf->addr; 496 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 497 498 { 499 DI opval = ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))); 500 SET_H_GR (FLD (f_dest), opval); 501 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 502 } 503 504#undef FLD 505} 506 NEXT (vpc); 507 508 CASE (sem, INSN_ADDIL) : /* addi.l $rm, $disp10, $rd */ 509{ 510 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 511 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 512#define FLD(f) abuf->fields.sfmt_addi.f 513 int UNUSED written = 0; 514 IADDR UNUSED pc = abuf->addr; 515 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 516 517 { 518 DI opval = EXTSIDI (ADDSI (EXTSISI (FLD (f_disp10)), SUBWORDDISI (GET_H_GR (FLD (f_left)), 1))); 519 SET_H_GR (FLD (f_dest), opval); 520 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 521 } 522 523#undef FLD 524} 525 NEXT (vpc); 526 527 CASE (sem, INSN_ADDZL) : /* addz.l $rm, $rn, $rd */ 528{ 529 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 530 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 531#define FLD(f) abuf->fields.sfmt_add.f 532 int UNUSED written = 0; 533 IADDR UNUSED pc = abuf->addr; 534 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 535 536 { 537 DI opval = ZEXTSIDI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 538 SET_H_GR (FLD (f_dest), opval); 539 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 540 } 541 542#undef FLD 543} 544 NEXT (vpc); 545 546 CASE (sem, INSN_ALLOCO) : /* alloco $rm, $disp6x32 */ 547{ 548 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 549 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 550#define FLD(f) abuf->fields.sfmt_xori.f 551 int UNUSED written = 0; 552 IADDR UNUSED pc = abuf->addr; 553 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 554 555{ 556 { 557 DI opval = GET_H_GR (FLD (f_left)); 558 SET_H_GR (FLD (f_left), opval); 559 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 560 } 561((void) 0); /*nop*/ 562} 563 564#undef FLD 565} 566 NEXT (vpc); 567 568 CASE (sem, INSN_AND) : /* and $rm, $rn, $rd */ 569{ 570 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 571 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 572#define FLD(f) abuf->fields.sfmt_add.f 573 int UNUSED written = 0; 574 IADDR UNUSED pc = abuf->addr; 575 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 576 577 { 578 DI opval = ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 579 SET_H_GR (FLD (f_dest), opval); 580 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 581 } 582 583#undef FLD 584} 585 NEXT (vpc); 586 587 CASE (sem, INSN_ANDC) : /* andc $rm, $rn, $rd */ 588{ 589 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 590 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 591#define FLD(f) abuf->fields.sfmt_add.f 592 int UNUSED written = 0; 593 IADDR UNUSED pc = abuf->addr; 594 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 595 596 { 597 DI opval = ANDDI (GET_H_GR (FLD (f_left)), INVDI (GET_H_GR (FLD (f_right)))); 598 SET_H_GR (FLD (f_dest), opval); 599 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 600 } 601 602#undef FLD 603} 604 NEXT (vpc); 605 606 CASE (sem, INSN_ANDI) : /* andi $rm, $disp10, $rd */ 607{ 608 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 609 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 610#define FLD(f) abuf->fields.sfmt_addi.f 611 int UNUSED written = 0; 612 IADDR UNUSED pc = abuf->addr; 613 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 614 615 { 616 DI opval = ANDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))); 617 SET_H_GR (FLD (f_dest), opval); 618 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 619 } 620 621#undef FLD 622} 623 NEXT (vpc); 624 625 CASE (sem, INSN_BEQ) : /* beq$likely $rm, $rn, $tra */ 626{ 627 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 628 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 629#define FLD(f) abuf->fields.sfmt_beq.f 630 int UNUSED written = 0; 631 IADDR UNUSED pc = abuf->addr; 632 SEM_BRANCH_INIT 633 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 634 635{ 636((void) 0); /*nop*/ 637if (EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 638 { 639 UDI opval = CPU (h_tr[FLD (f_tra)]); 640 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 641 written |= (1 << 3); 642 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 643 } 644} 645} 646 647 abuf->written = written; 648 SEM_BRANCH_FINI (vpc); 649#undef FLD 650} 651 NEXT (vpc); 652 653 CASE (sem, INSN_BEQI) : /* beqi$likely $rm, $imm6, $tra */ 654{ 655 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 656 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 657#define FLD(f) abuf->fields.sfmt_beqi.f 658 int UNUSED written = 0; 659 IADDR UNUSED pc = abuf->addr; 660 SEM_BRANCH_INIT 661 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 662 663{ 664((void) 0); /*nop*/ 665if (EQDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) { 666 { 667 UDI opval = CPU (h_tr[FLD (f_tra)]); 668 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 669 written |= (1 << 3); 670 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 671 } 672} 673} 674 675 abuf->written = written; 676 SEM_BRANCH_FINI (vpc); 677#undef FLD 678} 679 NEXT (vpc); 680 681 CASE (sem, INSN_BGE) : /* bge$likely $rm, $rn, $tra */ 682{ 683 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 684 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 685#define FLD(f) abuf->fields.sfmt_beq.f 686 int UNUSED written = 0; 687 IADDR UNUSED pc = abuf->addr; 688 SEM_BRANCH_INIT 689 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 690 691{ 692((void) 0); /*nop*/ 693if (GEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 694 { 695 UDI opval = CPU (h_tr[FLD (f_tra)]); 696 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 697 written |= (1 << 3); 698 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 699 } 700} 701} 702 703 abuf->written = written; 704 SEM_BRANCH_FINI (vpc); 705#undef FLD 706} 707 NEXT (vpc); 708 709 CASE (sem, INSN_BGEU) : /* bgeu$likely $rm, $rn, $tra */ 710{ 711 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 712 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 713#define FLD(f) abuf->fields.sfmt_beq.f 714 int UNUSED written = 0; 715 IADDR UNUSED pc = abuf->addr; 716 SEM_BRANCH_INIT 717 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 718 719{ 720((void) 0); /*nop*/ 721if (GEUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 722 { 723 UDI opval = CPU (h_tr[FLD (f_tra)]); 724 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 725 written |= (1 << 3); 726 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 727 } 728} 729} 730 731 abuf->written = written; 732 SEM_BRANCH_FINI (vpc); 733#undef FLD 734} 735 NEXT (vpc); 736 737 CASE (sem, INSN_BGT) : /* bgt$likely $rm, $rn, $tra */ 738{ 739 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 740 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 741#define FLD(f) abuf->fields.sfmt_beq.f 742 int UNUSED written = 0; 743 IADDR UNUSED pc = abuf->addr; 744 SEM_BRANCH_INIT 745 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 746 747{ 748((void) 0); /*nop*/ 749if (GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 750 { 751 UDI opval = CPU (h_tr[FLD (f_tra)]); 752 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 753 written |= (1 << 3); 754 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 755 } 756} 757} 758 759 abuf->written = written; 760 SEM_BRANCH_FINI (vpc); 761#undef FLD 762} 763 NEXT (vpc); 764 765 CASE (sem, INSN_BGTU) : /* bgtu$likely $rm, $rn, $tra */ 766{ 767 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 768 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 769#define FLD(f) abuf->fields.sfmt_beq.f 770 int UNUSED written = 0; 771 IADDR UNUSED pc = abuf->addr; 772 SEM_BRANCH_INIT 773 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 774 775{ 776((void) 0); /*nop*/ 777if (GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 778 { 779 UDI opval = CPU (h_tr[FLD (f_tra)]); 780 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 781 written |= (1 << 3); 782 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 783 } 784} 785} 786 787 abuf->written = written; 788 SEM_BRANCH_FINI (vpc); 789#undef FLD 790} 791 NEXT (vpc); 792 793 CASE (sem, INSN_BLINK) : /* blink $trb, $rd */ 794{ 795 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 796 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 797#define FLD(f) abuf->fields.sfmt_blink.f 798 int UNUSED written = 0; 799 IADDR UNUSED pc = abuf->addr; 800 SEM_BRANCH_INIT 801 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 802 803{ 804 { 805 DI opval = ORDI (ADDDI (pc, 4), 1); 806 SET_H_GR (FLD (f_dest), opval); 807 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 808 } 809 { 810 UDI opval = CPU (h_tr[FLD (f_trb)]); 811 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 812 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 813 } 814if (EQSI (FLD (f_dest), 63)) { 815((void) 0); /*nop*/ 816} else { 817((void) 0); /*nop*/ 818} 819} 820 821 SEM_BRANCH_FINI (vpc); 822#undef FLD 823} 824 NEXT (vpc); 825 826 CASE (sem, INSN_BNE) : /* bne$likely $rm, $rn, $tra */ 827{ 828 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 829 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 830#define FLD(f) abuf->fields.sfmt_beq.f 831 int UNUSED written = 0; 832 IADDR UNUSED pc = abuf->addr; 833 SEM_BRANCH_INIT 834 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 835 836{ 837((void) 0); /*nop*/ 838if (NEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 839 { 840 UDI opval = CPU (h_tr[FLD (f_tra)]); 841 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 842 written |= (1 << 3); 843 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 844 } 845} 846} 847 848 abuf->written = written; 849 SEM_BRANCH_FINI (vpc); 850#undef FLD 851} 852 NEXT (vpc); 853 854 CASE (sem, INSN_BNEI) : /* bnei$likely $rm, $imm6, $tra */ 855{ 856 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 857 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 858#define FLD(f) abuf->fields.sfmt_beqi.f 859 int UNUSED written = 0; 860 IADDR UNUSED pc = abuf->addr; 861 SEM_BRANCH_INIT 862 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 863 864{ 865((void) 0); /*nop*/ 866if (NEDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) { 867 { 868 UDI opval = CPU (h_tr[FLD (f_tra)]); 869 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 870 written |= (1 << 3); 871 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 872 } 873} 874} 875 876 abuf->written = written; 877 SEM_BRANCH_FINI (vpc); 878#undef FLD 879} 880 NEXT (vpc); 881 882 CASE (sem, INSN_BRK) : /* brk */ 883{ 884 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 885 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 886#define FLD(f) abuf->fields.fmt_empty.f 887 int UNUSED written = 0; 888 IADDR UNUSED pc = abuf->addr; 889 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 890 891sh64_break (current_cpu, pc); 892 893#undef FLD 894} 895 NEXT (vpc); 896 897 CASE (sem, INSN_BYTEREV) : /* byterev $rm, $rd */ 898{ 899 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 900 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 901#define FLD(f) abuf->fields.sfmt_xori.f 902 int UNUSED written = 0; 903 IADDR UNUSED pc = abuf->addr; 904 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 905 906{ 907 DI tmp_source; 908 DI tmp_result; 909 tmp_source = GET_H_GR (FLD (f_left)); 910 tmp_result = 0; 911{ 912 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 913 tmp_source = SRLDI (tmp_source, 8); 914} 915{ 916 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 917 tmp_source = SRLDI (tmp_source, 8); 918} 919{ 920 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 921 tmp_source = SRLDI (tmp_source, 8); 922} 923{ 924 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 925 tmp_source = SRLDI (tmp_source, 8); 926} 927{ 928 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 929 tmp_source = SRLDI (tmp_source, 8); 930} 931{ 932 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 933 tmp_source = SRLDI (tmp_source, 8); 934} 935{ 936 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 937 tmp_source = SRLDI (tmp_source, 8); 938} 939{ 940 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 941 tmp_source = SRLDI (tmp_source, 8); 942} 943 { 944 DI opval = tmp_result; 945 SET_H_GR (FLD (f_dest), opval); 946 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 947 } 948} 949 950#undef FLD 951} 952 NEXT (vpc); 953 954 CASE (sem, INSN_CMPEQ) : /* cmpeq $rm, $rn, $rd */ 955{ 956 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 957 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 958#define FLD(f) abuf->fields.sfmt_add.f 959 int UNUSED written = 0; 960 IADDR UNUSED pc = abuf->addr; 961 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 962 963 { 964 DI opval = ((EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0)); 965 SET_H_GR (FLD (f_dest), opval); 966 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 967 } 968 969#undef FLD 970} 971 NEXT (vpc); 972 973 CASE (sem, INSN_CMPGT) : /* cmpgt $rm, $rn, $rd */ 974{ 975 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 976 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 977#define FLD(f) abuf->fields.sfmt_add.f 978 int UNUSED written = 0; 979 IADDR UNUSED pc = abuf->addr; 980 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 981 982 { 983 DI opval = ((GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0)); 984 SET_H_GR (FLD (f_dest), opval); 985 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 986 } 987 988#undef FLD 989} 990 NEXT (vpc); 991 992 CASE (sem, INSN_CMPGTU) : /* cmpgtu $rm,$rn, $rd */ 993{ 994 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 995 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 996#define FLD(f) abuf->fields.sfmt_add.f 997 int UNUSED written = 0; 998 IADDR UNUSED pc = abuf->addr; 999 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1000 1001 { 1002 DI opval = ((GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0)); 1003 SET_H_GR (FLD (f_dest), opval); 1004 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1005 } 1006 1007#undef FLD 1008} 1009 NEXT (vpc); 1010 1011 CASE (sem, INSN_CMVEQ) : /* cmveq $rm, $rn, $rd */ 1012{ 1013 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1014 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1015#define FLD(f) abuf->fields.sfmt_add.f 1016 int UNUSED written = 0; 1017 IADDR UNUSED pc = abuf->addr; 1018 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1019 1020if (EQDI (GET_H_GR (FLD (f_left)), 0)) { 1021 { 1022 DI opval = GET_H_GR (FLD (f_right)); 1023 SET_H_GR (FLD (f_dest), opval); 1024 written |= (1 << 2); 1025 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1026 } 1027} 1028 1029 abuf->written = written; 1030#undef FLD 1031} 1032 NEXT (vpc); 1033 1034 CASE (sem, INSN_CMVNE) : /* cmvne $rm, $rn, $rd */ 1035{ 1036 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1037 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1038#define FLD(f) abuf->fields.sfmt_add.f 1039 int UNUSED written = 0; 1040 IADDR UNUSED pc = abuf->addr; 1041 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1042 1043if (NEDI (GET_H_GR (FLD (f_left)), 0)) { 1044 { 1045 DI opval = GET_H_GR (FLD (f_right)); 1046 SET_H_GR (FLD (f_dest), opval); 1047 written |= (1 << 2); 1048 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1049 } 1050} 1051 1052 abuf->written = written; 1053#undef FLD 1054} 1055 NEXT (vpc); 1056 1057 CASE (sem, INSN_FABSD) : /* fabs.d $drgh, $drf */ 1058{ 1059 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1060 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1061#define FLD(f) abuf->fields.sfmt_fabsd.f 1062 int UNUSED written = 0; 1063 IADDR UNUSED pc = abuf->addr; 1064 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1065 1066 { 1067 DF opval = sh64_fabsd (current_cpu, GET_H_DR (FLD (f_left_right))); 1068 SET_H_DR (FLD (f_dest), opval); 1069 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1070 } 1071 1072#undef FLD 1073} 1074 NEXT (vpc); 1075 1076 CASE (sem, INSN_FABSS) : /* fabs.s $frgh, $frf */ 1077{ 1078 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1079 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1080#define FLD(f) abuf->fields.sfmt_fabsd.f 1081 int UNUSED written = 0; 1082 IADDR UNUSED pc = abuf->addr; 1083 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1084 1085 { 1086 SF opval = sh64_fabss (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1087 CPU (h_fr[FLD (f_dest)]) = opval; 1088 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1089 } 1090 1091#undef FLD 1092} 1093 NEXT (vpc); 1094 1095 CASE (sem, INSN_FADDD) : /* fadd.d $drg, $drh, $drf */ 1096{ 1097 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1098 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1099#define FLD(f) abuf->fields.sfmt_add.f 1100 int UNUSED written = 0; 1101 IADDR UNUSED pc = abuf->addr; 1102 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1103 1104 { 1105 DF opval = sh64_faddd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 1106 SET_H_DR (FLD (f_dest), opval); 1107 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1108 } 1109 1110#undef FLD 1111} 1112 NEXT (vpc); 1113 1114 CASE (sem, INSN_FADDS) : /* fadd.s $frg, $frh, $frf */ 1115{ 1116 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1117 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1118#define FLD(f) abuf->fields.sfmt_add.f 1119 int UNUSED written = 0; 1120 IADDR UNUSED pc = abuf->addr; 1121 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1122 1123 { 1124 SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 1125 CPU (h_fr[FLD (f_dest)]) = opval; 1126 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1127 } 1128 1129#undef FLD 1130} 1131 NEXT (vpc); 1132 1133 CASE (sem, INSN_FCMPEQD) : /* fcmpeq.d $drg, $drh, $rd */ 1134{ 1135 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1136 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1137#define FLD(f) abuf->fields.sfmt_add.f 1138 int UNUSED written = 0; 1139 IADDR UNUSED pc = abuf->addr; 1140 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1141 1142 { 1143 DI opval = ZEXTBIDI (sh64_fcmpeqd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 1144 SET_H_GR (FLD (f_dest), opval); 1145 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1146 } 1147 1148#undef FLD 1149} 1150 NEXT (vpc); 1151 1152 CASE (sem, INSN_FCMPEQS) : /* fcmpeq.s $frg, $frh, $rd */ 1153{ 1154 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1155 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1156#define FLD(f) abuf->fields.sfmt_add.f 1157 int UNUSED written = 0; 1158 IADDR UNUSED pc = abuf->addr; 1159 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1160 1161 { 1162 DI opval = ZEXTBIDI (sh64_fcmpeqs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1163 SET_H_GR (FLD (f_dest), opval); 1164 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1165 } 1166 1167#undef FLD 1168} 1169 NEXT (vpc); 1170 1171 CASE (sem, INSN_FCMPGED) : /* fcmpge.d $drg, $drh, $rd */ 1172{ 1173 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1174 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1175#define FLD(f) abuf->fields.sfmt_add.f 1176 int UNUSED written = 0; 1177 IADDR UNUSED pc = abuf->addr; 1178 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1179 1180 { 1181 DI opval = ZEXTBIDI (sh64_fcmpged (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 1182 SET_H_GR (FLD (f_dest), opval); 1183 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1184 } 1185 1186#undef FLD 1187} 1188 NEXT (vpc); 1189 1190 CASE (sem, INSN_FCMPGES) : /* fcmpge.s $frg, $frh, $rd */ 1191{ 1192 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1193 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1194#define FLD(f) abuf->fields.sfmt_add.f 1195 int UNUSED written = 0; 1196 IADDR UNUSED pc = abuf->addr; 1197 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1198 1199 { 1200 DI opval = ZEXTBIDI (sh64_fcmpges (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1201 SET_H_GR (FLD (f_dest), opval); 1202 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1203 } 1204 1205#undef FLD 1206} 1207 NEXT (vpc); 1208 1209 CASE (sem, INSN_FCMPGTD) : /* fcmpgt.d $drg, $drh, $rd */ 1210{ 1211 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1212 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1213#define FLD(f) abuf->fields.sfmt_add.f 1214 int UNUSED written = 0; 1215 IADDR UNUSED pc = abuf->addr; 1216 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1217 1218 { 1219 DI opval = ZEXTBIDI (sh64_fcmpgtd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 1220 SET_H_GR (FLD (f_dest), opval); 1221 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1222 } 1223 1224#undef FLD 1225} 1226 NEXT (vpc); 1227 1228 CASE (sem, INSN_FCMPGTS) : /* fcmpgt.s $frg, $frh, $rd */ 1229{ 1230 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1231 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1232#define FLD(f) abuf->fields.sfmt_add.f 1233 int UNUSED written = 0; 1234 IADDR UNUSED pc = abuf->addr; 1235 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1236 1237 { 1238 DI opval = ZEXTBIDI (sh64_fcmpgts (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1239 SET_H_GR (FLD (f_dest), opval); 1240 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1241 } 1242 1243#undef FLD 1244} 1245 NEXT (vpc); 1246 1247 CASE (sem, INSN_FCMPUND) : /* fcmpun.d $drg, $drh, $rd */ 1248{ 1249 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1250 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1251#define FLD(f) abuf->fields.sfmt_add.f 1252 int UNUSED written = 0; 1253 IADDR UNUSED pc = abuf->addr; 1254 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1255 1256 { 1257 DI opval = ZEXTBIDI (sh64_fcmpund (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 1258 SET_H_GR (FLD (f_dest), opval); 1259 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1260 } 1261 1262#undef FLD 1263} 1264 NEXT (vpc); 1265 1266 CASE (sem, INSN_FCMPUNS) : /* fcmpun.s $frg, $frh, $rd */ 1267{ 1268 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1269 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1270#define FLD(f) abuf->fields.sfmt_add.f 1271 int UNUSED written = 0; 1272 IADDR UNUSED pc = abuf->addr; 1273 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1274 1275 { 1276 DI opval = ZEXTBIDI (sh64_fcmpuns (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1277 SET_H_GR (FLD (f_dest), opval); 1278 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1279 } 1280 1281#undef FLD 1282} 1283 NEXT (vpc); 1284 1285 CASE (sem, INSN_FCNVDS) : /* fcnv.ds $drgh, $frf */ 1286{ 1287 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1288 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1289#define FLD(f) abuf->fields.sfmt_fabsd.f 1290 int UNUSED written = 0; 1291 IADDR UNUSED pc = abuf->addr; 1292 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1293 1294 { 1295 SF opval = sh64_fcnvds (current_cpu, GET_H_DR (FLD (f_left_right))); 1296 CPU (h_fr[FLD (f_dest)]) = opval; 1297 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1298 } 1299 1300#undef FLD 1301} 1302 NEXT (vpc); 1303 1304 CASE (sem, INSN_FCNVSD) : /* fcnv.sd $frgh, $drf */ 1305{ 1306 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1307 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1308#define FLD(f) abuf->fields.sfmt_fabsd.f 1309 int UNUSED written = 0; 1310 IADDR UNUSED pc = abuf->addr; 1311 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1312 1313 { 1314 DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1315 SET_H_DR (FLD (f_dest), opval); 1316 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1317 } 1318 1319#undef FLD 1320} 1321 NEXT (vpc); 1322 1323 CASE (sem, INSN_FDIVD) : /* fdiv.d $drg, $drh, $drf */ 1324{ 1325 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1326 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1327#define FLD(f) abuf->fields.sfmt_add.f 1328 int UNUSED written = 0; 1329 IADDR UNUSED pc = abuf->addr; 1330 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1331 1332 { 1333 DF opval = sh64_fdivd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 1334 SET_H_DR (FLD (f_dest), opval); 1335 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1336 } 1337 1338#undef FLD 1339} 1340 NEXT (vpc); 1341 1342 CASE (sem, INSN_FDIVS) : /* fdiv.s $frg, $frh, $frf */ 1343{ 1344 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1345 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1346#define FLD(f) abuf->fields.sfmt_add.f 1347 int UNUSED written = 0; 1348 IADDR UNUSED pc = abuf->addr; 1349 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1350 1351 { 1352 SF opval = sh64_fdivs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 1353 CPU (h_fr[FLD (f_dest)]) = opval; 1354 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1355 } 1356 1357#undef FLD 1358} 1359 NEXT (vpc); 1360 1361 CASE (sem, INSN_FGETSCR) : /* fgetscr $frf */ 1362{ 1363 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1364 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1365#define FLD(f) abuf->fields.sfmt_shori.f 1366 int UNUSED written = 0; 1367 IADDR UNUSED pc = abuf->addr; 1368 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1369 1370 { 1371 SF opval = SUBWORDSISF (CPU (h_fpscr)); 1372 CPU (h_fr[FLD (f_dest)]) = opval; 1373 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1374 } 1375 1376#undef FLD 1377} 1378 NEXT (vpc); 1379 1380 CASE (sem, INSN_FIPRS) : /* fipr.s $fvg, $fvh, $frf */ 1381{ 1382 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1383 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1384#define FLD(f) abuf->fields.sfmt_add.f 1385 int UNUSED written = 0; 1386 IADDR UNUSED pc = abuf->addr; 1387 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1388 1389{ 1390 { 1391 SF opval = GET_H_FV (FLD (f_left)); 1392 SET_H_FV (FLD (f_left), opval); 1393 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 1394 } 1395 { 1396 SF opval = GET_H_FV (FLD (f_right)); 1397 SET_H_FV (FLD (f_right), opval); 1398 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 1399 } 1400 { 1401 SF opval = sh64_fiprs (current_cpu, FLD (f_left), FLD (f_right)); 1402 CPU (h_fr[FLD (f_dest)]) = opval; 1403 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1404 } 1405} 1406 1407#undef FLD 1408} 1409 NEXT (vpc); 1410 1411 CASE (sem, INSN_FLDD) : /* fld.d $rm, $disp10x8, $drf */ 1412{ 1413 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1414 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1415#define FLD(f) abuf->fields.sfmt_fldd.f 1416 int UNUSED written = 0; 1417 IADDR UNUSED pc = abuf->addr; 1418 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1419 1420 { 1421 DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8))); 1422 SET_H_DR (FLD (f_dest), opval); 1423 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1424 } 1425 1426#undef FLD 1427} 1428 NEXT (vpc); 1429 1430 CASE (sem, INSN_FLDP) : /* fld.p $rm, $disp10x8, $fpf */ 1431{ 1432 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1433 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1434#define FLD(f) abuf->fields.sfmt_fldd.f 1435 int UNUSED written = 0; 1436 IADDR UNUSED pc = abuf->addr; 1437 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1438 1439{ 1440 { 1441 SF opval = GET_H_FP (FLD (f_dest)); 1442 SET_H_FP (FLD (f_dest), opval); 1443 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1444 } 1445sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest)); 1446} 1447 1448#undef FLD 1449} 1450 NEXT (vpc); 1451 1452 CASE (sem, INSN_FLDS) : /* fld.s $rm, $disp10x4, $frf */ 1453{ 1454 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1455 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1456#define FLD(f) abuf->fields.sfmt_flds.f 1457 int UNUSED written = 0; 1458 IADDR UNUSED pc = abuf->addr; 1459 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1460 1461 { 1462 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4))); 1463 CPU (h_fr[FLD (f_dest)]) = opval; 1464 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1465 } 1466 1467#undef FLD 1468} 1469 NEXT (vpc); 1470 1471 CASE (sem, INSN_FLDXD) : /* fldx.d $rm, $rn, $drf */ 1472{ 1473 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1474 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1475#define FLD(f) abuf->fields.sfmt_add.f 1476 int UNUSED written = 0; 1477 IADDR UNUSED pc = abuf->addr; 1478 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1479 1480 { 1481 DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))); 1482 SET_H_DR (FLD (f_dest), opval); 1483 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1484 } 1485 1486#undef FLD 1487} 1488 NEXT (vpc); 1489 1490 CASE (sem, INSN_FLDXP) : /* fldx.p $rm, $rn, $fpf */ 1491{ 1492 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1493 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1494#define FLD(f) abuf->fields.sfmt_add.f 1495 int UNUSED written = 0; 1496 IADDR UNUSED pc = abuf->addr; 1497 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1498 1499{ 1500 { 1501 SF opval = GET_H_FP (FLD (f_dest)); 1502 SET_H_FP (FLD (f_dest), opval); 1503 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1504 } 1505sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest)); 1506} 1507 1508#undef FLD 1509} 1510 NEXT (vpc); 1511 1512 CASE (sem, INSN_FLDXS) : /* fldx.s $rm, $rn, $frf */ 1513{ 1514 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1515 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1516#define FLD(f) abuf->fields.sfmt_add.f 1517 int UNUSED written = 0; 1518 IADDR UNUSED pc = abuf->addr; 1519 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1520 1521 { 1522 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))); 1523 CPU (h_fr[FLD (f_dest)]) = opval; 1524 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1525 } 1526 1527#undef FLD 1528} 1529 NEXT (vpc); 1530 1531 CASE (sem, INSN_FLOATLD) : /* float.ld $frgh, $drf */ 1532{ 1533 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1534 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1535#define FLD(f) abuf->fields.sfmt_fabsd.f 1536 int UNUSED written = 0; 1537 IADDR UNUSED pc = abuf->addr; 1538 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1539 1540 { 1541 DF opval = sh64_floatld (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1542 SET_H_DR (FLD (f_dest), opval); 1543 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1544 } 1545 1546#undef FLD 1547} 1548 NEXT (vpc); 1549 1550 CASE (sem, INSN_FLOATLS) : /* float.ls $frgh, $frf */ 1551{ 1552 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1553 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1554#define FLD(f) abuf->fields.sfmt_fabsd.f 1555 int UNUSED written = 0; 1556 IADDR UNUSED pc = abuf->addr; 1557 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1558 1559 { 1560 SF opval = sh64_floatls (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1561 CPU (h_fr[FLD (f_dest)]) = opval; 1562 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1563 } 1564 1565#undef FLD 1566} 1567 NEXT (vpc); 1568 1569 CASE (sem, INSN_FLOATQD) : /* float.qd $drgh, $drf */ 1570{ 1571 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1572 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1573#define FLD(f) abuf->fields.sfmt_fabsd.f 1574 int UNUSED written = 0; 1575 IADDR UNUSED pc = abuf->addr; 1576 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1577 1578 { 1579 DF opval = sh64_floatqd (current_cpu, GET_H_DR (FLD (f_left_right))); 1580 SET_H_DR (FLD (f_dest), opval); 1581 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1582 } 1583 1584#undef FLD 1585} 1586 NEXT (vpc); 1587 1588 CASE (sem, INSN_FLOATQS) : /* float.qs $drgh, $frf */ 1589{ 1590 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1591 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1592#define FLD(f) abuf->fields.sfmt_fabsd.f 1593 int UNUSED written = 0; 1594 IADDR UNUSED pc = abuf->addr; 1595 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1596 1597 { 1598 SF opval = sh64_floatqs (current_cpu, GET_H_DR (FLD (f_left_right))); 1599 CPU (h_fr[FLD (f_dest)]) = opval; 1600 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1601 } 1602 1603#undef FLD 1604} 1605 NEXT (vpc); 1606 1607 CASE (sem, INSN_FMACS) : /* fmac.s $frg, $frh, $frf */ 1608{ 1609 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1610 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1611#define FLD(f) abuf->fields.sfmt_add.f 1612 int UNUSED written = 0; 1613 IADDR UNUSED pc = abuf->addr; 1614 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1615 1616 { 1617 SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_dest)]), sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1618 CPU (h_fr[FLD (f_dest)]) = opval; 1619 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1620 } 1621 1622#undef FLD 1623} 1624 NEXT (vpc); 1625 1626 CASE (sem, INSN_FMOVD) : /* fmov.d $drgh, $drf */ 1627{ 1628 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1629 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1630#define FLD(f) abuf->fields.sfmt_fabsd.f 1631 int UNUSED written = 0; 1632 IADDR UNUSED pc = abuf->addr; 1633 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1634 1635 { 1636 DF opval = GET_H_DR (FLD (f_left_right)); 1637 SET_H_DR (FLD (f_dest), opval); 1638 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1639 } 1640 1641#undef FLD 1642} 1643 NEXT (vpc); 1644 1645 CASE (sem, INSN_FMOVDQ) : /* fmov.dq $drgh, $rd */ 1646{ 1647 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1648 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1649#define FLD(f) abuf->fields.sfmt_fabsd.f 1650 int UNUSED written = 0; 1651 IADDR UNUSED pc = abuf->addr; 1652 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1653 1654 { 1655 DI opval = SUBWORDDFDI (GET_H_DR (FLD (f_left_right))); 1656 SET_H_GR (FLD (f_dest), opval); 1657 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1658 } 1659 1660#undef FLD 1661} 1662 NEXT (vpc); 1663 1664 CASE (sem, INSN_FMOVLS) : /* fmov.ls $rm, $frf */ 1665{ 1666 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1667 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1668#define FLD(f) abuf->fields.sfmt_xori.f 1669 int UNUSED written = 0; 1670 IADDR UNUSED pc = abuf->addr; 1671 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1672 1673 { 1674 SF opval = SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)); 1675 CPU (h_fr[FLD (f_dest)]) = opval; 1676 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1677 } 1678 1679#undef FLD 1680} 1681 NEXT (vpc); 1682 1683 CASE (sem, INSN_FMOVQD) : /* fmov.qd $rm, $drf */ 1684{ 1685 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1686 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1687#define FLD(f) abuf->fields.sfmt_xori.f 1688 int UNUSED written = 0; 1689 IADDR UNUSED pc = abuf->addr; 1690 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1691 1692 { 1693 DF opval = SUBWORDDIDF (GET_H_GR (FLD (f_left))); 1694 SET_H_DR (FLD (f_dest), opval); 1695 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1696 } 1697 1698#undef FLD 1699} 1700 NEXT (vpc); 1701 1702 CASE (sem, INSN_FMOVS) : /* fmov.s $frgh, $frf */ 1703{ 1704 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1705 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1706#define FLD(f) abuf->fields.sfmt_fabsd.f 1707 int UNUSED written = 0; 1708 IADDR UNUSED pc = abuf->addr; 1709 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1710 1711 { 1712 SF opval = CPU (h_fr[FLD (f_left_right)]); 1713 CPU (h_fr[FLD (f_dest)]) = opval; 1714 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1715 } 1716 1717#undef FLD 1718} 1719 NEXT (vpc); 1720 1721 CASE (sem, INSN_FMOVSL) : /* fmov.sl $frgh, $rd */ 1722{ 1723 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1724 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1725#define FLD(f) abuf->fields.sfmt_fabsd.f 1726 int UNUSED written = 0; 1727 IADDR UNUSED pc = abuf->addr; 1728 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1729 1730 { 1731 DI opval = EXTSIDI (SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)]))); 1732 SET_H_GR (FLD (f_dest), opval); 1733 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1734 } 1735 1736#undef FLD 1737} 1738 NEXT (vpc); 1739 1740 CASE (sem, INSN_FMULD) : /* fmul.d $drg, $drh, $drf */ 1741{ 1742 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1743 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1744#define FLD(f) abuf->fields.sfmt_add.f 1745 int UNUSED written = 0; 1746 IADDR UNUSED pc = abuf->addr; 1747 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1748 1749 { 1750 DF opval = sh64_fmuld (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 1751 SET_H_DR (FLD (f_dest), opval); 1752 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1753 } 1754 1755#undef FLD 1756} 1757 NEXT (vpc); 1758 1759 CASE (sem, INSN_FMULS) : /* fmul.s $frg, $frh, $frf */ 1760{ 1761 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1762 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1763#define FLD(f) abuf->fields.sfmt_add.f 1764 int UNUSED written = 0; 1765 IADDR UNUSED pc = abuf->addr; 1766 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1767 1768 { 1769 SF opval = sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 1770 CPU (h_fr[FLD (f_dest)]) = opval; 1771 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1772 } 1773 1774#undef FLD 1775} 1776 NEXT (vpc); 1777 1778 CASE (sem, INSN_FNEGD) : /* fneg.d $drgh, $drf */ 1779{ 1780 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1781 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1782#define FLD(f) abuf->fields.sfmt_fabsd.f 1783 int UNUSED written = 0; 1784 IADDR UNUSED pc = abuf->addr; 1785 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1786 1787 { 1788 DF opval = sh64_fnegd (current_cpu, GET_H_DR (FLD (f_left_right))); 1789 SET_H_DR (FLD (f_dest), opval); 1790 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1791 } 1792 1793#undef FLD 1794} 1795 NEXT (vpc); 1796 1797 CASE (sem, INSN_FNEGS) : /* fneg.s $frgh, $frf */ 1798{ 1799 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1800 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1801#define FLD(f) abuf->fields.sfmt_fabsd.f 1802 int UNUSED written = 0; 1803 IADDR UNUSED pc = abuf->addr; 1804 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1805 1806 { 1807 SF opval = sh64_fnegs (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1808 CPU (h_fr[FLD (f_dest)]) = opval; 1809 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1810 } 1811 1812#undef FLD 1813} 1814 NEXT (vpc); 1815 1816 CASE (sem, INSN_FPUTSCR) : /* fputscr $frgh */ 1817{ 1818 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1819 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1820#define FLD(f) abuf->fields.sfmt_fabsd.f 1821 int UNUSED written = 0; 1822 IADDR UNUSED pc = abuf->addr; 1823 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1824 1825 { 1826 SI opval = SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)])); 1827 CPU (h_fpscr) = opval; 1828 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval); 1829 } 1830 1831#undef FLD 1832} 1833 NEXT (vpc); 1834 1835 CASE (sem, INSN_FSQRTD) : /* fsqrt.d $drgh, $drf */ 1836{ 1837 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1838 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1839#define FLD(f) abuf->fields.sfmt_fabsd.f 1840 int UNUSED written = 0; 1841 IADDR UNUSED pc = abuf->addr; 1842 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1843 1844 { 1845 DF opval = sh64_fsqrtd (current_cpu, GET_H_DR (FLD (f_left_right))); 1846 SET_H_DR (FLD (f_dest), opval); 1847 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1848 } 1849 1850#undef FLD 1851} 1852 NEXT (vpc); 1853 1854 CASE (sem, INSN_FSQRTS) : /* fsqrt.s $frgh, $frf */ 1855{ 1856 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1857 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1858#define FLD(f) abuf->fields.sfmt_fabsd.f 1859 int UNUSED written = 0; 1860 IADDR UNUSED pc = abuf->addr; 1861 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1862 1863 { 1864 SF opval = sh64_fsqrts (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1865 CPU (h_fr[FLD (f_dest)]) = opval; 1866 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1867 } 1868 1869#undef FLD 1870} 1871 NEXT (vpc); 1872 1873 CASE (sem, INSN_FSTD) : /* fst.d $rm, $disp10x8, $drf */ 1874{ 1875 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1876 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1877#define FLD(f) abuf->fields.sfmt_fldd.f 1878 int UNUSED written = 0; 1879 IADDR UNUSED pc = abuf->addr; 1880 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1881 1882 { 1883 DF opval = GET_H_DR (FLD (f_dest)); 1884 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)), opval); 1885 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1886 } 1887 1888#undef FLD 1889} 1890 NEXT (vpc); 1891 1892 CASE (sem, INSN_FSTP) : /* fst.p $rm, $disp10x8, $fpf */ 1893{ 1894 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1895 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1896#define FLD(f) abuf->fields.sfmt_fldd.f 1897 int UNUSED written = 0; 1898 IADDR UNUSED pc = abuf->addr; 1899 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1900 1901{ 1902 { 1903 SF opval = GET_H_FP (FLD (f_dest)); 1904 SET_H_FP (FLD (f_dest), opval); 1905 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1906 } 1907sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest)); 1908} 1909 1910#undef FLD 1911} 1912 NEXT (vpc); 1913 1914 CASE (sem, INSN_FSTS) : /* fst.s $rm, $disp10x4, $frf */ 1915{ 1916 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1917 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1918#define FLD(f) abuf->fields.sfmt_flds.f 1919 int UNUSED written = 0; 1920 IADDR UNUSED pc = abuf->addr; 1921 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1922 1923 { 1924 SF opval = CPU (h_fr[FLD (f_dest)]); 1925 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)), opval); 1926 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1927 } 1928 1929#undef FLD 1930} 1931 NEXT (vpc); 1932 1933 CASE (sem, INSN_FSTXD) : /* fstx.d $rm, $rn, $drf */ 1934{ 1935 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1936 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1937#define FLD(f) abuf->fields.sfmt_add.f 1938 int UNUSED written = 0; 1939 IADDR UNUSED pc = abuf->addr; 1940 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1941 1942 { 1943 DF opval = GET_H_DR (FLD (f_dest)); 1944 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 1945 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1946 } 1947 1948#undef FLD 1949} 1950 NEXT (vpc); 1951 1952 CASE (sem, INSN_FSTXP) : /* fstx.p $rm, $rn, $fpf */ 1953{ 1954 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1955 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1956#define FLD(f) abuf->fields.sfmt_add.f 1957 int UNUSED written = 0; 1958 IADDR UNUSED pc = abuf->addr; 1959 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1960 1961{ 1962 { 1963 SF opval = GET_H_FP (FLD (f_dest)); 1964 SET_H_FP (FLD (f_dest), opval); 1965 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1966 } 1967sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest)); 1968} 1969 1970#undef FLD 1971} 1972 NEXT (vpc); 1973 1974 CASE (sem, INSN_FSTXS) : /* fstx.s $rm, $rn, $frf */ 1975{ 1976 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1977 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1978#define FLD(f) abuf->fields.sfmt_add.f 1979 int UNUSED written = 0; 1980 IADDR UNUSED pc = abuf->addr; 1981 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1982 1983 { 1984 SF opval = CPU (h_fr[FLD (f_dest)]); 1985 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 1986 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1987 } 1988 1989#undef FLD 1990} 1991 NEXT (vpc); 1992 1993 CASE (sem, INSN_FSUBD) : /* fsub.d $drg, $drh, $drf */ 1994{ 1995 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1996 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1997#define FLD(f) abuf->fields.sfmt_add.f 1998 int UNUSED written = 0; 1999 IADDR UNUSED pc = abuf->addr; 2000 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2001 2002 { 2003 DF opval = sh64_fsubd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 2004 SET_H_DR (FLD (f_dest), opval); 2005 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 2006 } 2007 2008#undef FLD 2009} 2010 NEXT (vpc); 2011 2012 CASE (sem, INSN_FSUBS) : /* fsub.s $frg, $frh, $frf */ 2013{ 2014 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2015 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2016#define FLD(f) abuf->fields.sfmt_add.f 2017 int UNUSED written = 0; 2018 IADDR UNUSED pc = abuf->addr; 2019 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2020 2021 { 2022 SF opval = sh64_fsubs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 2023 CPU (h_fr[FLD (f_dest)]) = opval; 2024 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 2025 } 2026 2027#undef FLD 2028} 2029 NEXT (vpc); 2030 2031 CASE (sem, INSN_FTRCDL) : /* ftrc.dl $drgh, $frf */ 2032{ 2033 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2034 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2035#define FLD(f) abuf->fields.sfmt_fabsd.f 2036 int UNUSED written = 0; 2037 IADDR UNUSED pc = abuf->addr; 2038 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2039 2040 { 2041 SF opval = sh64_ftrcdl (current_cpu, GET_H_DR (FLD (f_left_right))); 2042 CPU (h_fr[FLD (f_dest)]) = opval; 2043 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 2044 } 2045 2046#undef FLD 2047} 2048 NEXT (vpc); 2049 2050 CASE (sem, INSN_FTRCSL) : /* ftrc.sl $frgh, $frf */ 2051{ 2052 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2053 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2054#define FLD(f) abuf->fields.sfmt_fabsd.f 2055 int UNUSED written = 0; 2056 IADDR UNUSED pc = abuf->addr; 2057 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2058 2059 { 2060 SF opval = sh64_ftrcsl (current_cpu, CPU (h_fr[FLD (f_left_right)])); 2061 CPU (h_fr[FLD (f_dest)]) = opval; 2062 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 2063 } 2064 2065#undef FLD 2066} 2067 NEXT (vpc); 2068 2069 CASE (sem, INSN_FTRCDQ) : /* ftrc.dq $drgh, $drf */ 2070{ 2071 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2072 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2073#define FLD(f) abuf->fields.sfmt_fabsd.f 2074 int UNUSED written = 0; 2075 IADDR UNUSED pc = abuf->addr; 2076 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2077 2078 { 2079 DF opval = sh64_ftrcdq (current_cpu, GET_H_DR (FLD (f_left_right))); 2080 SET_H_DR (FLD (f_dest), opval); 2081 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 2082 } 2083 2084#undef FLD 2085} 2086 NEXT (vpc); 2087 2088 CASE (sem, INSN_FTRCSQ) : /* ftrc.sq $frgh, $drf */ 2089{ 2090 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2091 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2092#define FLD(f) abuf->fields.sfmt_fabsd.f 2093 int UNUSED written = 0; 2094 IADDR UNUSED pc = abuf->addr; 2095 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2096 2097 { 2098 DF opval = sh64_ftrcsq (current_cpu, CPU (h_fr[FLD (f_left_right)])); 2099 SET_H_DR (FLD (f_dest), opval); 2100 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 2101 } 2102 2103#undef FLD 2104} 2105 NEXT (vpc); 2106 2107 CASE (sem, INSN_FTRVS) : /* ftrv.s $mtrxg, $fvh, $fvf */ 2108{ 2109 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2110 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2111#define FLD(f) abuf->fields.sfmt_add.f 2112 int UNUSED written = 0; 2113 IADDR UNUSED pc = abuf->addr; 2114 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2115 2116{ 2117 { 2118 SF opval = GET_H_FMTX (FLD (f_left)); 2119 SET_H_FMTX (FLD (f_left), opval); 2120 TRACE_RESULT (current_cpu, abuf, "fmtx", 'f', opval); 2121 } 2122 { 2123 SF opval = GET_H_FV (FLD (f_right)); 2124 SET_H_FV (FLD (f_right), opval); 2125 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 2126 } 2127 { 2128 SF opval = GET_H_FV (FLD (f_dest)); 2129 SET_H_FV (FLD (f_dest), opval); 2130 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 2131 } 2132sh64_ftrvs (current_cpu, FLD (f_left), FLD (f_right), FLD (f_dest)); 2133} 2134 2135#undef FLD 2136} 2137 NEXT (vpc); 2138 2139 CASE (sem, INSN_GETCFG) : /* getcfg $rm, $disp6, $rd */ 2140{ 2141 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2142 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2143#define FLD(f) abuf->fields.sfmt_getcfg.f 2144 int UNUSED written = 0; 2145 IADDR UNUSED pc = abuf->addr; 2146 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2147 2148{ 2149 SI tmp_address; 2150 tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2151((void) 0); /*nop*/ 2152 { 2153 DI opval = GETMEMSI (current_cpu, pc, tmp_address); 2154 SET_H_GR (FLD (f_dest), opval); 2155 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2156 } 2157} 2158 2159#undef FLD 2160} 2161 NEXT (vpc); 2162 2163 CASE (sem, INSN_GETCON) : /* getcon $crk, $rd */ 2164{ 2165 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2166 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2167#define FLD(f) abuf->fields.sfmt_xori.f 2168 int UNUSED written = 0; 2169 IADDR UNUSED pc = abuf->addr; 2170 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2171 2172 { 2173 DI opval = GET_H_CR (FLD (f_left)); 2174 SET_H_GR (FLD (f_dest), opval); 2175 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2176 } 2177 2178#undef FLD 2179} 2180 NEXT (vpc); 2181 2182 CASE (sem, INSN_GETTR) : /* gettr $trb, $rd */ 2183{ 2184 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2185 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2186#define FLD(f) abuf->fields.sfmt_blink.f 2187 int UNUSED written = 0; 2188 IADDR UNUSED pc = abuf->addr; 2189 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2190 2191 { 2192 DI opval = CPU (h_tr[FLD (f_trb)]); 2193 SET_H_GR (FLD (f_dest), opval); 2194 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2195 } 2196 2197#undef FLD 2198} 2199 NEXT (vpc); 2200 2201 CASE (sem, INSN_ICBI) : /* icbi $rm, $disp6x32 */ 2202{ 2203 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2204 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2205#define FLD(f) abuf->fields.sfmt_xori.f 2206 int UNUSED written = 0; 2207 IADDR UNUSED pc = abuf->addr; 2208 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2209 2210{ 2211 { 2212 DI opval = GET_H_GR (FLD (f_left)); 2213 SET_H_GR (FLD (f_left), opval); 2214 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2215 } 2216((void) 0); /*nop*/ 2217} 2218 2219#undef FLD 2220} 2221 NEXT (vpc); 2222 2223 CASE (sem, INSN_LDB) : /* ld.b $rm, $disp10, $rd */ 2224{ 2225 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2226 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2227#define FLD(f) abuf->fields.sfmt_addi.f 2228 int UNUSED written = 0; 2229 IADDR UNUSED pc = abuf->addr; 2230 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2231 2232 { 2233 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))))); 2234 SET_H_GR (FLD (f_dest), opval); 2235 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2236 } 2237 2238#undef FLD 2239} 2240 NEXT (vpc); 2241 2242 CASE (sem, INSN_LDL) : /* ld.l $rm, $disp10x4, $rd */ 2243{ 2244 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2245 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2246#define FLD(f) abuf->fields.sfmt_flds.f 2247 int UNUSED written = 0; 2248 IADDR UNUSED pc = abuf->addr; 2249 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2250 2251 { 2252 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))))); 2253 SET_H_GR (FLD (f_dest), opval); 2254 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2255 } 2256 2257#undef FLD 2258} 2259 NEXT (vpc); 2260 2261 CASE (sem, INSN_LDQ) : /* ld.q $rm, $disp10x8, $rd */ 2262{ 2263 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2264 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2265#define FLD(f) abuf->fields.sfmt_fldd.f 2266 int UNUSED written = 0; 2267 IADDR UNUSED pc = abuf->addr; 2268 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2269 2270 { 2271 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8)))); 2272 SET_H_GR (FLD (f_dest), opval); 2273 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2274 } 2275 2276#undef FLD 2277} 2278 NEXT (vpc); 2279 2280 CASE (sem, INSN_LDUB) : /* ld.ub $rm, $disp10, $rd */ 2281{ 2282 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2283 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2284#define FLD(f) abuf->fields.sfmt_addi.f 2285 int UNUSED written = 0; 2286 IADDR UNUSED pc = abuf->addr; 2287 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2288 2289 { 2290 DI opval = ZEXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))))); 2291 SET_H_GR (FLD (f_dest), opval); 2292 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2293 } 2294 2295#undef FLD 2296} 2297 NEXT (vpc); 2298 2299 CASE (sem, INSN_LDUW) : /* ld.uw $rm, $disp10x2, $rd */ 2300{ 2301 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2302 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2303#define FLD(f) abuf->fields.sfmt_lduw.f 2304 int UNUSED written = 0; 2305 IADDR UNUSED pc = abuf->addr; 2306 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2307 2308 { 2309 DI opval = ZEXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))))); 2310 SET_H_GR (FLD (f_dest), opval); 2311 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2312 } 2313 2314#undef FLD 2315} 2316 NEXT (vpc); 2317 2318 CASE (sem, INSN_LDW) : /* ld.w $rm, $disp10x2, $rd */ 2319{ 2320 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2321 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2322#define FLD(f) abuf->fields.sfmt_lduw.f 2323 int UNUSED written = 0; 2324 IADDR UNUSED pc = abuf->addr; 2325 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2326 2327 { 2328 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))))); 2329 SET_H_GR (FLD (f_dest), opval); 2330 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2331 } 2332 2333#undef FLD 2334} 2335 NEXT (vpc); 2336 2337 CASE (sem, INSN_LDHIL) : /* ldhi.l $rm, $disp6, $rd */ 2338{ 2339 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2340 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2341#define FLD(f) abuf->fields.sfmt_getcfg.f 2342 int UNUSED written = 0; 2343 IADDR UNUSED pc = abuf->addr; 2344 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2345 2346{ 2347 DI tmp_addr; 2348 QI tmp_bytecount; 2349 SI tmp_val; 2350 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2351 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1); 2352 tmp_val = 0; 2353if (ANDQI (tmp_bytecount, 4)) { 2354 { 2355 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4))); 2356 SET_H_GR (FLD (f_dest), opval); 2357 written |= (1 << 6); 2358 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2359 } 2360} else { 2361if (GET_H_ENDIAN ()) { 2362{ 2363if (ANDQI (tmp_bytecount, 2)) { 2364 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2365} 2366if (ANDQI (tmp_bytecount, 1)) { 2367 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2368} 2369 { 2370 DI opval = EXTSIDI (tmp_val); 2371 SET_H_GR (FLD (f_dest), opval); 2372 written |= (1 << 6); 2373 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2374 } 2375} 2376} else { 2377{ 2378if (ANDQI (tmp_bytecount, 1)) { 2379 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2380} 2381if (ANDQI (tmp_bytecount, 2)) { 2382 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2383} 2384 { 2385 DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount)))); 2386 SET_H_GR (FLD (f_dest), opval); 2387 written |= (1 << 6); 2388 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2389 } 2390} 2391} 2392} 2393} 2394 2395 abuf->written = written; 2396#undef FLD 2397} 2398 NEXT (vpc); 2399 2400 CASE (sem, INSN_LDHIQ) : /* ldhi.q $rm, $disp6, $rd */ 2401{ 2402 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2403 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2404#define FLD(f) abuf->fields.sfmt_getcfg.f 2405 int UNUSED written = 0; 2406 IADDR UNUSED pc = abuf->addr; 2407 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2408 2409{ 2410 DI tmp_addr; 2411 QI tmp_bytecount; 2412 DI tmp_val; 2413 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2414 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1); 2415 tmp_val = 0; 2416if (ANDQI (tmp_bytecount, 8)) { 2417 { 2418 DI opval = GETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8)); 2419 SET_H_GR (FLD (f_dest), opval); 2420 written |= (1 << 7); 2421 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2422 } 2423} else { 2424if (GET_H_ENDIAN ()) { 2425{ 2426if (ANDQI (tmp_bytecount, 4)) { 2427 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8)))); 2428} 2429if (ANDQI (tmp_bytecount, 2)) { 2430 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2431} 2432if (ANDQI (tmp_bytecount, 1)) { 2433 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2434} 2435 { 2436 DI opval = tmp_val; 2437 SET_H_GR (FLD (f_dest), opval); 2438 written |= (1 << 7); 2439 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2440 } 2441} 2442} else { 2443{ 2444if (ANDQI (tmp_bytecount, 1)) { 2445 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2446} 2447if (ANDQI (tmp_bytecount, 2)) { 2448 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2449} 2450if (ANDQI (tmp_bytecount, 4)) { 2451 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8)))); 2452} 2453 { 2454 DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount))); 2455 SET_H_GR (FLD (f_dest), opval); 2456 written |= (1 << 7); 2457 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2458 } 2459} 2460} 2461} 2462} 2463 2464 abuf->written = written; 2465#undef FLD 2466} 2467 NEXT (vpc); 2468 2469 CASE (sem, INSN_LDLOL) : /* ldlo.l $rm, $disp6, $rd */ 2470{ 2471 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2472 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2473#define FLD(f) abuf->fields.sfmt_getcfg.f 2474 int UNUSED written = 0; 2475 IADDR UNUSED pc = abuf->addr; 2476 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2477 2478{ 2479 DI tmp_addr; 2480 QI tmp_bytecount; 2481 SI tmp_val; 2482 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2483 tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3)); 2484 tmp_val = 0; 2485if (ANDQI (tmp_bytecount, 4)) { 2486 { 2487 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, tmp_addr)); 2488 SET_H_GR (FLD (f_dest), opval); 2489 written |= (1 << 6); 2490 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2491 } 2492} else { 2493if (GET_H_ENDIAN ()) { 2494{ 2495if (ANDQI (tmp_bytecount, 1)) { 2496 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2497} 2498if (ANDQI (tmp_bytecount, 2)) { 2499 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2500} 2501 { 2502 DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount)))); 2503 SET_H_GR (FLD (f_dest), opval); 2504 written |= (1 << 6); 2505 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2506 } 2507} 2508} else { 2509{ 2510if (ANDQI (tmp_bytecount, 2)) { 2511 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2512} 2513if (ANDQI (tmp_bytecount, 1)) { 2514 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2515} 2516 { 2517 DI opval = EXTSIDI (tmp_val); 2518 SET_H_GR (FLD (f_dest), opval); 2519 written |= (1 << 6); 2520 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2521 } 2522} 2523} 2524} 2525} 2526 2527 abuf->written = written; 2528#undef FLD 2529} 2530 NEXT (vpc); 2531 2532 CASE (sem, INSN_LDLOQ) : /* ldlo.q $rm, $disp6, $rd */ 2533{ 2534 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2535 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2536#define FLD(f) abuf->fields.sfmt_getcfg.f 2537 int UNUSED written = 0; 2538 IADDR UNUSED pc = abuf->addr; 2539 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2540 2541{ 2542 DI tmp_addr; 2543 QI tmp_bytecount; 2544 DI tmp_val; 2545 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2546 tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7)); 2547 tmp_val = 0; 2548if (ANDQI (tmp_bytecount, 8)) { 2549 { 2550 DI opval = GETMEMDI (current_cpu, pc, tmp_addr); 2551 SET_H_GR (FLD (f_dest), opval); 2552 written |= (1 << 7); 2553 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2554 } 2555} else { 2556if (GET_H_ENDIAN ()) { 2557{ 2558if (ANDQI (tmp_bytecount, 1)) { 2559 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2560} 2561if (ANDQI (tmp_bytecount, 2)) { 2562 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2563} 2564if (ANDQI (tmp_bytecount, 4)) { 2565 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4)))); 2566} 2567 { 2568 DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount))); 2569 SET_H_GR (FLD (f_dest), opval); 2570 written |= (1 << 7); 2571 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2572 } 2573} 2574} else { 2575{ 2576if (ANDQI (tmp_bytecount, 4)) { 2577 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4)))); 2578} 2579if (ANDQI (tmp_bytecount, 2)) { 2580 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2581} 2582if (ANDQI (tmp_bytecount, 1)) { 2583 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2584} 2585 { 2586 DI opval = tmp_val; 2587 SET_H_GR (FLD (f_dest), opval); 2588 written |= (1 << 7); 2589 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2590 } 2591} 2592} 2593} 2594} 2595 2596 abuf->written = written; 2597#undef FLD 2598} 2599 NEXT (vpc); 2600 2601 CASE (sem, INSN_LDXB) : /* ldx.b $rm, $rn, $rd */ 2602{ 2603 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2604 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2605#define FLD(f) abuf->fields.sfmt_add.f 2606 int UNUSED written = 0; 2607 IADDR UNUSED pc = abuf->addr; 2608 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2609 2610 { 2611 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2612 SET_H_GR (FLD (f_dest), opval); 2613 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2614 } 2615 2616#undef FLD 2617} 2618 NEXT (vpc); 2619 2620 CASE (sem, INSN_LDXL) : /* ldx.l $rm, $rn, $rd */ 2621{ 2622 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2623 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2624#define FLD(f) abuf->fields.sfmt_add.f 2625 int UNUSED written = 0; 2626 IADDR UNUSED pc = abuf->addr; 2627 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2628 2629 { 2630 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2631 SET_H_GR (FLD (f_dest), opval); 2632 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2633 } 2634 2635#undef FLD 2636} 2637 NEXT (vpc); 2638 2639 CASE (sem, INSN_LDXQ) : /* ldx.q $rm, $rn, $rd */ 2640{ 2641 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2642 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2643#define FLD(f) abuf->fields.sfmt_add.f 2644 int UNUSED written = 0; 2645 IADDR UNUSED pc = abuf->addr; 2646 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2647 2648 { 2649 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))); 2650 SET_H_GR (FLD (f_dest), opval); 2651 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2652 } 2653 2654#undef FLD 2655} 2656 NEXT (vpc); 2657 2658 CASE (sem, INSN_LDXUB) : /* ldx.ub $rm, $rn, $rd */ 2659{ 2660 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2661 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2662#define FLD(f) abuf->fields.sfmt_add.f 2663 int UNUSED written = 0; 2664 IADDR UNUSED pc = abuf->addr; 2665 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2666 2667 { 2668 DI opval = ZEXTQIDI (GETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2669 SET_H_GR (FLD (f_dest), opval); 2670 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2671 } 2672 2673#undef FLD 2674} 2675 NEXT (vpc); 2676 2677 CASE (sem, INSN_LDXUW) : /* ldx.uw $rm, $rn, $rd */ 2678{ 2679 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2680 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2681#define FLD(f) abuf->fields.sfmt_add.f 2682 int UNUSED written = 0; 2683 IADDR UNUSED pc = abuf->addr; 2684 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2685 2686 { 2687 DI opval = ZEXTHIDI (GETMEMUHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2688 SET_H_GR (FLD (f_dest), opval); 2689 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2690 } 2691 2692#undef FLD 2693} 2694 NEXT (vpc); 2695 2696 CASE (sem, INSN_LDXW) : /* ldx.w $rm, $rn, $rd */ 2697{ 2698 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2699 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2700#define FLD(f) abuf->fields.sfmt_add.f 2701 int UNUSED written = 0; 2702 IADDR UNUSED pc = abuf->addr; 2703 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2704 2705 { 2706 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2707 SET_H_GR (FLD (f_dest), opval); 2708 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2709 } 2710 2711#undef FLD 2712} 2713 NEXT (vpc); 2714 2715 CASE (sem, INSN_MABSL) : /* mabs.l $rm, $rd */ 2716{ 2717 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2718 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2719#define FLD(f) abuf->fields.sfmt_xori.f 2720 int UNUSED written = 0; 2721 IADDR UNUSED pc = abuf->addr; 2722 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2723 2724{ 2725 SI tmp_result1; 2726 SI tmp_result0; 2727 tmp_result0 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)); 2728 tmp_result1 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)); 2729 { 2730 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2731 SET_H_GR (FLD (f_dest), opval); 2732 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2733 } 2734} 2735 2736#undef FLD 2737} 2738 NEXT (vpc); 2739 2740 CASE (sem, INSN_MABSW) : /* mabs.w $rm, $rd */ 2741{ 2742 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2743 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2744#define FLD(f) abuf->fields.sfmt_xori.f 2745 int UNUSED written = 0; 2746 IADDR UNUSED pc = abuf->addr; 2747 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2748 2749{ 2750 HI tmp_result3; 2751 HI tmp_result2; 2752 HI tmp_result1; 2753 HI tmp_result0; 2754 tmp_result0 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)); 2755 tmp_result1 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)); 2756 tmp_result2 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)); 2757 tmp_result3 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)); 2758 { 2759 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2760 SET_H_GR (FLD (f_dest), opval); 2761 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2762 } 2763} 2764 2765#undef FLD 2766} 2767 NEXT (vpc); 2768 2769 CASE (sem, INSN_MADDL) : /* madd.l $rm, $rn, $rd */ 2770{ 2771 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2772 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2773#define FLD(f) abuf->fields.sfmt_add.f 2774 int UNUSED written = 0; 2775 IADDR UNUSED pc = abuf->addr; 2776 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2777 2778{ 2779 SI tmp_result1; 2780 SI tmp_result0; 2781 tmp_result0 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 2782 tmp_result1 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)); 2783 { 2784 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2785 SET_H_GR (FLD (f_dest), opval); 2786 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2787 } 2788} 2789 2790#undef FLD 2791} 2792 NEXT (vpc); 2793 2794 CASE (sem, INSN_MADDW) : /* madd.w $rm, $rn, $rd */ 2795{ 2796 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2797 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2798#define FLD(f) abuf->fields.sfmt_add.f 2799 int UNUSED written = 0; 2800 IADDR UNUSED pc = abuf->addr; 2801 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2802 2803{ 2804 HI tmp_result3; 2805 HI tmp_result2; 2806 HI tmp_result1; 2807 HI tmp_result0; 2808 tmp_result0 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)); 2809 tmp_result1 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)); 2810 tmp_result2 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)); 2811 tmp_result3 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)); 2812 { 2813 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2814 SET_H_GR (FLD (f_dest), opval); 2815 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2816 } 2817} 2818 2819#undef FLD 2820} 2821 NEXT (vpc); 2822 2823 CASE (sem, INSN_MADDSL) : /* madds.l $rm, $rn, $rd */ 2824{ 2825 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2826 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2827#define FLD(f) abuf->fields.sfmt_add.f 2828 int UNUSED written = 0; 2829 IADDR UNUSED pc = abuf->addr; 2830 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2831 2832{ 2833 SI tmp_result1; 2834 SI tmp_result0; 2835 tmp_result0 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 2836 tmp_result1 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 2837 { 2838 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2839 SET_H_GR (FLD (f_dest), opval); 2840 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2841 } 2842} 2843 2844#undef FLD 2845} 2846 NEXT (vpc); 2847 2848 CASE (sem, INSN_MADDSUB) : /* madds.ub $rm, $rn, $rd */ 2849{ 2850 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2851 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2852#define FLD(f) abuf->fields.sfmt_add.f 2853 int UNUSED written = 0; 2854 IADDR UNUSED pc = abuf->addr; 2855 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2856 2857{ 2858 QI tmp_result7; 2859 QI tmp_result6; 2860 QI tmp_result5; 2861 QI tmp_result4; 2862 QI tmp_result3; 2863 QI tmp_result2; 2864 QI tmp_result1; 2865 QI tmp_result0; 2866 tmp_result0 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1))))); 2867 tmp_result1 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1))))); 2868 tmp_result2 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1))))); 2869 tmp_result3 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1))))); 2870 tmp_result4 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1))))); 2871 tmp_result5 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1))))); 2872 tmp_result6 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1))))); 2873 tmp_result7 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1))))); 2874 { 2875 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 2876 SET_H_GR (FLD (f_dest), opval); 2877 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2878 } 2879} 2880 2881#undef FLD 2882} 2883 NEXT (vpc); 2884 2885 CASE (sem, INSN_MADDSW) : /* madds.w $rm, $rn, $rd */ 2886{ 2887 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2888 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2889#define FLD(f) abuf->fields.sfmt_add.f 2890 int UNUSED written = 0; 2891 IADDR UNUSED pc = abuf->addr; 2892 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2893 2894{ 2895 HI tmp_result3; 2896 HI tmp_result2; 2897 HI tmp_result1; 2898 HI tmp_result0; 2899 tmp_result0 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2900 tmp_result1 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2901 tmp_result2 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2902 tmp_result3 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2903 { 2904 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2905 SET_H_GR (FLD (f_dest), opval); 2906 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2907 } 2908} 2909 2910#undef FLD 2911} 2912 NEXT (vpc); 2913 2914 CASE (sem, INSN_MCMPEQB) : /* mcmpeq.b $rm, $rn, $rd */ 2915{ 2916 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2917 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2918#define FLD(f) abuf->fields.sfmt_add.f 2919 int UNUSED written = 0; 2920 IADDR UNUSED pc = abuf->addr; 2921 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2922 2923{ 2924 QI tmp_result7; 2925 QI tmp_result6; 2926 QI tmp_result5; 2927 QI tmp_result4; 2928 QI tmp_result3; 2929 QI tmp_result2; 2930 QI tmp_result1; 2931 QI tmp_result0; 2932 tmp_result0 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0)); 2933 tmp_result1 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0)); 2934 tmp_result2 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0)); 2935 tmp_result3 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0)); 2936 tmp_result4 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0)); 2937 tmp_result5 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0)); 2938 tmp_result6 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0)); 2939 tmp_result7 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0)); 2940 { 2941 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 2942 SET_H_GR (FLD (f_dest), opval); 2943 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2944 } 2945} 2946 2947#undef FLD 2948} 2949 NEXT (vpc); 2950 2951 CASE (sem, INSN_MCMPEQL) : /* mcmpeq.l $rm, $rn, $rd */ 2952{ 2953 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2954 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2955#define FLD(f) abuf->fields.sfmt_add.f 2956 int UNUSED written = 0; 2957 IADDR UNUSED pc = abuf->addr; 2958 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2959 2960{ 2961 SI tmp_result1; 2962 SI tmp_result0; 2963 tmp_result0 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0)); 2964 tmp_result1 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0)); 2965 { 2966 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2967 SET_H_GR (FLD (f_dest), opval); 2968 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2969 } 2970} 2971 2972#undef FLD 2973} 2974 NEXT (vpc); 2975 2976 CASE (sem, INSN_MCMPEQW) : /* mcmpeq.w $rm, $rn, $rd */ 2977{ 2978 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2979 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2980#define FLD(f) abuf->fields.sfmt_add.f 2981 int UNUSED written = 0; 2982 IADDR UNUSED pc = abuf->addr; 2983 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2984 2985{ 2986 HI tmp_result3; 2987 HI tmp_result2; 2988 HI tmp_result1; 2989 HI tmp_result0; 2990 tmp_result0 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0)); 2991 tmp_result1 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0)); 2992 tmp_result2 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0)); 2993 tmp_result3 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0)); 2994 { 2995 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2996 SET_H_GR (FLD (f_dest), opval); 2997 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2998 } 2999} 3000 3001#undef FLD 3002} 3003 NEXT (vpc); 3004 3005 CASE (sem, INSN_MCMPGTL) : /* mcmpgt.l $rm, $rn, $rd */ 3006{ 3007 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3008 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3009#define FLD(f) abuf->fields.sfmt_add.f 3010 int UNUSED written = 0; 3011 IADDR UNUSED pc = abuf->addr; 3012 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3013 3014{ 3015 SI tmp_result1; 3016 SI tmp_result0; 3017 tmp_result0 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0)); 3018 tmp_result1 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0)); 3019 { 3020 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3021 SET_H_GR (FLD (f_dest), opval); 3022 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3023 } 3024} 3025 3026#undef FLD 3027} 3028 NEXT (vpc); 3029 3030 CASE (sem, INSN_MCMPGTUB) : /* mcmpgt.ub $rm, $rn, $rd */ 3031{ 3032 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3033 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3034#define FLD(f) abuf->fields.sfmt_add.f 3035 int UNUSED written = 0; 3036 IADDR UNUSED pc = abuf->addr; 3037 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3038 3039{ 3040 QI tmp_result7; 3041 QI tmp_result6; 3042 QI tmp_result5; 3043 QI tmp_result4; 3044 QI tmp_result3; 3045 QI tmp_result2; 3046 QI tmp_result1; 3047 QI tmp_result0; 3048 tmp_result0 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0)); 3049 tmp_result1 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0)); 3050 tmp_result2 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0)); 3051 tmp_result3 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0)); 3052 tmp_result4 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0)); 3053 tmp_result5 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0)); 3054 tmp_result6 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0)); 3055 tmp_result7 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0)); 3056 { 3057 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3058 SET_H_GR (FLD (f_dest), opval); 3059 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3060 } 3061} 3062 3063#undef FLD 3064} 3065 NEXT (vpc); 3066 3067 CASE (sem, INSN_MCMPGTW) : /* mcmpgt.w $rm, $rn, $rd */ 3068{ 3069 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3070 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3071#define FLD(f) abuf->fields.sfmt_add.f 3072 int UNUSED written = 0; 3073 IADDR UNUSED pc = abuf->addr; 3074 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3075 3076{ 3077 HI tmp_result3; 3078 HI tmp_result2; 3079 HI tmp_result1; 3080 HI tmp_result0; 3081 tmp_result0 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0)); 3082 tmp_result1 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0)); 3083 tmp_result2 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0)); 3084 tmp_result3 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0)); 3085 { 3086 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3087 SET_H_GR (FLD (f_dest), opval); 3088 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3089 } 3090} 3091 3092#undef FLD 3093} 3094 NEXT (vpc); 3095 3096 CASE (sem, INSN_MCMV) : /* mcmv $rm, $rn, $rd */ 3097{ 3098 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3099 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3100#define FLD(f) abuf->fields.sfmt_add.f 3101 int UNUSED written = 0; 3102 IADDR UNUSED pc = abuf->addr; 3103 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3104 3105 { 3106 DI opval = ORDI (ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), ANDDI (GET_H_GR (FLD (f_dest)), INVDI (GET_H_GR (FLD (f_right))))); 3107 SET_H_GR (FLD (f_dest), opval); 3108 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3109 } 3110 3111#undef FLD 3112} 3113 NEXT (vpc); 3114 3115 CASE (sem, INSN_MCNVSLW) : /* mcnvs.lw $rm, $rn, $rd */ 3116{ 3117 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3118 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3119#define FLD(f) abuf->fields.sfmt_add.f 3120 int UNUSED written = 0; 3121 IADDR UNUSED pc = abuf->addr; 3122 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3123 3124{ 3125 HI tmp_result3; 3126 HI tmp_result2; 3127 HI tmp_result1; 3128 HI tmp_result0; 3129 tmp_result0 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3130 tmp_result1 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3131 tmp_result2 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3132 tmp_result3 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3133 { 3134 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3135 SET_H_GR (FLD (f_dest), opval); 3136 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3137 } 3138} 3139 3140#undef FLD 3141} 3142 NEXT (vpc); 3143 3144 CASE (sem, INSN_MCNVSWB) : /* mcnvs.wb $rm, $rn, $rd */ 3145{ 3146 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3147 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3148#define FLD(f) abuf->fields.sfmt_add.f 3149 int UNUSED written = 0; 3150 IADDR UNUSED pc = abuf->addr; 3151 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3152 3153{ 3154 QI tmp_result7; 3155 QI tmp_result6; 3156 QI tmp_result5; 3157 QI tmp_result4; 3158 QI tmp_result3; 3159 QI tmp_result2; 3160 QI tmp_result1; 3161 QI tmp_result0; 3162 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3163 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3164 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3165 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3166 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3167 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3168 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3169 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3170 { 3171 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3172 SET_H_GR (FLD (f_dest), opval); 3173 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3174 } 3175} 3176 3177#undef FLD 3178} 3179 NEXT (vpc); 3180 3181 CASE (sem, INSN_MCNVSWUB) : /* mcnvs.wub $rm, $rn, $rd */ 3182{ 3183 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3184 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3185#define FLD(f) abuf->fields.sfmt_add.f 3186 int UNUSED written = 0; 3187 IADDR UNUSED pc = abuf->addr; 3188 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3189 3190{ 3191 QI tmp_result7; 3192 QI tmp_result6; 3193 QI tmp_result5; 3194 QI tmp_result4; 3195 QI tmp_result3; 3196 QI tmp_result2; 3197 QI tmp_result1; 3198 QI tmp_result0; 3199 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, 8), 1))))); 3200 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, 8), 1))))); 3201 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, 8), 1))))); 3202 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, 8), 1))))); 3203 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, 8), 1))))); 3204 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, 8), 1))))); 3205 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, 8), 1))))); 3206 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, 8), 1))))); 3207 { 3208 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3209 SET_H_GR (FLD (f_dest), opval); 3210 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3211 } 3212} 3213 3214#undef FLD 3215} 3216 NEXT (vpc); 3217 3218 CASE (sem, INSN_MEXTR1) : /* mextr1 $rm, $rn, $rd */ 3219{ 3220 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3221 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3222#define FLD(f) abuf->fields.sfmt_add.f 3223 int UNUSED written = 0; 3224 IADDR UNUSED pc = abuf->addr; 3225 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3226 3227{ 3228 QI tmp_count; 3229 DI tmp_mask; 3230 DI tmp_rhs; 3231 tmp_count = MULQI (8, 1); 3232 tmp_mask = SLLDI (INVSI (0), tmp_count); 3233 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3234 tmp_count = MULQI (8, SUBQI (8, 1)); 3235 tmp_mask = SRLDI (INVSI (0), tmp_count); 3236 { 3237 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3238 SET_H_GR (FLD (f_dest), opval); 3239 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3240 } 3241} 3242 3243#undef FLD 3244} 3245 NEXT (vpc); 3246 3247 CASE (sem, INSN_MEXTR2) : /* mextr2 $rm, $rn, $rd */ 3248{ 3249 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3250 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3251#define FLD(f) abuf->fields.sfmt_add.f 3252 int UNUSED written = 0; 3253 IADDR UNUSED pc = abuf->addr; 3254 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3255 3256{ 3257 QI tmp_count; 3258 DI tmp_mask; 3259 DI tmp_rhs; 3260 tmp_count = MULQI (8, 2); 3261 tmp_mask = SLLDI (INVSI (0), tmp_count); 3262 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3263 tmp_count = MULQI (8, SUBQI (8, 2)); 3264 tmp_mask = SRLDI (INVSI (0), tmp_count); 3265 { 3266 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3267 SET_H_GR (FLD (f_dest), opval); 3268 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3269 } 3270} 3271 3272#undef FLD 3273} 3274 NEXT (vpc); 3275 3276 CASE (sem, INSN_MEXTR3) : /* mextr3 $rm, $rn, $rd */ 3277{ 3278 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3279 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3280#define FLD(f) abuf->fields.sfmt_add.f 3281 int UNUSED written = 0; 3282 IADDR UNUSED pc = abuf->addr; 3283 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3284 3285{ 3286 QI tmp_count; 3287 DI tmp_mask; 3288 DI tmp_rhs; 3289 tmp_count = MULQI (8, 3); 3290 tmp_mask = SLLDI (INVSI (0), tmp_count); 3291 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3292 tmp_count = MULQI (8, SUBQI (8, 3)); 3293 tmp_mask = SRLDI (INVSI (0), tmp_count); 3294 { 3295 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3296 SET_H_GR (FLD (f_dest), opval); 3297 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3298 } 3299} 3300 3301#undef FLD 3302} 3303 NEXT (vpc); 3304 3305 CASE (sem, INSN_MEXTR4) : /* mextr4 $rm, $rn, $rd */ 3306{ 3307 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3308 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3309#define FLD(f) abuf->fields.sfmt_add.f 3310 int UNUSED written = 0; 3311 IADDR UNUSED pc = abuf->addr; 3312 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3313 3314{ 3315 QI tmp_count; 3316 DI tmp_mask; 3317 DI tmp_rhs; 3318 tmp_count = MULQI (8, 4); 3319 tmp_mask = SLLDI (INVSI (0), tmp_count); 3320 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3321 tmp_count = MULQI (8, SUBQI (8, 4)); 3322 tmp_mask = SRLDI (INVSI (0), tmp_count); 3323 { 3324 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3325 SET_H_GR (FLD (f_dest), opval); 3326 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3327 } 3328} 3329 3330#undef FLD 3331} 3332 NEXT (vpc); 3333 3334 CASE (sem, INSN_MEXTR5) : /* mextr5 $rm, $rn, $rd */ 3335{ 3336 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3337 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3338#define FLD(f) abuf->fields.sfmt_add.f 3339 int UNUSED written = 0; 3340 IADDR UNUSED pc = abuf->addr; 3341 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3342 3343{ 3344 QI tmp_count; 3345 DI tmp_mask; 3346 DI tmp_rhs; 3347 tmp_count = MULQI (8, 5); 3348 tmp_mask = SLLDI (INVSI (0), tmp_count); 3349 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3350 tmp_count = MULQI (8, SUBQI (8, 5)); 3351 tmp_mask = SRLDI (INVSI (0), tmp_count); 3352 { 3353 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3354 SET_H_GR (FLD (f_dest), opval); 3355 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3356 } 3357} 3358 3359#undef FLD 3360} 3361 NEXT (vpc); 3362 3363 CASE (sem, INSN_MEXTR6) : /* mextr6 $rm, $rn, $rd */ 3364{ 3365 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3366 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3367#define FLD(f) abuf->fields.sfmt_add.f 3368 int UNUSED written = 0; 3369 IADDR UNUSED pc = abuf->addr; 3370 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3371 3372{ 3373 QI tmp_count; 3374 DI tmp_mask; 3375 DI tmp_rhs; 3376 tmp_count = MULQI (8, 6); 3377 tmp_mask = SLLDI (INVSI (0), tmp_count); 3378 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3379 tmp_count = MULQI (8, SUBQI (8, 6)); 3380 tmp_mask = SRLDI (INVSI (0), tmp_count); 3381 { 3382 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3383 SET_H_GR (FLD (f_dest), opval); 3384 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3385 } 3386} 3387 3388#undef FLD 3389} 3390 NEXT (vpc); 3391 3392 CASE (sem, INSN_MEXTR7) : /* mextr7 $rm, $rn, $rd */ 3393{ 3394 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3395 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3396#define FLD(f) abuf->fields.sfmt_add.f 3397 int UNUSED written = 0; 3398 IADDR UNUSED pc = abuf->addr; 3399 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3400 3401{ 3402 QI tmp_count; 3403 DI tmp_mask; 3404 DI tmp_rhs; 3405 tmp_count = MULQI (8, 7); 3406 tmp_mask = SLLDI (INVSI (0), tmp_count); 3407 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3408 tmp_count = MULQI (8, SUBQI (8, 7)); 3409 tmp_mask = SRLDI (INVSI (0), tmp_count); 3410 { 3411 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3412 SET_H_GR (FLD (f_dest), opval); 3413 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3414 } 3415} 3416 3417#undef FLD 3418} 3419 NEXT (vpc); 3420 3421 CASE (sem, INSN_MMACFXWL) : /* mmacfx.wl $rm, $rn, $rd */ 3422{ 3423 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3424 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3425#define FLD(f) abuf->fields.sfmt_add.f 3426 int UNUSED written = 0; 3427 IADDR UNUSED pc = abuf->addr; 3428 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3429 3430{ 3431 SI tmp_temp; 3432 SI tmp_result1; 3433 SI tmp_result0; 3434 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1); 3435 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0); 3436 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3437 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3438 tmp_result0 = ((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3439 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3440 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3441 tmp_result1 = ((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3442 { 3443 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3444 SET_H_GR (FLD (f_dest), opval); 3445 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3446 } 3447} 3448 3449#undef FLD 3450} 3451 NEXT (vpc); 3452 3453 CASE (sem, INSN_MMACNFX_WL) : /* mmacnfx.wl $rm, $rn, $rd */ 3454{ 3455 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3456 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3457#define FLD(f) abuf->fields.sfmt_add.f 3458 int UNUSED written = 0; 3459 IADDR UNUSED pc = abuf->addr; 3460 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3461 3462{ 3463 SI tmp_temp; 3464 SI tmp_result1; 3465 SI tmp_result0; 3466 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1); 3467 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0); 3468 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3469 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3470 tmp_result0 = ((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3471 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3472 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3473 tmp_result1 = ((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3474 { 3475 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3476 SET_H_GR (FLD (f_dest), opval); 3477 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3478 } 3479} 3480 3481#undef FLD 3482} 3483 NEXT (vpc); 3484 3485 CASE (sem, INSN_MMULL) : /* mmul.l $rm, $rn, $rd */ 3486{ 3487 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3488 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3489#define FLD(f) abuf->fields.sfmt_add.f 3490 int UNUSED written = 0; 3491 IADDR UNUSED pc = abuf->addr; 3492 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3493 3494{ 3495 SI tmp_result1; 3496 SI tmp_result0; 3497 tmp_result0 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 3498 tmp_result1 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)); 3499 { 3500 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3501 SET_H_GR (FLD (f_dest), opval); 3502 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3503 } 3504} 3505 3506#undef FLD 3507} 3508 NEXT (vpc); 3509 3510 CASE (sem, INSN_MMULW) : /* mmul.w $rm, $rn, $rd */ 3511{ 3512 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3513 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3514#define FLD(f) abuf->fields.sfmt_add.f 3515 int UNUSED written = 0; 3516 IADDR UNUSED pc = abuf->addr; 3517 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3518 3519{ 3520 HI tmp_result3; 3521 HI tmp_result2; 3522 HI tmp_result1; 3523 HI tmp_result0; 3524 tmp_result0 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)); 3525 tmp_result1 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)); 3526 tmp_result2 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)); 3527 tmp_result3 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)); 3528 { 3529 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3530 SET_H_GR (FLD (f_dest), opval); 3531 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3532 } 3533} 3534 3535#undef FLD 3536} 3537 NEXT (vpc); 3538 3539 CASE (sem, INSN_MMULFXL) : /* mmulfx.l $rm, $rn, $rd */ 3540{ 3541 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3542 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3543#define FLD(f) abuf->fields.sfmt_add.f 3544 int UNUSED written = 0; 3545 IADDR UNUSED pc = abuf->addr; 3546 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3547 3548{ 3549 DI tmp_temp; 3550 SI tmp_result0; 3551 SI tmp_result1; 3552 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 3553 tmp_result0 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3554 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))); 3555 tmp_result1 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3556 { 3557 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3558 SET_H_GR (FLD (f_dest), opval); 3559 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3560 } 3561} 3562 3563#undef FLD 3564} 3565 NEXT (vpc); 3566 3567 CASE (sem, INSN_MMULFXW) : /* mmulfx.w $rm, $rn, $rd */ 3568{ 3569 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3570 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3571#define FLD(f) abuf->fields.sfmt_add.f 3572 int UNUSED written = 0; 3573 IADDR UNUSED pc = abuf->addr; 3574 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3575 3576{ 3577 SI tmp_temp; 3578 HI tmp_result0; 3579 HI tmp_result1; 3580 HI tmp_result2; 3581 HI tmp_result3; 3582 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3583 tmp_result0 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3584 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3585 tmp_result1 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3586 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))); 3587 tmp_result2 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3588 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3589 tmp_result3 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3590 { 3591 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3592 SET_H_GR (FLD (f_dest), opval); 3593 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3594 } 3595} 3596 3597#undef FLD 3598} 3599 NEXT (vpc); 3600 3601 CASE (sem, INSN_MMULFXRPW) : /* mmulfxrp.w $rm, $rn, $rd */ 3602{ 3603 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3604 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3605#define FLD(f) abuf->fields.sfmt_add.f 3606 int UNUSED written = 0; 3607 IADDR UNUSED pc = abuf->addr; 3608 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3609 3610{ 3611 SI tmp_temp; 3612 HI tmp_result0; 3613 HI tmp_result1; 3614 HI tmp_result2; 3615 HI tmp_result3; 3616 HI tmp_c; 3617 tmp_c = SLLSI (1, 14); 3618 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3619 tmp_result0 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3620 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3621 tmp_result1 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3622 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))); 3623 tmp_result2 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3624 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3625 tmp_result3 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3626 { 3627 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3628 SET_H_GR (FLD (f_dest), opval); 3629 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3630 } 3631} 3632 3633#undef FLD 3634} 3635 NEXT (vpc); 3636 3637 CASE (sem, INSN_MMULHIWL) : /* mmulhi.wl $rm, $rn, $rd */ 3638{ 3639 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3640 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3641#define FLD(f) abuf->fields.sfmt_add.f 3642 int UNUSED written = 0; 3643 IADDR UNUSED pc = abuf->addr; 3644 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3645 3646{ 3647 SI tmp_result1; 3648 SI tmp_result0; 3649 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))); 3650 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3651 { 3652 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3653 SET_H_GR (FLD (f_dest), opval); 3654 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3655 } 3656} 3657 3658#undef FLD 3659} 3660 NEXT (vpc); 3661 3662 CASE (sem, INSN_MMULLOWL) : /* mmullo.wl $rm, $rn, $rd */ 3663{ 3664 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3665 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3666#define FLD(f) abuf->fields.sfmt_add.f 3667 int UNUSED written = 0; 3668 IADDR UNUSED pc = abuf->addr; 3669 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3670 3671{ 3672 SI tmp_result1; 3673 SI tmp_result0; 3674 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3675 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3676 { 3677 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3678 SET_H_GR (FLD (f_dest), opval); 3679 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3680 } 3681} 3682 3683#undef FLD 3684} 3685 NEXT (vpc); 3686 3687 CASE (sem, INSN_MMULSUMWQ) : /* mmulsum.wq $rm, $rn, $rd */ 3688{ 3689 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3690 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3691#define FLD(f) abuf->fields.sfmt_add.f 3692 int UNUSED written = 0; 3693 IADDR UNUSED pc = abuf->addr; 3694 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3695 3696{ 3697 DI tmp_acc; 3698 tmp_acc = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3699 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)))); 3700 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)))); 3701 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)))); 3702 { 3703 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc); 3704 SET_H_GR (FLD (f_dest), opval); 3705 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3706 } 3707} 3708 3709#undef FLD 3710} 3711 NEXT (vpc); 3712 3713 CASE (sem, INSN_MOVI) : /* movi $imm16, $rd */ 3714{ 3715 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3716 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3717#define FLD(f) abuf->fields.sfmt_movi.f 3718 int UNUSED written = 0; 3719 IADDR UNUSED pc = abuf->addr; 3720 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3721 3722 { 3723 DI opval = EXTSIDI (FLD (f_imm16)); 3724 SET_H_GR (FLD (f_dest), opval); 3725 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3726 } 3727 3728#undef FLD 3729} 3730 NEXT (vpc); 3731 3732 CASE (sem, INSN_MPERMW) : /* mperm.w $rm, $rn, $rd */ 3733{ 3734 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3735 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3736#define FLD(f) abuf->fields.sfmt_add.f 3737 int UNUSED written = 0; 3738 IADDR UNUSED pc = abuf->addr; 3739 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3740 3741{ 3742 QI tmp_control; 3743 HI tmp_result3; 3744 HI tmp_result2; 3745 HI tmp_result1; 3746 HI tmp_result0; 3747 tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 255); 3748 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (tmp_control, 3))); 3749 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 2), 3))); 3750 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 4), 3))); 3751 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 6), 3))); 3752 { 3753 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3754 SET_H_GR (FLD (f_dest), opval); 3755 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3756 } 3757} 3758 3759#undef FLD 3760} 3761 NEXT (vpc); 3762 3763 CASE (sem, INSN_MSADUBQ) : /* msad.ubq $rm, $rn, $rd */ 3764{ 3765 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3766 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3767#define FLD(f) abuf->fields.sfmt_add.f 3768 int UNUSED written = 0; 3769 IADDR UNUSED pc = abuf->addr; 3770 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3771 3772{ 3773 DI tmp_acc; 3774 tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))); 3775 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))); 3776 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))); 3777 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))); 3778 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))); 3779 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))); 3780 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))); 3781 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))); 3782 { 3783 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc); 3784 SET_H_GR (FLD (f_dest), opval); 3785 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3786 } 3787} 3788 3789#undef FLD 3790} 3791 NEXT (vpc); 3792 3793 CASE (sem, INSN_MSHALDSL) : /* mshalds.l $rm, $rn, $rd */ 3794{ 3795 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3796 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3797#define FLD(f) abuf->fields.sfmt_add.f 3798 int UNUSED written = 0; 3799 IADDR UNUSED pc = abuf->addr; 3800 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3801 3802{ 3803 SI tmp_result1; 3804 SI tmp_result0; 3805 tmp_result0 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3806 tmp_result1 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3807 { 3808 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3809 SET_H_GR (FLD (f_dest), opval); 3810 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3811 } 3812} 3813 3814#undef FLD 3815} 3816 NEXT (vpc); 3817 3818 CASE (sem, INSN_MSHALDSW) : /* mshalds.w $rm, $rn, $rd */ 3819{ 3820 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3821 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3822#define FLD(f) abuf->fields.sfmt_add.f 3823 int UNUSED written = 0; 3824 IADDR UNUSED pc = abuf->addr; 3825 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3826 3827{ 3828 HI tmp_result3; 3829 HI tmp_result2; 3830 HI tmp_result1; 3831 HI tmp_result0; 3832 tmp_result0 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3833 tmp_result1 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3834 tmp_result2 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3835 tmp_result3 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3836 { 3837 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3838 SET_H_GR (FLD (f_dest), opval); 3839 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3840 } 3841} 3842 3843#undef FLD 3844} 3845 NEXT (vpc); 3846 3847 CASE (sem, INSN_MSHARDL) : /* mshard.l $rm, $rn, $rd */ 3848{ 3849 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3850 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3851#define FLD(f) abuf->fields.sfmt_add.f 3852 int UNUSED written = 0; 3853 IADDR UNUSED pc = abuf->addr; 3854 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3855 3856{ 3857 SI tmp_result1; 3858 SI tmp_result0; 3859 tmp_result0 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)); 3860 tmp_result1 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)); 3861 { 3862 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3863 SET_H_GR (FLD (f_dest), opval); 3864 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3865 } 3866} 3867 3868#undef FLD 3869} 3870 NEXT (vpc); 3871 3872 CASE (sem, INSN_MSHARDW) : /* mshard.w $rm, $rn, $rd */ 3873{ 3874 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3875 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3876#define FLD(f) abuf->fields.sfmt_add.f 3877 int UNUSED written = 0; 3878 IADDR UNUSED pc = abuf->addr; 3879 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3880 3881{ 3882 HI tmp_result3; 3883 HI tmp_result2; 3884 HI tmp_result1; 3885 HI tmp_result0; 3886 tmp_result0 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3887 tmp_result1 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3888 tmp_result2 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3889 tmp_result3 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3890 { 3891 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3892 SET_H_GR (FLD (f_dest), opval); 3893 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3894 } 3895} 3896 3897#undef FLD 3898} 3899 NEXT (vpc); 3900 3901 CASE (sem, INSN_MSHARDSQ) : /* mshards.q $rm, $rn, $rd */ 3902{ 3903 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3904 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3905#define FLD(f) abuf->fields.sfmt_add.f 3906 int UNUSED written = 0; 3907 IADDR UNUSED pc = abuf->addr; 3908 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3909 3910 { 3911 DI opval = ((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGDI (SLLDI (1, SUBSI (16, 1)))) : (((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), SLLDI (1, SUBSI (16, 1)))) ? (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63))) : (SUBDI (SLLDI (1, SUBSI (16, 1)), 1))))); 3912 SET_H_GR (FLD (f_dest), opval); 3913 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3914 } 3915 3916#undef FLD 3917} 3918 NEXT (vpc); 3919 3920 CASE (sem, INSN_MSHFHIB) : /* mshfhi.b $rm, $rn, $rd */ 3921{ 3922 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3923 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3924#define FLD(f) abuf->fields.sfmt_add.f 3925 int UNUSED written = 0; 3926 IADDR UNUSED pc = abuf->addr; 3927 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3928 3929{ 3930 QI tmp_result7; 3931 QI tmp_result6; 3932 QI tmp_result5; 3933 QI tmp_result4; 3934 QI tmp_result3; 3935 QI tmp_result2; 3936 QI tmp_result1; 3937 QI tmp_result0; 3938 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3); 3939 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3); 3940 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2); 3941 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2); 3942 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1); 3943 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1); 3944 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0); 3945 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0); 3946 { 3947 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3948 SET_H_GR (FLD (f_dest), opval); 3949 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3950 } 3951} 3952 3953#undef FLD 3954} 3955 NEXT (vpc); 3956 3957 CASE (sem, INSN_MSHFHIL) : /* mshfhi.l $rm, $rn, $rd */ 3958{ 3959 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3960 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3961#define FLD(f) abuf->fields.sfmt_add.f 3962 int UNUSED written = 0; 3963 IADDR UNUSED pc = abuf->addr; 3964 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3965 3966{ 3967 SI tmp_result1; 3968 SI tmp_result0; 3969 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0); 3970 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0); 3971 { 3972 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3973 SET_H_GR (FLD (f_dest), opval); 3974 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3975 } 3976} 3977 3978#undef FLD 3979} 3980 NEXT (vpc); 3981 3982 CASE (sem, INSN_MSHFHIW) : /* mshfhi.w $rm, $rn, $rd */ 3983{ 3984 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3985 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3986#define FLD(f) abuf->fields.sfmt_add.f 3987 int UNUSED written = 0; 3988 IADDR UNUSED pc = abuf->addr; 3989 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3990 3991{ 3992 HI tmp_result3; 3993 HI tmp_result2; 3994 HI tmp_result1; 3995 HI tmp_result0; 3996 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1); 3997 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1); 3998 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0); 3999 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0); 4000 { 4001 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4002 SET_H_GR (FLD (f_dest), opval); 4003 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4004 } 4005} 4006 4007#undef FLD 4008} 4009 NEXT (vpc); 4010 4011 CASE (sem, INSN_MSHFLOB) : /* mshflo.b $rm, $rn, $rd */ 4012{ 4013 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4014 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4015#define FLD(f) abuf->fields.sfmt_add.f 4016 int UNUSED written = 0; 4017 IADDR UNUSED pc = abuf->addr; 4018 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4019 4020{ 4021 QI tmp_result7; 4022 QI tmp_result6; 4023 QI tmp_result5; 4024 QI tmp_result4; 4025 QI tmp_result3; 4026 QI tmp_result2; 4027 QI tmp_result1; 4028 QI tmp_result0; 4029 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7); 4030 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7); 4031 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6); 4032 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6); 4033 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5); 4034 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5); 4035 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4); 4036 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4); 4037 { 4038 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 4039 SET_H_GR (FLD (f_dest), opval); 4040 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4041 } 4042} 4043 4044#undef FLD 4045} 4046 NEXT (vpc); 4047 4048 CASE (sem, INSN_MSHFLOL) : /* mshflo.l $rm, $rn, $rd */ 4049{ 4050 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4051 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4052#define FLD(f) abuf->fields.sfmt_add.f 4053 int UNUSED written = 0; 4054 IADDR UNUSED pc = abuf->addr; 4055 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4056 4057{ 4058 SI tmp_result1; 4059 SI tmp_result0; 4060 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1); 4061 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1); 4062 { 4063 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4064 SET_H_GR (FLD (f_dest), opval); 4065 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4066 } 4067} 4068 4069#undef FLD 4070} 4071 NEXT (vpc); 4072 4073 CASE (sem, INSN_MSHFLOW) : /* mshflo.w $rm, $rn, $rd */ 4074{ 4075 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4076 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4077#define FLD(f) abuf->fields.sfmt_add.f 4078 int UNUSED written = 0; 4079 IADDR UNUSED pc = abuf->addr; 4080 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4081 4082{ 4083 HI tmp_result3; 4084 HI tmp_result2; 4085 HI tmp_result1; 4086 HI tmp_result0; 4087 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3); 4088 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3); 4089 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2); 4090 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2); 4091 { 4092 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4093 SET_H_GR (FLD (f_dest), opval); 4094 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4095 } 4096} 4097 4098#undef FLD 4099} 4100 NEXT (vpc); 4101 4102 CASE (sem, INSN_MSHLLDL) : /* mshlld.l $rm, $rn, $rd */ 4103{ 4104 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4105 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4106#define FLD(f) abuf->fields.sfmt_add.f 4107 int UNUSED written = 0; 4108 IADDR UNUSED pc = abuf->addr; 4109 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4110 4111{ 4112 SI tmp_result1; 4113 SI tmp_result0; 4114 tmp_result0 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4115 tmp_result1 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4116 { 4117 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4118 SET_H_GR (FLD (f_dest), opval); 4119 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4120 } 4121} 4122 4123#undef FLD 4124} 4125 NEXT (vpc); 4126 4127 CASE (sem, INSN_MSHLLDW) : /* mshlld.w $rm, $rn, $rd */ 4128{ 4129 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4130 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4131#define FLD(f) abuf->fields.sfmt_add.f 4132 int UNUSED written = 0; 4133 IADDR UNUSED pc = abuf->addr; 4134 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4135 4136{ 4137 HI tmp_result3; 4138 HI tmp_result2; 4139 HI tmp_result1; 4140 HI tmp_result0; 4141 tmp_result0 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4142 tmp_result1 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4143 tmp_result2 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4144 tmp_result3 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4145 { 4146 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4147 SET_H_GR (FLD (f_dest), opval); 4148 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4149 } 4150} 4151 4152#undef FLD 4153} 4154 NEXT (vpc); 4155 4156 CASE (sem, INSN_MSHLRDL) : /* mshlrd.l $rm, $rn, $rd */ 4157{ 4158 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4159 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4160#define FLD(f) abuf->fields.sfmt_add.f 4161 int UNUSED written = 0; 4162 IADDR UNUSED pc = abuf->addr; 4163 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4164 4165{ 4166 SI tmp_result1; 4167 SI tmp_result0; 4168 tmp_result0 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4169 tmp_result1 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4170 { 4171 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4172 SET_H_GR (FLD (f_dest), opval); 4173 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4174 } 4175} 4176 4177#undef FLD 4178} 4179 NEXT (vpc); 4180 4181 CASE (sem, INSN_MSHLRDW) : /* mshlrd.w $rm, $rn, $rd */ 4182{ 4183 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4184 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4185#define FLD(f) abuf->fields.sfmt_add.f 4186 int UNUSED written = 0; 4187 IADDR UNUSED pc = abuf->addr; 4188 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4189 4190{ 4191 HI tmp_result3; 4192 HI tmp_result2; 4193 HI tmp_result1; 4194 HI tmp_result0; 4195 tmp_result0 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4196 tmp_result1 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4197 tmp_result2 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4198 tmp_result3 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4199 { 4200 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4201 SET_H_GR (FLD (f_dest), opval); 4202 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4203 } 4204} 4205 4206#undef FLD 4207} 4208 NEXT (vpc); 4209 4210 CASE (sem, INSN_MSUBL) : /* msub.l $rm, $rn, $rd */ 4211{ 4212 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4213 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4214#define FLD(f) abuf->fields.sfmt_add.f 4215 int UNUSED written = 0; 4216 IADDR UNUSED pc = abuf->addr; 4217 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4218 4219{ 4220 SI tmp_result1; 4221 SI tmp_result0; 4222 tmp_result0 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 4223 tmp_result1 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)); 4224 { 4225 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4226 SET_H_GR (FLD (f_dest), opval); 4227 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4228 } 4229} 4230 4231#undef FLD 4232} 4233 NEXT (vpc); 4234 4235 CASE (sem, INSN_MSUBW) : /* msub.w $rm, $rn, $rd */ 4236{ 4237 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4238 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4239#define FLD(f) abuf->fields.sfmt_add.f 4240 int UNUSED written = 0; 4241 IADDR UNUSED pc = abuf->addr; 4242 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4243 4244{ 4245 HI tmp_result3; 4246 HI tmp_result2; 4247 HI tmp_result1; 4248 HI tmp_result0; 4249 tmp_result0 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)); 4250 tmp_result1 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)); 4251 tmp_result2 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)); 4252 tmp_result3 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)); 4253 { 4254 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4255 SET_H_GR (FLD (f_dest), opval); 4256 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4257 } 4258} 4259 4260#undef FLD 4261} 4262 NEXT (vpc); 4263 4264 CASE (sem, INSN_MSUBSL) : /* msubs.l $rm, $rn, $rd */ 4265{ 4266 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4267 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4268#define FLD(f) abuf->fields.sfmt_add.f 4269 int UNUSED written = 0; 4270 IADDR UNUSED pc = abuf->addr; 4271 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4272 4273{ 4274 SI tmp_result1; 4275 SI tmp_result0; 4276 tmp_result0 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 4277 tmp_result1 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 4278 { 4279 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4280 SET_H_GR (FLD (f_dest), opval); 4281 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4282 } 4283} 4284 4285#undef FLD 4286} 4287 NEXT (vpc); 4288 4289 CASE (sem, INSN_MSUBSUB) : /* msubs.ub $rm, $rn, $rd */ 4290{ 4291 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4292 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4293#define FLD(f) abuf->fields.sfmt_add.f 4294 int UNUSED written = 0; 4295 IADDR UNUSED pc = abuf->addr; 4296 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4297 4298{ 4299 QI tmp_result7; 4300 QI tmp_result6; 4301 QI tmp_result5; 4302 QI tmp_result4; 4303 QI tmp_result3; 4304 QI tmp_result2; 4305 QI tmp_result1; 4306 QI tmp_result0; 4307 tmp_result0 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1))))); 4308 tmp_result1 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1))))); 4309 tmp_result2 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1))))); 4310 tmp_result3 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1))))); 4311 tmp_result4 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1))))); 4312 tmp_result5 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1))))); 4313 tmp_result6 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1))))); 4314 tmp_result7 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1))))); 4315 { 4316 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 4317 SET_H_GR (FLD (f_dest), opval); 4318 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4319 } 4320} 4321 4322#undef FLD 4323} 4324 NEXT (vpc); 4325 4326 CASE (sem, INSN_MSUBSW) : /* msubs.w $rm, $rn, $rd */ 4327{ 4328 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4329 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4330#define FLD(f) abuf->fields.sfmt_add.f 4331 int UNUSED written = 0; 4332 IADDR UNUSED pc = abuf->addr; 4333 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4334 4335{ 4336 QI tmp_result7; 4337 QI tmp_result6; 4338 QI tmp_result5; 4339 QI tmp_result4; 4340 QI tmp_result3; 4341 QI tmp_result2; 4342 QI tmp_result1; 4343 QI tmp_result0; 4344 tmp_result0 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4345 tmp_result1 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4346 tmp_result2 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4347 tmp_result3 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4348 tmp_result4 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4349 tmp_result5 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4350 tmp_result6 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4351 tmp_result7 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4352 { 4353 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 4354 SET_H_GR (FLD (f_dest), opval); 4355 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4356 } 4357} 4358 4359#undef FLD 4360} 4361 NEXT (vpc); 4362 4363 CASE (sem, INSN_MULSL) : /* muls.l $rm, $rn, $rd */ 4364{ 4365 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4366 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4367#define FLD(f) abuf->fields.sfmt_add.f 4368 int UNUSED written = 0; 4369 IADDR UNUSED pc = abuf->addr; 4370 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4371 4372 { 4373 DI opval = MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 4374 SET_H_GR (FLD (f_dest), opval); 4375 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4376 } 4377 4378#undef FLD 4379} 4380 NEXT (vpc); 4381 4382 CASE (sem, INSN_MULUL) : /* mulu.l $rm, $rn, $rd */ 4383{ 4384 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4385 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4386#define FLD(f) abuf->fields.sfmt_add.f 4387 int UNUSED written = 0; 4388 IADDR UNUSED pc = abuf->addr; 4389 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4390 4391 { 4392 DI opval = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 4393 SET_H_GR (FLD (f_dest), opval); 4394 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4395 } 4396 4397#undef FLD 4398} 4399 NEXT (vpc); 4400 4401 CASE (sem, INSN_NOP) : /* nop */ 4402{ 4403 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4404 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4405#define FLD(f) abuf->fields.fmt_empty.f 4406 int UNUSED written = 0; 4407 IADDR UNUSED pc = abuf->addr; 4408 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4409 4410((void) 0); /*nop*/ 4411 4412#undef FLD 4413} 4414 NEXT (vpc); 4415 4416 CASE (sem, INSN_NSB) : /* nsb $rm, $rd */ 4417{ 4418 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4419 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4420#define FLD(f) abuf->fields.sfmt_xori.f 4421 int UNUSED written = 0; 4422 IADDR UNUSED pc = abuf->addr; 4423 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4424 4425 { 4426 DI opval = sh64_nsb (current_cpu, GET_H_GR (FLD (f_left))); 4427 SET_H_GR (FLD (f_dest), opval); 4428 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4429 } 4430 4431#undef FLD 4432} 4433 NEXT (vpc); 4434 4435 CASE (sem, INSN_OCBI) : /* ocbi $rm, $disp6x32 */ 4436{ 4437 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4438 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4439#define FLD(f) abuf->fields.sfmt_xori.f 4440 int UNUSED written = 0; 4441 IADDR UNUSED pc = abuf->addr; 4442 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4443 4444{ 4445 { 4446 DI opval = GET_H_GR (FLD (f_left)); 4447 SET_H_GR (FLD (f_left), opval); 4448 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4449 } 4450((void) 0); /*nop*/ 4451} 4452 4453#undef FLD 4454} 4455 NEXT (vpc); 4456 4457 CASE (sem, INSN_OCBP) : /* ocbp $rm, $disp6x32 */ 4458{ 4459 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4460 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4461#define FLD(f) abuf->fields.sfmt_xori.f 4462 int UNUSED written = 0; 4463 IADDR UNUSED pc = abuf->addr; 4464 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4465 4466{ 4467 { 4468 DI opval = GET_H_GR (FLD (f_left)); 4469 SET_H_GR (FLD (f_left), opval); 4470 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4471 } 4472((void) 0); /*nop*/ 4473} 4474 4475#undef FLD 4476} 4477 NEXT (vpc); 4478 4479 CASE (sem, INSN_OCBWB) : /* ocbwb $rm, $disp6x32 */ 4480{ 4481 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4482 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4483#define FLD(f) abuf->fields.sfmt_xori.f 4484 int UNUSED written = 0; 4485 IADDR UNUSED pc = abuf->addr; 4486 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4487 4488{ 4489 { 4490 DI opval = GET_H_GR (FLD (f_left)); 4491 SET_H_GR (FLD (f_left), opval); 4492 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4493 } 4494((void) 0); /*nop*/ 4495} 4496 4497#undef FLD 4498} 4499 NEXT (vpc); 4500 4501 CASE (sem, INSN_OR) : /* or $rm, $rn, $rd */ 4502{ 4503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4504 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4505#define FLD(f) abuf->fields.sfmt_add.f 4506 int UNUSED written = 0; 4507 IADDR UNUSED pc = abuf->addr; 4508 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4509 4510 { 4511 DI opval = ORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 4512 SET_H_GR (FLD (f_dest), opval); 4513 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4514 } 4515 4516#undef FLD 4517} 4518 NEXT (vpc); 4519 4520 CASE (sem, INSN_ORI) : /* ori $rm, $imm10, $rd */ 4521{ 4522 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4523 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4524#define FLD(f) abuf->fields.sfmt_ori.f 4525 int UNUSED written = 0; 4526 IADDR UNUSED pc = abuf->addr; 4527 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4528 4529 { 4530 DI opval = ORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm10))); 4531 SET_H_GR (FLD (f_dest), opval); 4532 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4533 } 4534 4535#undef FLD 4536} 4537 NEXT (vpc); 4538 4539 CASE (sem, INSN_PREFI) : /* prefi $rm, $disp6x32 */ 4540{ 4541 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4542 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4543#define FLD(f) abuf->fields.sfmt_xori.f 4544 int UNUSED written = 0; 4545 IADDR UNUSED pc = abuf->addr; 4546 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4547 4548{ 4549 { 4550 DI opval = GET_H_GR (FLD (f_left)); 4551 SET_H_GR (FLD (f_left), opval); 4552 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4553 } 4554((void) 0); /*nop*/ 4555} 4556 4557#undef FLD 4558} 4559 NEXT (vpc); 4560 4561 CASE (sem, INSN_PTA) : /* pta$likely $disp16, $tra */ 4562{ 4563 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4564 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4565#define FLD(f) abuf->fields.sfmt_pta.f 4566 int UNUSED written = 0; 4567 IADDR UNUSED pc = abuf->addr; 4568 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4569 4570{ 4571((void) 0); /*nop*/ 4572 { 4573 DI opval = ADDSI (FLD (f_disp16), 1); 4574 CPU (h_tr[FLD (f_tra)]) = opval; 4575 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4576 } 4577} 4578 4579#undef FLD 4580} 4581 NEXT (vpc); 4582 4583 CASE (sem, INSN_PTABS) : /* ptabs$likely $rn, $tra */ 4584{ 4585 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4586 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4587#define FLD(f) abuf->fields.sfmt_beq.f 4588 int UNUSED written = 0; 4589 IADDR UNUSED pc = abuf->addr; 4590 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4591 4592{ 4593((void) 0); /*nop*/ 4594 { 4595 DI opval = GET_H_GR (FLD (f_right)); 4596 CPU (h_tr[FLD (f_tra)]) = opval; 4597 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4598 } 4599} 4600 4601#undef FLD 4602} 4603 NEXT (vpc); 4604 4605 CASE (sem, INSN_PTB) : /* ptb$likely $disp16, $tra */ 4606{ 4607 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4608 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4609#define FLD(f) abuf->fields.sfmt_pta.f 4610 int UNUSED written = 0; 4611 IADDR UNUSED pc = abuf->addr; 4612 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4613 4614{ 4615((void) 0); /*nop*/ 4616 { 4617 DI opval = FLD (f_disp16); 4618 CPU (h_tr[FLD (f_tra)]) = opval; 4619 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4620 } 4621} 4622 4623#undef FLD 4624} 4625 NEXT (vpc); 4626 4627 CASE (sem, INSN_PTREL) : /* ptrel$likely $rn, $tra */ 4628{ 4629 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4630 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4631#define FLD(f) abuf->fields.sfmt_beq.f 4632 int UNUSED written = 0; 4633 IADDR UNUSED pc = abuf->addr; 4634 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4635 4636{ 4637((void) 0); /*nop*/ 4638 { 4639 DI opval = ADDDI (pc, GET_H_GR (FLD (f_right))); 4640 CPU (h_tr[FLD (f_tra)]) = opval; 4641 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4642 } 4643} 4644 4645#undef FLD 4646} 4647 NEXT (vpc); 4648 4649 CASE (sem, INSN_PUTCFG) : /* putcfg $rm, $disp6, $rd */ 4650{ 4651 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4652 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4653#define FLD(f) abuf->fields.sfmt_getcfg.f 4654 int UNUSED written = 0; 4655 IADDR UNUSED pc = abuf->addr; 4656 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4657 4658{ 4659 SI tmp_address; 4660 tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 4661((void) 0); /*nop*/ 4662 { 4663 SI opval = GET_H_GR (FLD (f_dest)); 4664 SETMEMSI (current_cpu, pc, tmp_address, opval); 4665 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4666 } 4667} 4668 4669#undef FLD 4670} 4671 NEXT (vpc); 4672 4673 CASE (sem, INSN_PUTCON) : /* putcon $rm, $crj */ 4674{ 4675 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4676 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4677#define FLD(f) abuf->fields.sfmt_xori.f 4678 int UNUSED written = 0; 4679 IADDR UNUSED pc = abuf->addr; 4680 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4681 4682 { 4683 DI opval = GET_H_GR (FLD (f_left)); 4684 SET_H_CR (FLD (f_dest), opval); 4685 TRACE_RESULT (current_cpu, abuf, "cr", 'D', opval); 4686 } 4687 4688#undef FLD 4689} 4690 NEXT (vpc); 4691 4692 CASE (sem, INSN_RTE) : /* rte */ 4693{ 4694 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4695 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4696#define FLD(f) abuf->fields.fmt_empty.f 4697 int UNUSED written = 0; 4698 IADDR UNUSED pc = abuf->addr; 4699 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4700 4701((void) 0); /*nop*/ 4702 4703#undef FLD 4704} 4705 NEXT (vpc); 4706 4707 CASE (sem, INSN_SHARD) : /* shard $rm, $rn, $rd */ 4708{ 4709 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4710 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4711#define FLD(f) abuf->fields.sfmt_add.f 4712 int UNUSED written = 0; 4713 IADDR UNUSED pc = abuf->addr; 4714 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4715 4716 { 4717 DI opval = SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)); 4718 SET_H_GR (FLD (f_dest), opval); 4719 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4720 } 4721 4722#undef FLD 4723} 4724 NEXT (vpc); 4725 4726 CASE (sem, INSN_SHARDL) : /* shard.l $rm, $rn, $rd */ 4727{ 4728 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4729 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4730#define FLD(f) abuf->fields.sfmt_add.f 4731 int UNUSED written = 0; 4732 IADDR UNUSED pc = abuf->addr; 4733 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4734 4735 { 4736 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63))); 4737 SET_H_GR (FLD (f_dest), opval); 4738 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4739 } 4740 4741#undef FLD 4742} 4743 NEXT (vpc); 4744 4745 CASE (sem, INSN_SHARI) : /* shari $rm, $uimm6, $rd */ 4746{ 4747 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4748 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4749#define FLD(f) abuf->fields.sfmt_shari.f 4750 int UNUSED written = 0; 4751 IADDR UNUSED pc = abuf->addr; 4752 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4753 4754 { 4755 DI opval = SRADI (GET_H_GR (FLD (f_left)), FLD (f_uimm6)); 4756 SET_H_GR (FLD (f_dest), opval); 4757 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4758 } 4759 4760#undef FLD 4761} 4762 NEXT (vpc); 4763 4764 CASE (sem, INSN_SHARIL) : /* shari.l $rm, $uimm6, $rd */ 4765{ 4766 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4767 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4768#define FLD(f) abuf->fields.sfmt_shari.f 4769 int UNUSED written = 0; 4770 IADDR UNUSED pc = abuf->addr; 4771 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4772 4773 { 4774 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63))); 4775 SET_H_GR (FLD (f_dest), opval); 4776 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4777 } 4778 4779#undef FLD 4780} 4781 NEXT (vpc); 4782 4783 CASE (sem, INSN_SHLLD) : /* shlld $rm, $rn, $rd */ 4784{ 4785 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4786 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4787#define FLD(f) abuf->fields.sfmt_add.f 4788 int UNUSED written = 0; 4789 IADDR UNUSED pc = abuf->addr; 4790 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4791 4792 { 4793 DI opval = SLLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)); 4794 SET_H_GR (FLD (f_dest), opval); 4795 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4796 } 4797 4798#undef FLD 4799} 4800 NEXT (vpc); 4801 4802 CASE (sem, INSN_SHLLDL) : /* shlld.l $rm, $rn, $rd */ 4803{ 4804 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4805 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4806#define FLD(f) abuf->fields.sfmt_add.f 4807 int UNUSED written = 0; 4808 IADDR UNUSED pc = abuf->addr; 4809 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4810 4811 { 4812 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63))); 4813 SET_H_GR (FLD (f_dest), opval); 4814 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4815 } 4816 4817#undef FLD 4818} 4819 NEXT (vpc); 4820 4821 CASE (sem, INSN_SHLLI) : /* shlli $rm, $uimm6, $rd */ 4822{ 4823 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4824 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4825#define FLD(f) abuf->fields.sfmt_shari.f 4826 int UNUSED written = 0; 4827 IADDR UNUSED pc = abuf->addr; 4828 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4829 4830 { 4831 DI opval = SLLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6)); 4832 SET_H_GR (FLD (f_dest), opval); 4833 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4834 } 4835 4836#undef FLD 4837} 4838 NEXT (vpc); 4839 4840 CASE (sem, INSN_SHLLIL) : /* shlli.l $rm, $uimm6, $rd */ 4841{ 4842 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4843 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4844#define FLD(f) abuf->fields.sfmt_shari.f 4845 int UNUSED written = 0; 4846 IADDR UNUSED pc = abuf->addr; 4847 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4848 4849 { 4850 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63))); 4851 SET_H_GR (FLD (f_dest), opval); 4852 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4853 } 4854 4855#undef FLD 4856} 4857 NEXT (vpc); 4858 4859 CASE (sem, INSN_SHLRD) : /* shlrd $rm, $rn, $rd */ 4860{ 4861 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4862 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4863#define FLD(f) abuf->fields.sfmt_add.f 4864 int UNUSED written = 0; 4865 IADDR UNUSED pc = abuf->addr; 4866 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4867 4868 { 4869 DI opval = SRLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)); 4870 SET_H_GR (FLD (f_dest), opval); 4871 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4872 } 4873 4874#undef FLD 4875} 4876 NEXT (vpc); 4877 4878 CASE (sem, INSN_SHLRDL) : /* shlrd.l $rm, $rn, $rd */ 4879{ 4880 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4881 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4882#define FLD(f) abuf->fields.sfmt_add.f 4883 int UNUSED written = 0; 4884 IADDR UNUSED pc = abuf->addr; 4885 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4886 4887 { 4888 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63))); 4889 SET_H_GR (FLD (f_dest), opval); 4890 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4891 } 4892 4893#undef FLD 4894} 4895 NEXT (vpc); 4896 4897 CASE (sem, INSN_SHLRI) : /* shlri $rm, $uimm6, $rd */ 4898{ 4899 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4900 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4901#define FLD(f) abuf->fields.sfmt_shari.f 4902 int UNUSED written = 0; 4903 IADDR UNUSED pc = abuf->addr; 4904 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4905 4906 { 4907 DI opval = SRLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6)); 4908 SET_H_GR (FLD (f_dest), opval); 4909 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4910 } 4911 4912#undef FLD 4913} 4914 NEXT (vpc); 4915 4916 CASE (sem, INSN_SHLRIL) : /* shlri.l $rm, $uimm6, $rd */ 4917{ 4918 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4919 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4920#define FLD(f) abuf->fields.sfmt_shari.f 4921 int UNUSED written = 0; 4922 IADDR UNUSED pc = abuf->addr; 4923 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4924 4925 { 4926 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63))); 4927 SET_H_GR (FLD (f_dest), opval); 4928 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4929 } 4930 4931#undef FLD 4932} 4933 NEXT (vpc); 4934 4935 CASE (sem, INSN_SHORI) : /* shori $uimm16, $rd */ 4936{ 4937 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4938 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4939#define FLD(f) abuf->fields.sfmt_shori.f 4940 int UNUSED written = 0; 4941 IADDR UNUSED pc = abuf->addr; 4942 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4943 4944 { 4945 DI opval = ORDI (SLLDI (GET_H_GR (FLD (f_dest)), 16), ZEXTSIDI (FLD (f_uimm16))); 4946 SET_H_GR (FLD (f_dest), opval); 4947 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4948 } 4949 4950#undef FLD 4951} 4952 NEXT (vpc); 4953 4954 CASE (sem, INSN_SLEEP) : /* sleep */ 4955{ 4956 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4957 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4958#define FLD(f) abuf->fields.fmt_empty.f 4959 int UNUSED written = 0; 4960 IADDR UNUSED pc = abuf->addr; 4961 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4962 4963((void) 0); /*nop*/ 4964 4965#undef FLD 4966} 4967 NEXT (vpc); 4968 4969 CASE (sem, INSN_STB) : /* st.b $rm, $disp10, $rd */ 4970{ 4971 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4972 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4973#define FLD(f) abuf->fields.sfmt_addi.f 4974 int UNUSED written = 0; 4975 IADDR UNUSED pc = abuf->addr; 4976 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4977 4978 { 4979 UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255); 4980 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval); 4981 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4982 } 4983 4984#undef FLD 4985} 4986 NEXT (vpc); 4987 4988 CASE (sem, INSN_STL) : /* st.l $rm, $disp10x4, $rd */ 4989{ 4990 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4991 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4992#define FLD(f) abuf->fields.sfmt_flds.f 4993 int UNUSED written = 0; 4994 IADDR UNUSED pc = abuf->addr; 4995 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4996 4997 { 4998 SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff); 4999 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval); 5000 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5001 } 5002 5003#undef FLD 5004} 5005 NEXT (vpc); 5006 5007 CASE (sem, INSN_STQ) : /* st.q $rm, $disp10x8, $rd */ 5008{ 5009 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5010 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5011#define FLD(f) abuf->fields.sfmt_fldd.f 5012 int UNUSED written = 0; 5013 IADDR UNUSED pc = abuf->addr; 5014 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5015 5016 { 5017 DI opval = GET_H_GR (FLD (f_dest)); 5018 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval); 5019 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5020 } 5021 5022#undef FLD 5023} 5024 NEXT (vpc); 5025 5026 CASE (sem, INSN_STW) : /* st.w $rm, $disp10x2, $rd */ 5027{ 5028 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5029 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5030#define FLD(f) abuf->fields.sfmt_lduw.f 5031 int UNUSED written = 0; 5032 IADDR UNUSED pc = abuf->addr; 5033 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5034 5035 { 5036 HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535); 5037 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval); 5038 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5039 } 5040 5041#undef FLD 5042} 5043 NEXT (vpc); 5044 5045 CASE (sem, INSN_STHIL) : /* sthi.l $rm, $disp6, $rd */ 5046{ 5047 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5048 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5049#define FLD(f) abuf->fields.sfmt_getcfg.f 5050 int UNUSED written = 0; 5051 IADDR UNUSED pc = abuf->addr; 5052 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5053 5054{ 5055 DI tmp_addr; 5056 QI tmp_bytecount; 5057 DI tmp_val; 5058 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5059 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1); 5060if (ANDQI (tmp_bytecount, 4)) { 5061 { 5062 SI opval = GET_H_GR (FLD (f_dest)); 5063 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5064 written |= (1 << 5); 5065 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5066 } 5067} else { 5068if (GET_H_ENDIAN ()) { 5069{ 5070 tmp_val = GET_H_GR (FLD (f_dest)); 5071if (ANDQI (tmp_bytecount, 1)) { 5072{ 5073 { 5074 UQI opval = ANDQI (tmp_val, 255); 5075 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5076 written |= (1 << 6); 5077 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5078 } 5079 tmp_val = SRLDI (tmp_val, 8); 5080} 5081} 5082if (ANDQI (tmp_bytecount, 2)) { 5083{ 5084 { 5085 HI opval = ANDHI (tmp_val, 65535); 5086 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5087 written |= (1 << 4); 5088 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5089 } 5090 tmp_val = SRLDI (tmp_val, 16); 5091} 5092} 5093} 5094} else { 5095{ 5096 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount))); 5097if (ANDQI (tmp_bytecount, 2)) { 5098{ 5099 { 5100 HI opval = ANDHI (tmp_val, 65535); 5101 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5102 written |= (1 << 4); 5103 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5104 } 5105 tmp_val = SRLDI (tmp_val, 16); 5106} 5107} 5108if (ANDQI (tmp_bytecount, 1)) { 5109{ 5110 { 5111 UQI opval = ANDQI (tmp_val, 255); 5112 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5113 written |= (1 << 6); 5114 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5115 } 5116 tmp_val = SRLDI (tmp_val, 8); 5117} 5118} 5119} 5120} 5121} 5122} 5123 5124 abuf->written = written; 5125#undef FLD 5126} 5127 NEXT (vpc); 5128 5129 CASE (sem, INSN_STHIQ) : /* sthi.q $rm, $disp6, $rd */ 5130{ 5131 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5132 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5133#define FLD(f) abuf->fields.sfmt_getcfg.f 5134 int UNUSED written = 0; 5135 IADDR UNUSED pc = abuf->addr; 5136 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5137 5138{ 5139 DI tmp_addr; 5140 QI tmp_bytecount; 5141 DI tmp_val; 5142 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5143 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1); 5144if (ANDQI (tmp_bytecount, 8)) { 5145 { 5146 DI opval = GET_H_GR (FLD (f_dest)); 5147 SETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8), opval); 5148 written |= (1 << 4); 5149 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5150 } 5151} else { 5152if (GET_H_ENDIAN ()) { 5153{ 5154 tmp_val = GET_H_GR (FLD (f_dest)); 5155if (ANDQI (tmp_bytecount, 1)) { 5156{ 5157 { 5158 UQI opval = ANDQI (tmp_val, 255); 5159 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5160 written |= (1 << 7); 5161 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5162 } 5163 tmp_val = SRLDI (tmp_val, 8); 5164} 5165} 5166if (ANDQI (tmp_bytecount, 2)) { 5167{ 5168 { 5169 HI opval = ANDHI (tmp_val, 65535); 5170 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5171 written |= (1 << 5); 5172 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5173 } 5174 tmp_val = SRLDI (tmp_val, 16); 5175} 5176} 5177if (ANDQI (tmp_bytecount, 4)) { 5178{ 5179 { 5180 SI opval = ANDSI (tmp_val, 0xffffffff); 5181 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval); 5182 written |= (1 << 6); 5183 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5184 } 5185 tmp_val = SRLDI (tmp_val, 32); 5186} 5187} 5188} 5189} else { 5190{ 5191 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount))); 5192if (ANDQI (tmp_bytecount, 4)) { 5193{ 5194 { 5195 SI opval = ANDSI (tmp_val, 0xffffffff); 5196 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval); 5197 written |= (1 << 6); 5198 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5199 } 5200 tmp_val = SRLDI (tmp_val, 32); 5201} 5202} 5203if (ANDQI (tmp_bytecount, 2)) { 5204{ 5205 { 5206 HI opval = ANDHI (tmp_val, 65535); 5207 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5208 written |= (1 << 5); 5209 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5210 } 5211 tmp_val = SRLDI (tmp_val, 16); 5212} 5213} 5214if (ANDQI (tmp_bytecount, 1)) { 5215{ 5216 { 5217 UQI opval = ANDQI (tmp_val, 255); 5218 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5219 written |= (1 << 7); 5220 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5221 } 5222 tmp_val = SRLDI (tmp_val, 8); 5223} 5224} 5225} 5226} 5227} 5228} 5229 5230 abuf->written = written; 5231#undef FLD 5232} 5233 NEXT (vpc); 5234 5235 CASE (sem, INSN_STLOL) : /* stlo.l $rm, $disp6, $rd */ 5236{ 5237 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5238 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5239#define FLD(f) abuf->fields.sfmt_getcfg.f 5240 int UNUSED written = 0; 5241 IADDR UNUSED pc = abuf->addr; 5242 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5243 5244{ 5245 DI tmp_addr; 5246 QI tmp_bytecount; 5247 DI tmp_val; 5248 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5249 tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3)); 5250if (ANDQI (tmp_bytecount, 4)) { 5251 { 5252 USI opval = GET_H_GR (FLD (f_dest)); 5253 SETMEMUSI (current_cpu, pc, tmp_addr, opval); 5254 written |= (1 << 6); 5255 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5256 } 5257} else { 5258if (GET_H_ENDIAN ()) { 5259{ 5260 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount))); 5261if (ANDQI (tmp_bytecount, 2)) { 5262{ 5263 { 5264 UHI opval = ANDHI (tmp_val, 65535); 5265 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5266 written |= (1 << 4); 5267 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5268 } 5269 tmp_val = SRLDI (tmp_val, 16); 5270} 5271} 5272if (ANDQI (tmp_bytecount, 1)) { 5273{ 5274 { 5275 UQI opval = ANDQI (tmp_val, 255); 5276 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5277 written |= (1 << 5); 5278 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5279 } 5280 tmp_val = SRLDI (tmp_val, 8); 5281} 5282} 5283} 5284} else { 5285{ 5286 tmp_val = GET_H_GR (FLD (f_dest)); 5287if (ANDQI (tmp_bytecount, 1)) { 5288{ 5289 { 5290 UQI opval = ANDQI (tmp_val, 255); 5291 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5292 written |= (1 << 5); 5293 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5294 } 5295 tmp_val = SRLDI (tmp_val, 8); 5296} 5297} 5298if (ANDQI (tmp_bytecount, 2)) { 5299{ 5300 { 5301 UHI opval = ANDHI (tmp_val, 65535); 5302 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5303 written |= (1 << 4); 5304 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5305 } 5306 tmp_val = SRLDI (tmp_val, 16); 5307} 5308} 5309} 5310} 5311} 5312} 5313 5314 abuf->written = written; 5315#undef FLD 5316} 5317 NEXT (vpc); 5318 5319 CASE (sem, INSN_STLOQ) : /* stlo.q $rm, $disp6, $rd */ 5320{ 5321 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5322 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5323#define FLD(f) abuf->fields.sfmt_getcfg.f 5324 int UNUSED written = 0; 5325 IADDR UNUSED pc = abuf->addr; 5326 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5327 5328{ 5329 DI tmp_addr; 5330 QI tmp_bytecount; 5331 DI tmp_val; 5332 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5333 tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7)); 5334if (ANDQI (tmp_bytecount, 8)) { 5335 { 5336 UDI opval = GET_H_GR (FLD (f_dest)); 5337 SETMEMUDI (current_cpu, pc, tmp_addr, opval); 5338 written |= (1 << 4); 5339 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5340 } 5341} else { 5342if (GET_H_ENDIAN ()) { 5343{ 5344 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount))); 5345if (ANDQI (tmp_bytecount, 4)) { 5346{ 5347 { 5348 USI opval = ANDSI (tmp_val, 0xffffffff); 5349 SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval); 5350 written |= (1 << 7); 5351 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5352 } 5353 tmp_val = SRLDI (tmp_val, 32); 5354} 5355} 5356if (ANDQI (tmp_bytecount, 2)) { 5357{ 5358 { 5359 UHI opval = ANDHI (tmp_val, 65535); 5360 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5361 written |= (1 << 5); 5362 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5363 } 5364 tmp_val = SRLDI (tmp_val, 16); 5365} 5366} 5367if (ANDQI (tmp_bytecount, 1)) { 5368{ 5369 { 5370 UQI opval = ANDQI (tmp_val, 255); 5371 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5372 written |= (1 << 6); 5373 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5374 } 5375 tmp_val = SRLDI (tmp_val, 8); 5376} 5377} 5378} 5379} else { 5380{ 5381 tmp_val = GET_H_GR (FLD (f_dest)); 5382if (ANDQI (tmp_bytecount, 1)) { 5383{ 5384 { 5385 UQI opval = ANDQI (tmp_val, 255); 5386 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5387 written |= (1 << 6); 5388 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5389 } 5390 tmp_val = SRLDI (tmp_val, 8); 5391} 5392} 5393if (ANDQI (tmp_bytecount, 2)) { 5394{ 5395 { 5396 UHI opval = ANDHI (tmp_val, 65535); 5397 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5398 written |= (1 << 5); 5399 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5400 } 5401 tmp_val = SRLDI (tmp_val, 16); 5402} 5403} 5404if (ANDQI (tmp_bytecount, 4)) { 5405{ 5406 { 5407 USI opval = ANDSI (tmp_val, 0xffffffff); 5408 SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval); 5409 written |= (1 << 7); 5410 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5411 } 5412 tmp_val = SRLDI (tmp_val, 32); 5413} 5414} 5415} 5416} 5417} 5418} 5419 5420 abuf->written = written; 5421#undef FLD 5422} 5423 NEXT (vpc); 5424 5425 CASE (sem, INSN_STXB) : /* stx.b $rm, $rn, $rd */ 5426{ 5427 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5428 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5429#define FLD(f) abuf->fields.sfmt_add.f 5430 int UNUSED written = 0; 5431 IADDR UNUSED pc = abuf->addr; 5432 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5433 5434 { 5435 UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7); 5436 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5437 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5438 } 5439 5440#undef FLD 5441} 5442 NEXT (vpc); 5443 5444 CASE (sem, INSN_STXL) : /* stx.l $rm, $rn, $rd */ 5445{ 5446 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5447 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5448#define FLD(f) abuf->fields.sfmt_add.f 5449 int UNUSED written = 0; 5450 IADDR UNUSED pc = abuf->addr; 5451 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5452 5453 { 5454 SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1); 5455 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5456 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5457 } 5458 5459#undef FLD 5460} 5461 NEXT (vpc); 5462 5463 CASE (sem, INSN_STXQ) : /* stx.q $rm, $rn, $rd */ 5464{ 5465 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5466 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5467#define FLD(f) abuf->fields.sfmt_add.f 5468 int UNUSED written = 0; 5469 IADDR UNUSED pc = abuf->addr; 5470 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5471 5472 { 5473 DI opval = GET_H_GR (FLD (f_dest)); 5474 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5475 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5476 } 5477 5478#undef FLD 5479} 5480 NEXT (vpc); 5481 5482 CASE (sem, INSN_STXW) : /* stx.w $rm, $rn, $rd */ 5483{ 5484 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5485 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5486#define FLD(f) abuf->fields.sfmt_add.f 5487 int UNUSED written = 0; 5488 IADDR UNUSED pc = abuf->addr; 5489 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5490 5491 { 5492 HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3); 5493 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5494 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5495 } 5496 5497#undef FLD 5498} 5499 NEXT (vpc); 5500 5501 CASE (sem, INSN_SUB) : /* sub $rm, $rn, $rd */ 5502{ 5503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5504 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5505#define FLD(f) abuf->fields.sfmt_add.f 5506 int UNUSED written = 0; 5507 IADDR UNUSED pc = abuf->addr; 5508 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5509 5510 { 5511 DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 5512 SET_H_GR (FLD (f_dest), opval); 5513 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5514 } 5515 5516#undef FLD 5517} 5518 NEXT (vpc); 5519 5520 CASE (sem, INSN_SUBL) : /* sub.l $rm, $rn, $rd */ 5521{ 5522 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5523 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5524#define FLD(f) abuf->fields.sfmt_add.f 5525 int UNUSED written = 0; 5526 IADDR UNUSED pc = abuf->addr; 5527 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5528 5529 { 5530 DI opval = EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 5531 SET_H_GR (FLD (f_dest), opval); 5532 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5533 } 5534 5535#undef FLD 5536} 5537 NEXT (vpc); 5538 5539 CASE (sem, INSN_SWAPQ) : /* swap.q $rm, $rn, $rd */ 5540{ 5541 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5542 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5543#define FLD(f) abuf->fields.sfmt_add.f 5544 int UNUSED written = 0; 5545 IADDR UNUSED pc = abuf->addr; 5546 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5547 5548{ 5549 DI tmp_addr; 5550 DI tmp_temp; 5551 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 5552 tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr); 5553 { 5554 DI opval = GET_H_GR (FLD (f_dest)); 5555 SETMEMDI (current_cpu, pc, tmp_addr, opval); 5556 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5557 } 5558 { 5559 DI opval = tmp_temp; 5560 SET_H_GR (FLD (f_dest), opval); 5561 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5562 } 5563} 5564 5565#undef FLD 5566} 5567 NEXT (vpc); 5568 5569 CASE (sem, INSN_SYNCI) : /* synci */ 5570{ 5571 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5572 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5573#define FLD(f) abuf->fields.fmt_empty.f 5574 int UNUSED written = 0; 5575 IADDR UNUSED pc = abuf->addr; 5576 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5577 5578((void) 0); /*nop*/ 5579 5580#undef FLD 5581} 5582 NEXT (vpc); 5583 5584 CASE (sem, INSN_SYNCO) : /* synco */ 5585{ 5586 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5587 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5588#define FLD(f) abuf->fields.fmt_empty.f 5589 int UNUSED written = 0; 5590 IADDR UNUSED pc = abuf->addr; 5591 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5592 5593((void) 0); /*nop*/ 5594 5595#undef FLD 5596} 5597 NEXT (vpc); 5598 5599 CASE (sem, INSN_TRAPA) : /* trapa $rm */ 5600{ 5601 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5602 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5603#define FLD(f) abuf->fields.sfmt_xori.f 5604 int UNUSED written = 0; 5605 IADDR UNUSED pc = abuf->addr; 5606 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5607 5608sh64_trapa (current_cpu, GET_H_GR (FLD (f_left)), pc); 5609 5610#undef FLD 5611} 5612 NEXT (vpc); 5613 5614 CASE (sem, INSN_XOR) : /* xor $rm, $rn, $rd */ 5615{ 5616 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5617 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5618#define FLD(f) abuf->fields.sfmt_add.f 5619 int UNUSED written = 0; 5620 IADDR UNUSED pc = abuf->addr; 5621 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5622 5623 { 5624 DI opval = XORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 5625 SET_H_GR (FLD (f_dest), opval); 5626 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5627 } 5628 5629#undef FLD 5630} 5631 NEXT (vpc); 5632 5633 CASE (sem, INSN_XORI) : /* xori $rm, $imm6, $rd */ 5634{ 5635 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5636 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5637#define FLD(f) abuf->fields.sfmt_xori.f 5638 int UNUSED written = 0; 5639 IADDR UNUSED pc = abuf->addr; 5640 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5641 5642 { 5643 DI opval = XORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6))); 5644 SET_H_GR (FLD (f_dest), opval); 5645 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5646 } 5647 5648#undef FLD 5649} 5650 NEXT (vpc); 5651 5652 5653 } 5654 ENDSWITCH (sem) /* End of semantic switch. */ 5655 5656 /* At this point `vpc' contains the next insn to execute. */ 5657} 5658 5659#undef DEFINE_SWITCH 5660#endif /* DEFINE_SWITCH */ 5661