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