1 1.1 christos /* Simulator model support for m32rxf. 2 1.1 christos 3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN. 4 1.1 christos 5 1.11 christos Copyright (C) 1996-2024 Free Software Foundation, Inc. 6 1.1 christos 7 1.1 christos This file is part of the GNU simulators. 8 1.1 christos 9 1.1 christos This file is free software; you can redistribute it and/or modify 10 1.1 christos it under the terms of the GNU General Public License as published by 11 1.1 christos the Free Software Foundation; either version 3, or (at your option) 12 1.1 christos any later version. 13 1.1 christos 14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT 15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 1.1 christos License for more details. 18 1.1 christos 19 1.1 christos You should have received a copy of the GNU General Public License along 20 1.11 christos with this program; if not, write to the Free Software Foundation, Inc., 21 1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22 1.1 christos 23 1.1 christos */ 24 1.1 christos 25 1.1 christos #define WANT_CPU m32rxf 26 1.1 christos #define WANT_CPU_M32RXF 27 1.1 christos 28 1.1 christos #include "sim-main.h" 29 1.1 christos 30 1.1 christos /* The profiling data is recorded here, but is accessed via the profiling 31 1.1 christos mechanism. After all, this is information for profiling. */ 32 1.1 christos 33 1.1 christos #if WITH_PROFILE_MODEL_P 34 1.1 christos 35 1.1 christos /* Model handlers for each insn. */ 36 1.1 christos 37 1.1 christos static int 38 1.1 christos model_m32rx_add (SIM_CPU *current_cpu, void *sem_arg) 39 1.1 christos { 40 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 41 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 42 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 43 1.1 christos int cycles = 0; 44 1.1 christos { 45 1.1 christos int referenced = 0; 46 1.1 christos int UNUSED insn_referenced = abuf->written; 47 1.1 christos INT in_sr = -1; 48 1.1 christos INT in_dr = -1; 49 1.1 christos INT out_dr = -1; 50 1.1 christos in_sr = FLD (in_sr); 51 1.1 christos in_dr = FLD (in_dr); 52 1.1 christos out_dr = FLD (out_dr); 53 1.1 christos referenced |= 1 << 0; 54 1.1 christos referenced |= 1 << 1; 55 1.1 christos referenced |= 1 << 2; 56 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 57 1.1 christos } 58 1.1 christos return cycles; 59 1.1 christos #undef FLD 60 1.1 christos } 61 1.1 christos 62 1.1 christos static int 63 1.1 christos model_m32rx_add3 (SIM_CPU *current_cpu, void *sem_arg) 64 1.1 christos { 65 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 66 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 67 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 68 1.1 christos int cycles = 0; 69 1.1 christos { 70 1.1 christos int referenced = 0; 71 1.1 christos int UNUSED insn_referenced = abuf->written; 72 1.1 christos INT in_sr = -1; 73 1.1 christos INT in_dr = -1; 74 1.1 christos INT out_dr = -1; 75 1.1 christos in_sr = FLD (in_sr); 76 1.1 christos out_dr = FLD (out_dr); 77 1.1 christos referenced |= 1 << 0; 78 1.1 christos referenced |= 1 << 2; 79 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 80 1.1 christos } 81 1.1 christos return cycles; 82 1.1 christos #undef FLD 83 1.1 christos } 84 1.1 christos 85 1.1 christos static int 86 1.1 christos model_m32rx_and (SIM_CPU *current_cpu, void *sem_arg) 87 1.1 christos { 88 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 89 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 90 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 91 1.1 christos int cycles = 0; 92 1.1 christos { 93 1.1 christos int referenced = 0; 94 1.1 christos int UNUSED insn_referenced = abuf->written; 95 1.1 christos INT in_sr = -1; 96 1.1 christos INT in_dr = -1; 97 1.1 christos INT out_dr = -1; 98 1.1 christos in_sr = FLD (in_sr); 99 1.1 christos in_dr = FLD (in_dr); 100 1.1 christos out_dr = FLD (out_dr); 101 1.1 christos referenced |= 1 << 0; 102 1.1 christos referenced |= 1 << 1; 103 1.1 christos referenced |= 1 << 2; 104 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 105 1.1 christos } 106 1.1 christos return cycles; 107 1.1 christos #undef FLD 108 1.1 christos } 109 1.1 christos 110 1.1 christos static int 111 1.1 christos model_m32rx_and3 (SIM_CPU *current_cpu, void *sem_arg) 112 1.1 christos { 113 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f 114 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 115 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 116 1.1 christos int cycles = 0; 117 1.1 christos { 118 1.1 christos int referenced = 0; 119 1.1 christos int UNUSED insn_referenced = abuf->written; 120 1.1 christos INT in_sr = -1; 121 1.1 christos INT in_dr = -1; 122 1.1 christos INT out_dr = -1; 123 1.1 christos in_sr = FLD (in_sr); 124 1.1 christos out_dr = FLD (out_dr); 125 1.1 christos referenced |= 1 << 0; 126 1.1 christos referenced |= 1 << 2; 127 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 128 1.1 christos } 129 1.1 christos return cycles; 130 1.1 christos #undef FLD 131 1.1 christos } 132 1.1 christos 133 1.1 christos static int 134 1.1 christos model_m32rx_or (SIM_CPU *current_cpu, void *sem_arg) 135 1.1 christos { 136 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 137 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 138 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 139 1.1 christos int cycles = 0; 140 1.1 christos { 141 1.1 christos int referenced = 0; 142 1.1 christos int UNUSED insn_referenced = abuf->written; 143 1.1 christos INT in_sr = -1; 144 1.1 christos INT in_dr = -1; 145 1.1 christos INT out_dr = -1; 146 1.1 christos in_sr = FLD (in_sr); 147 1.1 christos in_dr = FLD (in_dr); 148 1.1 christos out_dr = FLD (out_dr); 149 1.1 christos referenced |= 1 << 0; 150 1.1 christos referenced |= 1 << 1; 151 1.1 christos referenced |= 1 << 2; 152 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 153 1.1 christos } 154 1.1 christos return cycles; 155 1.1 christos #undef FLD 156 1.1 christos } 157 1.1 christos 158 1.1 christos static int 159 1.1 christos model_m32rx_or3 (SIM_CPU *current_cpu, void *sem_arg) 160 1.1 christos { 161 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f 162 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 163 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 164 1.1 christos int cycles = 0; 165 1.1 christos { 166 1.1 christos int referenced = 0; 167 1.1 christos int UNUSED insn_referenced = abuf->written; 168 1.1 christos INT in_sr = -1; 169 1.1 christos INT in_dr = -1; 170 1.1 christos INT out_dr = -1; 171 1.1 christos in_sr = FLD (in_sr); 172 1.1 christos out_dr = FLD (out_dr); 173 1.1 christos referenced |= 1 << 0; 174 1.1 christos referenced |= 1 << 2; 175 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 176 1.1 christos } 177 1.1 christos return cycles; 178 1.1 christos #undef FLD 179 1.1 christos } 180 1.1 christos 181 1.1 christos static int 182 1.1 christos model_m32rx_xor (SIM_CPU *current_cpu, void *sem_arg) 183 1.1 christos { 184 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 185 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 186 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 187 1.1 christos int cycles = 0; 188 1.1 christos { 189 1.1 christos int referenced = 0; 190 1.1 christos int UNUSED insn_referenced = abuf->written; 191 1.1 christos INT in_sr = -1; 192 1.1 christos INT in_dr = -1; 193 1.1 christos INT out_dr = -1; 194 1.1 christos in_sr = FLD (in_sr); 195 1.1 christos in_dr = FLD (in_dr); 196 1.1 christos out_dr = FLD (out_dr); 197 1.1 christos referenced |= 1 << 0; 198 1.1 christos referenced |= 1 << 1; 199 1.1 christos referenced |= 1 << 2; 200 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 201 1.1 christos } 202 1.1 christos return cycles; 203 1.1 christos #undef FLD 204 1.1 christos } 205 1.1 christos 206 1.1 christos static int 207 1.1 christos model_m32rx_xor3 (SIM_CPU *current_cpu, void *sem_arg) 208 1.1 christos { 209 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f 210 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 211 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 212 1.1 christos int cycles = 0; 213 1.1 christos { 214 1.1 christos int referenced = 0; 215 1.1 christos int UNUSED insn_referenced = abuf->written; 216 1.1 christos INT in_sr = -1; 217 1.1 christos INT in_dr = -1; 218 1.1 christos INT out_dr = -1; 219 1.1 christos in_sr = FLD (in_sr); 220 1.1 christos out_dr = FLD (out_dr); 221 1.1 christos referenced |= 1 << 0; 222 1.1 christos referenced |= 1 << 2; 223 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 224 1.1 christos } 225 1.1 christos return cycles; 226 1.1 christos #undef FLD 227 1.1 christos } 228 1.1 christos 229 1.1 christos static int 230 1.1 christos model_m32rx_addi (SIM_CPU *current_cpu, void *sem_arg) 231 1.1 christos { 232 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 233 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 234 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 235 1.1 christos int cycles = 0; 236 1.1 christos { 237 1.1 christos int referenced = 0; 238 1.1 christos int UNUSED insn_referenced = abuf->written; 239 1.1 christos INT in_sr = -1; 240 1.1 christos INT in_dr = -1; 241 1.1 christos INT out_dr = -1; 242 1.1 christos in_dr = FLD (in_dr); 243 1.1 christos out_dr = FLD (out_dr); 244 1.1 christos referenced |= 1 << 1; 245 1.1 christos referenced |= 1 << 2; 246 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 247 1.1 christos } 248 1.1 christos return cycles; 249 1.1 christos #undef FLD 250 1.1 christos } 251 1.1 christos 252 1.1 christos static int 253 1.1 christos model_m32rx_addv (SIM_CPU *current_cpu, void *sem_arg) 254 1.1 christos { 255 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 256 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 257 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 258 1.1 christos int cycles = 0; 259 1.1 christos { 260 1.1 christos int referenced = 0; 261 1.1 christos int UNUSED insn_referenced = abuf->written; 262 1.1 christos INT in_sr = -1; 263 1.1 christos INT in_dr = -1; 264 1.1 christos INT out_dr = -1; 265 1.1 christos in_sr = FLD (in_sr); 266 1.1 christos in_dr = FLD (in_dr); 267 1.1 christos out_dr = FLD (out_dr); 268 1.1 christos referenced |= 1 << 0; 269 1.1 christos referenced |= 1 << 1; 270 1.1 christos referenced |= 1 << 2; 271 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 272 1.1 christos } 273 1.1 christos return cycles; 274 1.1 christos #undef FLD 275 1.1 christos } 276 1.1 christos 277 1.1 christos static int 278 1.1 christos model_m32rx_addv3 (SIM_CPU *current_cpu, void *sem_arg) 279 1.1 christos { 280 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 281 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 282 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 283 1.1 christos int cycles = 0; 284 1.1 christos { 285 1.1 christos int referenced = 0; 286 1.1 christos int UNUSED insn_referenced = abuf->written; 287 1.1 christos INT in_sr = -1; 288 1.1 christos INT in_dr = -1; 289 1.1 christos INT out_dr = -1; 290 1.1 christos in_sr = FLD (in_sr); 291 1.1 christos out_dr = FLD (out_dr); 292 1.1 christos referenced |= 1 << 0; 293 1.1 christos referenced |= 1 << 2; 294 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 295 1.1 christos } 296 1.1 christos return cycles; 297 1.1 christos #undef FLD 298 1.1 christos } 299 1.1 christos 300 1.1 christos static int 301 1.1 christos model_m32rx_addx (SIM_CPU *current_cpu, void *sem_arg) 302 1.1 christos { 303 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 304 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 305 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 306 1.1 christos int cycles = 0; 307 1.1 christos { 308 1.1 christos int referenced = 0; 309 1.1 christos int UNUSED insn_referenced = abuf->written; 310 1.1 christos INT in_sr = -1; 311 1.1 christos INT in_dr = -1; 312 1.1 christos INT out_dr = -1; 313 1.1 christos in_sr = FLD (in_sr); 314 1.1 christos in_dr = FLD (in_dr); 315 1.1 christos out_dr = FLD (out_dr); 316 1.1 christos referenced |= 1 << 0; 317 1.1 christos referenced |= 1 << 1; 318 1.1 christos referenced |= 1 << 2; 319 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 320 1.1 christos } 321 1.1 christos return cycles; 322 1.1 christos #undef FLD 323 1.1 christos } 324 1.1 christos 325 1.1 christos static int 326 1.1 christos model_m32rx_bc8 (SIM_CPU *current_cpu, void *sem_arg) 327 1.1 christos { 328 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 329 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 330 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 331 1.1 christos int cycles = 0; 332 1.1 christos { 333 1.1 christos int referenced = 0; 334 1.1 christos int UNUSED insn_referenced = abuf->written; 335 1.1 christos INT in_sr = -1; 336 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 337 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 338 1.1 christos } 339 1.1 christos return cycles; 340 1.1 christos #undef FLD 341 1.1 christos } 342 1.1 christos 343 1.1 christos static int 344 1.1 christos model_m32rx_bc24 (SIM_CPU *current_cpu, void *sem_arg) 345 1.1 christos { 346 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 347 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 348 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 349 1.1 christos int cycles = 0; 350 1.1 christos { 351 1.1 christos int referenced = 0; 352 1.1 christos int UNUSED insn_referenced = abuf->written; 353 1.1 christos INT in_sr = -1; 354 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 355 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 356 1.1 christos } 357 1.1 christos return cycles; 358 1.1 christos #undef FLD 359 1.1 christos } 360 1.1 christos 361 1.1 christos static int 362 1.1 christos model_m32rx_beq (SIM_CPU *current_cpu, void *sem_arg) 363 1.1 christos { 364 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 365 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 366 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 367 1.1 christos int cycles = 0; 368 1.1 christos { 369 1.1 christos int referenced = 0; 370 1.1 christos int UNUSED insn_referenced = abuf->written; 371 1.1 christos INT in_sr = -1; 372 1.1 christos if (insn_referenced & (1 << 3)) referenced |= 1 << 1; 373 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 374 1.1 christos } 375 1.1 christos { 376 1.1 christos int referenced = 0; 377 1.1 christos int UNUSED insn_referenced = abuf->written; 378 1.1 christos INT in_src1 = -1; 379 1.1 christos INT in_src2 = -1; 380 1.1 christos in_src1 = FLD (in_src1); 381 1.1 christos in_src2 = FLD (in_src2); 382 1.1 christos referenced |= 1 << 0; 383 1.1 christos referenced |= 1 << 1; 384 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 385 1.1 christos } 386 1.1 christos return cycles; 387 1.1 christos #undef FLD 388 1.1 christos } 389 1.1 christos 390 1.1 christos static int 391 1.1 christos model_m32rx_beqz (SIM_CPU *current_cpu, void *sem_arg) 392 1.1 christos { 393 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 394 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 395 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 396 1.1 christos int cycles = 0; 397 1.1 christos { 398 1.1 christos int referenced = 0; 399 1.1 christos int UNUSED insn_referenced = abuf->written; 400 1.1 christos INT in_sr = -1; 401 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 402 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 403 1.1 christos } 404 1.1 christos { 405 1.1 christos int referenced = 0; 406 1.1 christos int UNUSED insn_referenced = abuf->written; 407 1.1 christos INT in_src1 = -1; 408 1.1 christos INT in_src2 = -1; 409 1.1 christos in_src2 = FLD (in_src2); 410 1.1 christos referenced |= 1 << 1; 411 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 412 1.1 christos } 413 1.1 christos return cycles; 414 1.1 christos #undef FLD 415 1.1 christos } 416 1.1 christos 417 1.1 christos static int 418 1.1 christos model_m32rx_bgez (SIM_CPU *current_cpu, void *sem_arg) 419 1.1 christos { 420 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 421 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 422 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 423 1.1 christos int cycles = 0; 424 1.1 christos { 425 1.1 christos int referenced = 0; 426 1.1 christos int UNUSED insn_referenced = abuf->written; 427 1.1 christos INT in_sr = -1; 428 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 429 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 430 1.1 christos } 431 1.1 christos { 432 1.1 christos int referenced = 0; 433 1.1 christos int UNUSED insn_referenced = abuf->written; 434 1.1 christos INT in_src1 = -1; 435 1.1 christos INT in_src2 = -1; 436 1.1 christos in_src2 = FLD (in_src2); 437 1.1 christos referenced |= 1 << 1; 438 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 439 1.1 christos } 440 1.1 christos return cycles; 441 1.1 christos #undef FLD 442 1.1 christos } 443 1.1 christos 444 1.1 christos static int 445 1.1 christos model_m32rx_bgtz (SIM_CPU *current_cpu, void *sem_arg) 446 1.1 christos { 447 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 448 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 449 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 450 1.1 christos int cycles = 0; 451 1.1 christos { 452 1.1 christos int referenced = 0; 453 1.1 christos int UNUSED insn_referenced = abuf->written; 454 1.1 christos INT in_sr = -1; 455 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 456 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 457 1.1 christos } 458 1.1 christos { 459 1.1 christos int referenced = 0; 460 1.1 christos int UNUSED insn_referenced = abuf->written; 461 1.1 christos INT in_src1 = -1; 462 1.1 christos INT in_src2 = -1; 463 1.1 christos in_src2 = FLD (in_src2); 464 1.1 christos referenced |= 1 << 1; 465 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 466 1.1 christos } 467 1.1 christos return cycles; 468 1.1 christos #undef FLD 469 1.1 christos } 470 1.1 christos 471 1.1 christos static int 472 1.1 christos model_m32rx_blez (SIM_CPU *current_cpu, void *sem_arg) 473 1.1 christos { 474 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 475 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 476 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 477 1.1 christos int cycles = 0; 478 1.1 christos { 479 1.1 christos int referenced = 0; 480 1.1 christos int UNUSED insn_referenced = abuf->written; 481 1.1 christos INT in_sr = -1; 482 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 483 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 484 1.1 christos } 485 1.1 christos { 486 1.1 christos int referenced = 0; 487 1.1 christos int UNUSED insn_referenced = abuf->written; 488 1.1 christos INT in_src1 = -1; 489 1.1 christos INT in_src2 = -1; 490 1.1 christos in_src2 = FLD (in_src2); 491 1.1 christos referenced |= 1 << 1; 492 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 493 1.1 christos } 494 1.1 christos return cycles; 495 1.1 christos #undef FLD 496 1.1 christos } 497 1.1 christos 498 1.1 christos static int 499 1.1 christos model_m32rx_bltz (SIM_CPU *current_cpu, void *sem_arg) 500 1.1 christos { 501 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 502 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 503 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 504 1.1 christos int cycles = 0; 505 1.1 christos { 506 1.1 christos int referenced = 0; 507 1.1 christos int UNUSED insn_referenced = abuf->written; 508 1.1 christos INT in_sr = -1; 509 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 510 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 511 1.1 christos } 512 1.1 christos { 513 1.1 christos int referenced = 0; 514 1.1 christos int UNUSED insn_referenced = abuf->written; 515 1.1 christos INT in_src1 = -1; 516 1.1 christos INT in_src2 = -1; 517 1.1 christos in_src2 = FLD (in_src2); 518 1.1 christos referenced |= 1 << 1; 519 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 520 1.1 christos } 521 1.1 christos return cycles; 522 1.1 christos #undef FLD 523 1.1 christos } 524 1.1 christos 525 1.1 christos static int 526 1.1 christos model_m32rx_bnez (SIM_CPU *current_cpu, void *sem_arg) 527 1.1 christos { 528 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 529 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 530 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 531 1.1 christos int cycles = 0; 532 1.1 christos { 533 1.1 christos int referenced = 0; 534 1.1 christos int UNUSED insn_referenced = abuf->written; 535 1.1 christos INT in_sr = -1; 536 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 537 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 538 1.1 christos } 539 1.1 christos { 540 1.1 christos int referenced = 0; 541 1.1 christos int UNUSED insn_referenced = abuf->written; 542 1.1 christos INT in_src1 = -1; 543 1.1 christos INT in_src2 = -1; 544 1.1 christos in_src2 = FLD (in_src2); 545 1.1 christos referenced |= 1 << 1; 546 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 547 1.1 christos } 548 1.1 christos return cycles; 549 1.1 christos #undef FLD 550 1.1 christos } 551 1.1 christos 552 1.1 christos static int 553 1.1 christos model_m32rx_bl8 (SIM_CPU *current_cpu, void *sem_arg) 554 1.1 christos { 555 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 556 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 557 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 558 1.1 christos int cycles = 0; 559 1.1 christos { 560 1.1 christos int referenced = 0; 561 1.1 christos int UNUSED insn_referenced = abuf->written; 562 1.1 christos INT in_sr = -1; 563 1.1 christos referenced |= 1 << 1; 564 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 565 1.1 christos } 566 1.1 christos return cycles; 567 1.1 christos #undef FLD 568 1.1 christos } 569 1.1 christos 570 1.1 christos static int 571 1.1 christos model_m32rx_bl24 (SIM_CPU *current_cpu, void *sem_arg) 572 1.1 christos { 573 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 574 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 575 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 576 1.1 christos int cycles = 0; 577 1.1 christos { 578 1.1 christos int referenced = 0; 579 1.1 christos int UNUSED insn_referenced = abuf->written; 580 1.1 christos INT in_sr = -1; 581 1.1 christos referenced |= 1 << 1; 582 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 583 1.1 christos } 584 1.1 christos return cycles; 585 1.1 christos #undef FLD 586 1.1 christos } 587 1.1 christos 588 1.1 christos static int 589 1.1 christos model_m32rx_bcl8 (SIM_CPU *current_cpu, void *sem_arg) 590 1.1 christos { 591 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 592 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 593 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 594 1.1 christos int cycles = 0; 595 1.1 christos { 596 1.1 christos int referenced = 0; 597 1.1 christos int UNUSED insn_referenced = abuf->written; 598 1.1 christos INT in_sr = -1; 599 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 600 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 601 1.1 christos } 602 1.1 christos return cycles; 603 1.1 christos #undef FLD 604 1.1 christos } 605 1.1 christos 606 1.1 christos static int 607 1.1 christos model_m32rx_bcl24 (SIM_CPU *current_cpu, void *sem_arg) 608 1.1 christos { 609 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 610 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 611 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 612 1.1 christos int cycles = 0; 613 1.1 christos { 614 1.1 christos int referenced = 0; 615 1.1 christos int UNUSED insn_referenced = abuf->written; 616 1.1 christos INT in_sr = -1; 617 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 618 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 619 1.1 christos } 620 1.1 christos return cycles; 621 1.1 christos #undef FLD 622 1.1 christos } 623 1.1 christos 624 1.1 christos static int 625 1.1 christos model_m32rx_bnc8 (SIM_CPU *current_cpu, void *sem_arg) 626 1.1 christos { 627 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 628 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 629 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 630 1.1 christos int cycles = 0; 631 1.1 christos { 632 1.1 christos int referenced = 0; 633 1.1 christos int UNUSED insn_referenced = abuf->written; 634 1.1 christos INT in_sr = -1; 635 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 636 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 637 1.1 christos } 638 1.1 christos return cycles; 639 1.1 christos #undef FLD 640 1.1 christos } 641 1.1 christos 642 1.1 christos static int 643 1.1 christos model_m32rx_bnc24 (SIM_CPU *current_cpu, void *sem_arg) 644 1.1 christos { 645 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 646 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 647 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 648 1.1 christos int cycles = 0; 649 1.1 christos { 650 1.1 christos int referenced = 0; 651 1.1 christos int UNUSED insn_referenced = abuf->written; 652 1.1 christos INT in_sr = -1; 653 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 654 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 655 1.1 christos } 656 1.1 christos return cycles; 657 1.1 christos #undef FLD 658 1.1 christos } 659 1.1 christos 660 1.1 christos static int 661 1.1 christos model_m32rx_bne (SIM_CPU *current_cpu, void *sem_arg) 662 1.1 christos { 663 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f 664 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 665 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 666 1.1 christos int cycles = 0; 667 1.1 christos { 668 1.1 christos int referenced = 0; 669 1.1 christos int UNUSED insn_referenced = abuf->written; 670 1.1 christos INT in_sr = -1; 671 1.1 christos if (insn_referenced & (1 << 3)) referenced |= 1 << 1; 672 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 673 1.1 christos } 674 1.1 christos { 675 1.1 christos int referenced = 0; 676 1.1 christos int UNUSED insn_referenced = abuf->written; 677 1.1 christos INT in_src1 = -1; 678 1.1 christos INT in_src2 = -1; 679 1.1 christos in_src1 = FLD (in_src1); 680 1.1 christos in_src2 = FLD (in_src2); 681 1.1 christos referenced |= 1 << 0; 682 1.1 christos referenced |= 1 << 1; 683 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 684 1.1 christos } 685 1.1 christos return cycles; 686 1.1 christos #undef FLD 687 1.1 christos } 688 1.1 christos 689 1.1 christos static int 690 1.1 christos model_m32rx_bra8 (SIM_CPU *current_cpu, void *sem_arg) 691 1.1 christos { 692 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 693 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 694 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 695 1.1 christos int cycles = 0; 696 1.1 christos { 697 1.1 christos int referenced = 0; 698 1.1 christos int UNUSED insn_referenced = abuf->written; 699 1.1 christos INT in_sr = -1; 700 1.1 christos referenced |= 1 << 1; 701 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 702 1.1 christos } 703 1.1 christos return cycles; 704 1.1 christos #undef FLD 705 1.1 christos } 706 1.1 christos 707 1.1 christos static int 708 1.1 christos model_m32rx_bra24 (SIM_CPU *current_cpu, void *sem_arg) 709 1.1 christos { 710 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 711 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 712 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 713 1.1 christos int cycles = 0; 714 1.1 christos { 715 1.1 christos int referenced = 0; 716 1.1 christos int UNUSED insn_referenced = abuf->written; 717 1.1 christos INT in_sr = -1; 718 1.1 christos referenced |= 1 << 1; 719 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 720 1.1 christos } 721 1.1 christos return cycles; 722 1.1 christos #undef FLD 723 1.1 christos } 724 1.1 christos 725 1.1 christos static int 726 1.1 christos model_m32rx_bncl8 (SIM_CPU *current_cpu, void *sem_arg) 727 1.1 christos { 728 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f 729 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 730 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 731 1.1 christos int cycles = 0; 732 1.1 christos { 733 1.1 christos int referenced = 0; 734 1.1 christos int UNUSED insn_referenced = abuf->written; 735 1.1 christos INT in_sr = -1; 736 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 737 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 738 1.1 christos } 739 1.1 christos return cycles; 740 1.1 christos #undef FLD 741 1.1 christos } 742 1.1 christos 743 1.1 christos static int 744 1.1 christos model_m32rx_bncl24 (SIM_CPU *current_cpu, void *sem_arg) 745 1.1 christos { 746 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f 747 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 748 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 749 1.1 christos int cycles = 0; 750 1.1 christos { 751 1.1 christos int referenced = 0; 752 1.1 christos int UNUSED insn_referenced = abuf->written; 753 1.1 christos INT in_sr = -1; 754 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 755 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 756 1.1 christos } 757 1.1 christos return cycles; 758 1.1 christos #undef FLD 759 1.1 christos } 760 1.1 christos 761 1.1 christos static int 762 1.1 christos model_m32rx_cmp (SIM_CPU *current_cpu, void *sem_arg) 763 1.1 christos { 764 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 765 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 766 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 767 1.1 christos int cycles = 0; 768 1.1 christos { 769 1.1 christos int referenced = 0; 770 1.1 christos int UNUSED insn_referenced = abuf->written; 771 1.1 christos INT in_src1 = -1; 772 1.1 christos INT in_src2 = -1; 773 1.1 christos in_src1 = FLD (in_src1); 774 1.1 christos in_src2 = FLD (in_src2); 775 1.1 christos referenced |= 1 << 0; 776 1.1 christos referenced |= 1 << 1; 777 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 778 1.1 christos } 779 1.1 christos return cycles; 780 1.1 christos #undef FLD 781 1.1 christos } 782 1.1 christos 783 1.1 christos static int 784 1.1 christos model_m32rx_cmpi (SIM_CPU *current_cpu, void *sem_arg) 785 1.1 christos { 786 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 787 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 788 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 789 1.1 christos int cycles = 0; 790 1.1 christos { 791 1.1 christos int referenced = 0; 792 1.1 christos int UNUSED insn_referenced = abuf->written; 793 1.1 christos INT in_src1 = -1; 794 1.1 christos INT in_src2 = -1; 795 1.1 christos in_src2 = FLD (in_src2); 796 1.1 christos referenced |= 1 << 1; 797 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 798 1.1 christos } 799 1.1 christos return cycles; 800 1.1 christos #undef FLD 801 1.1 christos } 802 1.1 christos 803 1.1 christos static int 804 1.1 christos model_m32rx_cmpu (SIM_CPU *current_cpu, void *sem_arg) 805 1.1 christos { 806 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 807 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 808 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 809 1.1 christos int cycles = 0; 810 1.1 christos { 811 1.1 christos int referenced = 0; 812 1.1 christos int UNUSED insn_referenced = abuf->written; 813 1.1 christos INT in_src1 = -1; 814 1.1 christos INT in_src2 = -1; 815 1.1 christos in_src1 = FLD (in_src1); 816 1.1 christos in_src2 = FLD (in_src2); 817 1.1 christos referenced |= 1 << 0; 818 1.1 christos referenced |= 1 << 1; 819 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 820 1.1 christos } 821 1.1 christos return cycles; 822 1.1 christos #undef FLD 823 1.1 christos } 824 1.1 christos 825 1.1 christos static int 826 1.1 christos model_m32rx_cmpui (SIM_CPU *current_cpu, void *sem_arg) 827 1.1 christos { 828 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 829 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 830 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 831 1.1 christos int cycles = 0; 832 1.1 christos { 833 1.1 christos int referenced = 0; 834 1.1 christos int UNUSED insn_referenced = abuf->written; 835 1.1 christos INT in_src1 = -1; 836 1.1 christos INT in_src2 = -1; 837 1.1 christos in_src2 = FLD (in_src2); 838 1.1 christos referenced |= 1 << 1; 839 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 840 1.1 christos } 841 1.1 christos return cycles; 842 1.1 christos #undef FLD 843 1.1 christos } 844 1.1 christos 845 1.1 christos static int 846 1.1 christos model_m32rx_cmpeq (SIM_CPU *current_cpu, void *sem_arg) 847 1.1 christos { 848 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 849 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 850 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 851 1.1 christos int cycles = 0; 852 1.1 christos { 853 1.1 christos int referenced = 0; 854 1.1 christos int UNUSED insn_referenced = abuf->written; 855 1.1 christos INT in_src1 = -1; 856 1.1 christos INT in_src2 = -1; 857 1.1 christos in_src1 = FLD (in_src1); 858 1.1 christos in_src2 = FLD (in_src2); 859 1.1 christos referenced |= 1 << 0; 860 1.1 christos referenced |= 1 << 1; 861 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 862 1.1 christos } 863 1.1 christos return cycles; 864 1.1 christos #undef FLD 865 1.1 christos } 866 1.1 christos 867 1.1 christos static int 868 1.1 christos model_m32rx_cmpz (SIM_CPU *current_cpu, void *sem_arg) 869 1.1 christos { 870 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 871 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 872 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 873 1.1 christos int cycles = 0; 874 1.1 christos { 875 1.1 christos int referenced = 0; 876 1.1 christos int UNUSED insn_referenced = abuf->written; 877 1.1 christos INT in_src1 = -1; 878 1.1 christos INT in_src2 = -1; 879 1.1 christos in_src2 = FLD (in_src2); 880 1.1 christos referenced |= 1 << 1; 881 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 882 1.1 christos } 883 1.1 christos return cycles; 884 1.1 christos #undef FLD 885 1.1 christos } 886 1.1 christos 887 1.1 christos static int 888 1.1 christos model_m32rx_div (SIM_CPU *current_cpu, void *sem_arg) 889 1.1 christos { 890 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 891 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 892 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 893 1.1 christos int cycles = 0; 894 1.1 christos { 895 1.1 christos int referenced = 0; 896 1.1 christos int UNUSED insn_referenced = abuf->written; 897 1.1 christos INT in_sr = -1; 898 1.1 christos INT in_dr = -1; 899 1.1 christos INT out_dr = -1; 900 1.1 christos in_sr = FLD (in_sr); 901 1.1 christos in_dr = FLD (in_dr); 902 1.1 christos out_dr = FLD (out_dr); 903 1.1 christos referenced |= 1 << 0; 904 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 905 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 906 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 907 1.1 christos } 908 1.1 christos return cycles; 909 1.1 christos #undef FLD 910 1.1 christos } 911 1.1 christos 912 1.1 christos static int 913 1.1 christos model_m32rx_divu (SIM_CPU *current_cpu, void *sem_arg) 914 1.1 christos { 915 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 916 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 917 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 918 1.1 christos int cycles = 0; 919 1.1 christos { 920 1.1 christos int referenced = 0; 921 1.1 christos int UNUSED insn_referenced = abuf->written; 922 1.1 christos INT in_sr = -1; 923 1.1 christos INT in_dr = -1; 924 1.1 christos INT out_dr = -1; 925 1.1 christos in_sr = FLD (in_sr); 926 1.1 christos in_dr = FLD (in_dr); 927 1.1 christos out_dr = FLD (out_dr); 928 1.1 christos referenced |= 1 << 0; 929 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 930 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 931 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 932 1.1 christos } 933 1.1 christos return cycles; 934 1.1 christos #undef FLD 935 1.1 christos } 936 1.1 christos 937 1.1 christos static int 938 1.1 christos model_m32rx_rem (SIM_CPU *current_cpu, void *sem_arg) 939 1.1 christos { 940 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 941 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 942 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 943 1.1 christos int cycles = 0; 944 1.1 christos { 945 1.1 christos int referenced = 0; 946 1.1 christos int UNUSED insn_referenced = abuf->written; 947 1.1 christos INT in_sr = -1; 948 1.1 christos INT in_dr = -1; 949 1.1 christos INT out_dr = -1; 950 1.1 christos in_sr = FLD (in_sr); 951 1.1 christos in_dr = FLD (in_dr); 952 1.1 christos out_dr = FLD (out_dr); 953 1.1 christos referenced |= 1 << 0; 954 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 955 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 956 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 957 1.1 christos } 958 1.1 christos return cycles; 959 1.1 christos #undef FLD 960 1.1 christos } 961 1.1 christos 962 1.1 christos static int 963 1.1 christos model_m32rx_remu (SIM_CPU *current_cpu, void *sem_arg) 964 1.1 christos { 965 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 966 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 967 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 968 1.1 christos int cycles = 0; 969 1.1 christos { 970 1.1 christos int referenced = 0; 971 1.1 christos int UNUSED insn_referenced = abuf->written; 972 1.1 christos INT in_sr = -1; 973 1.1 christos INT in_dr = -1; 974 1.1 christos INT out_dr = -1; 975 1.1 christos in_sr = FLD (in_sr); 976 1.1 christos in_dr = FLD (in_dr); 977 1.1 christos out_dr = FLD (out_dr); 978 1.1 christos referenced |= 1 << 0; 979 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 980 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 981 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 982 1.1 christos } 983 1.1 christos return cycles; 984 1.1 christos #undef FLD 985 1.1 christos } 986 1.1 christos 987 1.1 christos static int 988 1.1 christos model_m32rx_divh (SIM_CPU *current_cpu, void *sem_arg) 989 1.1 christos { 990 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 991 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 992 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 993 1.1 christos int cycles = 0; 994 1.1 christos { 995 1.1 christos int referenced = 0; 996 1.1 christos int UNUSED insn_referenced = abuf->written; 997 1.1 christos INT in_sr = -1; 998 1.1 christos INT in_dr = -1; 999 1.1 christos INT out_dr = -1; 1000 1.1 christos in_sr = FLD (in_sr); 1001 1.1 christos in_dr = FLD (in_dr); 1002 1.1 christos out_dr = FLD (out_dr); 1003 1.1 christos referenced |= 1 << 0; 1004 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 1005 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 1006 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1007 1.1 christos } 1008 1.1 christos return cycles; 1009 1.1 christos #undef FLD 1010 1.1 christos } 1011 1.1 christos 1012 1.1 christos static int 1013 1.1 christos model_m32rx_jc (SIM_CPU *current_cpu, void *sem_arg) 1014 1.1 christos { 1015 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1016 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1017 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1018 1.1 christos int cycles = 0; 1019 1.1 christos { 1020 1.1 christos int referenced = 0; 1021 1.1 christos int UNUSED insn_referenced = abuf->written; 1022 1.1 christos INT in_sr = -1; 1023 1.1 christos in_sr = FLD (in_sr); 1024 1.1 christos if (insn_referenced & (1 << 1)) referenced |= 1 << 0; 1025 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 1026 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 1027 1.1 christos } 1028 1.1 christos return cycles; 1029 1.1 christos #undef FLD 1030 1.1 christos } 1031 1.1 christos 1032 1.1 christos static int 1033 1.1 christos model_m32rx_jnc (SIM_CPU *current_cpu, void *sem_arg) 1034 1.1 christos { 1035 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1036 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1037 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1038 1.1 christos int cycles = 0; 1039 1.1 christos { 1040 1.1 christos int referenced = 0; 1041 1.1 christos int UNUSED insn_referenced = abuf->written; 1042 1.1 christos INT in_sr = -1; 1043 1.1 christos in_sr = FLD (in_sr); 1044 1.1 christos if (insn_referenced & (1 << 1)) referenced |= 1 << 0; 1045 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 1046 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 1047 1.1 christos } 1048 1.1 christos return cycles; 1049 1.1 christos #undef FLD 1050 1.1 christos } 1051 1.1 christos 1052 1.1 christos static int 1053 1.1 christos model_m32rx_jl (SIM_CPU *current_cpu, void *sem_arg) 1054 1.1 christos { 1055 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1056 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1057 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1058 1.1 christos int cycles = 0; 1059 1.1 christos { 1060 1.1 christos int referenced = 0; 1061 1.1 christos int UNUSED insn_referenced = abuf->written; 1062 1.1 christos INT in_sr = -1; 1063 1.1 christos in_sr = FLD (in_sr); 1064 1.1 christos referenced |= 1 << 0; 1065 1.1 christos referenced |= 1 << 1; 1066 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 1067 1.1 christos } 1068 1.1 christos return cycles; 1069 1.1 christos #undef FLD 1070 1.1 christos } 1071 1.1 christos 1072 1.1 christos static int 1073 1.1 christos model_m32rx_jmp (SIM_CPU *current_cpu, void *sem_arg) 1074 1.1 christos { 1075 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f 1076 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1077 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1078 1.1 christos int cycles = 0; 1079 1.1 christos { 1080 1.1 christos int referenced = 0; 1081 1.1 christos int UNUSED insn_referenced = abuf->written; 1082 1.1 christos INT in_sr = -1; 1083 1.1 christos in_sr = FLD (in_sr); 1084 1.1 christos referenced |= 1 << 0; 1085 1.1 christos referenced |= 1 << 1; 1086 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 1087 1.1 christos } 1088 1.1 christos return cycles; 1089 1.1 christos #undef FLD 1090 1.1 christos } 1091 1.1 christos 1092 1.1 christos static int 1093 1.1 christos model_m32rx_ld (SIM_CPU *current_cpu, void *sem_arg) 1094 1.1 christos { 1095 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1096 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1097 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1098 1.1 christos int cycles = 0; 1099 1.1 christos { 1100 1.1 christos int referenced = 0; 1101 1.1 christos int UNUSED insn_referenced = abuf->written; 1102 1.1 christos INT in_sr = 0; 1103 1.1 christos INT out_dr = 0; 1104 1.1 christos in_sr = FLD (in_sr); 1105 1.1 christos out_dr = FLD (out_dr); 1106 1.1 christos referenced |= 1 << 0; 1107 1.1 christos referenced |= 1 << 1; 1108 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1109 1.1 christos } 1110 1.1 christos return cycles; 1111 1.1 christos #undef FLD 1112 1.1 christos } 1113 1.1 christos 1114 1.1 christos static int 1115 1.1 christos model_m32rx_ld_d (SIM_CPU *current_cpu, void *sem_arg) 1116 1.1 christos { 1117 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1118 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1119 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1120 1.1 christos int cycles = 0; 1121 1.1 christos { 1122 1.1 christos int referenced = 0; 1123 1.1 christos int UNUSED insn_referenced = abuf->written; 1124 1.1 christos INT in_sr = 0; 1125 1.1 christos INT out_dr = 0; 1126 1.1 christos in_sr = FLD (in_sr); 1127 1.1 christos out_dr = FLD (out_dr); 1128 1.1 christos referenced |= 1 << 0; 1129 1.1 christos referenced |= 1 << 1; 1130 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1131 1.1 christos } 1132 1.1 christos return cycles; 1133 1.1 christos #undef FLD 1134 1.1 christos } 1135 1.1 christos 1136 1.1 christos static int 1137 1.1 christos model_m32rx_ldb (SIM_CPU *current_cpu, void *sem_arg) 1138 1.1 christos { 1139 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1140 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1141 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1142 1.1 christos int cycles = 0; 1143 1.1 christos { 1144 1.1 christos int referenced = 0; 1145 1.1 christos int UNUSED insn_referenced = abuf->written; 1146 1.1 christos INT in_sr = 0; 1147 1.1 christos INT out_dr = 0; 1148 1.1 christos in_sr = FLD (in_sr); 1149 1.1 christos out_dr = FLD (out_dr); 1150 1.1 christos referenced |= 1 << 0; 1151 1.1 christos referenced |= 1 << 1; 1152 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1153 1.1 christos } 1154 1.1 christos return cycles; 1155 1.1 christos #undef FLD 1156 1.1 christos } 1157 1.1 christos 1158 1.1 christos static int 1159 1.1 christos model_m32rx_ldb_d (SIM_CPU *current_cpu, void *sem_arg) 1160 1.1 christos { 1161 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1162 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1163 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1164 1.1 christos int cycles = 0; 1165 1.1 christos { 1166 1.1 christos int referenced = 0; 1167 1.1 christos int UNUSED insn_referenced = abuf->written; 1168 1.1 christos INT in_sr = 0; 1169 1.1 christos INT out_dr = 0; 1170 1.1 christos in_sr = FLD (in_sr); 1171 1.1 christos out_dr = FLD (out_dr); 1172 1.1 christos referenced |= 1 << 0; 1173 1.1 christos referenced |= 1 << 1; 1174 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1175 1.1 christos } 1176 1.1 christos return cycles; 1177 1.1 christos #undef FLD 1178 1.1 christos } 1179 1.1 christos 1180 1.1 christos static int 1181 1.1 christos model_m32rx_ldh (SIM_CPU *current_cpu, void *sem_arg) 1182 1.1 christos { 1183 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1184 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1185 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1186 1.1 christos int cycles = 0; 1187 1.1 christos { 1188 1.1 christos int referenced = 0; 1189 1.1 christos int UNUSED insn_referenced = abuf->written; 1190 1.1 christos INT in_sr = 0; 1191 1.1 christos INT out_dr = 0; 1192 1.1 christos in_sr = FLD (in_sr); 1193 1.1 christos out_dr = FLD (out_dr); 1194 1.1 christos referenced |= 1 << 0; 1195 1.1 christos referenced |= 1 << 1; 1196 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1197 1.1 christos } 1198 1.1 christos return cycles; 1199 1.1 christos #undef FLD 1200 1.1 christos } 1201 1.1 christos 1202 1.1 christos static int 1203 1.1 christos model_m32rx_ldh_d (SIM_CPU *current_cpu, void *sem_arg) 1204 1.1 christos { 1205 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1206 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1207 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1208 1.1 christos int cycles = 0; 1209 1.1 christos { 1210 1.1 christos int referenced = 0; 1211 1.1 christos int UNUSED insn_referenced = abuf->written; 1212 1.1 christos INT in_sr = 0; 1213 1.1 christos INT out_dr = 0; 1214 1.1 christos in_sr = FLD (in_sr); 1215 1.1 christos out_dr = FLD (out_dr); 1216 1.1 christos referenced |= 1 << 0; 1217 1.1 christos referenced |= 1 << 1; 1218 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1219 1.1 christos } 1220 1.1 christos return cycles; 1221 1.1 christos #undef FLD 1222 1.1 christos } 1223 1.1 christos 1224 1.1 christos static int 1225 1.1 christos model_m32rx_ldub (SIM_CPU *current_cpu, void *sem_arg) 1226 1.1 christos { 1227 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1228 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1229 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1230 1.1 christos int cycles = 0; 1231 1.1 christos { 1232 1.1 christos int referenced = 0; 1233 1.1 christos int UNUSED insn_referenced = abuf->written; 1234 1.1 christos INT in_sr = 0; 1235 1.1 christos INT out_dr = 0; 1236 1.1 christos in_sr = FLD (in_sr); 1237 1.1 christos out_dr = FLD (out_dr); 1238 1.1 christos referenced |= 1 << 0; 1239 1.1 christos referenced |= 1 << 1; 1240 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1241 1.1 christos } 1242 1.1 christos return cycles; 1243 1.1 christos #undef FLD 1244 1.1 christos } 1245 1.1 christos 1246 1.1 christos static int 1247 1.1 christos model_m32rx_ldub_d (SIM_CPU *current_cpu, void *sem_arg) 1248 1.1 christos { 1249 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1250 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1251 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1252 1.1 christos int cycles = 0; 1253 1.1 christos { 1254 1.1 christos int referenced = 0; 1255 1.1 christos int UNUSED insn_referenced = abuf->written; 1256 1.1 christos INT in_sr = 0; 1257 1.1 christos INT out_dr = 0; 1258 1.1 christos in_sr = FLD (in_sr); 1259 1.1 christos out_dr = FLD (out_dr); 1260 1.1 christos referenced |= 1 << 0; 1261 1.1 christos referenced |= 1 << 1; 1262 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1263 1.1 christos } 1264 1.1 christos return cycles; 1265 1.1 christos #undef FLD 1266 1.1 christos } 1267 1.1 christos 1268 1.1 christos static int 1269 1.1 christos model_m32rx_lduh (SIM_CPU *current_cpu, void *sem_arg) 1270 1.1 christos { 1271 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1272 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1273 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1274 1.1 christos int cycles = 0; 1275 1.1 christos { 1276 1.1 christos int referenced = 0; 1277 1.1 christos int UNUSED insn_referenced = abuf->written; 1278 1.1 christos INT in_sr = 0; 1279 1.1 christos INT out_dr = 0; 1280 1.1 christos in_sr = FLD (in_sr); 1281 1.1 christos out_dr = FLD (out_dr); 1282 1.1 christos referenced |= 1 << 0; 1283 1.1 christos referenced |= 1 << 1; 1284 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1285 1.1 christos } 1286 1.1 christos return cycles; 1287 1.1 christos #undef FLD 1288 1.1 christos } 1289 1.1 christos 1290 1.1 christos static int 1291 1.1 christos model_m32rx_lduh_d (SIM_CPU *current_cpu, void *sem_arg) 1292 1.1 christos { 1293 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1294 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1295 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1296 1.1 christos int cycles = 0; 1297 1.1 christos { 1298 1.1 christos int referenced = 0; 1299 1.1 christos int UNUSED insn_referenced = abuf->written; 1300 1.1 christos INT in_sr = 0; 1301 1.1 christos INT out_dr = 0; 1302 1.1 christos in_sr = FLD (in_sr); 1303 1.1 christos out_dr = FLD (out_dr); 1304 1.1 christos referenced |= 1 << 0; 1305 1.1 christos referenced |= 1 << 1; 1306 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1307 1.1 christos } 1308 1.1 christos return cycles; 1309 1.1 christos #undef FLD 1310 1.1 christos } 1311 1.1 christos 1312 1.1 christos static int 1313 1.1 christos model_m32rx_ld_plus (SIM_CPU *current_cpu, void *sem_arg) 1314 1.1 christos { 1315 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1316 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1317 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1318 1.1 christos int cycles = 0; 1319 1.1 christos { 1320 1.1 christos int referenced = 0; 1321 1.1 christos int UNUSED insn_referenced = abuf->written; 1322 1.1 christos INT in_sr = 0; 1323 1.1 christos INT out_dr = 0; 1324 1.1 christos in_sr = FLD (in_sr); 1325 1.1 christos out_dr = FLD (out_dr); 1326 1.1 christos referenced |= 1 << 0; 1327 1.1 christos referenced |= 1 << 1; 1328 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1329 1.1 christos } 1330 1.1 christos { 1331 1.1 christos int referenced = 0; 1332 1.1 christos int UNUSED insn_referenced = abuf->written; 1333 1.1 christos INT in_sr = -1; 1334 1.1 christos INT in_dr = -1; 1335 1.1 christos INT out_dr = -1; 1336 1.1 christos in_dr = FLD (in_sr); 1337 1.1 christos out_dr = FLD (out_sr); 1338 1.1 christos referenced |= 1 << 0; 1339 1.1 christos referenced |= 1 << 2; 1340 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 1341 1.1 christos } 1342 1.1 christos return cycles; 1343 1.1 christos #undef FLD 1344 1.1 christos } 1345 1.1 christos 1346 1.1 christos static int 1347 1.1 christos model_m32rx_ld24 (SIM_CPU *current_cpu, void *sem_arg) 1348 1.1 christos { 1349 1.1 christos #define FLD(f) abuf->fields.sfmt_ld24.f 1350 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1351 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1352 1.1 christos int cycles = 0; 1353 1.1 christos { 1354 1.1 christos int referenced = 0; 1355 1.1 christos int UNUSED insn_referenced = abuf->written; 1356 1.1 christos INT in_sr = -1; 1357 1.1 christos INT in_dr = -1; 1358 1.1 christos INT out_dr = -1; 1359 1.1 christos out_dr = FLD (out_dr); 1360 1.1 christos referenced |= 1 << 2; 1361 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1362 1.1 christos } 1363 1.1 christos return cycles; 1364 1.1 christos #undef FLD 1365 1.1 christos } 1366 1.1 christos 1367 1.1 christos static int 1368 1.1 christos model_m32rx_ldi8 (SIM_CPU *current_cpu, void *sem_arg) 1369 1.1 christos { 1370 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f 1371 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1372 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1373 1.1 christos int cycles = 0; 1374 1.1 christos { 1375 1.1 christos int referenced = 0; 1376 1.1 christos int UNUSED insn_referenced = abuf->written; 1377 1.1 christos INT in_sr = -1; 1378 1.1 christos INT in_dr = -1; 1379 1.1 christos INT out_dr = -1; 1380 1.1 christos out_dr = FLD (out_dr); 1381 1.1 christos referenced |= 1 << 2; 1382 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1383 1.1 christos } 1384 1.1 christos return cycles; 1385 1.1 christos #undef FLD 1386 1.1 christos } 1387 1.1 christos 1388 1.1 christos static int 1389 1.1 christos model_m32rx_ldi16 (SIM_CPU *current_cpu, void *sem_arg) 1390 1.1 christos { 1391 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1392 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1393 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1394 1.1 christos int cycles = 0; 1395 1.1 christos { 1396 1.1 christos int referenced = 0; 1397 1.1 christos int UNUSED insn_referenced = abuf->written; 1398 1.1 christos INT in_sr = -1; 1399 1.1 christos INT in_dr = -1; 1400 1.1 christos INT out_dr = -1; 1401 1.1 christos out_dr = FLD (out_dr); 1402 1.1 christos referenced |= 1 << 2; 1403 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1404 1.1 christos } 1405 1.1 christos return cycles; 1406 1.1 christos #undef FLD 1407 1.1 christos } 1408 1.1 christos 1409 1.1 christos static int 1410 1.1 christos model_m32rx_lock (SIM_CPU *current_cpu, void *sem_arg) 1411 1.1 christos { 1412 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1413 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1414 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1415 1.1 christos int cycles = 0; 1416 1.1 christos { 1417 1.1 christos int referenced = 0; 1418 1.1 christos int UNUSED insn_referenced = abuf->written; 1419 1.1 christos INT in_sr = 0; 1420 1.1 christos INT out_dr = 0; 1421 1.1 christos in_sr = FLD (in_sr); 1422 1.1 christos out_dr = FLD (out_dr); 1423 1.1 christos referenced |= 1 << 0; 1424 1.1 christos referenced |= 1 << 1; 1425 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 1426 1.1 christos } 1427 1.1 christos return cycles; 1428 1.1 christos #undef FLD 1429 1.1 christos } 1430 1.1 christos 1431 1.1 christos static int 1432 1.1 christos model_m32rx_machi_a (SIM_CPU *current_cpu, void *sem_arg) 1433 1.1 christos { 1434 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1435 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1436 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1437 1.1 christos int cycles = 0; 1438 1.1 christos { 1439 1.1 christos int referenced = 0; 1440 1.1 christos int UNUSED insn_referenced = abuf->written; 1441 1.1 christos INT in_src1 = -1; 1442 1.1 christos INT in_src2 = -1; 1443 1.1 christos in_src1 = FLD (in_src1); 1444 1.1 christos in_src2 = FLD (in_src2); 1445 1.1 christos referenced |= 1 << 0; 1446 1.1 christos referenced |= 1 << 1; 1447 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1448 1.1 christos } 1449 1.1 christos return cycles; 1450 1.1 christos #undef FLD 1451 1.1 christos } 1452 1.1 christos 1453 1.1 christos static int 1454 1.1 christos model_m32rx_maclo_a (SIM_CPU *current_cpu, void *sem_arg) 1455 1.1 christos { 1456 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1457 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1458 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1459 1.1 christos int cycles = 0; 1460 1.1 christos { 1461 1.1 christos int referenced = 0; 1462 1.1 christos int UNUSED insn_referenced = abuf->written; 1463 1.1 christos INT in_src1 = -1; 1464 1.1 christos INT in_src2 = -1; 1465 1.1 christos in_src1 = FLD (in_src1); 1466 1.1 christos in_src2 = FLD (in_src2); 1467 1.1 christos referenced |= 1 << 0; 1468 1.1 christos referenced |= 1 << 1; 1469 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1470 1.1 christos } 1471 1.1 christos return cycles; 1472 1.1 christos #undef FLD 1473 1.1 christos } 1474 1.1 christos 1475 1.1 christos static int 1476 1.1 christos model_m32rx_macwhi_a (SIM_CPU *current_cpu, void *sem_arg) 1477 1.1 christos { 1478 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1479 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1480 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1481 1.1 christos int cycles = 0; 1482 1.1 christos { 1483 1.1 christos int referenced = 0; 1484 1.1 christos int UNUSED insn_referenced = abuf->written; 1485 1.1 christos INT in_src1 = -1; 1486 1.1 christos INT in_src2 = -1; 1487 1.1 christos in_src1 = FLD (in_src1); 1488 1.1 christos in_src2 = FLD (in_src2); 1489 1.1 christos referenced |= 1 << 0; 1490 1.1 christos referenced |= 1 << 1; 1491 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1492 1.1 christos } 1493 1.1 christos return cycles; 1494 1.1 christos #undef FLD 1495 1.1 christos } 1496 1.1 christos 1497 1.1 christos static int 1498 1.1 christos model_m32rx_macwlo_a (SIM_CPU *current_cpu, void *sem_arg) 1499 1.1 christos { 1500 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1501 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1502 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1503 1.1 christos int cycles = 0; 1504 1.1 christos { 1505 1.1 christos int referenced = 0; 1506 1.1 christos int UNUSED insn_referenced = abuf->written; 1507 1.1 christos INT in_src1 = -1; 1508 1.1 christos INT in_src2 = -1; 1509 1.1 christos in_src1 = FLD (in_src1); 1510 1.1 christos in_src2 = FLD (in_src2); 1511 1.1 christos referenced |= 1 << 0; 1512 1.1 christos referenced |= 1 << 1; 1513 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1514 1.1 christos } 1515 1.1 christos return cycles; 1516 1.1 christos #undef FLD 1517 1.1 christos } 1518 1.1 christos 1519 1.1 christos static int 1520 1.1 christos model_m32rx_mul (SIM_CPU *current_cpu, void *sem_arg) 1521 1.1 christos { 1522 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 1523 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1524 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1525 1.1 christos int cycles = 0; 1526 1.1 christos { 1527 1.1 christos int referenced = 0; 1528 1.1 christos int UNUSED insn_referenced = abuf->written; 1529 1.1 christos INT in_sr = -1; 1530 1.1 christos INT in_dr = -1; 1531 1.1 christos INT out_dr = -1; 1532 1.1 christos in_sr = FLD (in_sr); 1533 1.1 christos in_dr = FLD (in_dr); 1534 1.1 christos out_dr = FLD (out_dr); 1535 1.1 christos referenced |= 1 << 0; 1536 1.1 christos referenced |= 1 << 1; 1537 1.1 christos referenced |= 1 << 2; 1538 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1539 1.1 christos } 1540 1.1 christos return cycles; 1541 1.1 christos #undef FLD 1542 1.1 christos } 1543 1.1 christos 1544 1.1 christos static int 1545 1.1 christos model_m32rx_mulhi_a (SIM_CPU *current_cpu, void *sem_arg) 1546 1.1 christos { 1547 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1548 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1549 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1550 1.1 christos int cycles = 0; 1551 1.1 christos { 1552 1.1 christos int referenced = 0; 1553 1.1 christos int UNUSED insn_referenced = abuf->written; 1554 1.1 christos INT in_src1 = -1; 1555 1.1 christos INT in_src2 = -1; 1556 1.1 christos in_src1 = FLD (in_src1); 1557 1.1 christos in_src2 = FLD (in_src2); 1558 1.1 christos referenced |= 1 << 0; 1559 1.1 christos referenced |= 1 << 1; 1560 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1561 1.1 christos } 1562 1.1 christos return cycles; 1563 1.1 christos #undef FLD 1564 1.1 christos } 1565 1.1 christos 1566 1.1 christos static int 1567 1.1 christos model_m32rx_mullo_a (SIM_CPU *current_cpu, void *sem_arg) 1568 1.1 christos { 1569 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1570 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1571 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1572 1.1 christos int cycles = 0; 1573 1.1 christos { 1574 1.1 christos int referenced = 0; 1575 1.1 christos int UNUSED insn_referenced = abuf->written; 1576 1.1 christos INT in_src1 = -1; 1577 1.1 christos INT in_src2 = -1; 1578 1.1 christos in_src1 = FLD (in_src1); 1579 1.1 christos in_src2 = FLD (in_src2); 1580 1.1 christos referenced |= 1 << 0; 1581 1.1 christos referenced |= 1 << 1; 1582 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1583 1.1 christos } 1584 1.1 christos return cycles; 1585 1.1 christos #undef FLD 1586 1.1 christos } 1587 1.1 christos 1588 1.1 christos static int 1589 1.1 christos model_m32rx_mulwhi_a (SIM_CPU *current_cpu, void *sem_arg) 1590 1.1 christos { 1591 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1592 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1593 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1594 1.1 christos int cycles = 0; 1595 1.1 christos { 1596 1.1 christos int referenced = 0; 1597 1.1 christos int UNUSED insn_referenced = abuf->written; 1598 1.1 christos INT in_src1 = -1; 1599 1.1 christos INT in_src2 = -1; 1600 1.1 christos in_src1 = FLD (in_src1); 1601 1.1 christos in_src2 = FLD (in_src2); 1602 1.1 christos referenced |= 1 << 0; 1603 1.1 christos referenced |= 1 << 1; 1604 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1605 1.1 christos } 1606 1.1 christos return cycles; 1607 1.1 christos #undef FLD 1608 1.1 christos } 1609 1.1 christos 1610 1.1 christos static int 1611 1.1 christos model_m32rx_mulwlo_a (SIM_CPU *current_cpu, void *sem_arg) 1612 1.1 christos { 1613 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f 1614 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1615 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1616 1.1 christos int cycles = 0; 1617 1.1 christos { 1618 1.1 christos int referenced = 0; 1619 1.1 christos int UNUSED insn_referenced = abuf->written; 1620 1.1 christos INT in_src1 = -1; 1621 1.1 christos INT in_src2 = -1; 1622 1.1 christos in_src1 = FLD (in_src1); 1623 1.1 christos in_src2 = FLD (in_src2); 1624 1.1 christos referenced |= 1 << 0; 1625 1.1 christos referenced |= 1 << 1; 1626 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1627 1.1 christos } 1628 1.1 christos return cycles; 1629 1.1 christos #undef FLD 1630 1.1 christos } 1631 1.1 christos 1632 1.1 christos static int 1633 1.1 christos model_m32rx_mv (SIM_CPU *current_cpu, void *sem_arg) 1634 1.1 christos { 1635 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1636 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1637 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1638 1.1 christos int cycles = 0; 1639 1.1 christos { 1640 1.1 christos int referenced = 0; 1641 1.1 christos int UNUSED insn_referenced = abuf->written; 1642 1.1 christos INT in_sr = -1; 1643 1.1 christos INT in_dr = -1; 1644 1.1 christos INT out_dr = -1; 1645 1.1 christos in_sr = FLD (in_sr); 1646 1.1 christos out_dr = FLD (out_dr); 1647 1.1 christos referenced |= 1 << 0; 1648 1.1 christos referenced |= 1 << 2; 1649 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1650 1.1 christos } 1651 1.1 christos return cycles; 1652 1.1 christos #undef FLD 1653 1.1 christos } 1654 1.1 christos 1655 1.1 christos static int 1656 1.1 christos model_m32rx_mvfachi_a (SIM_CPU *current_cpu, void *sem_arg) 1657 1.1 christos { 1658 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 1659 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1660 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1661 1.1 christos int cycles = 0; 1662 1.1 christos { 1663 1.1 christos int referenced = 0; 1664 1.1 christos int UNUSED insn_referenced = abuf->written; 1665 1.1 christos INT in_sr = -1; 1666 1.1 christos INT in_dr = -1; 1667 1.1 christos INT out_dr = -1; 1668 1.1 christos out_dr = FLD (out_dr); 1669 1.1 christos referenced |= 1 << 2; 1670 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1671 1.1 christos } 1672 1.1 christos return cycles; 1673 1.1 christos #undef FLD 1674 1.1 christos } 1675 1.1 christos 1676 1.1 christos static int 1677 1.1 christos model_m32rx_mvfaclo_a (SIM_CPU *current_cpu, void *sem_arg) 1678 1.1 christos { 1679 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 1680 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1681 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1682 1.1 christos int cycles = 0; 1683 1.1 christos { 1684 1.1 christos int referenced = 0; 1685 1.1 christos int UNUSED insn_referenced = abuf->written; 1686 1.1 christos INT in_sr = -1; 1687 1.1 christos INT in_dr = -1; 1688 1.1 christos INT out_dr = -1; 1689 1.1 christos out_dr = FLD (out_dr); 1690 1.1 christos referenced |= 1 << 2; 1691 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1692 1.1 christos } 1693 1.1 christos return cycles; 1694 1.1 christos #undef FLD 1695 1.1 christos } 1696 1.1 christos 1697 1.1 christos static int 1698 1.1 christos model_m32rx_mvfacmi_a (SIM_CPU *current_cpu, void *sem_arg) 1699 1.1 christos { 1700 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 1701 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1702 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1703 1.1 christos int cycles = 0; 1704 1.1 christos { 1705 1.1 christos int referenced = 0; 1706 1.1 christos int UNUSED insn_referenced = abuf->written; 1707 1.1 christos INT in_sr = -1; 1708 1.1 christos INT in_dr = -1; 1709 1.1 christos INT out_dr = -1; 1710 1.1 christos out_dr = FLD (out_dr); 1711 1.1 christos referenced |= 1 << 2; 1712 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1713 1.1 christos } 1714 1.1 christos return cycles; 1715 1.1 christos #undef FLD 1716 1.1 christos } 1717 1.1 christos 1718 1.1 christos static int 1719 1.1 christos model_m32rx_mvfc (SIM_CPU *current_cpu, void *sem_arg) 1720 1.1 christos { 1721 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1722 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1723 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1724 1.1 christos int cycles = 0; 1725 1.1 christos { 1726 1.1 christos int referenced = 0; 1727 1.1 christos int UNUSED insn_referenced = abuf->written; 1728 1.1 christos INT in_sr = -1; 1729 1.1 christos INT in_dr = -1; 1730 1.1 christos INT out_dr = -1; 1731 1.1 christos out_dr = FLD (out_dr); 1732 1.1 christos referenced |= 1 << 2; 1733 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1734 1.1 christos } 1735 1.1 christos return cycles; 1736 1.1 christos #undef FLD 1737 1.1 christos } 1738 1.1 christos 1739 1.1 christos static int 1740 1.1 christos model_m32rx_mvtachi_a (SIM_CPU *current_cpu, void *sem_arg) 1741 1.1 christos { 1742 1.1 christos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 1743 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1744 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1745 1.1 christos int cycles = 0; 1746 1.1 christos { 1747 1.1 christos int referenced = 0; 1748 1.1 christos int UNUSED insn_referenced = abuf->written; 1749 1.1 christos INT in_sr = -1; 1750 1.1 christos INT in_dr = -1; 1751 1.1 christos INT out_dr = -1; 1752 1.1 christos in_sr = FLD (in_src1); 1753 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1754 1.1 christos } 1755 1.1 christos return cycles; 1756 1.1 christos #undef FLD 1757 1.1 christos } 1758 1.1 christos 1759 1.1 christos static int 1760 1.1 christos model_m32rx_mvtaclo_a (SIM_CPU *current_cpu, void *sem_arg) 1761 1.1 christos { 1762 1.1 christos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 1763 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1764 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1765 1.1 christos int cycles = 0; 1766 1.1 christos { 1767 1.1 christos int referenced = 0; 1768 1.1 christos int UNUSED insn_referenced = abuf->written; 1769 1.1 christos INT in_sr = -1; 1770 1.1 christos INT in_dr = -1; 1771 1.1 christos INT out_dr = -1; 1772 1.1 christos in_sr = FLD (in_src1); 1773 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1774 1.1 christos } 1775 1.1 christos return cycles; 1776 1.1 christos #undef FLD 1777 1.1 christos } 1778 1.1 christos 1779 1.1 christos static int 1780 1.1 christos model_m32rx_mvtc (SIM_CPU *current_cpu, void *sem_arg) 1781 1.1 christos { 1782 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1783 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1784 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1785 1.1 christos int cycles = 0; 1786 1.1 christos { 1787 1.1 christos int referenced = 0; 1788 1.1 christos int UNUSED insn_referenced = abuf->written; 1789 1.1 christos INT in_sr = -1; 1790 1.1 christos INT in_dr = -1; 1791 1.1 christos INT out_dr = -1; 1792 1.1 christos in_sr = FLD (in_sr); 1793 1.1 christos referenced |= 1 << 0; 1794 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1795 1.1 christos } 1796 1.1 christos return cycles; 1797 1.1 christos #undef FLD 1798 1.1 christos } 1799 1.1 christos 1800 1.1 christos static int 1801 1.1 christos model_m32rx_neg (SIM_CPU *current_cpu, void *sem_arg) 1802 1.1 christos { 1803 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1804 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1805 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1806 1.1 christos int cycles = 0; 1807 1.1 christos { 1808 1.1 christos int referenced = 0; 1809 1.1 christos int UNUSED insn_referenced = abuf->written; 1810 1.1 christos INT in_sr = -1; 1811 1.1 christos INT in_dr = -1; 1812 1.1 christos INT out_dr = -1; 1813 1.1 christos in_sr = FLD (in_sr); 1814 1.1 christos out_dr = FLD (out_dr); 1815 1.1 christos referenced |= 1 << 0; 1816 1.1 christos referenced |= 1 << 2; 1817 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1818 1.1 christos } 1819 1.1 christos return cycles; 1820 1.1 christos #undef FLD 1821 1.1 christos } 1822 1.1 christos 1823 1.1 christos static int 1824 1.1 christos model_m32rx_nop (SIM_CPU *current_cpu, void *sem_arg) 1825 1.1 christos { 1826 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 1827 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1828 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1829 1.1 christos int cycles = 0; 1830 1.1 christos { 1831 1.1 christos int referenced = 0; 1832 1.1 christos int UNUSED insn_referenced = abuf->written; 1833 1.1 christos INT in_sr = -1; 1834 1.1 christos INT in_dr = -1; 1835 1.1 christos INT out_dr = -1; 1836 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1837 1.1 christos } 1838 1.1 christos return cycles; 1839 1.1 christos #undef FLD 1840 1.1 christos } 1841 1.1 christos 1842 1.1 christos static int 1843 1.1 christos model_m32rx_not (SIM_CPU *current_cpu, void *sem_arg) 1844 1.1 christos { 1845 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1846 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1847 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1848 1.1 christos int cycles = 0; 1849 1.1 christos { 1850 1.1 christos int referenced = 0; 1851 1.1 christos int UNUSED insn_referenced = abuf->written; 1852 1.1 christos INT in_sr = -1; 1853 1.1 christos INT in_dr = -1; 1854 1.1 christos INT out_dr = -1; 1855 1.1 christos in_sr = FLD (in_sr); 1856 1.1 christos out_dr = FLD (out_dr); 1857 1.1 christos referenced |= 1 << 0; 1858 1.1 christos referenced |= 1 << 2; 1859 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1860 1.1 christos } 1861 1.1 christos return cycles; 1862 1.1 christos #undef FLD 1863 1.1 christos } 1864 1.1 christos 1865 1.1 christos static int 1866 1.1 christos model_m32rx_rac_dsi (SIM_CPU *current_cpu, void *sem_arg) 1867 1.1 christos { 1868 1.1 christos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 1869 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1870 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1871 1.1 christos int cycles = 0; 1872 1.1 christos { 1873 1.1 christos int referenced = 0; 1874 1.1 christos int UNUSED insn_referenced = abuf->written; 1875 1.1 christos INT in_src1 = -1; 1876 1.1 christos INT in_src2 = -1; 1877 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1878 1.1 christos } 1879 1.1 christos return cycles; 1880 1.1 christos #undef FLD 1881 1.1 christos } 1882 1.1 christos 1883 1.1 christos static int 1884 1.1 christos model_m32rx_rach_dsi (SIM_CPU *current_cpu, void *sem_arg) 1885 1.1 christos { 1886 1.1 christos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 1887 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1888 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1889 1.1 christos int cycles = 0; 1890 1.1 christos { 1891 1.1 christos int referenced = 0; 1892 1.1 christos int UNUSED insn_referenced = abuf->written; 1893 1.1 christos INT in_src1 = -1; 1894 1.1 christos INT in_src2 = -1; 1895 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 1896 1.1 christos } 1897 1.1 christos return cycles; 1898 1.1 christos #undef FLD 1899 1.1 christos } 1900 1.1 christos 1901 1.1 christos static int 1902 1.1 christos model_m32rx_rte (SIM_CPU *current_cpu, void *sem_arg) 1903 1.1 christos { 1904 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 1905 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1906 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1907 1.1 christos int cycles = 0; 1908 1.1 christos { 1909 1.1 christos int referenced = 0; 1910 1.1 christos int UNUSED insn_referenced = abuf->written; 1911 1.1 christos INT in_sr = -1; 1912 1.1 christos INT in_dr = -1; 1913 1.1 christos INT out_dr = -1; 1914 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1915 1.1 christos } 1916 1.1 christos return cycles; 1917 1.1 christos #undef FLD 1918 1.1 christos } 1919 1.1 christos 1920 1.1 christos static int 1921 1.1 christos model_m32rx_seth (SIM_CPU *current_cpu, void *sem_arg) 1922 1.1 christos { 1923 1.1 christos #define FLD(f) abuf->fields.sfmt_seth.f 1924 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1925 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1926 1.1 christos int cycles = 0; 1927 1.1 christos { 1928 1.1 christos int referenced = 0; 1929 1.1 christos int UNUSED insn_referenced = abuf->written; 1930 1.1 christos INT in_sr = -1; 1931 1.1 christos INT in_dr = -1; 1932 1.1 christos INT out_dr = -1; 1933 1.1 christos out_dr = FLD (out_dr); 1934 1.1 christos referenced |= 1 << 2; 1935 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1936 1.1 christos } 1937 1.1 christos return cycles; 1938 1.1 christos #undef FLD 1939 1.1 christos } 1940 1.1 christos 1941 1.1 christos static int 1942 1.1 christos model_m32rx_sll (SIM_CPU *current_cpu, void *sem_arg) 1943 1.1 christos { 1944 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 1945 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1946 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1947 1.1 christos int cycles = 0; 1948 1.1 christos { 1949 1.1 christos int referenced = 0; 1950 1.1 christos int UNUSED insn_referenced = abuf->written; 1951 1.1 christos INT in_sr = -1; 1952 1.1 christos INT in_dr = -1; 1953 1.1 christos INT out_dr = -1; 1954 1.1 christos in_sr = FLD (in_sr); 1955 1.1 christos in_dr = FLD (in_dr); 1956 1.1 christos out_dr = FLD (out_dr); 1957 1.1 christos referenced |= 1 << 0; 1958 1.1 christos referenced |= 1 << 1; 1959 1.1 christos referenced |= 1 << 2; 1960 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1961 1.1 christos } 1962 1.1 christos return cycles; 1963 1.1 christos #undef FLD 1964 1.1 christos } 1965 1.1 christos 1966 1.1 christos static int 1967 1.1 christos model_m32rx_sll3 (SIM_CPU *current_cpu, void *sem_arg) 1968 1.1 christos { 1969 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 1970 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1971 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1972 1.1 christos int cycles = 0; 1973 1.1 christos { 1974 1.1 christos int referenced = 0; 1975 1.1 christos int UNUSED insn_referenced = abuf->written; 1976 1.1 christos INT in_sr = -1; 1977 1.1 christos INT in_dr = -1; 1978 1.1 christos INT out_dr = -1; 1979 1.1 christos in_sr = FLD (in_sr); 1980 1.1 christos out_dr = FLD (out_dr); 1981 1.1 christos referenced |= 1 << 0; 1982 1.1 christos referenced |= 1 << 2; 1983 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1984 1.1 christos } 1985 1.1 christos return cycles; 1986 1.1 christos #undef FLD 1987 1.1 christos } 1988 1.1 christos 1989 1.1 christos static int 1990 1.1 christos model_m32rx_slli (SIM_CPU *current_cpu, void *sem_arg) 1991 1.1 christos { 1992 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f 1993 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1994 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 1995 1.1 christos int cycles = 0; 1996 1.1 christos { 1997 1.1 christos int referenced = 0; 1998 1.1 christos int UNUSED insn_referenced = abuf->written; 1999 1.1 christos INT in_sr = -1; 2000 1.1 christos INT in_dr = -1; 2001 1.1 christos INT out_dr = -1; 2002 1.1 christos in_dr = FLD (in_dr); 2003 1.1 christos out_dr = FLD (out_dr); 2004 1.1 christos referenced |= 1 << 1; 2005 1.1 christos referenced |= 1 << 2; 2006 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2007 1.1 christos } 2008 1.1 christos return cycles; 2009 1.1 christos #undef FLD 2010 1.1 christos } 2011 1.1 christos 2012 1.1 christos static int 2013 1.1 christos model_m32rx_sra (SIM_CPU *current_cpu, void *sem_arg) 2014 1.1 christos { 2015 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 2016 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2017 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2018 1.1 christos int cycles = 0; 2019 1.1 christos { 2020 1.1 christos int referenced = 0; 2021 1.1 christos int UNUSED insn_referenced = abuf->written; 2022 1.1 christos INT in_sr = -1; 2023 1.1 christos INT in_dr = -1; 2024 1.1 christos INT out_dr = -1; 2025 1.1 christos in_sr = FLD (in_sr); 2026 1.1 christos in_dr = FLD (in_dr); 2027 1.1 christos out_dr = FLD (out_dr); 2028 1.1 christos referenced |= 1 << 0; 2029 1.1 christos referenced |= 1 << 1; 2030 1.1 christos referenced |= 1 << 2; 2031 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2032 1.1 christos } 2033 1.1 christos return cycles; 2034 1.1 christos #undef FLD 2035 1.1 christos } 2036 1.1 christos 2037 1.1 christos static int 2038 1.1 christos model_m32rx_sra3 (SIM_CPU *current_cpu, void *sem_arg) 2039 1.1 christos { 2040 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 2041 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2042 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2043 1.1 christos int cycles = 0; 2044 1.1 christos { 2045 1.1 christos int referenced = 0; 2046 1.1 christos int UNUSED insn_referenced = abuf->written; 2047 1.1 christos INT in_sr = -1; 2048 1.1 christos INT in_dr = -1; 2049 1.1 christos INT out_dr = -1; 2050 1.1 christos in_sr = FLD (in_sr); 2051 1.1 christos out_dr = FLD (out_dr); 2052 1.1 christos referenced |= 1 << 0; 2053 1.1 christos referenced |= 1 << 2; 2054 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2055 1.1 christos } 2056 1.1 christos return cycles; 2057 1.1 christos #undef FLD 2058 1.1 christos } 2059 1.1 christos 2060 1.1 christos static int 2061 1.1 christos model_m32rx_srai (SIM_CPU *current_cpu, void *sem_arg) 2062 1.1 christos { 2063 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f 2064 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2065 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2066 1.1 christos int cycles = 0; 2067 1.1 christos { 2068 1.1 christos int referenced = 0; 2069 1.1 christos int UNUSED insn_referenced = abuf->written; 2070 1.1 christos INT in_sr = -1; 2071 1.1 christos INT in_dr = -1; 2072 1.1 christos INT out_dr = -1; 2073 1.1 christos in_dr = FLD (in_dr); 2074 1.1 christos out_dr = FLD (out_dr); 2075 1.1 christos referenced |= 1 << 1; 2076 1.1 christos referenced |= 1 << 2; 2077 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2078 1.1 christos } 2079 1.1 christos return cycles; 2080 1.1 christos #undef FLD 2081 1.1 christos } 2082 1.1 christos 2083 1.1 christos static int 2084 1.1 christos model_m32rx_srl (SIM_CPU *current_cpu, void *sem_arg) 2085 1.1 christos { 2086 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 2087 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2088 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2089 1.1 christos int cycles = 0; 2090 1.1 christos { 2091 1.1 christos int referenced = 0; 2092 1.1 christos int UNUSED insn_referenced = abuf->written; 2093 1.1 christos INT in_sr = -1; 2094 1.1 christos INT in_dr = -1; 2095 1.1 christos INT out_dr = -1; 2096 1.1 christos in_sr = FLD (in_sr); 2097 1.1 christos in_dr = FLD (in_dr); 2098 1.1 christos out_dr = FLD (out_dr); 2099 1.1 christos referenced |= 1 << 0; 2100 1.1 christos referenced |= 1 << 1; 2101 1.1 christos referenced |= 1 << 2; 2102 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2103 1.1 christos } 2104 1.1 christos return cycles; 2105 1.1 christos #undef FLD 2106 1.1 christos } 2107 1.1 christos 2108 1.1 christos static int 2109 1.1 christos model_m32rx_srl3 (SIM_CPU *current_cpu, void *sem_arg) 2110 1.1 christos { 2111 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f 2112 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2113 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2114 1.1 christos int cycles = 0; 2115 1.1 christos { 2116 1.1 christos int referenced = 0; 2117 1.1 christos int UNUSED insn_referenced = abuf->written; 2118 1.1 christos INT in_sr = -1; 2119 1.1 christos INT in_dr = -1; 2120 1.1 christos INT out_dr = -1; 2121 1.1 christos in_sr = FLD (in_sr); 2122 1.1 christos out_dr = FLD (out_dr); 2123 1.1 christos referenced |= 1 << 0; 2124 1.1 christos referenced |= 1 << 2; 2125 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2126 1.1 christos } 2127 1.1 christos return cycles; 2128 1.1 christos #undef FLD 2129 1.1 christos } 2130 1.1 christos 2131 1.1 christos static int 2132 1.1 christos model_m32rx_srli (SIM_CPU *current_cpu, void *sem_arg) 2133 1.1 christos { 2134 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f 2135 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2136 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2137 1.1 christos int cycles = 0; 2138 1.1 christos { 2139 1.1 christos int referenced = 0; 2140 1.1 christos int UNUSED insn_referenced = abuf->written; 2141 1.1 christos INT in_sr = -1; 2142 1.1 christos INT in_dr = -1; 2143 1.1 christos INT out_dr = -1; 2144 1.1 christos in_dr = FLD (in_dr); 2145 1.1 christos out_dr = FLD (out_dr); 2146 1.1 christos referenced |= 1 << 1; 2147 1.1 christos referenced |= 1 << 2; 2148 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2149 1.1 christos } 2150 1.1 christos return cycles; 2151 1.1 christos #undef FLD 2152 1.1 christos } 2153 1.1 christos 2154 1.1 christos static int 2155 1.1 christos model_m32rx_st (SIM_CPU *current_cpu, void *sem_arg) 2156 1.1 christos { 2157 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2158 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2159 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2160 1.1 christos int cycles = 0; 2161 1.1 christos { 2162 1.1 christos int referenced = 0; 2163 1.1 christos int UNUSED insn_referenced = abuf->written; 2164 1.1 christos INT in_src1 = 0; 2165 1.1 christos INT in_src2 = 0; 2166 1.1 christos in_src1 = FLD (in_src1); 2167 1.1 christos in_src2 = FLD (in_src2); 2168 1.1 christos referenced |= 1 << 0; 2169 1.1 christos referenced |= 1 << 1; 2170 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2171 1.1 christos } 2172 1.1 christos return cycles; 2173 1.1 christos #undef FLD 2174 1.1 christos } 2175 1.1 christos 2176 1.1 christos static int 2177 1.1 christos model_m32rx_st_d (SIM_CPU *current_cpu, void *sem_arg) 2178 1.1 christos { 2179 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 2180 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2181 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2182 1.1 christos int cycles = 0; 2183 1.1 christos { 2184 1.1 christos int referenced = 0; 2185 1.1 christos int UNUSED insn_referenced = abuf->written; 2186 1.1 christos INT in_src1 = 0; 2187 1.1 christos INT in_src2 = 0; 2188 1.1 christos in_src1 = FLD (in_src1); 2189 1.1 christos in_src2 = FLD (in_src2); 2190 1.1 christos referenced |= 1 << 0; 2191 1.1 christos referenced |= 1 << 1; 2192 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2193 1.1 christos } 2194 1.1 christos return cycles; 2195 1.1 christos #undef FLD 2196 1.1 christos } 2197 1.1 christos 2198 1.1 christos static int 2199 1.1 christos model_m32rx_stb (SIM_CPU *current_cpu, void *sem_arg) 2200 1.1 christos { 2201 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2202 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2203 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2204 1.1 christos int cycles = 0; 2205 1.1 christos { 2206 1.1 christos int referenced = 0; 2207 1.1 christos int UNUSED insn_referenced = abuf->written; 2208 1.1 christos INT in_src1 = 0; 2209 1.1 christos INT in_src2 = 0; 2210 1.1 christos in_src1 = FLD (in_src1); 2211 1.1 christos in_src2 = FLD (in_src2); 2212 1.1 christos referenced |= 1 << 0; 2213 1.1 christos referenced |= 1 << 1; 2214 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2215 1.1 christos } 2216 1.1 christos return cycles; 2217 1.1 christos #undef FLD 2218 1.1 christos } 2219 1.1 christos 2220 1.1 christos static int 2221 1.1 christos model_m32rx_stb_d (SIM_CPU *current_cpu, void *sem_arg) 2222 1.1 christos { 2223 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 2224 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2225 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2226 1.1 christos int cycles = 0; 2227 1.1 christos { 2228 1.1 christos int referenced = 0; 2229 1.1 christos int UNUSED insn_referenced = abuf->written; 2230 1.1 christos INT in_src1 = 0; 2231 1.1 christos INT in_src2 = 0; 2232 1.1 christos in_src1 = FLD (in_src1); 2233 1.1 christos in_src2 = FLD (in_src2); 2234 1.1 christos referenced |= 1 << 0; 2235 1.1 christos referenced |= 1 << 1; 2236 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2237 1.1 christos } 2238 1.1 christos return cycles; 2239 1.1 christos #undef FLD 2240 1.1 christos } 2241 1.1 christos 2242 1.1 christos static int 2243 1.1 christos model_m32rx_sth (SIM_CPU *current_cpu, void *sem_arg) 2244 1.1 christos { 2245 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2246 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2247 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2248 1.1 christos int cycles = 0; 2249 1.1 christos { 2250 1.1 christos int referenced = 0; 2251 1.1 christos int UNUSED insn_referenced = abuf->written; 2252 1.1 christos INT in_src1 = 0; 2253 1.1 christos INT in_src2 = 0; 2254 1.1 christos in_src1 = FLD (in_src1); 2255 1.1 christos in_src2 = FLD (in_src2); 2256 1.1 christos referenced |= 1 << 0; 2257 1.1 christos referenced |= 1 << 1; 2258 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2259 1.1 christos } 2260 1.1 christos return cycles; 2261 1.1 christos #undef FLD 2262 1.1 christos } 2263 1.1 christos 2264 1.1 christos static int 2265 1.1 christos model_m32rx_sth_d (SIM_CPU *current_cpu, void *sem_arg) 2266 1.1 christos { 2267 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f 2268 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2269 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2270 1.1 christos int cycles = 0; 2271 1.1 christos { 2272 1.1 christos int referenced = 0; 2273 1.1 christos int UNUSED insn_referenced = abuf->written; 2274 1.1 christos INT in_src1 = 0; 2275 1.1 christos INT in_src2 = 0; 2276 1.1 christos in_src1 = FLD (in_src1); 2277 1.1 christos in_src2 = FLD (in_src2); 2278 1.1 christos referenced |= 1 << 0; 2279 1.1 christos referenced |= 1 << 1; 2280 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2281 1.1 christos } 2282 1.1 christos return cycles; 2283 1.1 christos #undef FLD 2284 1.1 christos } 2285 1.1 christos 2286 1.1 christos static int 2287 1.1 christos model_m32rx_st_plus (SIM_CPU *current_cpu, void *sem_arg) 2288 1.1 christos { 2289 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2290 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2291 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2292 1.1 christos int cycles = 0; 2293 1.1 christos { 2294 1.1 christos int referenced = 0; 2295 1.1 christos int UNUSED insn_referenced = abuf->written; 2296 1.1 christos INT in_src1 = 0; 2297 1.1 christos INT in_src2 = 0; 2298 1.1 christos in_src1 = FLD (in_src1); 2299 1.1 christos in_src2 = FLD (in_src2); 2300 1.1 christos referenced |= 1 << 0; 2301 1.1 christos referenced |= 1 << 1; 2302 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2303 1.1 christos } 2304 1.1 christos { 2305 1.1 christos int referenced = 0; 2306 1.1 christos int UNUSED insn_referenced = abuf->written; 2307 1.1 christos INT in_sr = -1; 2308 1.1 christos INT in_dr = -1; 2309 1.1 christos INT out_dr = -1; 2310 1.1 christos in_dr = FLD (in_src2); 2311 1.1 christos out_dr = FLD (out_src2); 2312 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 2313 1.1 christos } 2314 1.1 christos return cycles; 2315 1.1 christos #undef FLD 2316 1.1 christos } 2317 1.1 christos 2318 1.1 christos static int 2319 1.1 christos model_m32rx_sth_plus (SIM_CPU *current_cpu, void *sem_arg) 2320 1.1 christos { 2321 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2322 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2323 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2324 1.1 christos int cycles = 0; 2325 1.1 christos { 2326 1.1 christos int referenced = 0; 2327 1.1 christos int UNUSED insn_referenced = abuf->written; 2328 1.1 christos INT in_src1 = 0; 2329 1.1 christos INT in_src2 = 0; 2330 1.1 christos in_src1 = FLD (in_src1); 2331 1.1 christos in_src2 = FLD (in_src2); 2332 1.1 christos referenced |= 1 << 0; 2333 1.1 christos referenced |= 1 << 1; 2334 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2335 1.1 christos } 2336 1.1 christos { 2337 1.1 christos int referenced = 0; 2338 1.1 christos int UNUSED insn_referenced = abuf->written; 2339 1.1 christos INT in_sr = -1; 2340 1.1 christos INT in_dr = -1; 2341 1.1 christos INT out_dr = -1; 2342 1.1 christos in_dr = FLD (in_src2); 2343 1.1 christos out_dr = FLD (out_src2); 2344 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 2345 1.1 christos } 2346 1.1 christos return cycles; 2347 1.1 christos #undef FLD 2348 1.1 christos } 2349 1.1 christos 2350 1.1 christos static int 2351 1.1 christos model_m32rx_stb_plus (SIM_CPU *current_cpu, void *sem_arg) 2352 1.1 christos { 2353 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2354 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2355 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2356 1.1 christos int cycles = 0; 2357 1.1 christos { 2358 1.1 christos int referenced = 0; 2359 1.1 christos int UNUSED insn_referenced = abuf->written; 2360 1.1 christos INT in_src1 = 0; 2361 1.1 christos INT in_src2 = 0; 2362 1.1 christos in_src1 = FLD (in_src1); 2363 1.1 christos in_src2 = FLD (in_src2); 2364 1.1 christos referenced |= 1 << 0; 2365 1.1 christos referenced |= 1 << 1; 2366 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2367 1.1 christos } 2368 1.1 christos { 2369 1.1 christos int referenced = 0; 2370 1.1 christos int UNUSED insn_referenced = abuf->written; 2371 1.1 christos INT in_sr = -1; 2372 1.1 christos INT in_dr = -1; 2373 1.1 christos INT out_dr = -1; 2374 1.1 christos in_dr = FLD (in_src2); 2375 1.1 christos out_dr = FLD (out_src2); 2376 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 2377 1.1 christos } 2378 1.1 christos return cycles; 2379 1.1 christos #undef FLD 2380 1.1 christos } 2381 1.1 christos 2382 1.1 christos static int 2383 1.1 christos model_m32rx_st_minus (SIM_CPU *current_cpu, void *sem_arg) 2384 1.1 christos { 2385 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2386 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2387 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2388 1.1 christos int cycles = 0; 2389 1.1 christos { 2390 1.1 christos int referenced = 0; 2391 1.1 christos int UNUSED insn_referenced = abuf->written; 2392 1.1 christos INT in_src1 = 0; 2393 1.1 christos INT in_src2 = 0; 2394 1.1 christos in_src1 = FLD (in_src1); 2395 1.1 christos in_src2 = FLD (in_src2); 2396 1.1 christos referenced |= 1 << 0; 2397 1.1 christos referenced |= 1 << 1; 2398 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2399 1.1 christos } 2400 1.1 christos { 2401 1.1 christos int referenced = 0; 2402 1.1 christos int UNUSED insn_referenced = abuf->written; 2403 1.1 christos INT in_sr = -1; 2404 1.1 christos INT in_dr = -1; 2405 1.1 christos INT out_dr = -1; 2406 1.1 christos in_dr = FLD (in_src2); 2407 1.1 christos out_dr = FLD (out_src2); 2408 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 2409 1.1 christos } 2410 1.1 christos return cycles; 2411 1.1 christos #undef FLD 2412 1.1 christos } 2413 1.1 christos 2414 1.1 christos static int 2415 1.1 christos model_m32rx_sub (SIM_CPU *current_cpu, void *sem_arg) 2416 1.1 christos { 2417 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 2418 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2419 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2420 1.1 christos int cycles = 0; 2421 1.1 christos { 2422 1.1 christos int referenced = 0; 2423 1.1 christos int UNUSED insn_referenced = abuf->written; 2424 1.1 christos INT in_sr = -1; 2425 1.1 christos INT in_dr = -1; 2426 1.1 christos INT out_dr = -1; 2427 1.1 christos in_sr = FLD (in_sr); 2428 1.1 christos in_dr = FLD (in_dr); 2429 1.1 christos out_dr = FLD (out_dr); 2430 1.1 christos referenced |= 1 << 0; 2431 1.1 christos referenced |= 1 << 1; 2432 1.1 christos referenced |= 1 << 2; 2433 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2434 1.1 christos } 2435 1.1 christos return cycles; 2436 1.1 christos #undef FLD 2437 1.1 christos } 2438 1.1 christos 2439 1.1 christos static int 2440 1.1 christos model_m32rx_subv (SIM_CPU *current_cpu, void *sem_arg) 2441 1.1 christos { 2442 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 2443 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2444 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2445 1.1 christos int cycles = 0; 2446 1.1 christos { 2447 1.1 christos int referenced = 0; 2448 1.1 christos int UNUSED insn_referenced = abuf->written; 2449 1.1 christos INT in_sr = -1; 2450 1.1 christos INT in_dr = -1; 2451 1.1 christos INT out_dr = -1; 2452 1.1 christos in_sr = FLD (in_sr); 2453 1.1 christos in_dr = FLD (in_dr); 2454 1.1 christos out_dr = FLD (out_dr); 2455 1.1 christos referenced |= 1 << 0; 2456 1.1 christos referenced |= 1 << 1; 2457 1.1 christos referenced |= 1 << 2; 2458 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2459 1.1 christos } 2460 1.1 christos return cycles; 2461 1.1 christos #undef FLD 2462 1.1 christos } 2463 1.1 christos 2464 1.1 christos static int 2465 1.1 christos model_m32rx_subx (SIM_CPU *current_cpu, void *sem_arg) 2466 1.1 christos { 2467 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f 2468 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2469 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2470 1.1 christos int cycles = 0; 2471 1.1 christos { 2472 1.1 christos int referenced = 0; 2473 1.1 christos int UNUSED insn_referenced = abuf->written; 2474 1.1 christos INT in_sr = -1; 2475 1.1 christos INT in_dr = -1; 2476 1.1 christos INT out_dr = -1; 2477 1.1 christos in_sr = FLD (in_sr); 2478 1.1 christos in_dr = FLD (in_dr); 2479 1.1 christos out_dr = FLD (out_dr); 2480 1.1 christos referenced |= 1 << 0; 2481 1.1 christos referenced |= 1 << 1; 2482 1.1 christos referenced |= 1 << 2; 2483 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2484 1.1 christos } 2485 1.1 christos return cycles; 2486 1.1 christos #undef FLD 2487 1.1 christos } 2488 1.1 christos 2489 1.1 christos static int 2490 1.1 christos model_m32rx_trap (SIM_CPU *current_cpu, void *sem_arg) 2491 1.1 christos { 2492 1.1 christos #define FLD(f) abuf->fields.sfmt_trap.f 2493 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2494 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2495 1.1 christos int cycles = 0; 2496 1.1 christos { 2497 1.1 christos int referenced = 0; 2498 1.1 christos int UNUSED insn_referenced = abuf->written; 2499 1.1 christos INT in_sr = -1; 2500 1.1 christos INT in_dr = -1; 2501 1.1 christos INT out_dr = -1; 2502 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2503 1.1 christos } 2504 1.1 christos return cycles; 2505 1.1 christos #undef FLD 2506 1.1 christos } 2507 1.1 christos 2508 1.1 christos static int 2509 1.1 christos model_m32rx_unlock (SIM_CPU *current_cpu, void *sem_arg) 2510 1.1 christos { 2511 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2512 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2513 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2514 1.1 christos int cycles = 0; 2515 1.1 christos { 2516 1.1 christos int referenced = 0; 2517 1.1 christos int UNUSED insn_referenced = abuf->written; 2518 1.1 christos INT in_sr = 0; 2519 1.1 christos INT out_dr = 0; 2520 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 2521 1.1 christos } 2522 1.1 christos return cycles; 2523 1.1 christos #undef FLD 2524 1.1 christos } 2525 1.1 christos 2526 1.1 christos static int 2527 1.1 christos model_m32rx_satb (SIM_CPU *current_cpu, void *sem_arg) 2528 1.1 christos { 2529 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2530 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2531 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2532 1.1 christos int cycles = 0; 2533 1.1 christos { 2534 1.1 christos int referenced = 0; 2535 1.1 christos int UNUSED insn_referenced = abuf->written; 2536 1.1 christos INT in_sr = -1; 2537 1.1 christos INT in_dr = -1; 2538 1.1 christos INT out_dr = -1; 2539 1.1 christos in_sr = FLD (in_sr); 2540 1.1 christos out_dr = FLD (out_dr); 2541 1.1 christos referenced |= 1 << 0; 2542 1.1 christos referenced |= 1 << 2; 2543 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2544 1.1 christos } 2545 1.1 christos return cycles; 2546 1.1 christos #undef FLD 2547 1.1 christos } 2548 1.1 christos 2549 1.1 christos static int 2550 1.1 christos model_m32rx_sath (SIM_CPU *current_cpu, void *sem_arg) 2551 1.1 christos { 2552 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2553 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2554 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2555 1.1 christos int cycles = 0; 2556 1.1 christos { 2557 1.1 christos int referenced = 0; 2558 1.1 christos int UNUSED insn_referenced = abuf->written; 2559 1.1 christos INT in_sr = -1; 2560 1.1 christos INT in_dr = -1; 2561 1.1 christos INT out_dr = -1; 2562 1.1 christos in_sr = FLD (in_sr); 2563 1.1 christos out_dr = FLD (out_dr); 2564 1.1 christos referenced |= 1 << 0; 2565 1.1 christos referenced |= 1 << 2; 2566 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2567 1.1 christos } 2568 1.1 christos return cycles; 2569 1.1 christos #undef FLD 2570 1.1 christos } 2571 1.1 christos 2572 1.1 christos static int 2573 1.1 christos model_m32rx_sat (SIM_CPU *current_cpu, void *sem_arg) 2574 1.1 christos { 2575 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2576 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2577 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2578 1.1 christos int cycles = 0; 2579 1.1 christos { 2580 1.1 christos int referenced = 0; 2581 1.1 christos int UNUSED insn_referenced = abuf->written; 2582 1.1 christos INT in_sr = -1; 2583 1.1 christos INT in_dr = -1; 2584 1.1 christos INT out_dr = -1; 2585 1.1 christos in_sr = FLD (in_sr); 2586 1.1 christos out_dr = FLD (out_dr); 2587 1.1 christos if (insn_referenced & (1 << 1)) referenced |= 1 << 0; 2588 1.1 christos referenced |= 1 << 2; 2589 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2590 1.1 christos } 2591 1.1 christos return cycles; 2592 1.1 christos #undef FLD 2593 1.1 christos } 2594 1.1 christos 2595 1.1 christos static int 2596 1.1 christos model_m32rx_pcmpbz (SIM_CPU *current_cpu, void *sem_arg) 2597 1.1 christos { 2598 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2599 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2600 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2601 1.1 christos int cycles = 0; 2602 1.1 christos { 2603 1.1 christos int referenced = 0; 2604 1.1 christos int UNUSED insn_referenced = abuf->written; 2605 1.1 christos INT in_src1 = -1; 2606 1.1 christos INT in_src2 = -1; 2607 1.1 christos in_src2 = FLD (in_src2); 2608 1.1 christos referenced |= 1 << 1; 2609 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2610 1.1 christos } 2611 1.1 christos return cycles; 2612 1.1 christos #undef FLD 2613 1.1 christos } 2614 1.1 christos 2615 1.1 christos static int 2616 1.1 christos model_m32rx_sadd (SIM_CPU *current_cpu, void *sem_arg) 2617 1.1 christos { 2618 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2619 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2620 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2621 1.1 christos int cycles = 0; 2622 1.1 christos { 2623 1.1 christos int referenced = 0; 2624 1.1 christos int UNUSED insn_referenced = abuf->written; 2625 1.1 christos INT in_src1 = -1; 2626 1.1 christos INT in_src2 = -1; 2627 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2628 1.1 christos } 2629 1.1 christos return cycles; 2630 1.1 christos #undef FLD 2631 1.1 christos } 2632 1.1 christos 2633 1.1 christos static int 2634 1.1 christos model_m32rx_macwu1 (SIM_CPU *current_cpu, void *sem_arg) 2635 1.1 christos { 2636 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2637 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2638 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2639 1.1 christos int cycles = 0; 2640 1.1 christos { 2641 1.1 christos int referenced = 0; 2642 1.1 christos int UNUSED insn_referenced = abuf->written; 2643 1.1 christos INT in_src1 = -1; 2644 1.1 christos INT in_src2 = -1; 2645 1.1 christos in_src1 = FLD (in_src1); 2646 1.1 christos in_src2 = FLD (in_src2); 2647 1.1 christos referenced |= 1 << 0; 2648 1.1 christos referenced |= 1 << 1; 2649 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2650 1.1 christos } 2651 1.1 christos return cycles; 2652 1.1 christos #undef FLD 2653 1.1 christos } 2654 1.1 christos 2655 1.1 christos static int 2656 1.1 christos model_m32rx_msblo (SIM_CPU *current_cpu, void *sem_arg) 2657 1.1 christos { 2658 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2659 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2660 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2661 1.1 christos int cycles = 0; 2662 1.1 christos { 2663 1.1 christos int referenced = 0; 2664 1.1 christos int UNUSED insn_referenced = abuf->written; 2665 1.1 christos INT in_src1 = -1; 2666 1.1 christos INT in_src2 = -1; 2667 1.1 christos in_src1 = FLD (in_src1); 2668 1.1 christos in_src2 = FLD (in_src2); 2669 1.1 christos referenced |= 1 << 0; 2670 1.1 christos referenced |= 1 << 1; 2671 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2672 1.1 christos } 2673 1.1 christos return cycles; 2674 1.1 christos #undef FLD 2675 1.1 christos } 2676 1.1 christos 2677 1.1 christos static int 2678 1.1 christos model_m32rx_mulwu1 (SIM_CPU *current_cpu, void *sem_arg) 2679 1.1 christos { 2680 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2681 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2682 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2683 1.1 christos int cycles = 0; 2684 1.1 christos { 2685 1.1 christos int referenced = 0; 2686 1.1 christos int UNUSED insn_referenced = abuf->written; 2687 1.1 christos INT in_src1 = -1; 2688 1.1 christos INT in_src2 = -1; 2689 1.1 christos in_src1 = FLD (in_src1); 2690 1.1 christos in_src2 = FLD (in_src2); 2691 1.1 christos referenced |= 1 << 0; 2692 1.1 christos referenced |= 1 << 1; 2693 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2694 1.1 christos } 2695 1.1 christos return cycles; 2696 1.1 christos #undef FLD 2697 1.1 christos } 2698 1.1 christos 2699 1.1 christos static int 2700 1.1 christos model_m32rx_maclh1 (SIM_CPU *current_cpu, void *sem_arg) 2701 1.1 christos { 2702 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f 2703 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2704 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2705 1.1 christos int cycles = 0; 2706 1.1 christos { 2707 1.1 christos int referenced = 0; 2708 1.1 christos int UNUSED insn_referenced = abuf->written; 2709 1.1 christos INT in_src1 = -1; 2710 1.1 christos INT in_src2 = -1; 2711 1.1 christos in_src1 = FLD (in_src1); 2712 1.1 christos in_src2 = FLD (in_src2); 2713 1.1 christos referenced |= 1 << 0; 2714 1.1 christos referenced |= 1 << 1; 2715 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 2716 1.1 christos } 2717 1.1 christos return cycles; 2718 1.1 christos #undef FLD 2719 1.1 christos } 2720 1.1 christos 2721 1.1 christos static int 2722 1.1 christos model_m32rx_sc (SIM_CPU *current_cpu, void *sem_arg) 2723 1.1 christos { 2724 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2725 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2726 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2727 1.1 christos int cycles = 0; 2728 1.1 christos { 2729 1.1 christos int referenced = 0; 2730 1.1 christos int UNUSED insn_referenced = abuf->written; 2731 1.1 christos INT in_sr = -1; 2732 1.1 christos INT in_dr = -1; 2733 1.1 christos INT out_dr = -1; 2734 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2735 1.1 christos } 2736 1.1 christos return cycles; 2737 1.1 christos #undef FLD 2738 1.1 christos } 2739 1.1 christos 2740 1.1 christos static int 2741 1.1 christos model_m32rx_snc (SIM_CPU *current_cpu, void *sem_arg) 2742 1.1 christos { 2743 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f 2744 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2745 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2746 1.1 christos int cycles = 0; 2747 1.1 christos { 2748 1.1 christos int referenced = 0; 2749 1.1 christos int UNUSED insn_referenced = abuf->written; 2750 1.1 christos INT in_sr = -1; 2751 1.1 christos INT in_dr = -1; 2752 1.1 christos INT out_dr = -1; 2753 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2754 1.1 christos } 2755 1.1 christos return cycles; 2756 1.1 christos #undef FLD 2757 1.1 christos } 2758 1.1 christos 2759 1.1 christos static int 2760 1.1 christos model_m32rx_clrpsw (SIM_CPU *current_cpu, void *sem_arg) 2761 1.1 christos { 2762 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f 2763 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2764 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2765 1.1 christos int cycles = 0; 2766 1.1 christos { 2767 1.1 christos int referenced = 0; 2768 1.1 christos int UNUSED insn_referenced = abuf->written; 2769 1.1 christos INT in_sr = -1; 2770 1.1 christos INT in_dr = -1; 2771 1.1 christos INT out_dr = -1; 2772 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2773 1.1 christos } 2774 1.1 christos return cycles; 2775 1.1 christos #undef FLD 2776 1.1 christos } 2777 1.1 christos 2778 1.1 christos static int 2779 1.1 christos model_m32rx_setpsw (SIM_CPU *current_cpu, void *sem_arg) 2780 1.1 christos { 2781 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f 2782 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2783 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2784 1.1 christos int cycles = 0; 2785 1.1 christos { 2786 1.1 christos int referenced = 0; 2787 1.1 christos int UNUSED insn_referenced = abuf->written; 2788 1.1 christos INT in_sr = -1; 2789 1.1 christos INT in_dr = -1; 2790 1.1 christos INT out_dr = -1; 2791 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2792 1.1 christos } 2793 1.1 christos return cycles; 2794 1.1 christos #undef FLD 2795 1.1 christos } 2796 1.1 christos 2797 1.1 christos static int 2798 1.1 christos model_m32rx_bset (SIM_CPU *current_cpu, void *sem_arg) 2799 1.1 christos { 2800 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f 2801 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2802 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2803 1.1 christos int cycles = 0; 2804 1.1 christos { 2805 1.1 christos int referenced = 0; 2806 1.1 christos int UNUSED insn_referenced = abuf->written; 2807 1.1 christos INT in_sr = -1; 2808 1.1 christos INT in_dr = -1; 2809 1.1 christos INT out_dr = -1; 2810 1.1 christos in_sr = FLD (in_sr); 2811 1.1 christos referenced |= 1 << 0; 2812 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2813 1.1 christos } 2814 1.1 christos return cycles; 2815 1.1 christos #undef FLD 2816 1.1 christos } 2817 1.1 christos 2818 1.1 christos static int 2819 1.1 christos model_m32rx_bclr (SIM_CPU *current_cpu, void *sem_arg) 2820 1.1 christos { 2821 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f 2822 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2823 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2824 1.1 christos int cycles = 0; 2825 1.1 christos { 2826 1.1 christos int referenced = 0; 2827 1.1 christos int UNUSED insn_referenced = abuf->written; 2828 1.1 christos INT in_sr = -1; 2829 1.1 christos INT in_dr = -1; 2830 1.1 christos INT out_dr = -1; 2831 1.1 christos in_sr = FLD (in_sr); 2832 1.1 christos referenced |= 1 << 0; 2833 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2834 1.1 christos } 2835 1.1 christos return cycles; 2836 1.1 christos #undef FLD 2837 1.1 christos } 2838 1.1 christos 2839 1.1 christos static int 2840 1.1 christos model_m32rx_btst (SIM_CPU *current_cpu, void *sem_arg) 2841 1.1 christos { 2842 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f 2843 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2844 1.1 christos const IDESC * UNUSED idesc = abuf->idesc; 2845 1.1 christos int cycles = 0; 2846 1.1 christos { 2847 1.1 christos int referenced = 0; 2848 1.1 christos int UNUSED insn_referenced = abuf->written; 2849 1.1 christos INT in_sr = -1; 2850 1.1 christos INT in_dr = -1; 2851 1.1 christos INT out_dr = -1; 2852 1.1 christos in_sr = FLD (in_sr); 2853 1.1 christos referenced |= 1 << 0; 2854 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2855 1.1 christos } 2856 1.1 christos return cycles; 2857 1.1 christos #undef FLD 2858 1.1 christos } 2859 1.1 christos 2860 1.1 christos /* We assume UNIT_NONE == 0 because the tables don't always terminate 2861 1.1 christos entries with it. */ 2862 1.1 christos 2863 1.1 christos /* Model timing data for `m32rx'. */ 2864 1.1 christos 2865 1.1 christos static const INSN_TIMING m32rx_timing[] = { 2866 1.1 christos { M32RXF_INSN_X_INVALID, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2867 1.1 christos { M32RXF_INSN_X_AFTER, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2868 1.1 christos { M32RXF_INSN_X_BEFORE, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2869 1.1 christos { M32RXF_INSN_X_CTI_CHAIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2870 1.1 christos { M32RXF_INSN_X_CHAIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2871 1.1 christos { M32RXF_INSN_X_BEGIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2872 1.1 christos { M32RXF_INSN_ADD, model_m32rx_add, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2873 1.1 christos { M32RXF_INSN_ADD3, model_m32rx_add3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2874 1.1 christos { M32RXF_INSN_AND, model_m32rx_and, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2875 1.1 christos { M32RXF_INSN_AND3, model_m32rx_and3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2876 1.1 christos { M32RXF_INSN_OR, model_m32rx_or, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2877 1.1 christos { M32RXF_INSN_OR3, model_m32rx_or3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2878 1.1 christos { M32RXF_INSN_XOR, model_m32rx_xor, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2879 1.1 christos { M32RXF_INSN_XOR3, model_m32rx_xor3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2880 1.1 christos { M32RXF_INSN_ADDI, model_m32rx_addi, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2881 1.1 christos { M32RXF_INSN_ADDV, model_m32rx_addv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2882 1.1 christos { M32RXF_INSN_ADDV3, model_m32rx_addv3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2883 1.1 christos { M32RXF_INSN_ADDX, model_m32rx_addx, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2884 1.1 christos { M32RXF_INSN_BC8, model_m32rx_bc8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2885 1.1 christos { M32RXF_INSN_BC24, model_m32rx_bc24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2886 1.1 christos { M32RXF_INSN_BEQ, model_m32rx_beq, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2887 1.1 christos { M32RXF_INSN_BEQZ, model_m32rx_beqz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2888 1.1 christos { M32RXF_INSN_BGEZ, model_m32rx_bgez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2889 1.1 christos { M32RXF_INSN_BGTZ, model_m32rx_bgtz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2890 1.1 christos { M32RXF_INSN_BLEZ, model_m32rx_blez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2891 1.1 christos { M32RXF_INSN_BLTZ, model_m32rx_bltz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2892 1.1 christos { M32RXF_INSN_BNEZ, model_m32rx_bnez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2893 1.1 christos { M32RXF_INSN_BL8, model_m32rx_bl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2894 1.1 christos { M32RXF_INSN_BL24, model_m32rx_bl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2895 1.1 christos { M32RXF_INSN_BCL8, model_m32rx_bcl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2896 1.1 christos { M32RXF_INSN_BCL24, model_m32rx_bcl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2897 1.1 christos { M32RXF_INSN_BNC8, model_m32rx_bnc8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2898 1.1 christos { M32RXF_INSN_BNC24, model_m32rx_bnc24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2899 1.1 christos { M32RXF_INSN_BNE, model_m32rx_bne, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 2900 1.1 christos { M32RXF_INSN_BRA8, model_m32rx_bra8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2901 1.1 christos { M32RXF_INSN_BRA24, model_m32rx_bra24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2902 1.1 christos { M32RXF_INSN_BNCL8, model_m32rx_bncl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2903 1.1 christos { M32RXF_INSN_BNCL24, model_m32rx_bncl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2904 1.1 christos { M32RXF_INSN_CMP, model_m32rx_cmp, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2905 1.1 christos { M32RXF_INSN_CMPI, model_m32rx_cmpi, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2906 1.1 christos { M32RXF_INSN_CMPU, model_m32rx_cmpu, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2907 1.1 christos { M32RXF_INSN_CMPUI, model_m32rx_cmpui, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2908 1.1 christos { M32RXF_INSN_CMPEQ, model_m32rx_cmpeq, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2909 1.1 christos { M32RXF_INSN_CMPZ, model_m32rx_cmpz, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2910 1.1 christos { M32RXF_INSN_DIV, model_m32rx_div, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 2911 1.1 christos { M32RXF_INSN_DIVU, model_m32rx_divu, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 2912 1.1 christos { M32RXF_INSN_REM, model_m32rx_rem, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 2913 1.1 christos { M32RXF_INSN_REMU, model_m32rx_remu, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 2914 1.1 christos { M32RXF_INSN_DIVH, model_m32rx_divh, { { (int) UNIT_M32RX_U_EXEC, 1, 21 } } }, 2915 1.1 christos { M32RXF_INSN_JC, model_m32rx_jc, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2916 1.1 christos { M32RXF_INSN_JNC, model_m32rx_jnc, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2917 1.1 christos { M32RXF_INSN_JL, model_m32rx_jl, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2918 1.1 christos { M32RXF_INSN_JMP, model_m32rx_jmp, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 2919 1.1 christos { M32RXF_INSN_LD, model_m32rx_ld, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2920 1.1 christos { M32RXF_INSN_LD_D, model_m32rx_ld_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 2921 1.1 christos { M32RXF_INSN_LDB, model_m32rx_ldb, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2922 1.1 christos { M32RXF_INSN_LDB_D, model_m32rx_ldb_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 2923 1.1 christos { M32RXF_INSN_LDH, model_m32rx_ldh, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2924 1.1 christos { M32RXF_INSN_LDH_D, model_m32rx_ldh_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 2925 1.1 christos { M32RXF_INSN_LDUB, model_m32rx_ldub, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2926 1.1 christos { M32RXF_INSN_LDUB_D, model_m32rx_ldub_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 2927 1.1 christos { M32RXF_INSN_LDUH, model_m32rx_lduh, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2928 1.1 christos { M32RXF_INSN_LDUH_D, model_m32rx_lduh_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 2929 1.1 christos { M32RXF_INSN_LD_PLUS, model_m32rx_ld_plus, { { (int) UNIT_M32RX_U_LOAD, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 2930 1.1 christos { M32RXF_INSN_LD24, model_m32rx_ld24, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2931 1.1 christos { M32RXF_INSN_LDI8, model_m32rx_ldi8, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2932 1.1 christos { M32RXF_INSN_LDI16, model_m32rx_ldi16, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2933 1.1 christos { M32RXF_INSN_LOCK, model_m32rx_lock, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2934 1.1 christos { M32RXF_INSN_MACHI_A, model_m32rx_machi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2935 1.1 christos { M32RXF_INSN_MACLO_A, model_m32rx_maclo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2936 1.1 christos { M32RXF_INSN_MACWHI_A, model_m32rx_macwhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2937 1.1 christos { M32RXF_INSN_MACWLO_A, model_m32rx_macwlo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2938 1.1 christos { M32RXF_INSN_MUL, model_m32rx_mul, { { (int) UNIT_M32RX_U_EXEC, 1, 4 } } }, 2939 1.1 christos { M32RXF_INSN_MULHI_A, model_m32rx_mulhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2940 1.1 christos { M32RXF_INSN_MULLO_A, model_m32rx_mullo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2941 1.1 christos { M32RXF_INSN_MULWHI_A, model_m32rx_mulwhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2942 1.1 christos { M32RXF_INSN_MULWLO_A, model_m32rx_mulwlo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2943 1.1 christos { M32RXF_INSN_MV, model_m32rx_mv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2944 1.1 christos { M32RXF_INSN_MVFACHI_A, model_m32rx_mvfachi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } }, 2945 1.1 christos { M32RXF_INSN_MVFACLO_A, model_m32rx_mvfaclo_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } }, 2946 1.1 christos { M32RXF_INSN_MVFACMI_A, model_m32rx_mvfacmi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } }, 2947 1.1 christos { M32RXF_INSN_MVFC, model_m32rx_mvfc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2948 1.1 christos { M32RXF_INSN_MVTACHI_A, model_m32rx_mvtachi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2949 1.1 christos { M32RXF_INSN_MVTACLO_A, model_m32rx_mvtaclo_a, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2950 1.1 christos { M32RXF_INSN_MVTC, model_m32rx_mvtc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2951 1.1 christos { M32RXF_INSN_NEG, model_m32rx_neg, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2952 1.1 christos { M32RXF_INSN_NOP, model_m32rx_nop, { { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 2953 1.1 christos { M32RXF_INSN_NOT, model_m32rx_not, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2954 1.1 christos { M32RXF_INSN_RAC_DSI, model_m32rx_rac_dsi, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2955 1.1 christos { M32RXF_INSN_RACH_DSI, model_m32rx_rach_dsi, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2956 1.1 christos { M32RXF_INSN_RTE, model_m32rx_rte, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2957 1.1 christos { M32RXF_INSN_SETH, model_m32rx_seth, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2958 1.1 christos { M32RXF_INSN_SLL, model_m32rx_sll, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2959 1.1 christos { M32RXF_INSN_SLL3, model_m32rx_sll3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2960 1.1 christos { M32RXF_INSN_SLLI, model_m32rx_slli, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2961 1.1 christos { M32RXF_INSN_SRA, model_m32rx_sra, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2962 1.1 christos { M32RXF_INSN_SRA3, model_m32rx_sra3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2963 1.1 christos { M32RXF_INSN_SRAI, model_m32rx_srai, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2964 1.1 christos { M32RXF_INSN_SRL, model_m32rx_srl, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2965 1.1 christos { M32RXF_INSN_SRL3, model_m32rx_srl3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2966 1.1 christos { M32RXF_INSN_SRLI, model_m32rx_srli, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2967 1.1 christos { M32RXF_INSN_ST, model_m32rx_st, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } }, 2968 1.1 christos { M32RXF_INSN_ST_D, model_m32rx_st_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } }, 2969 1.1 christos { M32RXF_INSN_STB, model_m32rx_stb, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } }, 2970 1.1 christos { M32RXF_INSN_STB_D, model_m32rx_stb_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } }, 2971 1.1 christos { M32RXF_INSN_STH, model_m32rx_sth, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } }, 2972 1.1 christos { M32RXF_INSN_STH_D, model_m32rx_sth_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } }, 2973 1.1 christos { M32RXF_INSN_ST_PLUS, model_m32rx_st_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 2974 1.1 christos { M32RXF_INSN_STH_PLUS, model_m32rx_sth_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 2975 1.1 christos { M32RXF_INSN_STB_PLUS, model_m32rx_stb_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 2976 1.1 christos { M32RXF_INSN_ST_MINUS, model_m32rx_st_minus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 2977 1.1 christos { M32RXF_INSN_SUB, model_m32rx_sub, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2978 1.1 christos { M32RXF_INSN_SUBV, model_m32rx_subv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2979 1.1 christos { M32RXF_INSN_SUBX, model_m32rx_subx, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2980 1.1 christos { M32RXF_INSN_TRAP, model_m32rx_trap, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2981 1.1 christos { M32RXF_INSN_UNLOCK, model_m32rx_unlock, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 2982 1.1 christos { M32RXF_INSN_SATB, model_m32rx_satb, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2983 1.1 christos { M32RXF_INSN_SATH, model_m32rx_sath, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2984 1.1 christos { M32RXF_INSN_SAT, model_m32rx_sat, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2985 1.1 christos { M32RXF_INSN_PCMPBZ, model_m32rx_pcmpbz, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 2986 1.1 christos { M32RXF_INSN_SADD, model_m32rx_sadd, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2987 1.1 christos { M32RXF_INSN_MACWU1, model_m32rx_macwu1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2988 1.1 christos { M32RXF_INSN_MSBLO, model_m32rx_msblo, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2989 1.1 christos { M32RXF_INSN_MULWU1, model_m32rx_mulwu1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2990 1.1 christos { M32RXF_INSN_MACLH1, model_m32rx_maclh1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 2991 1.1 christos { M32RXF_INSN_SC, model_m32rx_sc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2992 1.1 christos { M32RXF_INSN_SNC, model_m32rx_snc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2993 1.1 christos { M32RXF_INSN_CLRPSW, model_m32rx_clrpsw, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2994 1.1 christos { M32RXF_INSN_SETPSW, model_m32rx_setpsw, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2995 1.1 christos { M32RXF_INSN_BSET, model_m32rx_bset, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2996 1.1 christos { M32RXF_INSN_BCLR, model_m32rx_bclr, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2997 1.1 christos { M32RXF_INSN_BTST, model_m32rx_btst, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 2998 1.1 christos }; 2999 1.1 christos 3000 1.1 christos #endif /* WITH_PROFILE_MODEL_P */ 3001 1.1 christos 3002 1.1 christos static void 3003 1.1 christos m32rx_model_init (SIM_CPU *cpu) 3004 1.1 christos { 3005 1.1 christos CPU_MODEL_DATA (cpu) = (void *) zalloc (sizeof (MODEL_M32RX_DATA)); 3006 1.1 christos } 3007 1.1 christos 3008 1.1 christos #if WITH_PROFILE_MODEL_P 3009 1.1 christos #define TIMING_DATA(td) td 3010 1.1 christos #else 3011 1.1 christos #define TIMING_DATA(td) 0 3012 1.1 christos #endif 3013 1.1 christos 3014 1.6 christos static const SIM_MODEL m32rx_models[] = 3015 1.1 christos { 3016 1.1 christos { "m32rx", & m32rx_mach, MODEL_M32RX, TIMING_DATA (& m32rx_timing[0]), m32rx_model_init }, 3017 1.1 christos { 0 } 3018 1.1 christos }; 3019 1.1 christos 3020 1.1 christos /* The properties of this cpu's implementation. */ 3021 1.1 christos 3022 1.6 christos static const SIM_MACH_IMP_PROPERTIES m32rxf_imp_properties = 3023 1.1 christos { 3024 1.1 christos sizeof (SIM_CPU), 3025 1.1 christos #if WITH_SCACHE 3026 1.1 christos sizeof (SCACHE) 3027 1.1 christos #else 3028 1.1 christos 0 3029 1.1 christos #endif 3030 1.1 christos }; 3031 1.1 christos 3032 1.1 christos 3033 1.1 christos static void 3034 1.1 christos m32rxf_prepare_run (SIM_CPU *cpu) 3035 1.1 christos { 3036 1.1 christos if (CPU_IDESC (cpu) == NULL) 3037 1.1 christos m32rxf_init_idesc_table (cpu); 3038 1.1 christos } 3039 1.1 christos 3040 1.1 christos static const CGEN_INSN * 3041 1.1 christos m32rxf_get_idata (SIM_CPU *cpu, int inum) 3042 1.1 christos { 3043 1.1 christos return CPU_IDESC (cpu) [inum].idata; 3044 1.1 christos } 3045 1.1 christos 3046 1.1 christos static void 3047 1.1 christos m32rx_init_cpu (SIM_CPU *cpu) 3048 1.1 christos { 3049 1.1 christos CPU_REG_FETCH (cpu) = m32rxf_fetch_register; 3050 1.1 christos CPU_REG_STORE (cpu) = m32rxf_store_register; 3051 1.1 christos CPU_PC_FETCH (cpu) = m32rxf_h_pc_get; 3052 1.1 christos CPU_PC_STORE (cpu) = m32rxf_h_pc_set; 3053 1.1 christos CPU_GET_IDATA (cpu) = m32rxf_get_idata; 3054 1.1 christos CPU_MAX_INSNS (cpu) = M32RXF_INSN__MAX; 3055 1.1 christos CPU_INSN_NAME (cpu) = cgen_insn_name; 3056 1.1 christos CPU_FULL_ENGINE_FN (cpu) = m32rxf_engine_run_full; 3057 1.1 christos #if WITH_FAST 3058 1.1 christos CPU_FAST_ENGINE_FN (cpu) = m32rxf_engine_run_fast; 3059 1.1 christos #else 3060 1.1 christos CPU_FAST_ENGINE_FN (cpu) = m32rxf_engine_run_full; 3061 1.1 christos #endif 3062 1.1 christos } 3063 1.1 christos 3064 1.6 christos const SIM_MACH m32rx_mach = 3065 1.1 christos { 3066 1.1 christos "m32rx", "m32rx", MACH_M32RX, 3067 1.1 christos 32, 32, & m32rx_models[0], & m32rxf_imp_properties, 3068 1.1 christos m32rx_init_cpu, 3069 1.1 christos m32rxf_prepare_run 3070 1.1 christos }; 3071 1.1 christos 3072