14e98e3e1Schristos /* Simulator model support for m32rxf. 24e98e3e1Schristos 34e98e3e1Schristos THIS FILE IS MACHINE GENERATED WITH CGEN. 44e98e3e1Schristos 5*05fa0856Schristos Copyright (C) 1996-2024 Free Software Foundation, Inc. 64e98e3e1Schristos 74e98e3e1Schristos This file is part of the GNU simulators. 84e98e3e1Schristos 94e98e3e1Schristos This file is free software; you can redistribute it and/or modify 104e98e3e1Schristos it under the terms of the GNU General Public License as published by 114e98e3e1Schristos the Free Software Foundation; either version 3, or (at your option) 124e98e3e1Schristos any later version. 134e98e3e1Schristos 144e98e3e1Schristos It is distributed in the hope that it will be useful, but WITHOUT 154e98e3e1Schristos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 164e98e3e1Schristos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 174e98e3e1Schristos License for more details. 184e98e3e1Schristos 194e98e3e1Schristos You should have received a copy of the GNU General Public License along 20*05fa0856Schristos with this program; if not, write to the Free Software Foundation, Inc., 21*05fa0856Schristos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 224e98e3e1Schristos 234e98e3e1Schristos */ 244e98e3e1Schristos 254e98e3e1Schristos #define WANT_CPU m32rxf 264e98e3e1Schristos #define WANT_CPU_M32RXF 274e98e3e1Schristos 284e98e3e1Schristos #include "sim-main.h" 294e98e3e1Schristos 304e98e3e1Schristos /* The profiling data is recorded here, but is accessed via the profiling 314e98e3e1Schristos mechanism. After all, this is information for profiling. */ 324e98e3e1Schristos 334e98e3e1Schristos #if WITH_PROFILE_MODEL_P 344e98e3e1Schristos 354e98e3e1Schristos /* Model handlers for each insn. */ 364e98e3e1Schristos 374e98e3e1Schristos static int 384e98e3e1Schristos model_m32rx_add (SIM_CPU *current_cpu, void *sem_arg) 394e98e3e1Schristos { 404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 414e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 424e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 434e98e3e1Schristos int cycles = 0; 444e98e3e1Schristos { 454e98e3e1Schristos int referenced = 0; 464e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 474e98e3e1Schristos INT in_sr = -1; 484e98e3e1Schristos INT in_dr = -1; 494e98e3e1Schristos INT out_dr = -1; 504e98e3e1Schristos in_sr = FLD (in_sr); 514e98e3e1Schristos in_dr = FLD (in_dr); 524e98e3e1Schristos out_dr = FLD (out_dr); 534e98e3e1Schristos referenced |= 1 << 0; 544e98e3e1Schristos referenced |= 1 << 1; 554e98e3e1Schristos referenced |= 1 << 2; 564e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 574e98e3e1Schristos } 584e98e3e1Schristos return cycles; 594e98e3e1Schristos #undef FLD 604e98e3e1Schristos } 614e98e3e1Schristos 624e98e3e1Schristos static int 634e98e3e1Schristos model_m32rx_add3 (SIM_CPU *current_cpu, void *sem_arg) 644e98e3e1Schristos { 654e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 664e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 674e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 684e98e3e1Schristos int cycles = 0; 694e98e3e1Schristos { 704e98e3e1Schristos int referenced = 0; 714e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 724e98e3e1Schristos INT in_sr = -1; 734e98e3e1Schristos INT in_dr = -1; 744e98e3e1Schristos INT out_dr = -1; 754e98e3e1Schristos in_sr = FLD (in_sr); 764e98e3e1Schristos out_dr = FLD (out_dr); 774e98e3e1Schristos referenced |= 1 << 0; 784e98e3e1Schristos referenced |= 1 << 2; 794e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 804e98e3e1Schristos } 814e98e3e1Schristos return cycles; 824e98e3e1Schristos #undef FLD 834e98e3e1Schristos } 844e98e3e1Schristos 854e98e3e1Schristos static int 864e98e3e1Schristos model_m32rx_and (SIM_CPU *current_cpu, void *sem_arg) 874e98e3e1Schristos { 884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 894e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 904e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 914e98e3e1Schristos int cycles = 0; 924e98e3e1Schristos { 934e98e3e1Schristos int referenced = 0; 944e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 954e98e3e1Schristos INT in_sr = -1; 964e98e3e1Schristos INT in_dr = -1; 974e98e3e1Schristos INT out_dr = -1; 984e98e3e1Schristos in_sr = FLD (in_sr); 994e98e3e1Schristos in_dr = FLD (in_dr); 1004e98e3e1Schristos out_dr = FLD (out_dr); 1014e98e3e1Schristos referenced |= 1 << 0; 1024e98e3e1Schristos referenced |= 1 << 1; 1034e98e3e1Schristos referenced |= 1 << 2; 1044e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1054e98e3e1Schristos } 1064e98e3e1Schristos return cycles; 1074e98e3e1Schristos #undef FLD 1084e98e3e1Schristos } 1094e98e3e1Schristos 1104e98e3e1Schristos static int 1114e98e3e1Schristos model_m32rx_and3 (SIM_CPU *current_cpu, void *sem_arg) 1124e98e3e1Schristos { 1134e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 1144e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1154e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 1164e98e3e1Schristos int cycles = 0; 1174e98e3e1Schristos { 1184e98e3e1Schristos int referenced = 0; 1194e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 1204e98e3e1Schristos INT in_sr = -1; 1214e98e3e1Schristos INT in_dr = -1; 1224e98e3e1Schristos INT out_dr = -1; 1234e98e3e1Schristos in_sr = FLD (in_sr); 1244e98e3e1Schristos out_dr = FLD (out_dr); 1254e98e3e1Schristos referenced |= 1 << 0; 1264e98e3e1Schristos referenced |= 1 << 2; 1274e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1284e98e3e1Schristos } 1294e98e3e1Schristos return cycles; 1304e98e3e1Schristos #undef FLD 1314e98e3e1Schristos } 1324e98e3e1Schristos 1334e98e3e1Schristos static int 1344e98e3e1Schristos model_m32rx_or (SIM_CPU *current_cpu, void *sem_arg) 1354e98e3e1Schristos { 1364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 1374e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1384e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 1394e98e3e1Schristos int cycles = 0; 1404e98e3e1Schristos { 1414e98e3e1Schristos int referenced = 0; 1424e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 1434e98e3e1Schristos INT in_sr = -1; 1444e98e3e1Schristos INT in_dr = -1; 1454e98e3e1Schristos INT out_dr = -1; 1464e98e3e1Schristos in_sr = FLD (in_sr); 1474e98e3e1Schristos in_dr = FLD (in_dr); 1484e98e3e1Schristos out_dr = FLD (out_dr); 1494e98e3e1Schristos referenced |= 1 << 0; 1504e98e3e1Schristos referenced |= 1 << 1; 1514e98e3e1Schristos referenced |= 1 << 2; 1524e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1534e98e3e1Schristos } 1544e98e3e1Schristos return cycles; 1554e98e3e1Schristos #undef FLD 1564e98e3e1Schristos } 1574e98e3e1Schristos 1584e98e3e1Schristos static int 1594e98e3e1Schristos model_m32rx_or3 (SIM_CPU *current_cpu, void *sem_arg) 1604e98e3e1Schristos { 1614e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 1624e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1634e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 1644e98e3e1Schristos int cycles = 0; 1654e98e3e1Schristos { 1664e98e3e1Schristos int referenced = 0; 1674e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 1684e98e3e1Schristos INT in_sr = -1; 1694e98e3e1Schristos INT in_dr = -1; 1704e98e3e1Schristos INT out_dr = -1; 1714e98e3e1Schristos in_sr = FLD (in_sr); 1724e98e3e1Schristos out_dr = FLD (out_dr); 1734e98e3e1Schristos referenced |= 1 << 0; 1744e98e3e1Schristos referenced |= 1 << 2; 1754e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 1764e98e3e1Schristos } 1774e98e3e1Schristos return cycles; 1784e98e3e1Schristos #undef FLD 1794e98e3e1Schristos } 1804e98e3e1Schristos 1814e98e3e1Schristos static int 1824e98e3e1Schristos model_m32rx_xor (SIM_CPU *current_cpu, void *sem_arg) 1834e98e3e1Schristos { 1844e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 1854e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 1864e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 1874e98e3e1Schristos int cycles = 0; 1884e98e3e1Schristos { 1894e98e3e1Schristos int referenced = 0; 1904e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 1914e98e3e1Schristos INT in_sr = -1; 1924e98e3e1Schristos INT in_dr = -1; 1934e98e3e1Schristos INT out_dr = -1; 1944e98e3e1Schristos in_sr = FLD (in_sr); 1954e98e3e1Schristos in_dr = FLD (in_dr); 1964e98e3e1Schristos out_dr = FLD (out_dr); 1974e98e3e1Schristos referenced |= 1 << 0; 1984e98e3e1Schristos referenced |= 1 << 1; 1994e98e3e1Schristos referenced |= 1 << 2; 2004e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2014e98e3e1Schristos } 2024e98e3e1Schristos return cycles; 2034e98e3e1Schristos #undef FLD 2044e98e3e1Schristos } 2054e98e3e1Schristos 2064e98e3e1Schristos static int 2074e98e3e1Schristos model_m32rx_xor3 (SIM_CPU *current_cpu, void *sem_arg) 2084e98e3e1Schristos { 2094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 2104e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2114e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 2124e98e3e1Schristos int cycles = 0; 2134e98e3e1Schristos { 2144e98e3e1Schristos int referenced = 0; 2154e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 2164e98e3e1Schristos INT in_sr = -1; 2174e98e3e1Schristos INT in_dr = -1; 2184e98e3e1Schristos INT out_dr = -1; 2194e98e3e1Schristos in_sr = FLD (in_sr); 2204e98e3e1Schristos out_dr = FLD (out_dr); 2214e98e3e1Schristos referenced |= 1 << 0; 2224e98e3e1Schristos referenced |= 1 << 2; 2234e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2244e98e3e1Schristos } 2254e98e3e1Schristos return cycles; 2264e98e3e1Schristos #undef FLD 2274e98e3e1Schristos } 2284e98e3e1Schristos 2294e98e3e1Schristos static int 2304e98e3e1Schristos model_m32rx_addi (SIM_CPU *current_cpu, void *sem_arg) 2314e98e3e1Schristos { 2324e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 2334e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2344e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 2354e98e3e1Schristos int cycles = 0; 2364e98e3e1Schristos { 2374e98e3e1Schristos int referenced = 0; 2384e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 2394e98e3e1Schristos INT in_sr = -1; 2404e98e3e1Schristos INT in_dr = -1; 2414e98e3e1Schristos INT out_dr = -1; 2424e98e3e1Schristos in_dr = FLD (in_dr); 2434e98e3e1Schristos out_dr = FLD (out_dr); 2444e98e3e1Schristos referenced |= 1 << 1; 2454e98e3e1Schristos referenced |= 1 << 2; 2464e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2474e98e3e1Schristos } 2484e98e3e1Schristos return cycles; 2494e98e3e1Schristos #undef FLD 2504e98e3e1Schristos } 2514e98e3e1Schristos 2524e98e3e1Schristos static int 2534e98e3e1Schristos model_m32rx_addv (SIM_CPU *current_cpu, void *sem_arg) 2544e98e3e1Schristos { 2554e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 2564e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2574e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 2584e98e3e1Schristos int cycles = 0; 2594e98e3e1Schristos { 2604e98e3e1Schristos int referenced = 0; 2614e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 2624e98e3e1Schristos INT in_sr = -1; 2634e98e3e1Schristos INT in_dr = -1; 2644e98e3e1Schristos INT out_dr = -1; 2654e98e3e1Schristos in_sr = FLD (in_sr); 2664e98e3e1Schristos in_dr = FLD (in_dr); 2674e98e3e1Schristos out_dr = FLD (out_dr); 2684e98e3e1Schristos referenced |= 1 << 0; 2694e98e3e1Schristos referenced |= 1 << 1; 2704e98e3e1Schristos referenced |= 1 << 2; 2714e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2724e98e3e1Schristos } 2734e98e3e1Schristos return cycles; 2744e98e3e1Schristos #undef FLD 2754e98e3e1Schristos } 2764e98e3e1Schristos 2774e98e3e1Schristos static int 2784e98e3e1Schristos model_m32rx_addv3 (SIM_CPU *current_cpu, void *sem_arg) 2794e98e3e1Schristos { 2804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 2814e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 2824e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 2834e98e3e1Schristos int cycles = 0; 2844e98e3e1Schristos { 2854e98e3e1Schristos int referenced = 0; 2864e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 2874e98e3e1Schristos INT in_sr = -1; 2884e98e3e1Schristos INT in_dr = -1; 2894e98e3e1Schristos INT out_dr = -1; 2904e98e3e1Schristos in_sr = FLD (in_sr); 2914e98e3e1Schristos out_dr = FLD (out_dr); 2924e98e3e1Schristos referenced |= 1 << 0; 2934e98e3e1Schristos referenced |= 1 << 2; 2944e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 2954e98e3e1Schristos } 2964e98e3e1Schristos return cycles; 2974e98e3e1Schristos #undef FLD 2984e98e3e1Schristos } 2994e98e3e1Schristos 3004e98e3e1Schristos static int 3014e98e3e1Schristos model_m32rx_addx (SIM_CPU *current_cpu, void *sem_arg) 3024e98e3e1Schristos { 3034e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 3044e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 3054e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 3064e98e3e1Schristos int cycles = 0; 3074e98e3e1Schristos { 3084e98e3e1Schristos int referenced = 0; 3094e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 3104e98e3e1Schristos INT in_sr = -1; 3114e98e3e1Schristos INT in_dr = -1; 3124e98e3e1Schristos INT out_dr = -1; 3134e98e3e1Schristos in_sr = FLD (in_sr); 3144e98e3e1Schristos in_dr = FLD (in_dr); 3154e98e3e1Schristos out_dr = FLD (out_dr); 3164e98e3e1Schristos referenced |= 1 << 0; 3174e98e3e1Schristos referenced |= 1 << 1; 3184e98e3e1Schristos referenced |= 1 << 2; 3194e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 3204e98e3e1Schristos } 3214e98e3e1Schristos return cycles; 3224e98e3e1Schristos #undef FLD 3234e98e3e1Schristos } 3244e98e3e1Schristos 3254e98e3e1Schristos static int 3264e98e3e1Schristos model_m32rx_bc8 (SIM_CPU *current_cpu, void *sem_arg) 3274e98e3e1Schristos { 3284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 3294e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 3304e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 3314e98e3e1Schristos int cycles = 0; 3324e98e3e1Schristos { 3334e98e3e1Schristos int referenced = 0; 3344e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 3354e98e3e1Schristos INT in_sr = -1; 3364e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 3374e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 3384e98e3e1Schristos } 3394e98e3e1Schristos return cycles; 3404e98e3e1Schristos #undef FLD 3414e98e3e1Schristos } 3424e98e3e1Schristos 3434e98e3e1Schristos static int 3444e98e3e1Schristos model_m32rx_bc24 (SIM_CPU *current_cpu, void *sem_arg) 3454e98e3e1Schristos { 3464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 3474e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 3484e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 3494e98e3e1Schristos int cycles = 0; 3504e98e3e1Schristos { 3514e98e3e1Schristos int referenced = 0; 3524e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 3534e98e3e1Schristos INT in_sr = -1; 3544e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 3554e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 3564e98e3e1Schristos } 3574e98e3e1Schristos return cycles; 3584e98e3e1Schristos #undef FLD 3594e98e3e1Schristos } 3604e98e3e1Schristos 3614e98e3e1Schristos static int 3624e98e3e1Schristos model_m32rx_beq (SIM_CPU *current_cpu, void *sem_arg) 3634e98e3e1Schristos { 3644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 3654e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 3664e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 3674e98e3e1Schristos int cycles = 0; 3684e98e3e1Schristos { 3694e98e3e1Schristos int referenced = 0; 3704e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 3714e98e3e1Schristos INT in_sr = -1; 3724e98e3e1Schristos if (insn_referenced & (1 << 3)) referenced |= 1 << 1; 3734e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 3744e98e3e1Schristos } 3754e98e3e1Schristos { 3764e98e3e1Schristos int referenced = 0; 3774e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 3784e98e3e1Schristos INT in_src1 = -1; 3794e98e3e1Schristos INT in_src2 = -1; 3804e98e3e1Schristos in_src1 = FLD (in_src1); 3814e98e3e1Schristos in_src2 = FLD (in_src2); 3824e98e3e1Schristos referenced |= 1 << 0; 3834e98e3e1Schristos referenced |= 1 << 1; 3844e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 3854e98e3e1Schristos } 3864e98e3e1Schristos return cycles; 3874e98e3e1Schristos #undef FLD 3884e98e3e1Schristos } 3894e98e3e1Schristos 3904e98e3e1Schristos static int 3914e98e3e1Schristos model_m32rx_beqz (SIM_CPU *current_cpu, void *sem_arg) 3924e98e3e1Schristos { 3934e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 3944e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 3954e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 3964e98e3e1Schristos int cycles = 0; 3974e98e3e1Schristos { 3984e98e3e1Schristos int referenced = 0; 3994e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4004e98e3e1Schristos INT in_sr = -1; 4014e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 4024e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 4034e98e3e1Schristos } 4044e98e3e1Schristos { 4054e98e3e1Schristos int referenced = 0; 4064e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4074e98e3e1Schristos INT in_src1 = -1; 4084e98e3e1Schristos INT in_src2 = -1; 4094e98e3e1Schristos in_src2 = FLD (in_src2); 4104e98e3e1Schristos referenced |= 1 << 1; 4114e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 4124e98e3e1Schristos } 4134e98e3e1Schristos return cycles; 4144e98e3e1Schristos #undef FLD 4154e98e3e1Schristos } 4164e98e3e1Schristos 4174e98e3e1Schristos static int 4184e98e3e1Schristos model_m32rx_bgez (SIM_CPU *current_cpu, void *sem_arg) 4194e98e3e1Schristos { 4204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 4214e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 4224e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 4234e98e3e1Schristos int cycles = 0; 4244e98e3e1Schristos { 4254e98e3e1Schristos int referenced = 0; 4264e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4274e98e3e1Schristos INT in_sr = -1; 4284e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 4294e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 4304e98e3e1Schristos } 4314e98e3e1Schristos { 4324e98e3e1Schristos int referenced = 0; 4334e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4344e98e3e1Schristos INT in_src1 = -1; 4354e98e3e1Schristos INT in_src2 = -1; 4364e98e3e1Schristos in_src2 = FLD (in_src2); 4374e98e3e1Schristos referenced |= 1 << 1; 4384e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 4394e98e3e1Schristos } 4404e98e3e1Schristos return cycles; 4414e98e3e1Schristos #undef FLD 4424e98e3e1Schristos } 4434e98e3e1Schristos 4444e98e3e1Schristos static int 4454e98e3e1Schristos model_m32rx_bgtz (SIM_CPU *current_cpu, void *sem_arg) 4464e98e3e1Schristos { 4474e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 4484e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 4494e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 4504e98e3e1Schristos int cycles = 0; 4514e98e3e1Schristos { 4524e98e3e1Schristos int referenced = 0; 4534e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4544e98e3e1Schristos INT in_sr = -1; 4554e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 4564e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 4574e98e3e1Schristos } 4584e98e3e1Schristos { 4594e98e3e1Schristos int referenced = 0; 4604e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4614e98e3e1Schristos INT in_src1 = -1; 4624e98e3e1Schristos INT in_src2 = -1; 4634e98e3e1Schristos in_src2 = FLD (in_src2); 4644e98e3e1Schristos referenced |= 1 << 1; 4654e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 4664e98e3e1Schristos } 4674e98e3e1Schristos return cycles; 4684e98e3e1Schristos #undef FLD 4694e98e3e1Schristos } 4704e98e3e1Schristos 4714e98e3e1Schristos static int 4724e98e3e1Schristos model_m32rx_blez (SIM_CPU *current_cpu, void *sem_arg) 4734e98e3e1Schristos { 4744e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 4754e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 4764e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 4774e98e3e1Schristos int cycles = 0; 4784e98e3e1Schristos { 4794e98e3e1Schristos int referenced = 0; 4804e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4814e98e3e1Schristos INT in_sr = -1; 4824e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 4834e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 4844e98e3e1Schristos } 4854e98e3e1Schristos { 4864e98e3e1Schristos int referenced = 0; 4874e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 4884e98e3e1Schristos INT in_src1 = -1; 4894e98e3e1Schristos INT in_src2 = -1; 4904e98e3e1Schristos in_src2 = FLD (in_src2); 4914e98e3e1Schristos referenced |= 1 << 1; 4924e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 4934e98e3e1Schristos } 4944e98e3e1Schristos return cycles; 4954e98e3e1Schristos #undef FLD 4964e98e3e1Schristos } 4974e98e3e1Schristos 4984e98e3e1Schristos static int 4994e98e3e1Schristos model_m32rx_bltz (SIM_CPU *current_cpu, void *sem_arg) 5004e98e3e1Schristos { 5014e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 5024e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 5034e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 5044e98e3e1Schristos int cycles = 0; 5054e98e3e1Schristos { 5064e98e3e1Schristos int referenced = 0; 5074e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5084e98e3e1Schristos INT in_sr = -1; 5094e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 5104e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 5114e98e3e1Schristos } 5124e98e3e1Schristos { 5134e98e3e1Schristos int referenced = 0; 5144e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5154e98e3e1Schristos INT in_src1 = -1; 5164e98e3e1Schristos INT in_src2 = -1; 5174e98e3e1Schristos in_src2 = FLD (in_src2); 5184e98e3e1Schristos referenced |= 1 << 1; 5194e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 5204e98e3e1Schristos } 5214e98e3e1Schristos return cycles; 5224e98e3e1Schristos #undef FLD 5234e98e3e1Schristos } 5244e98e3e1Schristos 5254e98e3e1Schristos static int 5264e98e3e1Schristos model_m32rx_bnez (SIM_CPU *current_cpu, void *sem_arg) 5274e98e3e1Schristos { 5284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 5294e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 5304e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 5314e98e3e1Schristos int cycles = 0; 5324e98e3e1Schristos { 5334e98e3e1Schristos int referenced = 0; 5344e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5354e98e3e1Schristos INT in_sr = -1; 5364e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 5374e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 5384e98e3e1Schristos } 5394e98e3e1Schristos { 5404e98e3e1Schristos int referenced = 0; 5414e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5424e98e3e1Schristos INT in_src1 = -1; 5434e98e3e1Schristos INT in_src2 = -1; 5444e98e3e1Schristos in_src2 = FLD (in_src2); 5454e98e3e1Schristos referenced |= 1 << 1; 5464e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 5474e98e3e1Schristos } 5484e98e3e1Schristos return cycles; 5494e98e3e1Schristos #undef FLD 5504e98e3e1Schristos } 5514e98e3e1Schristos 5524e98e3e1Schristos static int 5534e98e3e1Schristos model_m32rx_bl8 (SIM_CPU *current_cpu, void *sem_arg) 5544e98e3e1Schristos { 5554e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 5564e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 5574e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 5584e98e3e1Schristos int cycles = 0; 5594e98e3e1Schristos { 5604e98e3e1Schristos int referenced = 0; 5614e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5624e98e3e1Schristos INT in_sr = -1; 5634e98e3e1Schristos referenced |= 1 << 1; 5644e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 5654e98e3e1Schristos } 5664e98e3e1Schristos return cycles; 5674e98e3e1Schristos #undef FLD 5684e98e3e1Schristos } 5694e98e3e1Schristos 5704e98e3e1Schristos static int 5714e98e3e1Schristos model_m32rx_bl24 (SIM_CPU *current_cpu, void *sem_arg) 5724e98e3e1Schristos { 5734e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 5744e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 5754e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 5764e98e3e1Schristos int cycles = 0; 5774e98e3e1Schristos { 5784e98e3e1Schristos int referenced = 0; 5794e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5804e98e3e1Schristos INT in_sr = -1; 5814e98e3e1Schristos referenced |= 1 << 1; 5824e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 5834e98e3e1Schristos } 5844e98e3e1Schristos return cycles; 5854e98e3e1Schristos #undef FLD 5864e98e3e1Schristos } 5874e98e3e1Schristos 5884e98e3e1Schristos static int 5894e98e3e1Schristos model_m32rx_bcl8 (SIM_CPU *current_cpu, void *sem_arg) 5904e98e3e1Schristos { 5914e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 5924e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 5934e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 5944e98e3e1Schristos int cycles = 0; 5954e98e3e1Schristos { 5964e98e3e1Schristos int referenced = 0; 5974e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 5984e98e3e1Schristos INT in_sr = -1; 5994e98e3e1Schristos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 6004e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 6014e98e3e1Schristos } 6024e98e3e1Schristos return cycles; 6034e98e3e1Schristos #undef FLD 6044e98e3e1Schristos } 6054e98e3e1Schristos 6064e98e3e1Schristos static int 6074e98e3e1Schristos model_m32rx_bcl24 (SIM_CPU *current_cpu, void *sem_arg) 6084e98e3e1Schristos { 6094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 6104e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 6114e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 6124e98e3e1Schristos int cycles = 0; 6134e98e3e1Schristos { 6144e98e3e1Schristos int referenced = 0; 6154e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 6164e98e3e1Schristos INT in_sr = -1; 6174e98e3e1Schristos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 6184e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 6194e98e3e1Schristos } 6204e98e3e1Schristos return cycles; 6214e98e3e1Schristos #undef FLD 6224e98e3e1Schristos } 6234e98e3e1Schristos 6244e98e3e1Schristos static int 6254e98e3e1Schristos model_m32rx_bnc8 (SIM_CPU *current_cpu, void *sem_arg) 6264e98e3e1Schristos { 6274e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 6284e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 6294e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 6304e98e3e1Schristos int cycles = 0; 6314e98e3e1Schristos { 6324e98e3e1Schristos int referenced = 0; 6334e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 6344e98e3e1Schristos INT in_sr = -1; 6354e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 6364e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 6374e98e3e1Schristos } 6384e98e3e1Schristos return cycles; 6394e98e3e1Schristos #undef FLD 6404e98e3e1Schristos } 6414e98e3e1Schristos 6424e98e3e1Schristos static int 6434e98e3e1Schristos model_m32rx_bnc24 (SIM_CPU *current_cpu, void *sem_arg) 6444e98e3e1Schristos { 6454e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 6464e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 6474e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 6484e98e3e1Schristos int cycles = 0; 6494e98e3e1Schristos { 6504e98e3e1Schristos int referenced = 0; 6514e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 6524e98e3e1Schristos INT in_sr = -1; 6534e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 6544e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 6554e98e3e1Schristos } 6564e98e3e1Schristos return cycles; 6574e98e3e1Schristos #undef FLD 6584e98e3e1Schristos } 6594e98e3e1Schristos 6604e98e3e1Schristos static int 6614e98e3e1Schristos model_m32rx_bne (SIM_CPU *current_cpu, void *sem_arg) 6624e98e3e1Schristos { 6634e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 6644e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 6654e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 6664e98e3e1Schristos int cycles = 0; 6674e98e3e1Schristos { 6684e98e3e1Schristos int referenced = 0; 6694e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 6704e98e3e1Schristos INT in_sr = -1; 6714e98e3e1Schristos if (insn_referenced & (1 << 3)) referenced |= 1 << 1; 6724e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 6734e98e3e1Schristos } 6744e98e3e1Schristos { 6754e98e3e1Schristos int referenced = 0; 6764e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 6774e98e3e1Schristos INT in_src1 = -1; 6784e98e3e1Schristos INT in_src2 = -1; 6794e98e3e1Schristos in_src1 = FLD (in_src1); 6804e98e3e1Schristos in_src2 = FLD (in_src2); 6814e98e3e1Schristos referenced |= 1 << 0; 6824e98e3e1Schristos referenced |= 1 << 1; 6834e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2); 6844e98e3e1Schristos } 6854e98e3e1Schristos return cycles; 6864e98e3e1Schristos #undef FLD 6874e98e3e1Schristos } 6884e98e3e1Schristos 6894e98e3e1Schristos static int 6904e98e3e1Schristos model_m32rx_bra8 (SIM_CPU *current_cpu, void *sem_arg) 6914e98e3e1Schristos { 6924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 6934e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 6944e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 6954e98e3e1Schristos int cycles = 0; 6964e98e3e1Schristos { 6974e98e3e1Schristos int referenced = 0; 6984e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 6994e98e3e1Schristos INT in_sr = -1; 7004e98e3e1Schristos referenced |= 1 << 1; 7014e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 7024e98e3e1Schristos } 7034e98e3e1Schristos return cycles; 7044e98e3e1Schristos #undef FLD 7054e98e3e1Schristos } 7064e98e3e1Schristos 7074e98e3e1Schristos static int 7084e98e3e1Schristos model_m32rx_bra24 (SIM_CPU *current_cpu, void *sem_arg) 7094e98e3e1Schristos { 7104e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 7114e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 7124e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 7134e98e3e1Schristos int cycles = 0; 7144e98e3e1Schristos { 7154e98e3e1Schristos int referenced = 0; 7164e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 7174e98e3e1Schristos INT in_sr = -1; 7184e98e3e1Schristos referenced |= 1 << 1; 7194e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 7204e98e3e1Schristos } 7214e98e3e1Schristos return cycles; 7224e98e3e1Schristos #undef FLD 7234e98e3e1Schristos } 7244e98e3e1Schristos 7254e98e3e1Schristos static int 7264e98e3e1Schristos model_m32rx_bncl8 (SIM_CPU *current_cpu, void *sem_arg) 7274e98e3e1Schristos { 7284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 7294e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 7304e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 7314e98e3e1Schristos int cycles = 0; 7324e98e3e1Schristos { 7334e98e3e1Schristos int referenced = 0; 7344e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 7354e98e3e1Schristos INT in_sr = -1; 7364e98e3e1Schristos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 7374e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 7384e98e3e1Schristos } 7394e98e3e1Schristos return cycles; 7404e98e3e1Schristos #undef FLD 7414e98e3e1Schristos } 7424e98e3e1Schristos 7434e98e3e1Schristos static int 7444e98e3e1Schristos model_m32rx_bncl24 (SIM_CPU *current_cpu, void *sem_arg) 7454e98e3e1Schristos { 7464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 7474e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 7484e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 7494e98e3e1Schristos int cycles = 0; 7504e98e3e1Schristos { 7514e98e3e1Schristos int referenced = 0; 7524e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 7534e98e3e1Schristos INT in_sr = -1; 7544e98e3e1Schristos if (insn_referenced & (1 << 4)) referenced |= 1 << 1; 7554e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 7564e98e3e1Schristos } 7574e98e3e1Schristos return cycles; 7584e98e3e1Schristos #undef FLD 7594e98e3e1Schristos } 7604e98e3e1Schristos 7614e98e3e1Schristos static int 7624e98e3e1Schristos model_m32rx_cmp (SIM_CPU *current_cpu, void *sem_arg) 7634e98e3e1Schristos { 7644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 7654e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 7664e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 7674e98e3e1Schristos int cycles = 0; 7684e98e3e1Schristos { 7694e98e3e1Schristos int referenced = 0; 7704e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 7714e98e3e1Schristos INT in_src1 = -1; 7724e98e3e1Schristos INT in_src2 = -1; 7734e98e3e1Schristos in_src1 = FLD (in_src1); 7744e98e3e1Schristos in_src2 = FLD (in_src2); 7754e98e3e1Schristos referenced |= 1 << 0; 7764e98e3e1Schristos referenced |= 1 << 1; 7774e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 7784e98e3e1Schristos } 7794e98e3e1Schristos return cycles; 7804e98e3e1Schristos #undef FLD 7814e98e3e1Schristos } 7824e98e3e1Schristos 7834e98e3e1Schristos static int 7844e98e3e1Schristos model_m32rx_cmpi (SIM_CPU *current_cpu, void *sem_arg) 7854e98e3e1Schristos { 7864e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 7874e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 7884e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 7894e98e3e1Schristos int cycles = 0; 7904e98e3e1Schristos { 7914e98e3e1Schristos int referenced = 0; 7924e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 7934e98e3e1Schristos INT in_src1 = -1; 7944e98e3e1Schristos INT in_src2 = -1; 7954e98e3e1Schristos in_src2 = FLD (in_src2); 7964e98e3e1Schristos referenced |= 1 << 1; 7974e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 7984e98e3e1Schristos } 7994e98e3e1Schristos return cycles; 8004e98e3e1Schristos #undef FLD 8014e98e3e1Schristos } 8024e98e3e1Schristos 8034e98e3e1Schristos static int 8044e98e3e1Schristos model_m32rx_cmpu (SIM_CPU *current_cpu, void *sem_arg) 8054e98e3e1Schristos { 8064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 8074e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 8084e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 8094e98e3e1Schristos int cycles = 0; 8104e98e3e1Schristos { 8114e98e3e1Schristos int referenced = 0; 8124e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 8134e98e3e1Schristos INT in_src1 = -1; 8144e98e3e1Schristos INT in_src2 = -1; 8154e98e3e1Schristos in_src1 = FLD (in_src1); 8164e98e3e1Schristos in_src2 = FLD (in_src2); 8174e98e3e1Schristos referenced |= 1 << 0; 8184e98e3e1Schristos referenced |= 1 << 1; 8194e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 8204e98e3e1Schristos } 8214e98e3e1Schristos return cycles; 8224e98e3e1Schristos #undef FLD 8234e98e3e1Schristos } 8244e98e3e1Schristos 8254e98e3e1Schristos static int 8264e98e3e1Schristos model_m32rx_cmpui (SIM_CPU *current_cpu, void *sem_arg) 8274e98e3e1Schristos { 8284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 8294e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 8304e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 8314e98e3e1Schristos int cycles = 0; 8324e98e3e1Schristos { 8334e98e3e1Schristos int referenced = 0; 8344e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 8354e98e3e1Schristos INT in_src1 = -1; 8364e98e3e1Schristos INT in_src2 = -1; 8374e98e3e1Schristos in_src2 = FLD (in_src2); 8384e98e3e1Schristos referenced |= 1 << 1; 8394e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 8404e98e3e1Schristos } 8414e98e3e1Schristos return cycles; 8424e98e3e1Schristos #undef FLD 8434e98e3e1Schristos } 8444e98e3e1Schristos 8454e98e3e1Schristos static int 8464e98e3e1Schristos model_m32rx_cmpeq (SIM_CPU *current_cpu, void *sem_arg) 8474e98e3e1Schristos { 8484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 8494e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 8504e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 8514e98e3e1Schristos int cycles = 0; 8524e98e3e1Schristos { 8534e98e3e1Schristos int referenced = 0; 8544e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 8554e98e3e1Schristos INT in_src1 = -1; 8564e98e3e1Schristos INT in_src2 = -1; 8574e98e3e1Schristos in_src1 = FLD (in_src1); 8584e98e3e1Schristos in_src2 = FLD (in_src2); 8594e98e3e1Schristos referenced |= 1 << 0; 8604e98e3e1Schristos referenced |= 1 << 1; 8614e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 8624e98e3e1Schristos } 8634e98e3e1Schristos return cycles; 8644e98e3e1Schristos #undef FLD 8654e98e3e1Schristos } 8664e98e3e1Schristos 8674e98e3e1Schristos static int 8684e98e3e1Schristos model_m32rx_cmpz (SIM_CPU *current_cpu, void *sem_arg) 8694e98e3e1Schristos { 8704e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 8714e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 8724e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 8734e98e3e1Schristos int cycles = 0; 8744e98e3e1Schristos { 8754e98e3e1Schristos int referenced = 0; 8764e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 8774e98e3e1Schristos INT in_src1 = -1; 8784e98e3e1Schristos INT in_src2 = -1; 8794e98e3e1Schristos in_src2 = FLD (in_src2); 8804e98e3e1Schristos referenced |= 1 << 1; 8814e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 8824e98e3e1Schristos } 8834e98e3e1Schristos return cycles; 8844e98e3e1Schristos #undef FLD 8854e98e3e1Schristos } 8864e98e3e1Schristos 8874e98e3e1Schristos static int 8884e98e3e1Schristos model_m32rx_div (SIM_CPU *current_cpu, void *sem_arg) 8894e98e3e1Schristos { 8904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 8914e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 8924e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 8934e98e3e1Schristos int cycles = 0; 8944e98e3e1Schristos { 8954e98e3e1Schristos int referenced = 0; 8964e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 8974e98e3e1Schristos INT in_sr = -1; 8984e98e3e1Schristos INT in_dr = -1; 8994e98e3e1Schristos INT out_dr = -1; 9004e98e3e1Schristos in_sr = FLD (in_sr); 9014e98e3e1Schristos in_dr = FLD (in_dr); 9024e98e3e1Schristos out_dr = FLD (out_dr); 9034e98e3e1Schristos referenced |= 1 << 0; 9044e98e3e1Schristos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 9054e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 9064e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 9074e98e3e1Schristos } 9084e98e3e1Schristos return cycles; 9094e98e3e1Schristos #undef FLD 9104e98e3e1Schristos } 9114e98e3e1Schristos 9124e98e3e1Schristos static int 9134e98e3e1Schristos model_m32rx_divu (SIM_CPU *current_cpu, void *sem_arg) 9144e98e3e1Schristos { 9154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 9164e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 9174e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 9184e98e3e1Schristos int cycles = 0; 9194e98e3e1Schristos { 9204e98e3e1Schristos int referenced = 0; 9214e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 9224e98e3e1Schristos INT in_sr = -1; 9234e98e3e1Schristos INT in_dr = -1; 9244e98e3e1Schristos INT out_dr = -1; 9254e98e3e1Schristos in_sr = FLD (in_sr); 9264e98e3e1Schristos in_dr = FLD (in_dr); 9274e98e3e1Schristos out_dr = FLD (out_dr); 9284e98e3e1Schristos referenced |= 1 << 0; 9294e98e3e1Schristos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 9304e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 9314e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 9324e98e3e1Schristos } 9334e98e3e1Schristos return cycles; 9344e98e3e1Schristos #undef FLD 9354e98e3e1Schristos } 9364e98e3e1Schristos 9374e98e3e1Schristos static int 9384e98e3e1Schristos model_m32rx_rem (SIM_CPU *current_cpu, void *sem_arg) 9394e98e3e1Schristos { 9404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 9414e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 9424e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 9434e98e3e1Schristos int cycles = 0; 9444e98e3e1Schristos { 9454e98e3e1Schristos int referenced = 0; 9464e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 9474e98e3e1Schristos INT in_sr = -1; 9484e98e3e1Schristos INT in_dr = -1; 9494e98e3e1Schristos INT out_dr = -1; 9504e98e3e1Schristos in_sr = FLD (in_sr); 9514e98e3e1Schristos in_dr = FLD (in_dr); 9524e98e3e1Schristos out_dr = FLD (out_dr); 9534e98e3e1Schristos referenced |= 1 << 0; 9544e98e3e1Schristos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 9554e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 9564e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 9574e98e3e1Schristos } 9584e98e3e1Schristos return cycles; 9594e98e3e1Schristos #undef FLD 9604e98e3e1Schristos } 9614e98e3e1Schristos 9624e98e3e1Schristos static int 9634e98e3e1Schristos model_m32rx_remu (SIM_CPU *current_cpu, void *sem_arg) 9644e98e3e1Schristos { 9654e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 9664e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 9674e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 9684e98e3e1Schristos int cycles = 0; 9694e98e3e1Schristos { 9704e98e3e1Schristos int referenced = 0; 9714e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 9724e98e3e1Schristos INT in_sr = -1; 9734e98e3e1Schristos INT in_dr = -1; 9744e98e3e1Schristos INT out_dr = -1; 9754e98e3e1Schristos in_sr = FLD (in_sr); 9764e98e3e1Schristos in_dr = FLD (in_dr); 9774e98e3e1Schristos out_dr = FLD (out_dr); 9784e98e3e1Schristos referenced |= 1 << 0; 9794e98e3e1Schristos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 9804e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 9814e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 9824e98e3e1Schristos } 9834e98e3e1Schristos return cycles; 9844e98e3e1Schristos #undef FLD 9854e98e3e1Schristos } 9864e98e3e1Schristos 9874e98e3e1Schristos static int 9884e98e3e1Schristos model_m32rx_divh (SIM_CPU *current_cpu, void *sem_arg) 9894e98e3e1Schristos { 9904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 9914e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 9924e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 9934e98e3e1Schristos int cycles = 0; 9944e98e3e1Schristos { 9954e98e3e1Schristos int referenced = 0; 9964e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 9974e98e3e1Schristos INT in_sr = -1; 9984e98e3e1Schristos INT in_dr = -1; 9994e98e3e1Schristos INT out_dr = -1; 10004e98e3e1Schristos in_sr = FLD (in_sr); 10014e98e3e1Schristos in_dr = FLD (in_dr); 10024e98e3e1Schristos out_dr = FLD (out_dr); 10034e98e3e1Schristos referenced |= 1 << 0; 10044e98e3e1Schristos if (insn_referenced & (1 << 0)) referenced |= 1 << 1; 10054e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 2; 10064e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 10074e98e3e1Schristos } 10084e98e3e1Schristos return cycles; 10094e98e3e1Schristos #undef FLD 10104e98e3e1Schristos } 10114e98e3e1Schristos 10124e98e3e1Schristos static int 10134e98e3e1Schristos model_m32rx_jc (SIM_CPU *current_cpu, void *sem_arg) 10144e98e3e1Schristos { 10154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 10164e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 10174e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 10184e98e3e1Schristos int cycles = 0; 10194e98e3e1Schristos { 10204e98e3e1Schristos int referenced = 0; 10214e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 10224e98e3e1Schristos INT in_sr = -1; 10234e98e3e1Schristos in_sr = FLD (in_sr); 10244e98e3e1Schristos if (insn_referenced & (1 << 1)) referenced |= 1 << 0; 10254e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 10264e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 10274e98e3e1Schristos } 10284e98e3e1Schristos return cycles; 10294e98e3e1Schristos #undef FLD 10304e98e3e1Schristos } 10314e98e3e1Schristos 10324e98e3e1Schristos static int 10334e98e3e1Schristos model_m32rx_jnc (SIM_CPU *current_cpu, void *sem_arg) 10344e98e3e1Schristos { 10354e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 10364e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 10374e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 10384e98e3e1Schristos int cycles = 0; 10394e98e3e1Schristos { 10404e98e3e1Schristos int referenced = 0; 10414e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 10424e98e3e1Schristos INT in_sr = -1; 10434e98e3e1Schristos in_sr = FLD (in_sr); 10444e98e3e1Schristos if (insn_referenced & (1 << 1)) referenced |= 1 << 0; 10454e98e3e1Schristos if (insn_referenced & (1 << 2)) referenced |= 1 << 1; 10464e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 10474e98e3e1Schristos } 10484e98e3e1Schristos return cycles; 10494e98e3e1Schristos #undef FLD 10504e98e3e1Schristos } 10514e98e3e1Schristos 10524e98e3e1Schristos static int 10534e98e3e1Schristos model_m32rx_jl (SIM_CPU *current_cpu, void *sem_arg) 10544e98e3e1Schristos { 10554e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 10564e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 10574e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 10584e98e3e1Schristos int cycles = 0; 10594e98e3e1Schristos { 10604e98e3e1Schristos int referenced = 0; 10614e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 10624e98e3e1Schristos INT in_sr = -1; 10634e98e3e1Schristos in_sr = FLD (in_sr); 10644e98e3e1Schristos referenced |= 1 << 0; 10654e98e3e1Schristos referenced |= 1 << 1; 10664e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 10674e98e3e1Schristos } 10684e98e3e1Schristos return cycles; 10694e98e3e1Schristos #undef FLD 10704e98e3e1Schristos } 10714e98e3e1Schristos 10724e98e3e1Schristos static int 10734e98e3e1Schristos model_m32rx_jmp (SIM_CPU *current_cpu, void *sem_arg) 10744e98e3e1Schristos { 10754e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 10764e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 10774e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 10784e98e3e1Schristos int cycles = 0; 10794e98e3e1Schristos { 10804e98e3e1Schristos int referenced = 0; 10814e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 10824e98e3e1Schristos INT in_sr = -1; 10834e98e3e1Schristos in_sr = FLD (in_sr); 10844e98e3e1Schristos referenced |= 1 << 0; 10854e98e3e1Schristos referenced |= 1 << 1; 10864e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr); 10874e98e3e1Schristos } 10884e98e3e1Schristos return cycles; 10894e98e3e1Schristos #undef FLD 10904e98e3e1Schristos } 10914e98e3e1Schristos 10924e98e3e1Schristos static int 10934e98e3e1Schristos model_m32rx_ld (SIM_CPU *current_cpu, void *sem_arg) 10944e98e3e1Schristos { 10954e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 10964e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 10974e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 10984e98e3e1Schristos int cycles = 0; 10994e98e3e1Schristos { 11004e98e3e1Schristos int referenced = 0; 11014e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 11024e98e3e1Schristos INT in_sr = 0; 11034e98e3e1Schristos INT out_dr = 0; 11044e98e3e1Schristos in_sr = FLD (in_sr); 11054e98e3e1Schristos out_dr = FLD (out_dr); 11064e98e3e1Schristos referenced |= 1 << 0; 11074e98e3e1Schristos referenced |= 1 << 1; 11084e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 11094e98e3e1Schristos } 11104e98e3e1Schristos return cycles; 11114e98e3e1Schristos #undef FLD 11124e98e3e1Schristos } 11134e98e3e1Schristos 11144e98e3e1Schristos static int 11154e98e3e1Schristos model_m32rx_ld_d (SIM_CPU *current_cpu, void *sem_arg) 11164e98e3e1Schristos { 11174e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 11184e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 11194e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 11204e98e3e1Schristos int cycles = 0; 11214e98e3e1Schristos { 11224e98e3e1Schristos int referenced = 0; 11234e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 11244e98e3e1Schristos INT in_sr = 0; 11254e98e3e1Schristos INT out_dr = 0; 11264e98e3e1Schristos in_sr = FLD (in_sr); 11274e98e3e1Schristos out_dr = FLD (out_dr); 11284e98e3e1Schristos referenced |= 1 << 0; 11294e98e3e1Schristos referenced |= 1 << 1; 11304e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 11314e98e3e1Schristos } 11324e98e3e1Schristos return cycles; 11334e98e3e1Schristos #undef FLD 11344e98e3e1Schristos } 11354e98e3e1Schristos 11364e98e3e1Schristos static int 11374e98e3e1Schristos model_m32rx_ldb (SIM_CPU *current_cpu, void *sem_arg) 11384e98e3e1Schristos { 11394e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 11404e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 11414e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 11424e98e3e1Schristos int cycles = 0; 11434e98e3e1Schristos { 11444e98e3e1Schristos int referenced = 0; 11454e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 11464e98e3e1Schristos INT in_sr = 0; 11474e98e3e1Schristos INT out_dr = 0; 11484e98e3e1Schristos in_sr = FLD (in_sr); 11494e98e3e1Schristos out_dr = FLD (out_dr); 11504e98e3e1Schristos referenced |= 1 << 0; 11514e98e3e1Schristos referenced |= 1 << 1; 11524e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 11534e98e3e1Schristos } 11544e98e3e1Schristos return cycles; 11554e98e3e1Schristos #undef FLD 11564e98e3e1Schristos } 11574e98e3e1Schristos 11584e98e3e1Schristos static int 11594e98e3e1Schristos model_m32rx_ldb_d (SIM_CPU *current_cpu, void *sem_arg) 11604e98e3e1Schristos { 11614e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 11624e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 11634e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 11644e98e3e1Schristos int cycles = 0; 11654e98e3e1Schristos { 11664e98e3e1Schristos int referenced = 0; 11674e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 11684e98e3e1Schristos INT in_sr = 0; 11694e98e3e1Schristos INT out_dr = 0; 11704e98e3e1Schristos in_sr = FLD (in_sr); 11714e98e3e1Schristos out_dr = FLD (out_dr); 11724e98e3e1Schristos referenced |= 1 << 0; 11734e98e3e1Schristos referenced |= 1 << 1; 11744e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 11754e98e3e1Schristos } 11764e98e3e1Schristos return cycles; 11774e98e3e1Schristos #undef FLD 11784e98e3e1Schristos } 11794e98e3e1Schristos 11804e98e3e1Schristos static int 11814e98e3e1Schristos model_m32rx_ldh (SIM_CPU *current_cpu, void *sem_arg) 11824e98e3e1Schristos { 11834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 11844e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 11854e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 11864e98e3e1Schristos int cycles = 0; 11874e98e3e1Schristos { 11884e98e3e1Schristos int referenced = 0; 11894e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 11904e98e3e1Schristos INT in_sr = 0; 11914e98e3e1Schristos INT out_dr = 0; 11924e98e3e1Schristos in_sr = FLD (in_sr); 11934e98e3e1Schristos out_dr = FLD (out_dr); 11944e98e3e1Schristos referenced |= 1 << 0; 11954e98e3e1Schristos referenced |= 1 << 1; 11964e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 11974e98e3e1Schristos } 11984e98e3e1Schristos return cycles; 11994e98e3e1Schristos #undef FLD 12004e98e3e1Schristos } 12014e98e3e1Schristos 12024e98e3e1Schristos static int 12034e98e3e1Schristos model_m32rx_ldh_d (SIM_CPU *current_cpu, void *sem_arg) 12044e98e3e1Schristos { 12054e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12064e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 12074e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 12084e98e3e1Schristos int cycles = 0; 12094e98e3e1Schristos { 12104e98e3e1Schristos int referenced = 0; 12114e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 12124e98e3e1Schristos INT in_sr = 0; 12134e98e3e1Schristos INT out_dr = 0; 12144e98e3e1Schristos in_sr = FLD (in_sr); 12154e98e3e1Schristos out_dr = FLD (out_dr); 12164e98e3e1Schristos referenced |= 1 << 0; 12174e98e3e1Schristos referenced |= 1 << 1; 12184e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 12194e98e3e1Schristos } 12204e98e3e1Schristos return cycles; 12214e98e3e1Schristos #undef FLD 12224e98e3e1Schristos } 12234e98e3e1Schristos 12244e98e3e1Schristos static int 12254e98e3e1Schristos model_m32rx_ldub (SIM_CPU *current_cpu, void *sem_arg) 12264e98e3e1Schristos { 12274e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 12284e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 12294e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 12304e98e3e1Schristos int cycles = 0; 12314e98e3e1Schristos { 12324e98e3e1Schristos int referenced = 0; 12334e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 12344e98e3e1Schristos INT in_sr = 0; 12354e98e3e1Schristos INT out_dr = 0; 12364e98e3e1Schristos in_sr = FLD (in_sr); 12374e98e3e1Schristos out_dr = FLD (out_dr); 12384e98e3e1Schristos referenced |= 1 << 0; 12394e98e3e1Schristos referenced |= 1 << 1; 12404e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 12414e98e3e1Schristos } 12424e98e3e1Schristos return cycles; 12434e98e3e1Schristos #undef FLD 12444e98e3e1Schristos } 12454e98e3e1Schristos 12464e98e3e1Schristos static int 12474e98e3e1Schristos model_m32rx_ldub_d (SIM_CPU *current_cpu, void *sem_arg) 12484e98e3e1Schristos { 12494e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12504e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 12514e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 12524e98e3e1Schristos int cycles = 0; 12534e98e3e1Schristos { 12544e98e3e1Schristos int referenced = 0; 12554e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 12564e98e3e1Schristos INT in_sr = 0; 12574e98e3e1Schristos INT out_dr = 0; 12584e98e3e1Schristos in_sr = FLD (in_sr); 12594e98e3e1Schristos out_dr = FLD (out_dr); 12604e98e3e1Schristos referenced |= 1 << 0; 12614e98e3e1Schristos referenced |= 1 << 1; 12624e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 12634e98e3e1Schristos } 12644e98e3e1Schristos return cycles; 12654e98e3e1Schristos #undef FLD 12664e98e3e1Schristos } 12674e98e3e1Schristos 12684e98e3e1Schristos static int 12694e98e3e1Schristos model_m32rx_lduh (SIM_CPU *current_cpu, void *sem_arg) 12704e98e3e1Schristos { 12714e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 12724e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 12734e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 12744e98e3e1Schristos int cycles = 0; 12754e98e3e1Schristos { 12764e98e3e1Schristos int referenced = 0; 12774e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 12784e98e3e1Schristos INT in_sr = 0; 12794e98e3e1Schristos INT out_dr = 0; 12804e98e3e1Schristos in_sr = FLD (in_sr); 12814e98e3e1Schristos out_dr = FLD (out_dr); 12824e98e3e1Schristos referenced |= 1 << 0; 12834e98e3e1Schristos referenced |= 1 << 1; 12844e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 12854e98e3e1Schristos } 12864e98e3e1Schristos return cycles; 12874e98e3e1Schristos #undef FLD 12884e98e3e1Schristos } 12894e98e3e1Schristos 12904e98e3e1Schristos static int 12914e98e3e1Schristos model_m32rx_lduh_d (SIM_CPU *current_cpu, void *sem_arg) 12924e98e3e1Schristos { 12934e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12944e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 12954e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 12964e98e3e1Schristos int cycles = 0; 12974e98e3e1Schristos { 12984e98e3e1Schristos int referenced = 0; 12994e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 13004e98e3e1Schristos INT in_sr = 0; 13014e98e3e1Schristos INT out_dr = 0; 13024e98e3e1Schristos in_sr = FLD (in_sr); 13034e98e3e1Schristos out_dr = FLD (out_dr); 13044e98e3e1Schristos referenced |= 1 << 0; 13054e98e3e1Schristos referenced |= 1 << 1; 13064e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 13074e98e3e1Schristos } 13084e98e3e1Schristos return cycles; 13094e98e3e1Schristos #undef FLD 13104e98e3e1Schristos } 13114e98e3e1Schristos 13124e98e3e1Schristos static int 13134e98e3e1Schristos model_m32rx_ld_plus (SIM_CPU *current_cpu, void *sem_arg) 13144e98e3e1Schristos { 13154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 13164e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 13174e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 13184e98e3e1Schristos int cycles = 0; 13194e98e3e1Schristos { 13204e98e3e1Schristos int referenced = 0; 13214e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 13224e98e3e1Schristos INT in_sr = 0; 13234e98e3e1Schristos INT out_dr = 0; 13244e98e3e1Schristos in_sr = FLD (in_sr); 13254e98e3e1Schristos out_dr = FLD (out_dr); 13264e98e3e1Schristos referenced |= 1 << 0; 13274e98e3e1Schristos referenced |= 1 << 1; 13284e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 13294e98e3e1Schristos } 13304e98e3e1Schristos { 13314e98e3e1Schristos int referenced = 0; 13324e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 13334e98e3e1Schristos INT in_sr = -1; 13344e98e3e1Schristos INT in_dr = -1; 13354e98e3e1Schristos INT out_dr = -1; 13364e98e3e1Schristos in_dr = FLD (in_sr); 13374e98e3e1Schristos out_dr = FLD (out_sr); 13384e98e3e1Schristos referenced |= 1 << 0; 13394e98e3e1Schristos referenced |= 1 << 2; 13404e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 13414e98e3e1Schristos } 13424e98e3e1Schristos return cycles; 13434e98e3e1Schristos #undef FLD 13444e98e3e1Schristos } 13454e98e3e1Schristos 13464e98e3e1Schristos static int 13474e98e3e1Schristos model_m32rx_ld24 (SIM_CPU *current_cpu, void *sem_arg) 13484e98e3e1Schristos { 13494e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld24.f 13504e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 13514e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 13524e98e3e1Schristos int cycles = 0; 13534e98e3e1Schristos { 13544e98e3e1Schristos int referenced = 0; 13554e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 13564e98e3e1Schristos INT in_sr = -1; 13574e98e3e1Schristos INT in_dr = -1; 13584e98e3e1Schristos INT out_dr = -1; 13594e98e3e1Schristos out_dr = FLD (out_dr); 13604e98e3e1Schristos referenced |= 1 << 2; 13614e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 13624e98e3e1Schristos } 13634e98e3e1Schristos return cycles; 13644e98e3e1Schristos #undef FLD 13654e98e3e1Schristos } 13664e98e3e1Schristos 13674e98e3e1Schristos static int 13684e98e3e1Schristos model_m32rx_ldi8 (SIM_CPU *current_cpu, void *sem_arg) 13694e98e3e1Schristos { 13704e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 13714e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 13724e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 13734e98e3e1Schristos int cycles = 0; 13744e98e3e1Schristos { 13754e98e3e1Schristos int referenced = 0; 13764e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 13774e98e3e1Schristos INT in_sr = -1; 13784e98e3e1Schristos INT in_dr = -1; 13794e98e3e1Schristos INT out_dr = -1; 13804e98e3e1Schristos out_dr = FLD (out_dr); 13814e98e3e1Schristos referenced |= 1 << 2; 13824e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 13834e98e3e1Schristos } 13844e98e3e1Schristos return cycles; 13854e98e3e1Schristos #undef FLD 13864e98e3e1Schristos } 13874e98e3e1Schristos 13884e98e3e1Schristos static int 13894e98e3e1Schristos model_m32rx_ldi16 (SIM_CPU *current_cpu, void *sem_arg) 13904e98e3e1Schristos { 13914e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 13924e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 13934e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 13944e98e3e1Schristos int cycles = 0; 13954e98e3e1Schristos { 13964e98e3e1Schristos int referenced = 0; 13974e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 13984e98e3e1Schristos INT in_sr = -1; 13994e98e3e1Schristos INT in_dr = -1; 14004e98e3e1Schristos INT out_dr = -1; 14014e98e3e1Schristos out_dr = FLD (out_dr); 14024e98e3e1Schristos referenced |= 1 << 2; 14034e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 14044e98e3e1Schristos } 14054e98e3e1Schristos return cycles; 14064e98e3e1Schristos #undef FLD 14074e98e3e1Schristos } 14084e98e3e1Schristos 14094e98e3e1Schristos static int 14104e98e3e1Schristos model_m32rx_lock (SIM_CPU *current_cpu, void *sem_arg) 14114e98e3e1Schristos { 14124e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 14134e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 14144e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 14154e98e3e1Schristos int cycles = 0; 14164e98e3e1Schristos { 14174e98e3e1Schristos int referenced = 0; 14184e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 14194e98e3e1Schristos INT in_sr = 0; 14204e98e3e1Schristos INT out_dr = 0; 14214e98e3e1Schristos in_sr = FLD (in_sr); 14224e98e3e1Schristos out_dr = FLD (out_dr); 14234e98e3e1Schristos referenced |= 1 << 0; 14244e98e3e1Schristos referenced |= 1 << 1; 14254e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 14264e98e3e1Schristos } 14274e98e3e1Schristos return cycles; 14284e98e3e1Schristos #undef FLD 14294e98e3e1Schristos } 14304e98e3e1Schristos 14314e98e3e1Schristos static int 14324e98e3e1Schristos model_m32rx_machi_a (SIM_CPU *current_cpu, void *sem_arg) 14334e98e3e1Schristos { 14344e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 14354e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 14364e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 14374e98e3e1Schristos int cycles = 0; 14384e98e3e1Schristos { 14394e98e3e1Schristos int referenced = 0; 14404e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 14414e98e3e1Schristos INT in_src1 = -1; 14424e98e3e1Schristos INT in_src2 = -1; 14434e98e3e1Schristos in_src1 = FLD (in_src1); 14444e98e3e1Schristos in_src2 = FLD (in_src2); 14454e98e3e1Schristos referenced |= 1 << 0; 14464e98e3e1Schristos referenced |= 1 << 1; 14474e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 14484e98e3e1Schristos } 14494e98e3e1Schristos return cycles; 14504e98e3e1Schristos #undef FLD 14514e98e3e1Schristos } 14524e98e3e1Schristos 14534e98e3e1Schristos static int 14544e98e3e1Schristos model_m32rx_maclo_a (SIM_CPU *current_cpu, void *sem_arg) 14554e98e3e1Schristos { 14564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 14574e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 14584e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 14594e98e3e1Schristos int cycles = 0; 14604e98e3e1Schristos { 14614e98e3e1Schristos int referenced = 0; 14624e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 14634e98e3e1Schristos INT in_src1 = -1; 14644e98e3e1Schristos INT in_src2 = -1; 14654e98e3e1Schristos in_src1 = FLD (in_src1); 14664e98e3e1Schristos in_src2 = FLD (in_src2); 14674e98e3e1Schristos referenced |= 1 << 0; 14684e98e3e1Schristos referenced |= 1 << 1; 14694e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 14704e98e3e1Schristos } 14714e98e3e1Schristos return cycles; 14724e98e3e1Schristos #undef FLD 14734e98e3e1Schristos } 14744e98e3e1Schristos 14754e98e3e1Schristos static int 14764e98e3e1Schristos model_m32rx_macwhi_a (SIM_CPU *current_cpu, void *sem_arg) 14774e98e3e1Schristos { 14784e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 14794e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 14804e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 14814e98e3e1Schristos int cycles = 0; 14824e98e3e1Schristos { 14834e98e3e1Schristos int referenced = 0; 14844e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 14854e98e3e1Schristos INT in_src1 = -1; 14864e98e3e1Schristos INT in_src2 = -1; 14874e98e3e1Schristos in_src1 = FLD (in_src1); 14884e98e3e1Schristos in_src2 = FLD (in_src2); 14894e98e3e1Schristos referenced |= 1 << 0; 14904e98e3e1Schristos referenced |= 1 << 1; 14914e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 14924e98e3e1Schristos } 14934e98e3e1Schristos return cycles; 14944e98e3e1Schristos #undef FLD 14954e98e3e1Schristos } 14964e98e3e1Schristos 14974e98e3e1Schristos static int 14984e98e3e1Schristos model_m32rx_macwlo_a (SIM_CPU *current_cpu, void *sem_arg) 14994e98e3e1Schristos { 15004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 15014e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 15024e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 15034e98e3e1Schristos int cycles = 0; 15044e98e3e1Schristos { 15054e98e3e1Schristos int referenced = 0; 15064e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 15074e98e3e1Schristos INT in_src1 = -1; 15084e98e3e1Schristos INT in_src2 = -1; 15094e98e3e1Schristos in_src1 = FLD (in_src1); 15104e98e3e1Schristos in_src2 = FLD (in_src2); 15114e98e3e1Schristos referenced |= 1 << 0; 15124e98e3e1Schristos referenced |= 1 << 1; 15134e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 15144e98e3e1Schristos } 15154e98e3e1Schristos return cycles; 15164e98e3e1Schristos #undef FLD 15174e98e3e1Schristos } 15184e98e3e1Schristos 15194e98e3e1Schristos static int 15204e98e3e1Schristos model_m32rx_mul (SIM_CPU *current_cpu, void *sem_arg) 15214e98e3e1Schristos { 15224e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 15234e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 15244e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 15254e98e3e1Schristos int cycles = 0; 15264e98e3e1Schristos { 15274e98e3e1Schristos int referenced = 0; 15284e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 15294e98e3e1Schristos INT in_sr = -1; 15304e98e3e1Schristos INT in_dr = -1; 15314e98e3e1Schristos INT out_dr = -1; 15324e98e3e1Schristos in_sr = FLD (in_sr); 15334e98e3e1Schristos in_dr = FLD (in_dr); 15344e98e3e1Schristos out_dr = FLD (out_dr); 15354e98e3e1Schristos referenced |= 1 << 0; 15364e98e3e1Schristos referenced |= 1 << 1; 15374e98e3e1Schristos referenced |= 1 << 2; 15384e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 15394e98e3e1Schristos } 15404e98e3e1Schristos return cycles; 15414e98e3e1Schristos #undef FLD 15424e98e3e1Schristos } 15434e98e3e1Schristos 15444e98e3e1Schristos static int 15454e98e3e1Schristos model_m32rx_mulhi_a (SIM_CPU *current_cpu, void *sem_arg) 15464e98e3e1Schristos { 15474e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 15484e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 15494e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 15504e98e3e1Schristos int cycles = 0; 15514e98e3e1Schristos { 15524e98e3e1Schristos int referenced = 0; 15534e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 15544e98e3e1Schristos INT in_src1 = -1; 15554e98e3e1Schristos INT in_src2 = -1; 15564e98e3e1Schristos in_src1 = FLD (in_src1); 15574e98e3e1Schristos in_src2 = FLD (in_src2); 15584e98e3e1Schristos referenced |= 1 << 0; 15594e98e3e1Schristos referenced |= 1 << 1; 15604e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 15614e98e3e1Schristos } 15624e98e3e1Schristos return cycles; 15634e98e3e1Schristos #undef FLD 15644e98e3e1Schristos } 15654e98e3e1Schristos 15664e98e3e1Schristos static int 15674e98e3e1Schristos model_m32rx_mullo_a (SIM_CPU *current_cpu, void *sem_arg) 15684e98e3e1Schristos { 15694e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 15704e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 15714e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 15724e98e3e1Schristos int cycles = 0; 15734e98e3e1Schristos { 15744e98e3e1Schristos int referenced = 0; 15754e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 15764e98e3e1Schristos INT in_src1 = -1; 15774e98e3e1Schristos INT in_src2 = -1; 15784e98e3e1Schristos in_src1 = FLD (in_src1); 15794e98e3e1Schristos in_src2 = FLD (in_src2); 15804e98e3e1Schristos referenced |= 1 << 0; 15814e98e3e1Schristos referenced |= 1 << 1; 15824e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 15834e98e3e1Schristos } 15844e98e3e1Schristos return cycles; 15854e98e3e1Schristos #undef FLD 15864e98e3e1Schristos } 15874e98e3e1Schristos 15884e98e3e1Schristos static int 15894e98e3e1Schristos model_m32rx_mulwhi_a (SIM_CPU *current_cpu, void *sem_arg) 15904e98e3e1Schristos { 15914e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 15924e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 15934e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 15944e98e3e1Schristos int cycles = 0; 15954e98e3e1Schristos { 15964e98e3e1Schristos int referenced = 0; 15974e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 15984e98e3e1Schristos INT in_src1 = -1; 15994e98e3e1Schristos INT in_src2 = -1; 16004e98e3e1Schristos in_src1 = FLD (in_src1); 16014e98e3e1Schristos in_src2 = FLD (in_src2); 16024e98e3e1Schristos referenced |= 1 << 0; 16034e98e3e1Schristos referenced |= 1 << 1; 16044e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 16054e98e3e1Schristos } 16064e98e3e1Schristos return cycles; 16074e98e3e1Schristos #undef FLD 16084e98e3e1Schristos } 16094e98e3e1Schristos 16104e98e3e1Schristos static int 16114e98e3e1Schristos model_m32rx_mulwlo_a (SIM_CPU *current_cpu, void *sem_arg) 16124e98e3e1Schristos { 16134e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f 16144e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 16154e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 16164e98e3e1Schristos int cycles = 0; 16174e98e3e1Schristos { 16184e98e3e1Schristos int referenced = 0; 16194e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 16204e98e3e1Schristos INT in_src1 = -1; 16214e98e3e1Schristos INT in_src2 = -1; 16224e98e3e1Schristos in_src1 = FLD (in_src1); 16234e98e3e1Schristos in_src2 = FLD (in_src2); 16244e98e3e1Schristos referenced |= 1 << 0; 16254e98e3e1Schristos referenced |= 1 << 1; 16264e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 16274e98e3e1Schristos } 16284e98e3e1Schristos return cycles; 16294e98e3e1Schristos #undef FLD 16304e98e3e1Schristos } 16314e98e3e1Schristos 16324e98e3e1Schristos static int 16334e98e3e1Schristos model_m32rx_mv (SIM_CPU *current_cpu, void *sem_arg) 16344e98e3e1Schristos { 16354e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 16364e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 16374e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 16384e98e3e1Schristos int cycles = 0; 16394e98e3e1Schristos { 16404e98e3e1Schristos int referenced = 0; 16414e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 16424e98e3e1Schristos INT in_sr = -1; 16434e98e3e1Schristos INT in_dr = -1; 16444e98e3e1Schristos INT out_dr = -1; 16454e98e3e1Schristos in_sr = FLD (in_sr); 16464e98e3e1Schristos out_dr = FLD (out_dr); 16474e98e3e1Schristos referenced |= 1 << 0; 16484e98e3e1Schristos referenced |= 1 << 2; 16494e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 16504e98e3e1Schristos } 16514e98e3e1Schristos return cycles; 16524e98e3e1Schristos #undef FLD 16534e98e3e1Schristos } 16544e98e3e1Schristos 16554e98e3e1Schristos static int 16564e98e3e1Schristos model_m32rx_mvfachi_a (SIM_CPU *current_cpu, void *sem_arg) 16574e98e3e1Schristos { 16584e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 16594e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 16604e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 16614e98e3e1Schristos int cycles = 0; 16624e98e3e1Schristos { 16634e98e3e1Schristos int referenced = 0; 16644e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 16654e98e3e1Schristos INT in_sr = -1; 16664e98e3e1Schristos INT in_dr = -1; 16674e98e3e1Schristos INT out_dr = -1; 16684e98e3e1Schristos out_dr = FLD (out_dr); 16694e98e3e1Schristos referenced |= 1 << 2; 16704e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 16714e98e3e1Schristos } 16724e98e3e1Schristos return cycles; 16734e98e3e1Schristos #undef FLD 16744e98e3e1Schristos } 16754e98e3e1Schristos 16764e98e3e1Schristos static int 16774e98e3e1Schristos model_m32rx_mvfaclo_a (SIM_CPU *current_cpu, void *sem_arg) 16784e98e3e1Schristos { 16794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 16804e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 16814e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 16824e98e3e1Schristos int cycles = 0; 16834e98e3e1Schristos { 16844e98e3e1Schristos int referenced = 0; 16854e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 16864e98e3e1Schristos INT in_sr = -1; 16874e98e3e1Schristos INT in_dr = -1; 16884e98e3e1Schristos INT out_dr = -1; 16894e98e3e1Schristos out_dr = FLD (out_dr); 16904e98e3e1Schristos referenced |= 1 << 2; 16914e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 16924e98e3e1Schristos } 16934e98e3e1Schristos return cycles; 16944e98e3e1Schristos #undef FLD 16954e98e3e1Schristos } 16964e98e3e1Schristos 16974e98e3e1Schristos static int 16984e98e3e1Schristos model_m32rx_mvfacmi_a (SIM_CPU *current_cpu, void *sem_arg) 16994e98e3e1Schristos { 17004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 17014e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 17024e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 17034e98e3e1Schristos int cycles = 0; 17044e98e3e1Schristos { 17054e98e3e1Schristos int referenced = 0; 17064e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 17074e98e3e1Schristos INT in_sr = -1; 17084e98e3e1Schristos INT in_dr = -1; 17094e98e3e1Schristos INT out_dr = -1; 17104e98e3e1Schristos out_dr = FLD (out_dr); 17114e98e3e1Schristos referenced |= 1 << 2; 17124e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 17134e98e3e1Schristos } 17144e98e3e1Schristos return cycles; 17154e98e3e1Schristos #undef FLD 17164e98e3e1Schristos } 17174e98e3e1Schristos 17184e98e3e1Schristos static int 17194e98e3e1Schristos model_m32rx_mvfc (SIM_CPU *current_cpu, void *sem_arg) 17204e98e3e1Schristos { 17214e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 17224e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 17234e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 17244e98e3e1Schristos int cycles = 0; 17254e98e3e1Schristos { 17264e98e3e1Schristos int referenced = 0; 17274e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 17284e98e3e1Schristos INT in_sr = -1; 17294e98e3e1Schristos INT in_dr = -1; 17304e98e3e1Schristos INT out_dr = -1; 17314e98e3e1Schristos out_dr = FLD (out_dr); 17324e98e3e1Schristos referenced |= 1 << 2; 17334e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 17344e98e3e1Schristos } 17354e98e3e1Schristos return cycles; 17364e98e3e1Schristos #undef FLD 17374e98e3e1Schristos } 17384e98e3e1Schristos 17394e98e3e1Schristos static int 17404e98e3e1Schristos model_m32rx_mvtachi_a (SIM_CPU *current_cpu, void *sem_arg) 17414e98e3e1Schristos { 17424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 17434e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 17444e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 17454e98e3e1Schristos int cycles = 0; 17464e98e3e1Schristos { 17474e98e3e1Schristos int referenced = 0; 17484e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 17494e98e3e1Schristos INT in_sr = -1; 17504e98e3e1Schristos INT in_dr = -1; 17514e98e3e1Schristos INT out_dr = -1; 17524e98e3e1Schristos in_sr = FLD (in_src1); 17534e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 17544e98e3e1Schristos } 17554e98e3e1Schristos return cycles; 17564e98e3e1Schristos #undef FLD 17574e98e3e1Schristos } 17584e98e3e1Schristos 17594e98e3e1Schristos static int 17604e98e3e1Schristos model_m32rx_mvtaclo_a (SIM_CPU *current_cpu, void *sem_arg) 17614e98e3e1Schristos { 17624e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 17634e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 17644e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 17654e98e3e1Schristos int cycles = 0; 17664e98e3e1Schristos { 17674e98e3e1Schristos int referenced = 0; 17684e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 17694e98e3e1Schristos INT in_sr = -1; 17704e98e3e1Schristos INT in_dr = -1; 17714e98e3e1Schristos INT out_dr = -1; 17724e98e3e1Schristos in_sr = FLD (in_src1); 17734e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 17744e98e3e1Schristos } 17754e98e3e1Schristos return cycles; 17764e98e3e1Schristos #undef FLD 17774e98e3e1Schristos } 17784e98e3e1Schristos 17794e98e3e1Schristos static int 17804e98e3e1Schristos model_m32rx_mvtc (SIM_CPU *current_cpu, void *sem_arg) 17814e98e3e1Schristos { 17824e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 17834e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 17844e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 17854e98e3e1Schristos int cycles = 0; 17864e98e3e1Schristos { 17874e98e3e1Schristos int referenced = 0; 17884e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 17894e98e3e1Schristos INT in_sr = -1; 17904e98e3e1Schristos INT in_dr = -1; 17914e98e3e1Schristos INT out_dr = -1; 17924e98e3e1Schristos in_sr = FLD (in_sr); 17934e98e3e1Schristos referenced |= 1 << 0; 17944e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 17954e98e3e1Schristos } 17964e98e3e1Schristos return cycles; 17974e98e3e1Schristos #undef FLD 17984e98e3e1Schristos } 17994e98e3e1Schristos 18004e98e3e1Schristos static int 18014e98e3e1Schristos model_m32rx_neg (SIM_CPU *current_cpu, void *sem_arg) 18024e98e3e1Schristos { 18034e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18044e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 18054e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 18064e98e3e1Schristos int cycles = 0; 18074e98e3e1Schristos { 18084e98e3e1Schristos int referenced = 0; 18094e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 18104e98e3e1Schristos INT in_sr = -1; 18114e98e3e1Schristos INT in_dr = -1; 18124e98e3e1Schristos INT out_dr = -1; 18134e98e3e1Schristos in_sr = FLD (in_sr); 18144e98e3e1Schristos out_dr = FLD (out_dr); 18154e98e3e1Schristos referenced |= 1 << 0; 18164e98e3e1Schristos referenced |= 1 << 2; 18174e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 18184e98e3e1Schristos } 18194e98e3e1Schristos return cycles; 18204e98e3e1Schristos #undef FLD 18214e98e3e1Schristos } 18224e98e3e1Schristos 18234e98e3e1Schristos static int 18244e98e3e1Schristos model_m32rx_nop (SIM_CPU *current_cpu, void *sem_arg) 18254e98e3e1Schristos { 18264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 18274e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 18284e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 18294e98e3e1Schristos int cycles = 0; 18304e98e3e1Schristos { 18314e98e3e1Schristos int referenced = 0; 18324e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 18334e98e3e1Schristos INT in_sr = -1; 18344e98e3e1Schristos INT in_dr = -1; 18354e98e3e1Schristos INT out_dr = -1; 18364e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 18374e98e3e1Schristos } 18384e98e3e1Schristos return cycles; 18394e98e3e1Schristos #undef FLD 18404e98e3e1Schristos } 18414e98e3e1Schristos 18424e98e3e1Schristos static int 18434e98e3e1Schristos model_m32rx_not (SIM_CPU *current_cpu, void *sem_arg) 18444e98e3e1Schristos { 18454e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18464e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 18474e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 18484e98e3e1Schristos int cycles = 0; 18494e98e3e1Schristos { 18504e98e3e1Schristos int referenced = 0; 18514e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 18524e98e3e1Schristos INT in_sr = -1; 18534e98e3e1Schristos INT in_dr = -1; 18544e98e3e1Schristos INT out_dr = -1; 18554e98e3e1Schristos in_sr = FLD (in_sr); 18564e98e3e1Schristos out_dr = FLD (out_dr); 18574e98e3e1Schristos referenced |= 1 << 0; 18584e98e3e1Schristos referenced |= 1 << 2; 18594e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 18604e98e3e1Schristos } 18614e98e3e1Schristos return cycles; 18624e98e3e1Schristos #undef FLD 18634e98e3e1Schristos } 18644e98e3e1Schristos 18654e98e3e1Schristos static int 18664e98e3e1Schristos model_m32rx_rac_dsi (SIM_CPU *current_cpu, void *sem_arg) 18674e98e3e1Schristos { 18684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 18694e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 18704e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 18714e98e3e1Schristos int cycles = 0; 18724e98e3e1Schristos { 18734e98e3e1Schristos int referenced = 0; 18744e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 18754e98e3e1Schristos INT in_src1 = -1; 18764e98e3e1Schristos INT in_src2 = -1; 18774e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 18784e98e3e1Schristos } 18794e98e3e1Schristos return cycles; 18804e98e3e1Schristos #undef FLD 18814e98e3e1Schristos } 18824e98e3e1Schristos 18834e98e3e1Schristos static int 18844e98e3e1Schristos model_m32rx_rach_dsi (SIM_CPU *current_cpu, void *sem_arg) 18854e98e3e1Schristos { 18864e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 18874e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 18884e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 18894e98e3e1Schristos int cycles = 0; 18904e98e3e1Schristos { 18914e98e3e1Schristos int referenced = 0; 18924e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 18934e98e3e1Schristos INT in_src1 = -1; 18944e98e3e1Schristos INT in_src2 = -1; 18954e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 18964e98e3e1Schristos } 18974e98e3e1Schristos return cycles; 18984e98e3e1Schristos #undef FLD 18994e98e3e1Schristos } 19004e98e3e1Schristos 19014e98e3e1Schristos static int 19024e98e3e1Schristos model_m32rx_rte (SIM_CPU *current_cpu, void *sem_arg) 19034e98e3e1Schristos { 19044e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 19054e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 19064e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 19074e98e3e1Schristos int cycles = 0; 19084e98e3e1Schristos { 19094e98e3e1Schristos int referenced = 0; 19104e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 19114e98e3e1Schristos INT in_sr = -1; 19124e98e3e1Schristos INT in_dr = -1; 19134e98e3e1Schristos INT out_dr = -1; 19144e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 19154e98e3e1Schristos } 19164e98e3e1Schristos return cycles; 19174e98e3e1Schristos #undef FLD 19184e98e3e1Schristos } 19194e98e3e1Schristos 19204e98e3e1Schristos static int 19214e98e3e1Schristos model_m32rx_seth (SIM_CPU *current_cpu, void *sem_arg) 19224e98e3e1Schristos { 19234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 19244e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 19254e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 19264e98e3e1Schristos int cycles = 0; 19274e98e3e1Schristos { 19284e98e3e1Schristos int referenced = 0; 19294e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 19304e98e3e1Schristos INT in_sr = -1; 19314e98e3e1Schristos INT in_dr = -1; 19324e98e3e1Schristos INT out_dr = -1; 19334e98e3e1Schristos out_dr = FLD (out_dr); 19344e98e3e1Schristos referenced |= 1 << 2; 19354e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 19364e98e3e1Schristos } 19374e98e3e1Schristos return cycles; 19384e98e3e1Schristos #undef FLD 19394e98e3e1Schristos } 19404e98e3e1Schristos 19414e98e3e1Schristos static int 19424e98e3e1Schristos model_m32rx_sll (SIM_CPU *current_cpu, void *sem_arg) 19434e98e3e1Schristos { 19444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 19454e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 19464e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 19474e98e3e1Schristos int cycles = 0; 19484e98e3e1Schristos { 19494e98e3e1Schristos int referenced = 0; 19504e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 19514e98e3e1Schristos INT in_sr = -1; 19524e98e3e1Schristos INT in_dr = -1; 19534e98e3e1Schristos INT out_dr = -1; 19544e98e3e1Schristos in_sr = FLD (in_sr); 19554e98e3e1Schristos in_dr = FLD (in_dr); 19564e98e3e1Schristos out_dr = FLD (out_dr); 19574e98e3e1Schristos referenced |= 1 << 0; 19584e98e3e1Schristos referenced |= 1 << 1; 19594e98e3e1Schristos referenced |= 1 << 2; 19604e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 19614e98e3e1Schristos } 19624e98e3e1Schristos return cycles; 19634e98e3e1Schristos #undef FLD 19644e98e3e1Schristos } 19654e98e3e1Schristos 19664e98e3e1Schristos static int 19674e98e3e1Schristos model_m32rx_sll3 (SIM_CPU *current_cpu, void *sem_arg) 19684e98e3e1Schristos { 19694e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 19704e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 19714e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 19724e98e3e1Schristos int cycles = 0; 19734e98e3e1Schristos { 19744e98e3e1Schristos int referenced = 0; 19754e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 19764e98e3e1Schristos INT in_sr = -1; 19774e98e3e1Schristos INT in_dr = -1; 19784e98e3e1Schristos INT out_dr = -1; 19794e98e3e1Schristos in_sr = FLD (in_sr); 19804e98e3e1Schristos out_dr = FLD (out_dr); 19814e98e3e1Schristos referenced |= 1 << 0; 19824e98e3e1Schristos referenced |= 1 << 2; 19834e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 19844e98e3e1Schristos } 19854e98e3e1Schristos return cycles; 19864e98e3e1Schristos #undef FLD 19874e98e3e1Schristos } 19884e98e3e1Schristos 19894e98e3e1Schristos static int 19904e98e3e1Schristos model_m32rx_slli (SIM_CPU *current_cpu, void *sem_arg) 19914e98e3e1Schristos { 19924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 19934e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 19944e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 19954e98e3e1Schristos int cycles = 0; 19964e98e3e1Schristos { 19974e98e3e1Schristos int referenced = 0; 19984e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 19994e98e3e1Schristos INT in_sr = -1; 20004e98e3e1Schristos INT in_dr = -1; 20014e98e3e1Schristos INT out_dr = -1; 20024e98e3e1Schristos in_dr = FLD (in_dr); 20034e98e3e1Schristos out_dr = FLD (out_dr); 20044e98e3e1Schristos referenced |= 1 << 1; 20054e98e3e1Schristos referenced |= 1 << 2; 20064e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 20074e98e3e1Schristos } 20084e98e3e1Schristos return cycles; 20094e98e3e1Schristos #undef FLD 20104e98e3e1Schristos } 20114e98e3e1Schristos 20124e98e3e1Schristos static int 20134e98e3e1Schristos model_m32rx_sra (SIM_CPU *current_cpu, void *sem_arg) 20144e98e3e1Schristos { 20154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 20164e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 20174e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 20184e98e3e1Schristos int cycles = 0; 20194e98e3e1Schristos { 20204e98e3e1Schristos int referenced = 0; 20214e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 20224e98e3e1Schristos INT in_sr = -1; 20234e98e3e1Schristos INT in_dr = -1; 20244e98e3e1Schristos INT out_dr = -1; 20254e98e3e1Schristos in_sr = FLD (in_sr); 20264e98e3e1Schristos in_dr = FLD (in_dr); 20274e98e3e1Schristos out_dr = FLD (out_dr); 20284e98e3e1Schristos referenced |= 1 << 0; 20294e98e3e1Schristos referenced |= 1 << 1; 20304e98e3e1Schristos referenced |= 1 << 2; 20314e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 20324e98e3e1Schristos } 20334e98e3e1Schristos return cycles; 20344e98e3e1Schristos #undef FLD 20354e98e3e1Schristos } 20364e98e3e1Schristos 20374e98e3e1Schristos static int 20384e98e3e1Schristos model_m32rx_sra3 (SIM_CPU *current_cpu, void *sem_arg) 20394e98e3e1Schristos { 20404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 20414e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 20424e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 20434e98e3e1Schristos int cycles = 0; 20444e98e3e1Schristos { 20454e98e3e1Schristos int referenced = 0; 20464e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 20474e98e3e1Schristos INT in_sr = -1; 20484e98e3e1Schristos INT in_dr = -1; 20494e98e3e1Schristos INT out_dr = -1; 20504e98e3e1Schristos in_sr = FLD (in_sr); 20514e98e3e1Schristos out_dr = FLD (out_dr); 20524e98e3e1Schristos referenced |= 1 << 0; 20534e98e3e1Schristos referenced |= 1 << 2; 20544e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 20554e98e3e1Schristos } 20564e98e3e1Schristos return cycles; 20574e98e3e1Schristos #undef FLD 20584e98e3e1Schristos } 20594e98e3e1Schristos 20604e98e3e1Schristos static int 20614e98e3e1Schristos model_m32rx_srai (SIM_CPU *current_cpu, void *sem_arg) 20624e98e3e1Schristos { 20634e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 20644e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 20654e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 20664e98e3e1Schristos int cycles = 0; 20674e98e3e1Schristos { 20684e98e3e1Schristos int referenced = 0; 20694e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 20704e98e3e1Schristos INT in_sr = -1; 20714e98e3e1Schristos INT in_dr = -1; 20724e98e3e1Schristos INT out_dr = -1; 20734e98e3e1Schristos in_dr = FLD (in_dr); 20744e98e3e1Schristos out_dr = FLD (out_dr); 20754e98e3e1Schristos referenced |= 1 << 1; 20764e98e3e1Schristos referenced |= 1 << 2; 20774e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 20784e98e3e1Schristos } 20794e98e3e1Schristos return cycles; 20804e98e3e1Schristos #undef FLD 20814e98e3e1Schristos } 20824e98e3e1Schristos 20834e98e3e1Schristos static int 20844e98e3e1Schristos model_m32rx_srl (SIM_CPU *current_cpu, void *sem_arg) 20854e98e3e1Schristos { 20864e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 20874e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 20884e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 20894e98e3e1Schristos int cycles = 0; 20904e98e3e1Schristos { 20914e98e3e1Schristos int referenced = 0; 20924e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 20934e98e3e1Schristos INT in_sr = -1; 20944e98e3e1Schristos INT in_dr = -1; 20954e98e3e1Schristos INT out_dr = -1; 20964e98e3e1Schristos in_sr = FLD (in_sr); 20974e98e3e1Schristos in_dr = FLD (in_dr); 20984e98e3e1Schristos out_dr = FLD (out_dr); 20994e98e3e1Schristos referenced |= 1 << 0; 21004e98e3e1Schristos referenced |= 1 << 1; 21014e98e3e1Schristos referenced |= 1 << 2; 21024e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 21034e98e3e1Schristos } 21044e98e3e1Schristos return cycles; 21054e98e3e1Schristos #undef FLD 21064e98e3e1Schristos } 21074e98e3e1Schristos 21084e98e3e1Schristos static int 21094e98e3e1Schristos model_m32rx_srl3 (SIM_CPU *current_cpu, void *sem_arg) 21104e98e3e1Schristos { 21114e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 21124e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 21134e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 21144e98e3e1Schristos int cycles = 0; 21154e98e3e1Schristos { 21164e98e3e1Schristos int referenced = 0; 21174e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 21184e98e3e1Schristos INT in_sr = -1; 21194e98e3e1Schristos INT in_dr = -1; 21204e98e3e1Schristos INT out_dr = -1; 21214e98e3e1Schristos in_sr = FLD (in_sr); 21224e98e3e1Schristos out_dr = FLD (out_dr); 21234e98e3e1Schristos referenced |= 1 << 0; 21244e98e3e1Schristos referenced |= 1 << 2; 21254e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 21264e98e3e1Schristos } 21274e98e3e1Schristos return cycles; 21284e98e3e1Schristos #undef FLD 21294e98e3e1Schristos } 21304e98e3e1Schristos 21314e98e3e1Schristos static int 21324e98e3e1Schristos model_m32rx_srli (SIM_CPU *current_cpu, void *sem_arg) 21334e98e3e1Schristos { 21344e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 21354e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 21364e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 21374e98e3e1Schristos int cycles = 0; 21384e98e3e1Schristos { 21394e98e3e1Schristos int referenced = 0; 21404e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 21414e98e3e1Schristos INT in_sr = -1; 21424e98e3e1Schristos INT in_dr = -1; 21434e98e3e1Schristos INT out_dr = -1; 21444e98e3e1Schristos in_dr = FLD (in_dr); 21454e98e3e1Schristos out_dr = FLD (out_dr); 21464e98e3e1Schristos referenced |= 1 << 1; 21474e98e3e1Schristos referenced |= 1 << 2; 21484e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 21494e98e3e1Schristos } 21504e98e3e1Schristos return cycles; 21514e98e3e1Schristos #undef FLD 21524e98e3e1Schristos } 21534e98e3e1Schristos 21544e98e3e1Schristos static int 21554e98e3e1Schristos model_m32rx_st (SIM_CPU *current_cpu, void *sem_arg) 21564e98e3e1Schristos { 21574e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 21584e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 21594e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 21604e98e3e1Schristos int cycles = 0; 21614e98e3e1Schristos { 21624e98e3e1Schristos int referenced = 0; 21634e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 21644e98e3e1Schristos INT in_src1 = 0; 21654e98e3e1Schristos INT in_src2 = 0; 21664e98e3e1Schristos in_src1 = FLD (in_src1); 21674e98e3e1Schristos in_src2 = FLD (in_src2); 21684e98e3e1Schristos referenced |= 1 << 0; 21694e98e3e1Schristos referenced |= 1 << 1; 21704e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 21714e98e3e1Schristos } 21724e98e3e1Schristos return cycles; 21734e98e3e1Schristos #undef FLD 21744e98e3e1Schristos } 21754e98e3e1Schristos 21764e98e3e1Schristos static int 21774e98e3e1Schristos model_m32rx_st_d (SIM_CPU *current_cpu, void *sem_arg) 21784e98e3e1Schristos { 21794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 21804e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 21814e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 21824e98e3e1Schristos int cycles = 0; 21834e98e3e1Schristos { 21844e98e3e1Schristos int referenced = 0; 21854e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 21864e98e3e1Schristos INT in_src1 = 0; 21874e98e3e1Schristos INT in_src2 = 0; 21884e98e3e1Schristos in_src1 = FLD (in_src1); 21894e98e3e1Schristos in_src2 = FLD (in_src2); 21904e98e3e1Schristos referenced |= 1 << 0; 21914e98e3e1Schristos referenced |= 1 << 1; 21924e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 21934e98e3e1Schristos } 21944e98e3e1Schristos return cycles; 21954e98e3e1Schristos #undef FLD 21964e98e3e1Schristos } 21974e98e3e1Schristos 21984e98e3e1Schristos static int 21994e98e3e1Schristos model_m32rx_stb (SIM_CPU *current_cpu, void *sem_arg) 22004e98e3e1Schristos { 22014e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22024e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 22034e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 22044e98e3e1Schristos int cycles = 0; 22054e98e3e1Schristos { 22064e98e3e1Schristos int referenced = 0; 22074e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 22084e98e3e1Schristos INT in_src1 = 0; 22094e98e3e1Schristos INT in_src2 = 0; 22104e98e3e1Schristos in_src1 = FLD (in_src1); 22114e98e3e1Schristos in_src2 = FLD (in_src2); 22124e98e3e1Schristos referenced |= 1 << 0; 22134e98e3e1Schristos referenced |= 1 << 1; 22144e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 22154e98e3e1Schristos } 22164e98e3e1Schristos return cycles; 22174e98e3e1Schristos #undef FLD 22184e98e3e1Schristos } 22194e98e3e1Schristos 22204e98e3e1Schristos static int 22214e98e3e1Schristos model_m32rx_stb_d (SIM_CPU *current_cpu, void *sem_arg) 22224e98e3e1Schristos { 22234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 22244e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 22254e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 22264e98e3e1Schristos int cycles = 0; 22274e98e3e1Schristos { 22284e98e3e1Schristos int referenced = 0; 22294e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 22304e98e3e1Schristos INT in_src1 = 0; 22314e98e3e1Schristos INT in_src2 = 0; 22324e98e3e1Schristos in_src1 = FLD (in_src1); 22334e98e3e1Schristos in_src2 = FLD (in_src2); 22344e98e3e1Schristos referenced |= 1 << 0; 22354e98e3e1Schristos referenced |= 1 << 1; 22364e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 22374e98e3e1Schristos } 22384e98e3e1Schristos return cycles; 22394e98e3e1Schristos #undef FLD 22404e98e3e1Schristos } 22414e98e3e1Schristos 22424e98e3e1Schristos static int 22434e98e3e1Schristos model_m32rx_sth (SIM_CPU *current_cpu, void *sem_arg) 22444e98e3e1Schristos { 22454e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22464e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 22474e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 22484e98e3e1Schristos int cycles = 0; 22494e98e3e1Schristos { 22504e98e3e1Schristos int referenced = 0; 22514e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 22524e98e3e1Schristos INT in_src1 = 0; 22534e98e3e1Schristos INT in_src2 = 0; 22544e98e3e1Schristos in_src1 = FLD (in_src1); 22554e98e3e1Schristos in_src2 = FLD (in_src2); 22564e98e3e1Schristos referenced |= 1 << 0; 22574e98e3e1Schristos referenced |= 1 << 1; 22584e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 22594e98e3e1Schristos } 22604e98e3e1Schristos return cycles; 22614e98e3e1Schristos #undef FLD 22624e98e3e1Schristos } 22634e98e3e1Schristos 22644e98e3e1Schristos static int 22654e98e3e1Schristos model_m32rx_sth_d (SIM_CPU *current_cpu, void *sem_arg) 22664e98e3e1Schristos { 22674e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 22684e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 22694e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 22704e98e3e1Schristos int cycles = 0; 22714e98e3e1Schristos { 22724e98e3e1Schristos int referenced = 0; 22734e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 22744e98e3e1Schristos INT in_src1 = 0; 22754e98e3e1Schristos INT in_src2 = 0; 22764e98e3e1Schristos in_src1 = FLD (in_src1); 22774e98e3e1Schristos in_src2 = FLD (in_src2); 22784e98e3e1Schristos referenced |= 1 << 0; 22794e98e3e1Schristos referenced |= 1 << 1; 22804e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 22814e98e3e1Schristos } 22824e98e3e1Schristos return cycles; 22834e98e3e1Schristos #undef FLD 22844e98e3e1Schristos } 22854e98e3e1Schristos 22864e98e3e1Schristos static int 22874e98e3e1Schristos model_m32rx_st_plus (SIM_CPU *current_cpu, void *sem_arg) 22884e98e3e1Schristos { 22894e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22904e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 22914e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 22924e98e3e1Schristos int cycles = 0; 22934e98e3e1Schristos { 22944e98e3e1Schristos int referenced = 0; 22954e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 22964e98e3e1Schristos INT in_src1 = 0; 22974e98e3e1Schristos INT in_src2 = 0; 22984e98e3e1Schristos in_src1 = FLD (in_src1); 22994e98e3e1Schristos in_src2 = FLD (in_src2); 23004e98e3e1Schristos referenced |= 1 << 0; 23014e98e3e1Schristos referenced |= 1 << 1; 23024e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 23034e98e3e1Schristos } 23044e98e3e1Schristos { 23054e98e3e1Schristos int referenced = 0; 23064e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 23074e98e3e1Schristos INT in_sr = -1; 23084e98e3e1Schristos INT in_dr = -1; 23094e98e3e1Schristos INT out_dr = -1; 23104e98e3e1Schristos in_dr = FLD (in_src2); 23114e98e3e1Schristos out_dr = FLD (out_src2); 23124e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 23134e98e3e1Schristos } 23144e98e3e1Schristos return cycles; 23154e98e3e1Schristos #undef FLD 23164e98e3e1Schristos } 23174e98e3e1Schristos 23184e98e3e1Schristos static int 23194e98e3e1Schristos model_m32rx_sth_plus (SIM_CPU *current_cpu, void *sem_arg) 23204e98e3e1Schristos { 23214e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23224e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 23234e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 23244e98e3e1Schristos int cycles = 0; 23254e98e3e1Schristos { 23264e98e3e1Schristos int referenced = 0; 23274e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 23284e98e3e1Schristos INT in_src1 = 0; 23294e98e3e1Schristos INT in_src2 = 0; 23304e98e3e1Schristos in_src1 = FLD (in_src1); 23314e98e3e1Schristos in_src2 = FLD (in_src2); 23324e98e3e1Schristos referenced |= 1 << 0; 23334e98e3e1Schristos referenced |= 1 << 1; 23344e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 23354e98e3e1Schristos } 23364e98e3e1Schristos { 23374e98e3e1Schristos int referenced = 0; 23384e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 23394e98e3e1Schristos INT in_sr = -1; 23404e98e3e1Schristos INT in_dr = -1; 23414e98e3e1Schristos INT out_dr = -1; 23424e98e3e1Schristos in_dr = FLD (in_src2); 23434e98e3e1Schristos out_dr = FLD (out_src2); 23444e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 23454e98e3e1Schristos } 23464e98e3e1Schristos return cycles; 23474e98e3e1Schristos #undef FLD 23484e98e3e1Schristos } 23494e98e3e1Schristos 23504e98e3e1Schristos static int 23514e98e3e1Schristos model_m32rx_stb_plus (SIM_CPU *current_cpu, void *sem_arg) 23524e98e3e1Schristos { 23534e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23544e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 23554e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 23564e98e3e1Schristos int cycles = 0; 23574e98e3e1Schristos { 23584e98e3e1Schristos int referenced = 0; 23594e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 23604e98e3e1Schristos INT in_src1 = 0; 23614e98e3e1Schristos INT in_src2 = 0; 23624e98e3e1Schristos in_src1 = FLD (in_src1); 23634e98e3e1Schristos in_src2 = FLD (in_src2); 23644e98e3e1Schristos referenced |= 1 << 0; 23654e98e3e1Schristos referenced |= 1 << 1; 23664e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 23674e98e3e1Schristos } 23684e98e3e1Schristos { 23694e98e3e1Schristos int referenced = 0; 23704e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 23714e98e3e1Schristos INT in_sr = -1; 23724e98e3e1Schristos INT in_dr = -1; 23734e98e3e1Schristos INT out_dr = -1; 23744e98e3e1Schristos in_dr = FLD (in_src2); 23754e98e3e1Schristos out_dr = FLD (out_src2); 23764e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 23774e98e3e1Schristos } 23784e98e3e1Schristos return cycles; 23794e98e3e1Schristos #undef FLD 23804e98e3e1Schristos } 23814e98e3e1Schristos 23824e98e3e1Schristos static int 23834e98e3e1Schristos model_m32rx_st_minus (SIM_CPU *current_cpu, void *sem_arg) 23844e98e3e1Schristos { 23854e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23864e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 23874e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 23884e98e3e1Schristos int cycles = 0; 23894e98e3e1Schristos { 23904e98e3e1Schristos int referenced = 0; 23914e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 23924e98e3e1Schristos INT in_src1 = 0; 23934e98e3e1Schristos INT in_src2 = 0; 23944e98e3e1Schristos in_src1 = FLD (in_src1); 23954e98e3e1Schristos in_src2 = FLD (in_src2); 23964e98e3e1Schristos referenced |= 1 << 0; 23974e98e3e1Schristos referenced |= 1 << 1; 23984e98e3e1Schristos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2); 23994e98e3e1Schristos } 24004e98e3e1Schristos { 24014e98e3e1Schristos int referenced = 0; 24024e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 24034e98e3e1Schristos INT in_sr = -1; 24044e98e3e1Schristos INT in_dr = -1; 24054e98e3e1Schristos INT out_dr = -1; 24064e98e3e1Schristos in_dr = FLD (in_src2); 24074e98e3e1Schristos out_dr = FLD (out_src2); 24084e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr); 24094e98e3e1Schristos } 24104e98e3e1Schristos return cycles; 24114e98e3e1Schristos #undef FLD 24124e98e3e1Schristos } 24134e98e3e1Schristos 24144e98e3e1Schristos static int 24154e98e3e1Schristos model_m32rx_sub (SIM_CPU *current_cpu, void *sem_arg) 24164e98e3e1Schristos { 24174e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 24184e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 24194e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 24204e98e3e1Schristos int cycles = 0; 24214e98e3e1Schristos { 24224e98e3e1Schristos int referenced = 0; 24234e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 24244e98e3e1Schristos INT in_sr = -1; 24254e98e3e1Schristos INT in_dr = -1; 24264e98e3e1Schristos INT out_dr = -1; 24274e98e3e1Schristos in_sr = FLD (in_sr); 24284e98e3e1Schristos in_dr = FLD (in_dr); 24294e98e3e1Schristos out_dr = FLD (out_dr); 24304e98e3e1Schristos referenced |= 1 << 0; 24314e98e3e1Schristos referenced |= 1 << 1; 24324e98e3e1Schristos referenced |= 1 << 2; 24334e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 24344e98e3e1Schristos } 24354e98e3e1Schristos return cycles; 24364e98e3e1Schristos #undef FLD 24374e98e3e1Schristos } 24384e98e3e1Schristos 24394e98e3e1Schristos static int 24404e98e3e1Schristos model_m32rx_subv (SIM_CPU *current_cpu, void *sem_arg) 24414e98e3e1Schristos { 24424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 24434e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 24444e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 24454e98e3e1Schristos int cycles = 0; 24464e98e3e1Schristos { 24474e98e3e1Schristos int referenced = 0; 24484e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 24494e98e3e1Schristos INT in_sr = -1; 24504e98e3e1Schristos INT in_dr = -1; 24514e98e3e1Schristos INT out_dr = -1; 24524e98e3e1Schristos in_sr = FLD (in_sr); 24534e98e3e1Schristos in_dr = FLD (in_dr); 24544e98e3e1Schristos out_dr = FLD (out_dr); 24554e98e3e1Schristos referenced |= 1 << 0; 24564e98e3e1Schristos referenced |= 1 << 1; 24574e98e3e1Schristos referenced |= 1 << 2; 24584e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 24594e98e3e1Schristos } 24604e98e3e1Schristos return cycles; 24614e98e3e1Schristos #undef FLD 24624e98e3e1Schristos } 24634e98e3e1Schristos 24644e98e3e1Schristos static int 24654e98e3e1Schristos model_m32rx_subx (SIM_CPU *current_cpu, void *sem_arg) 24664e98e3e1Schristos { 24674e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 24684e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 24694e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 24704e98e3e1Schristos int cycles = 0; 24714e98e3e1Schristos { 24724e98e3e1Schristos int referenced = 0; 24734e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 24744e98e3e1Schristos INT in_sr = -1; 24754e98e3e1Schristos INT in_dr = -1; 24764e98e3e1Schristos INT out_dr = -1; 24774e98e3e1Schristos in_sr = FLD (in_sr); 24784e98e3e1Schristos in_dr = FLD (in_dr); 24794e98e3e1Schristos out_dr = FLD (out_dr); 24804e98e3e1Schristos referenced |= 1 << 0; 24814e98e3e1Schristos referenced |= 1 << 1; 24824e98e3e1Schristos referenced |= 1 << 2; 24834e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 24844e98e3e1Schristos } 24854e98e3e1Schristos return cycles; 24864e98e3e1Schristos #undef FLD 24874e98e3e1Schristos } 24884e98e3e1Schristos 24894e98e3e1Schristos static int 24904e98e3e1Schristos model_m32rx_trap (SIM_CPU *current_cpu, void *sem_arg) 24914e98e3e1Schristos { 24924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_trap.f 24934e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 24944e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 24954e98e3e1Schristos int cycles = 0; 24964e98e3e1Schristos { 24974e98e3e1Schristos int referenced = 0; 24984e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 24994e98e3e1Schristos INT in_sr = -1; 25004e98e3e1Schristos INT in_dr = -1; 25014e98e3e1Schristos INT out_dr = -1; 25024e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 25034e98e3e1Schristos } 25044e98e3e1Schristos return cycles; 25054e98e3e1Schristos #undef FLD 25064e98e3e1Schristos } 25074e98e3e1Schristos 25084e98e3e1Schristos static int 25094e98e3e1Schristos model_m32rx_unlock (SIM_CPU *current_cpu, void *sem_arg) 25104e98e3e1Schristos { 25114e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 25124e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 25134e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 25144e98e3e1Schristos int cycles = 0; 25154e98e3e1Schristos { 25164e98e3e1Schristos int referenced = 0; 25174e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 25184e98e3e1Schristos INT in_sr = 0; 25194e98e3e1Schristos INT out_dr = 0; 25204e98e3e1Schristos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr); 25214e98e3e1Schristos } 25224e98e3e1Schristos return cycles; 25234e98e3e1Schristos #undef FLD 25244e98e3e1Schristos } 25254e98e3e1Schristos 25264e98e3e1Schristos static int 25274e98e3e1Schristos model_m32rx_satb (SIM_CPU *current_cpu, void *sem_arg) 25284e98e3e1Schristos { 25294e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 25304e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 25314e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 25324e98e3e1Schristos int cycles = 0; 25334e98e3e1Schristos { 25344e98e3e1Schristos int referenced = 0; 25354e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 25364e98e3e1Schristos INT in_sr = -1; 25374e98e3e1Schristos INT in_dr = -1; 25384e98e3e1Schristos INT out_dr = -1; 25394e98e3e1Schristos in_sr = FLD (in_sr); 25404e98e3e1Schristos out_dr = FLD (out_dr); 25414e98e3e1Schristos referenced |= 1 << 0; 25424e98e3e1Schristos referenced |= 1 << 2; 25434e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 25444e98e3e1Schristos } 25454e98e3e1Schristos return cycles; 25464e98e3e1Schristos #undef FLD 25474e98e3e1Schristos } 25484e98e3e1Schristos 25494e98e3e1Schristos static int 25504e98e3e1Schristos model_m32rx_sath (SIM_CPU *current_cpu, void *sem_arg) 25514e98e3e1Schristos { 25524e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 25534e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 25544e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 25554e98e3e1Schristos int cycles = 0; 25564e98e3e1Schristos { 25574e98e3e1Schristos int referenced = 0; 25584e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 25594e98e3e1Schristos INT in_sr = -1; 25604e98e3e1Schristos INT in_dr = -1; 25614e98e3e1Schristos INT out_dr = -1; 25624e98e3e1Schristos in_sr = FLD (in_sr); 25634e98e3e1Schristos out_dr = FLD (out_dr); 25644e98e3e1Schristos referenced |= 1 << 0; 25654e98e3e1Schristos referenced |= 1 << 2; 25664e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 25674e98e3e1Schristos } 25684e98e3e1Schristos return cycles; 25694e98e3e1Schristos #undef FLD 25704e98e3e1Schristos } 25714e98e3e1Schristos 25724e98e3e1Schristos static int 25734e98e3e1Schristos model_m32rx_sat (SIM_CPU *current_cpu, void *sem_arg) 25744e98e3e1Schristos { 25754e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 25764e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 25774e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 25784e98e3e1Schristos int cycles = 0; 25794e98e3e1Schristos { 25804e98e3e1Schristos int referenced = 0; 25814e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 25824e98e3e1Schristos INT in_sr = -1; 25834e98e3e1Schristos INT in_dr = -1; 25844e98e3e1Schristos INT out_dr = -1; 25854e98e3e1Schristos in_sr = FLD (in_sr); 25864e98e3e1Schristos out_dr = FLD (out_dr); 25874e98e3e1Schristos if (insn_referenced & (1 << 1)) referenced |= 1 << 0; 25884e98e3e1Schristos referenced |= 1 << 2; 25894e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 25904e98e3e1Schristos } 25914e98e3e1Schristos return cycles; 25924e98e3e1Schristos #undef FLD 25934e98e3e1Schristos } 25944e98e3e1Schristos 25954e98e3e1Schristos static int 25964e98e3e1Schristos model_m32rx_pcmpbz (SIM_CPU *current_cpu, void *sem_arg) 25974e98e3e1Schristos { 25984e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 25994e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 26004e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 26014e98e3e1Schristos int cycles = 0; 26024e98e3e1Schristos { 26034e98e3e1Schristos int referenced = 0; 26044e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 26054e98e3e1Schristos INT in_src1 = -1; 26064e98e3e1Schristos INT in_src2 = -1; 26074e98e3e1Schristos in_src2 = FLD (in_src2); 26084e98e3e1Schristos referenced |= 1 << 1; 26094e98e3e1Schristos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2); 26104e98e3e1Schristos } 26114e98e3e1Schristos return cycles; 26124e98e3e1Schristos #undef FLD 26134e98e3e1Schristos } 26144e98e3e1Schristos 26154e98e3e1Schristos static int 26164e98e3e1Schristos model_m32rx_sadd (SIM_CPU *current_cpu, void *sem_arg) 26174e98e3e1Schristos { 26184e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 26194e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 26204e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 26214e98e3e1Schristos int cycles = 0; 26224e98e3e1Schristos { 26234e98e3e1Schristos int referenced = 0; 26244e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 26254e98e3e1Schristos INT in_src1 = -1; 26264e98e3e1Schristos INT in_src2 = -1; 26274e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 26284e98e3e1Schristos } 26294e98e3e1Schristos return cycles; 26304e98e3e1Schristos #undef FLD 26314e98e3e1Schristos } 26324e98e3e1Schristos 26334e98e3e1Schristos static int 26344e98e3e1Schristos model_m32rx_macwu1 (SIM_CPU *current_cpu, void *sem_arg) 26354e98e3e1Schristos { 26364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 26374e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 26384e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 26394e98e3e1Schristos int cycles = 0; 26404e98e3e1Schristos { 26414e98e3e1Schristos int referenced = 0; 26424e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 26434e98e3e1Schristos INT in_src1 = -1; 26444e98e3e1Schristos INT in_src2 = -1; 26454e98e3e1Schristos in_src1 = FLD (in_src1); 26464e98e3e1Schristos in_src2 = FLD (in_src2); 26474e98e3e1Schristos referenced |= 1 << 0; 26484e98e3e1Schristos referenced |= 1 << 1; 26494e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 26504e98e3e1Schristos } 26514e98e3e1Schristos return cycles; 26524e98e3e1Schristos #undef FLD 26534e98e3e1Schristos } 26544e98e3e1Schristos 26554e98e3e1Schristos static int 26564e98e3e1Schristos model_m32rx_msblo (SIM_CPU *current_cpu, void *sem_arg) 26574e98e3e1Schristos { 26584e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 26594e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 26604e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 26614e98e3e1Schristos int cycles = 0; 26624e98e3e1Schristos { 26634e98e3e1Schristos int referenced = 0; 26644e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 26654e98e3e1Schristos INT in_src1 = -1; 26664e98e3e1Schristos INT in_src2 = -1; 26674e98e3e1Schristos in_src1 = FLD (in_src1); 26684e98e3e1Schristos in_src2 = FLD (in_src2); 26694e98e3e1Schristos referenced |= 1 << 0; 26704e98e3e1Schristos referenced |= 1 << 1; 26714e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 26724e98e3e1Schristos } 26734e98e3e1Schristos return cycles; 26744e98e3e1Schristos #undef FLD 26754e98e3e1Schristos } 26764e98e3e1Schristos 26774e98e3e1Schristos static int 26784e98e3e1Schristos model_m32rx_mulwu1 (SIM_CPU *current_cpu, void *sem_arg) 26794e98e3e1Schristos { 26804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 26814e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 26824e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 26834e98e3e1Schristos int cycles = 0; 26844e98e3e1Schristos { 26854e98e3e1Schristos int referenced = 0; 26864e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 26874e98e3e1Schristos INT in_src1 = -1; 26884e98e3e1Schristos INT in_src2 = -1; 26894e98e3e1Schristos in_src1 = FLD (in_src1); 26904e98e3e1Schristos in_src2 = FLD (in_src2); 26914e98e3e1Schristos referenced |= 1 << 0; 26924e98e3e1Schristos referenced |= 1 << 1; 26934e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 26944e98e3e1Schristos } 26954e98e3e1Schristos return cycles; 26964e98e3e1Schristos #undef FLD 26974e98e3e1Schristos } 26984e98e3e1Schristos 26994e98e3e1Schristos static int 27004e98e3e1Schristos model_m32rx_maclh1 (SIM_CPU *current_cpu, void *sem_arg) 27014e98e3e1Schristos { 27024e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 27034e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 27044e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 27054e98e3e1Schristos int cycles = 0; 27064e98e3e1Schristos { 27074e98e3e1Schristos int referenced = 0; 27084e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 27094e98e3e1Schristos INT in_src1 = -1; 27104e98e3e1Schristos INT in_src2 = -1; 27114e98e3e1Schristos in_src1 = FLD (in_src1); 27124e98e3e1Schristos in_src2 = FLD (in_src2); 27134e98e3e1Schristos referenced |= 1 << 0; 27144e98e3e1Schristos referenced |= 1 << 1; 27154e98e3e1Schristos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2); 27164e98e3e1Schristos } 27174e98e3e1Schristos return cycles; 27184e98e3e1Schristos #undef FLD 27194e98e3e1Schristos } 27204e98e3e1Schristos 27214e98e3e1Schristos static int 27224e98e3e1Schristos model_m32rx_sc (SIM_CPU *current_cpu, void *sem_arg) 27234e98e3e1Schristos { 27244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 27254e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 27264e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 27274e98e3e1Schristos int cycles = 0; 27284e98e3e1Schristos { 27294e98e3e1Schristos int referenced = 0; 27304e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 27314e98e3e1Schristos INT in_sr = -1; 27324e98e3e1Schristos INT in_dr = -1; 27334e98e3e1Schristos INT out_dr = -1; 27344e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 27354e98e3e1Schristos } 27364e98e3e1Schristos return cycles; 27374e98e3e1Schristos #undef FLD 27384e98e3e1Schristos } 27394e98e3e1Schristos 27404e98e3e1Schristos static int 27414e98e3e1Schristos model_m32rx_snc (SIM_CPU *current_cpu, void *sem_arg) 27424e98e3e1Schristos { 27434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 27444e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 27454e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 27464e98e3e1Schristos int cycles = 0; 27474e98e3e1Schristos { 27484e98e3e1Schristos int referenced = 0; 27494e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 27504e98e3e1Schristos INT in_sr = -1; 27514e98e3e1Schristos INT in_dr = -1; 27524e98e3e1Schristos INT out_dr = -1; 27534e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 27544e98e3e1Schristos } 27554e98e3e1Schristos return cycles; 27564e98e3e1Schristos #undef FLD 27574e98e3e1Schristos } 27584e98e3e1Schristos 27594e98e3e1Schristos static int 27604e98e3e1Schristos model_m32rx_clrpsw (SIM_CPU *current_cpu, void *sem_arg) 27614e98e3e1Schristos { 27624e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 27634e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 27644e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 27654e98e3e1Schristos int cycles = 0; 27664e98e3e1Schristos { 27674e98e3e1Schristos int referenced = 0; 27684e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 27694e98e3e1Schristos INT in_sr = -1; 27704e98e3e1Schristos INT in_dr = -1; 27714e98e3e1Schristos INT out_dr = -1; 27724e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 27734e98e3e1Schristos } 27744e98e3e1Schristos return cycles; 27754e98e3e1Schristos #undef FLD 27764e98e3e1Schristos } 27774e98e3e1Schristos 27784e98e3e1Schristos static int 27794e98e3e1Schristos model_m32rx_setpsw (SIM_CPU *current_cpu, void *sem_arg) 27804e98e3e1Schristos { 27814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 27824e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 27834e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 27844e98e3e1Schristos int cycles = 0; 27854e98e3e1Schristos { 27864e98e3e1Schristos int referenced = 0; 27874e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 27884e98e3e1Schristos INT in_sr = -1; 27894e98e3e1Schristos INT in_dr = -1; 27904e98e3e1Schristos INT out_dr = -1; 27914e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 27924e98e3e1Schristos } 27934e98e3e1Schristos return cycles; 27944e98e3e1Schristos #undef FLD 27954e98e3e1Schristos } 27964e98e3e1Schristos 27974e98e3e1Schristos static int 27984e98e3e1Schristos model_m32rx_bset (SIM_CPU *current_cpu, void *sem_arg) 27994e98e3e1Schristos { 28004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 28014e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 28024e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 28034e98e3e1Schristos int cycles = 0; 28044e98e3e1Schristos { 28054e98e3e1Schristos int referenced = 0; 28064e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 28074e98e3e1Schristos INT in_sr = -1; 28084e98e3e1Schristos INT in_dr = -1; 28094e98e3e1Schristos INT out_dr = -1; 28104e98e3e1Schristos in_sr = FLD (in_sr); 28114e98e3e1Schristos referenced |= 1 << 0; 28124e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 28134e98e3e1Schristos } 28144e98e3e1Schristos return cycles; 28154e98e3e1Schristos #undef FLD 28164e98e3e1Schristos } 28174e98e3e1Schristos 28184e98e3e1Schristos static int 28194e98e3e1Schristos model_m32rx_bclr (SIM_CPU *current_cpu, void *sem_arg) 28204e98e3e1Schristos { 28214e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 28224e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 28234e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 28244e98e3e1Schristos int cycles = 0; 28254e98e3e1Schristos { 28264e98e3e1Schristos int referenced = 0; 28274e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 28284e98e3e1Schristos INT in_sr = -1; 28294e98e3e1Schristos INT in_dr = -1; 28304e98e3e1Schristos INT out_dr = -1; 28314e98e3e1Schristos in_sr = FLD (in_sr); 28324e98e3e1Schristos referenced |= 1 << 0; 28334e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 28344e98e3e1Schristos } 28354e98e3e1Schristos return cycles; 28364e98e3e1Schristos #undef FLD 28374e98e3e1Schristos } 28384e98e3e1Schristos 28394e98e3e1Schristos static int 28404e98e3e1Schristos model_m32rx_btst (SIM_CPU *current_cpu, void *sem_arg) 28414e98e3e1Schristos { 28424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 28434e98e3e1Schristos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg); 28444e98e3e1Schristos const IDESC * UNUSED idesc = abuf->idesc; 28454e98e3e1Schristos int cycles = 0; 28464e98e3e1Schristos { 28474e98e3e1Schristos int referenced = 0; 28484e98e3e1Schristos int UNUSED insn_referenced = abuf->written; 28494e98e3e1Schristos INT in_sr = -1; 28504e98e3e1Schristos INT in_dr = -1; 28514e98e3e1Schristos INT out_dr = -1; 28524e98e3e1Schristos in_sr = FLD (in_sr); 28534e98e3e1Schristos referenced |= 1 << 0; 28544e98e3e1Schristos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr); 28554e98e3e1Schristos } 28564e98e3e1Schristos return cycles; 28574e98e3e1Schristos #undef FLD 28584e98e3e1Schristos } 28594e98e3e1Schristos 28604e98e3e1Schristos /* We assume UNIT_NONE == 0 because the tables don't always terminate 28614e98e3e1Schristos entries with it. */ 28624e98e3e1Schristos 28634e98e3e1Schristos /* Model timing data for `m32rx'. */ 28644e98e3e1Schristos 28654e98e3e1Schristos static const INSN_TIMING m32rx_timing[] = { 28664e98e3e1Schristos { M32RXF_INSN_X_INVALID, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28674e98e3e1Schristos { M32RXF_INSN_X_AFTER, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28684e98e3e1Schristos { M32RXF_INSN_X_BEFORE, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28694e98e3e1Schristos { M32RXF_INSN_X_CTI_CHAIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28704e98e3e1Schristos { M32RXF_INSN_X_CHAIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28714e98e3e1Schristos { M32RXF_INSN_X_BEGIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28724e98e3e1Schristos { M32RXF_INSN_ADD, model_m32rx_add, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28734e98e3e1Schristos { M32RXF_INSN_ADD3, model_m32rx_add3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28744e98e3e1Schristos { M32RXF_INSN_AND, model_m32rx_and, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28754e98e3e1Schristos { M32RXF_INSN_AND3, model_m32rx_and3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28764e98e3e1Schristos { M32RXF_INSN_OR, model_m32rx_or, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28774e98e3e1Schristos { M32RXF_INSN_OR3, model_m32rx_or3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28784e98e3e1Schristos { M32RXF_INSN_XOR, model_m32rx_xor, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28794e98e3e1Schristos { M32RXF_INSN_XOR3, model_m32rx_xor3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28804e98e3e1Schristos { M32RXF_INSN_ADDI, model_m32rx_addi, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28814e98e3e1Schristos { M32RXF_INSN_ADDV, model_m32rx_addv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28824e98e3e1Schristos { M32RXF_INSN_ADDV3, model_m32rx_addv3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28834e98e3e1Schristos { M32RXF_INSN_ADDX, model_m32rx_addx, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 28844e98e3e1Schristos { M32RXF_INSN_BC8, model_m32rx_bc8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28854e98e3e1Schristos { M32RXF_INSN_BC24, model_m32rx_bc24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28864e98e3e1Schristos { M32RXF_INSN_BEQ, model_m32rx_beq, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28874e98e3e1Schristos { M32RXF_INSN_BEQZ, model_m32rx_beqz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28884e98e3e1Schristos { M32RXF_INSN_BGEZ, model_m32rx_bgez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28894e98e3e1Schristos { M32RXF_INSN_BGTZ, model_m32rx_bgtz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28904e98e3e1Schristos { M32RXF_INSN_BLEZ, model_m32rx_blez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28914e98e3e1Schristos { M32RXF_INSN_BLTZ, model_m32rx_bltz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28924e98e3e1Schristos { M32RXF_INSN_BNEZ, model_m32rx_bnez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 28934e98e3e1Schristos { M32RXF_INSN_BL8, model_m32rx_bl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28944e98e3e1Schristos { M32RXF_INSN_BL24, model_m32rx_bl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28954e98e3e1Schristos { M32RXF_INSN_BCL8, model_m32rx_bcl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28964e98e3e1Schristos { M32RXF_INSN_BCL24, model_m32rx_bcl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28974e98e3e1Schristos { M32RXF_INSN_BNC8, model_m32rx_bnc8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28984e98e3e1Schristos { M32RXF_INSN_BNC24, model_m32rx_bnc24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 28994e98e3e1Schristos { M32RXF_INSN_BNE, model_m32rx_bne, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } }, 29004e98e3e1Schristos { M32RXF_INSN_BRA8, model_m32rx_bra8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29014e98e3e1Schristos { M32RXF_INSN_BRA24, model_m32rx_bra24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29024e98e3e1Schristos { M32RXF_INSN_BNCL8, model_m32rx_bncl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29034e98e3e1Schristos { M32RXF_INSN_BNCL24, model_m32rx_bncl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29044e98e3e1Schristos { M32RXF_INSN_CMP, model_m32rx_cmp, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29054e98e3e1Schristos { M32RXF_INSN_CMPI, model_m32rx_cmpi, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29064e98e3e1Schristos { M32RXF_INSN_CMPU, model_m32rx_cmpu, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29074e98e3e1Schristos { M32RXF_INSN_CMPUI, model_m32rx_cmpui, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29084e98e3e1Schristos { M32RXF_INSN_CMPEQ, model_m32rx_cmpeq, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29094e98e3e1Schristos { M32RXF_INSN_CMPZ, model_m32rx_cmpz, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29104e98e3e1Schristos { M32RXF_INSN_DIV, model_m32rx_div, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 29114e98e3e1Schristos { M32RXF_INSN_DIVU, model_m32rx_divu, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 29124e98e3e1Schristos { M32RXF_INSN_REM, model_m32rx_rem, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 29134e98e3e1Schristos { M32RXF_INSN_REMU, model_m32rx_remu, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } }, 29144e98e3e1Schristos { M32RXF_INSN_DIVH, model_m32rx_divh, { { (int) UNIT_M32RX_U_EXEC, 1, 21 } } }, 29154e98e3e1Schristos { M32RXF_INSN_JC, model_m32rx_jc, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29164e98e3e1Schristos { M32RXF_INSN_JNC, model_m32rx_jnc, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29174e98e3e1Schristos { M32RXF_INSN_JL, model_m32rx_jl, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29184e98e3e1Schristos { M32RXF_INSN_JMP, model_m32rx_jmp, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } }, 29194e98e3e1Schristos { M32RXF_INSN_LD, model_m32rx_ld, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29204e98e3e1Schristos { M32RXF_INSN_LD_D, model_m32rx_ld_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 29214e98e3e1Schristos { M32RXF_INSN_LDB, model_m32rx_ldb, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29224e98e3e1Schristos { M32RXF_INSN_LDB_D, model_m32rx_ldb_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 29234e98e3e1Schristos { M32RXF_INSN_LDH, model_m32rx_ldh, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29244e98e3e1Schristos { M32RXF_INSN_LDH_D, model_m32rx_ldh_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 29254e98e3e1Schristos { M32RXF_INSN_LDUB, model_m32rx_ldub, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29264e98e3e1Schristos { M32RXF_INSN_LDUB_D, model_m32rx_ldub_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 29274e98e3e1Schristos { M32RXF_INSN_LDUH, model_m32rx_lduh, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29284e98e3e1Schristos { M32RXF_INSN_LDUH_D, model_m32rx_lduh_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } }, 29294e98e3e1Schristos { M32RXF_INSN_LD_PLUS, model_m32rx_ld_plus, { { (int) UNIT_M32RX_U_LOAD, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 29304e98e3e1Schristos { M32RXF_INSN_LD24, model_m32rx_ld24, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29314e98e3e1Schristos { M32RXF_INSN_LDI8, model_m32rx_ldi8, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29324e98e3e1Schristos { M32RXF_INSN_LDI16, model_m32rx_ldi16, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29334e98e3e1Schristos { M32RXF_INSN_LOCK, model_m32rx_lock, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29344e98e3e1Schristos { M32RXF_INSN_MACHI_A, model_m32rx_machi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29354e98e3e1Schristos { M32RXF_INSN_MACLO_A, model_m32rx_maclo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29364e98e3e1Schristos { M32RXF_INSN_MACWHI_A, model_m32rx_macwhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29374e98e3e1Schristos { M32RXF_INSN_MACWLO_A, model_m32rx_macwlo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29384e98e3e1Schristos { M32RXF_INSN_MUL, model_m32rx_mul, { { (int) UNIT_M32RX_U_EXEC, 1, 4 } } }, 29394e98e3e1Schristos { M32RXF_INSN_MULHI_A, model_m32rx_mulhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29404e98e3e1Schristos { M32RXF_INSN_MULLO_A, model_m32rx_mullo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29414e98e3e1Schristos { M32RXF_INSN_MULWHI_A, model_m32rx_mulwhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29424e98e3e1Schristos { M32RXF_INSN_MULWLO_A, model_m32rx_mulwlo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29434e98e3e1Schristos { M32RXF_INSN_MV, model_m32rx_mv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29444e98e3e1Schristos { M32RXF_INSN_MVFACHI_A, model_m32rx_mvfachi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } }, 29454e98e3e1Schristos { M32RXF_INSN_MVFACLO_A, model_m32rx_mvfaclo_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } }, 29464e98e3e1Schristos { M32RXF_INSN_MVFACMI_A, model_m32rx_mvfacmi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } }, 29474e98e3e1Schristos { M32RXF_INSN_MVFC, model_m32rx_mvfc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29484e98e3e1Schristos { M32RXF_INSN_MVTACHI_A, model_m32rx_mvtachi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29494e98e3e1Schristos { M32RXF_INSN_MVTACLO_A, model_m32rx_mvtaclo_a, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29504e98e3e1Schristos { M32RXF_INSN_MVTC, model_m32rx_mvtc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29514e98e3e1Schristos { M32RXF_INSN_NEG, model_m32rx_neg, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29524e98e3e1Schristos { M32RXF_INSN_NOP, model_m32rx_nop, { { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 29534e98e3e1Schristos { M32RXF_INSN_NOT, model_m32rx_not, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29544e98e3e1Schristos { M32RXF_INSN_RAC_DSI, model_m32rx_rac_dsi, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29554e98e3e1Schristos { M32RXF_INSN_RACH_DSI, model_m32rx_rach_dsi, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29564e98e3e1Schristos { M32RXF_INSN_RTE, model_m32rx_rte, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29574e98e3e1Schristos { M32RXF_INSN_SETH, model_m32rx_seth, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29584e98e3e1Schristos { M32RXF_INSN_SLL, model_m32rx_sll, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29594e98e3e1Schristos { M32RXF_INSN_SLL3, model_m32rx_sll3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29604e98e3e1Schristos { M32RXF_INSN_SLLI, model_m32rx_slli, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29614e98e3e1Schristos { M32RXF_INSN_SRA, model_m32rx_sra, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29624e98e3e1Schristos { M32RXF_INSN_SRA3, model_m32rx_sra3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29634e98e3e1Schristos { M32RXF_INSN_SRAI, model_m32rx_srai, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29644e98e3e1Schristos { M32RXF_INSN_SRL, model_m32rx_srl, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29654e98e3e1Schristos { M32RXF_INSN_SRL3, model_m32rx_srl3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29664e98e3e1Schristos { M32RXF_INSN_SRLI, model_m32rx_srli, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29674e98e3e1Schristos { M32RXF_INSN_ST, model_m32rx_st, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } }, 29684e98e3e1Schristos { M32RXF_INSN_ST_D, model_m32rx_st_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } }, 29694e98e3e1Schristos { M32RXF_INSN_STB, model_m32rx_stb, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } }, 29704e98e3e1Schristos { M32RXF_INSN_STB_D, model_m32rx_stb_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } }, 29714e98e3e1Schristos { M32RXF_INSN_STH, model_m32rx_sth, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } }, 29724e98e3e1Schristos { M32RXF_INSN_STH_D, model_m32rx_sth_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } }, 29734e98e3e1Schristos { M32RXF_INSN_ST_PLUS, model_m32rx_st_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 29744e98e3e1Schristos { M32RXF_INSN_STH_PLUS, model_m32rx_sth_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 29754e98e3e1Schristos { M32RXF_INSN_STB_PLUS, model_m32rx_stb_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 29764e98e3e1Schristos { M32RXF_INSN_ST_MINUS, model_m32rx_st_minus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } }, 29774e98e3e1Schristos { M32RXF_INSN_SUB, model_m32rx_sub, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29784e98e3e1Schristos { M32RXF_INSN_SUBV, model_m32rx_subv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29794e98e3e1Schristos { M32RXF_INSN_SUBX, model_m32rx_subx, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29804e98e3e1Schristos { M32RXF_INSN_TRAP, model_m32rx_trap, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29814e98e3e1Schristos { M32RXF_INSN_UNLOCK, model_m32rx_unlock, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } }, 29824e98e3e1Schristos { M32RXF_INSN_SATB, model_m32rx_satb, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29834e98e3e1Schristos { M32RXF_INSN_SATH, model_m32rx_sath, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29844e98e3e1Schristos { M32RXF_INSN_SAT, model_m32rx_sat, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29854e98e3e1Schristos { M32RXF_INSN_PCMPBZ, model_m32rx_pcmpbz, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } }, 29864e98e3e1Schristos { M32RXF_INSN_SADD, model_m32rx_sadd, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29874e98e3e1Schristos { M32RXF_INSN_MACWU1, model_m32rx_macwu1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29884e98e3e1Schristos { M32RXF_INSN_MSBLO, model_m32rx_msblo, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29894e98e3e1Schristos { M32RXF_INSN_MULWU1, model_m32rx_mulwu1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29904e98e3e1Schristos { M32RXF_INSN_MACLH1, model_m32rx_maclh1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } }, 29914e98e3e1Schristos { M32RXF_INSN_SC, model_m32rx_sc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29924e98e3e1Schristos { M32RXF_INSN_SNC, model_m32rx_snc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29934e98e3e1Schristos { M32RXF_INSN_CLRPSW, model_m32rx_clrpsw, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29944e98e3e1Schristos { M32RXF_INSN_SETPSW, model_m32rx_setpsw, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29954e98e3e1Schristos { M32RXF_INSN_BSET, model_m32rx_bset, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29964e98e3e1Schristos { M32RXF_INSN_BCLR, model_m32rx_bclr, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29974e98e3e1Schristos { M32RXF_INSN_BTST, model_m32rx_btst, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } }, 29984e98e3e1Schristos }; 29994e98e3e1Schristos 30004e98e3e1Schristos #endif /* WITH_PROFILE_MODEL_P */ 30014e98e3e1Schristos 30024e98e3e1Schristos static void 30034e98e3e1Schristos m32rx_model_init (SIM_CPU *cpu) 30044e98e3e1Schristos { 30054e98e3e1Schristos CPU_MODEL_DATA (cpu) = (void *) zalloc (sizeof (MODEL_M32RX_DATA)); 30064e98e3e1Schristos } 30074e98e3e1Schristos 30084e98e3e1Schristos #if WITH_PROFILE_MODEL_P 30094e98e3e1Schristos #define TIMING_DATA(td) td 30104e98e3e1Schristos #else 30114e98e3e1Schristos #define TIMING_DATA(td) 0 30124e98e3e1Schristos #endif 30134e98e3e1Schristos 3014ba340e45Schristos static const SIM_MODEL m32rx_models[] = 30154e98e3e1Schristos { 30164e98e3e1Schristos { "m32rx", & m32rx_mach, MODEL_M32RX, TIMING_DATA (& m32rx_timing[0]), m32rx_model_init }, 30174e98e3e1Schristos { 0 } 30184e98e3e1Schristos }; 30194e98e3e1Schristos 30204e98e3e1Schristos /* The properties of this cpu's implementation. */ 30214e98e3e1Schristos 3022ba340e45Schristos static const SIM_MACH_IMP_PROPERTIES m32rxf_imp_properties = 30234e98e3e1Schristos { 30244e98e3e1Schristos sizeof (SIM_CPU), 30254e98e3e1Schristos #if WITH_SCACHE 30264e98e3e1Schristos sizeof (SCACHE) 30274e98e3e1Schristos #else 30284e98e3e1Schristos 0 30294e98e3e1Schristos #endif 30304e98e3e1Schristos }; 30314e98e3e1Schristos 30324e98e3e1Schristos 30334e98e3e1Schristos static void 30344e98e3e1Schristos m32rxf_prepare_run (SIM_CPU *cpu) 30354e98e3e1Schristos { 30364e98e3e1Schristos if (CPU_IDESC (cpu) == NULL) 30374e98e3e1Schristos m32rxf_init_idesc_table (cpu); 30384e98e3e1Schristos } 30394e98e3e1Schristos 30404e98e3e1Schristos static const CGEN_INSN * 30414e98e3e1Schristos m32rxf_get_idata (SIM_CPU *cpu, int inum) 30424e98e3e1Schristos { 30434e98e3e1Schristos return CPU_IDESC (cpu) [inum].idata; 30444e98e3e1Schristos } 30454e98e3e1Schristos 30464e98e3e1Schristos static void 30474e98e3e1Schristos m32rx_init_cpu (SIM_CPU *cpu) 30484e98e3e1Schristos { 30494e98e3e1Schristos CPU_REG_FETCH (cpu) = m32rxf_fetch_register; 30504e98e3e1Schristos CPU_REG_STORE (cpu) = m32rxf_store_register; 30514e98e3e1Schristos CPU_PC_FETCH (cpu) = m32rxf_h_pc_get; 30524e98e3e1Schristos CPU_PC_STORE (cpu) = m32rxf_h_pc_set; 30534e98e3e1Schristos CPU_GET_IDATA (cpu) = m32rxf_get_idata; 30544e98e3e1Schristos CPU_MAX_INSNS (cpu) = M32RXF_INSN__MAX; 30554e98e3e1Schristos CPU_INSN_NAME (cpu) = cgen_insn_name; 30564e98e3e1Schristos CPU_FULL_ENGINE_FN (cpu) = m32rxf_engine_run_full; 30574e98e3e1Schristos #if WITH_FAST 30584e98e3e1Schristos CPU_FAST_ENGINE_FN (cpu) = m32rxf_engine_run_fast; 30594e98e3e1Schristos #else 30604e98e3e1Schristos CPU_FAST_ENGINE_FN (cpu) = m32rxf_engine_run_full; 30614e98e3e1Schristos #endif 30624e98e3e1Schristos } 30634e98e3e1Schristos 3064ba340e45Schristos const SIM_MACH m32rx_mach = 30654e98e3e1Schristos { 30664e98e3e1Schristos "m32rx", "m32rx", MACH_M32RX, 30674e98e3e1Schristos 32, 32, & m32rx_models[0], & m32rxf_imp_properties, 30684e98e3e1Schristos m32rx_init_cpu, 30694e98e3e1Schristos m32rxf_prepare_run 30704e98e3e1Schristos }; 30714e98e3e1Schristos 3072