xref: /netbsd-src/external/gpl3/gdb/dist/sim/m32r/model2.c (revision 05fa08567a80471fd0eb3843a238392874f2577c)
14e98e3e1Schristos /* Simulator model support for m32r2f.
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 m32r2f
264e98e3e1Schristos #define WANT_CPU_M32R2F
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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
3384e98e3e1Schristos   }
3394e98e3e1Schristos   return cycles;
3404e98e3e1Schristos #undef FLD
3414e98e3e1Schristos }
3424e98e3e1Schristos 
3434e98e3e1Schristos static int
3444e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
3564e98e3e1Schristos   }
3574e98e3e1Schristos   return cycles;
3584e98e3e1Schristos #undef FLD
3594e98e3e1Schristos }
3604e98e3e1Schristos 
3614e98e3e1Schristos static int
3624e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
5654e98e3e1Schristos   }
5664e98e3e1Schristos   return cycles;
5674e98e3e1Schristos #undef FLD
5684e98e3e1Schristos }
5694e98e3e1Schristos 
5704e98e3e1Schristos static int
5714e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
5834e98e3e1Schristos   }
5844e98e3e1Schristos   return cycles;
5854e98e3e1Schristos #undef FLD
5864e98e3e1Schristos }
5874e98e3e1Schristos 
5884e98e3e1Schristos static int
5894e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
6014e98e3e1Schristos   }
6024e98e3e1Schristos   return cycles;
6034e98e3e1Schristos #undef FLD
6044e98e3e1Schristos }
6054e98e3e1Schristos 
6064e98e3e1Schristos static int
6074e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
6194e98e3e1Schristos   }
6204e98e3e1Schristos   return cycles;
6214e98e3e1Schristos #undef FLD
6224e98e3e1Schristos }
6234e98e3e1Schristos 
6244e98e3e1Schristos static int
6254e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
6374e98e3e1Schristos   }
6384e98e3e1Schristos   return cycles;
6394e98e3e1Schristos #undef FLD
6404e98e3e1Schristos }
6414e98e3e1Schristos 
6424e98e3e1Schristos static int
6434e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
6554e98e3e1Schristos   }
6564e98e3e1Schristos   return cycles;
6574e98e3e1Schristos #undef FLD
6584e98e3e1Schristos }
6594e98e3e1Schristos 
6604e98e3e1Schristos static int
6614e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
7024e98e3e1Schristos   }
7034e98e3e1Schristos   return cycles;
7044e98e3e1Schristos #undef FLD
7054e98e3e1Schristos }
7064e98e3e1Schristos 
7074e98e3e1Schristos static int
7084e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
7204e98e3e1Schristos   }
7214e98e3e1Schristos   return cycles;
7224e98e3e1Schristos #undef FLD
7234e98e3e1Schristos }
7244e98e3e1Schristos 
7254e98e3e1Schristos static int
7264e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
7384e98e3e1Schristos   }
7394e98e3e1Schristos   return cycles;
7404e98e3e1Schristos #undef FLD
7414e98e3e1Schristos }
7424e98e3e1Schristos 
7434e98e3e1Schristos static int
7444e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
7564e98e3e1Schristos   }
7574e98e3e1Schristos   return cycles;
7584e98e3e1Schristos #undef FLD
7594e98e3e1Schristos }
7604e98e3e1Schristos 
7614e98e3e1Schristos static int
7624e98e3e1Schristos model_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_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 += m32r2f_model_m32r2_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_m32r2_remh (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 += m32r2f_model_m32r2_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_m32r2_remuh (SIM_CPU *current_cpu, void *sem_arg)
10144e98e3e1Schristos {
10154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.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     INT in_dr = -1;
10244e98e3e1Schristos     INT out_dr = -1;
10254e98e3e1Schristos     in_sr = FLD (in_sr);
10264e98e3e1Schristos     in_dr = FLD (in_dr);
10274e98e3e1Schristos     out_dr = FLD (out_dr);
10284e98e3e1Schristos     referenced |= 1 << 0;
10294e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
10304e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
10314e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
10324e98e3e1Schristos   }
10334e98e3e1Schristos   return cycles;
10344e98e3e1Schristos #undef FLD
10354e98e3e1Schristos }
10364e98e3e1Schristos 
10374e98e3e1Schristos static int
10384e98e3e1Schristos model_m32r2_remb (SIM_CPU *current_cpu, void *sem_arg)
10394e98e3e1Schristos {
10404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
10414e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
10424e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
10434e98e3e1Schristos   int cycles = 0;
10444e98e3e1Schristos   {
10454e98e3e1Schristos     int referenced = 0;
10464e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
10474e98e3e1Schristos     INT in_sr = -1;
10484e98e3e1Schristos     INT in_dr = -1;
10494e98e3e1Schristos     INT out_dr = -1;
10504e98e3e1Schristos     in_sr = FLD (in_sr);
10514e98e3e1Schristos     in_dr = FLD (in_dr);
10524e98e3e1Schristos     out_dr = FLD (out_dr);
10534e98e3e1Schristos     referenced |= 1 << 0;
10544e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
10554e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
10564e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
10574e98e3e1Schristos   }
10584e98e3e1Schristos   return cycles;
10594e98e3e1Schristos #undef FLD
10604e98e3e1Schristos }
10614e98e3e1Schristos 
10624e98e3e1Schristos static int
10634e98e3e1Schristos model_m32r2_remub (SIM_CPU *current_cpu, void *sem_arg)
10644e98e3e1Schristos {
10654e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
10664e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
10674e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
10684e98e3e1Schristos   int cycles = 0;
10694e98e3e1Schristos   {
10704e98e3e1Schristos     int referenced = 0;
10714e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
10724e98e3e1Schristos     INT in_sr = -1;
10734e98e3e1Schristos     INT in_dr = -1;
10744e98e3e1Schristos     INT out_dr = -1;
10754e98e3e1Schristos     in_sr = FLD (in_sr);
10764e98e3e1Schristos     in_dr = FLD (in_dr);
10774e98e3e1Schristos     out_dr = FLD (out_dr);
10784e98e3e1Schristos     referenced |= 1 << 0;
10794e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
10804e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
10814e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
10824e98e3e1Schristos   }
10834e98e3e1Schristos   return cycles;
10844e98e3e1Schristos #undef FLD
10854e98e3e1Schristos }
10864e98e3e1Schristos 
10874e98e3e1Schristos static int
10884e98e3e1Schristos model_m32r2_divuh (SIM_CPU *current_cpu, void *sem_arg)
10894e98e3e1Schristos {
10904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
10914e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
10924e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
10934e98e3e1Schristos   int cycles = 0;
10944e98e3e1Schristos   {
10954e98e3e1Schristos     int referenced = 0;
10964e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
10974e98e3e1Schristos     INT in_sr = -1;
10984e98e3e1Schristos     INT in_dr = -1;
10994e98e3e1Schristos     INT out_dr = -1;
11004e98e3e1Schristos     in_sr = FLD (in_sr);
11014e98e3e1Schristos     in_dr = FLD (in_dr);
11024e98e3e1Schristos     out_dr = FLD (out_dr);
11034e98e3e1Schristos     referenced |= 1 << 0;
11044e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
11054e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
11064e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
11074e98e3e1Schristos   }
11084e98e3e1Schristos   return cycles;
11094e98e3e1Schristos #undef FLD
11104e98e3e1Schristos }
11114e98e3e1Schristos 
11124e98e3e1Schristos static int
11134e98e3e1Schristos model_m32r2_divb (SIM_CPU *current_cpu, void *sem_arg)
11144e98e3e1Schristos {
11154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
11164e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
11174e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
11184e98e3e1Schristos   int cycles = 0;
11194e98e3e1Schristos   {
11204e98e3e1Schristos     int referenced = 0;
11214e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
11224e98e3e1Schristos     INT in_sr = -1;
11234e98e3e1Schristos     INT in_dr = -1;
11244e98e3e1Schristos     INT out_dr = -1;
11254e98e3e1Schristos     in_sr = FLD (in_sr);
11264e98e3e1Schristos     in_dr = FLD (in_dr);
11274e98e3e1Schristos     out_dr = FLD (out_dr);
11284e98e3e1Schristos     referenced |= 1 << 0;
11294e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
11304e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
11314e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
11324e98e3e1Schristos   }
11334e98e3e1Schristos   return cycles;
11344e98e3e1Schristos #undef FLD
11354e98e3e1Schristos }
11364e98e3e1Schristos 
11374e98e3e1Schristos static int
11384e98e3e1Schristos model_m32r2_divub (SIM_CPU *current_cpu, void *sem_arg)
11394e98e3e1Schristos {
11404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
11414e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
11424e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
11434e98e3e1Schristos   int cycles = 0;
11444e98e3e1Schristos   {
11454e98e3e1Schristos     int referenced = 0;
11464e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
11474e98e3e1Schristos     INT in_sr = -1;
11484e98e3e1Schristos     INT in_dr = -1;
11494e98e3e1Schristos     INT out_dr = -1;
11504e98e3e1Schristos     in_sr = FLD (in_sr);
11514e98e3e1Schristos     in_dr = FLD (in_dr);
11524e98e3e1Schristos     out_dr = FLD (out_dr);
11534e98e3e1Schristos     referenced |= 1 << 0;
11544e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
11554e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
11564e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
11574e98e3e1Schristos   }
11584e98e3e1Schristos   return cycles;
11594e98e3e1Schristos #undef FLD
11604e98e3e1Schristos }
11614e98e3e1Schristos 
11624e98e3e1Schristos static int
11634e98e3e1Schristos model_m32r2_divh (SIM_CPU *current_cpu, void *sem_arg)
11644e98e3e1Schristos {
11654e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
11664e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
11674e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
11684e98e3e1Schristos   int cycles = 0;
11694e98e3e1Schristos   {
11704e98e3e1Schristos     int referenced = 0;
11714e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
11724e98e3e1Schristos     INT in_sr = -1;
11734e98e3e1Schristos     INT in_dr = -1;
11744e98e3e1Schristos     INT out_dr = -1;
11754e98e3e1Schristos     in_sr = FLD (in_sr);
11764e98e3e1Schristos     in_dr = FLD (in_dr);
11774e98e3e1Schristos     out_dr = FLD (out_dr);
11784e98e3e1Schristos     referenced |= 1 << 0;
11794e98e3e1Schristos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
11804e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
11814e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
11824e98e3e1Schristos   }
11834e98e3e1Schristos   return cycles;
11844e98e3e1Schristos #undef FLD
11854e98e3e1Schristos }
11864e98e3e1Schristos 
11874e98e3e1Schristos static int
11884e98e3e1Schristos model_m32r2_jc (SIM_CPU *current_cpu, void *sem_arg)
11894e98e3e1Schristos {
11904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f
11914e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
11924e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
11934e98e3e1Schristos   int cycles = 0;
11944e98e3e1Schristos   {
11954e98e3e1Schristos     int referenced = 0;
11964e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
11974e98e3e1Schristos     INT in_sr = -1;
11984e98e3e1Schristos     in_sr = FLD (in_sr);
11994e98e3e1Schristos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
12004e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
12014e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
12024e98e3e1Schristos   }
12034e98e3e1Schristos   return cycles;
12044e98e3e1Schristos #undef FLD
12054e98e3e1Schristos }
12064e98e3e1Schristos 
12074e98e3e1Schristos static int
12084e98e3e1Schristos model_m32r2_jnc (SIM_CPU *current_cpu, void *sem_arg)
12094e98e3e1Schristos {
12104e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f
12114e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
12124e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
12134e98e3e1Schristos   int cycles = 0;
12144e98e3e1Schristos   {
12154e98e3e1Schristos     int referenced = 0;
12164e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
12174e98e3e1Schristos     INT in_sr = -1;
12184e98e3e1Schristos     in_sr = FLD (in_sr);
12194e98e3e1Schristos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
12204e98e3e1Schristos     if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
12214e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
12224e98e3e1Schristos   }
12234e98e3e1Schristos   return cycles;
12244e98e3e1Schristos #undef FLD
12254e98e3e1Schristos }
12264e98e3e1Schristos 
12274e98e3e1Schristos static int
12284e98e3e1Schristos model_m32r2_jl (SIM_CPU *current_cpu, void *sem_arg)
12294e98e3e1Schristos {
12304e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f
12314e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
12324e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
12334e98e3e1Schristos   int cycles = 0;
12344e98e3e1Schristos   {
12354e98e3e1Schristos     int referenced = 0;
12364e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
12374e98e3e1Schristos     INT in_sr = -1;
12384e98e3e1Schristos     in_sr = FLD (in_sr);
12394e98e3e1Schristos     referenced |= 1 << 0;
12404e98e3e1Schristos     referenced |= 1 << 1;
12414e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
12424e98e3e1Schristos   }
12434e98e3e1Schristos   return cycles;
12444e98e3e1Schristos #undef FLD
12454e98e3e1Schristos }
12464e98e3e1Schristos 
12474e98e3e1Schristos static int
12484e98e3e1Schristos model_m32r2_jmp (SIM_CPU *current_cpu, void *sem_arg)
12494e98e3e1Schristos {
12504e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f
12514e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
12524e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
12534e98e3e1Schristos   int cycles = 0;
12544e98e3e1Schristos   {
12554e98e3e1Schristos     int referenced = 0;
12564e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
12574e98e3e1Schristos     INT in_sr = -1;
12584e98e3e1Schristos     in_sr = FLD (in_sr);
12594e98e3e1Schristos     referenced |= 1 << 0;
12604e98e3e1Schristos     referenced |= 1 << 1;
12614e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_cti (current_cpu, idesc, 0, referenced, in_sr);
12624e98e3e1Schristos   }
12634e98e3e1Schristos   return cycles;
12644e98e3e1Schristos #undef FLD
12654e98e3e1Schristos }
12664e98e3e1Schristos 
12674e98e3e1Schristos static int
12684e98e3e1Schristos model_m32r2_ld (SIM_CPU *current_cpu, void *sem_arg)
12694e98e3e1Schristos {
12704e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
12714e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
12724e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
12734e98e3e1Schristos   int cycles = 0;
12744e98e3e1Schristos   {
12754e98e3e1Schristos     int referenced = 0;
12764e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
12774e98e3e1Schristos     INT in_sr = 0;
12784e98e3e1Schristos     INT out_dr = 0;
12794e98e3e1Schristos     in_sr = FLD (in_sr);
12804e98e3e1Schristos     out_dr = FLD (out_dr);
12814e98e3e1Schristos     referenced |= 1 << 0;
12824e98e3e1Schristos     referenced |= 1 << 1;
12834e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
12844e98e3e1Schristos   }
12854e98e3e1Schristos   return cycles;
12864e98e3e1Schristos #undef FLD
12874e98e3e1Schristos }
12884e98e3e1Schristos 
12894e98e3e1Schristos static int
12904e98e3e1Schristos model_m32r2_ld_d (SIM_CPU *current_cpu, void *sem_arg)
12914e98e3e1Schristos {
12924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
12934e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
12944e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
12954e98e3e1Schristos   int cycles = 0;
12964e98e3e1Schristos   {
12974e98e3e1Schristos     int referenced = 0;
12984e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
12994e98e3e1Schristos     INT in_sr = 0;
13004e98e3e1Schristos     INT out_dr = 0;
13014e98e3e1Schristos     in_sr = FLD (in_sr);
13024e98e3e1Schristos     out_dr = FLD (out_dr);
13034e98e3e1Schristos     referenced |= 1 << 0;
13044e98e3e1Schristos     referenced |= 1 << 1;
13054e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
13064e98e3e1Schristos   }
13074e98e3e1Schristos   return cycles;
13084e98e3e1Schristos #undef FLD
13094e98e3e1Schristos }
13104e98e3e1Schristos 
13114e98e3e1Schristos static int
13124e98e3e1Schristos model_m32r2_ldb (SIM_CPU *current_cpu, void *sem_arg)
13134e98e3e1Schristos {
13144e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
13154e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
13164e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
13174e98e3e1Schristos   int cycles = 0;
13184e98e3e1Schristos   {
13194e98e3e1Schristos     int referenced = 0;
13204e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
13214e98e3e1Schristos     INT in_sr = 0;
13224e98e3e1Schristos     INT out_dr = 0;
13234e98e3e1Schristos     in_sr = FLD (in_sr);
13244e98e3e1Schristos     out_dr = FLD (out_dr);
13254e98e3e1Schristos     referenced |= 1 << 0;
13264e98e3e1Schristos     referenced |= 1 << 1;
13274e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
13284e98e3e1Schristos   }
13294e98e3e1Schristos   return cycles;
13304e98e3e1Schristos #undef FLD
13314e98e3e1Schristos }
13324e98e3e1Schristos 
13334e98e3e1Schristos static int
13344e98e3e1Schristos model_m32r2_ldb_d (SIM_CPU *current_cpu, void *sem_arg)
13354e98e3e1Schristos {
13364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
13374e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
13384e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
13394e98e3e1Schristos   int cycles = 0;
13404e98e3e1Schristos   {
13414e98e3e1Schristos     int referenced = 0;
13424e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
13434e98e3e1Schristos     INT in_sr = 0;
13444e98e3e1Schristos     INT out_dr = 0;
13454e98e3e1Schristos     in_sr = FLD (in_sr);
13464e98e3e1Schristos     out_dr = FLD (out_dr);
13474e98e3e1Schristos     referenced |= 1 << 0;
13484e98e3e1Schristos     referenced |= 1 << 1;
13494e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
13504e98e3e1Schristos   }
13514e98e3e1Schristos   return cycles;
13524e98e3e1Schristos #undef FLD
13534e98e3e1Schristos }
13544e98e3e1Schristos 
13554e98e3e1Schristos static int
13564e98e3e1Schristos model_m32r2_ldh (SIM_CPU *current_cpu, void *sem_arg)
13574e98e3e1Schristos {
13584e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
13594e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
13604e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
13614e98e3e1Schristos   int cycles = 0;
13624e98e3e1Schristos   {
13634e98e3e1Schristos     int referenced = 0;
13644e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
13654e98e3e1Schristos     INT in_sr = 0;
13664e98e3e1Schristos     INT out_dr = 0;
13674e98e3e1Schristos     in_sr = FLD (in_sr);
13684e98e3e1Schristos     out_dr = FLD (out_dr);
13694e98e3e1Schristos     referenced |= 1 << 0;
13704e98e3e1Schristos     referenced |= 1 << 1;
13714e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
13724e98e3e1Schristos   }
13734e98e3e1Schristos   return cycles;
13744e98e3e1Schristos #undef FLD
13754e98e3e1Schristos }
13764e98e3e1Schristos 
13774e98e3e1Schristos static int
13784e98e3e1Schristos model_m32r2_ldh_d (SIM_CPU *current_cpu, void *sem_arg)
13794e98e3e1Schristos {
13804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
13814e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
13824e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
13834e98e3e1Schristos   int cycles = 0;
13844e98e3e1Schristos   {
13854e98e3e1Schristos     int referenced = 0;
13864e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
13874e98e3e1Schristos     INT in_sr = 0;
13884e98e3e1Schristos     INT out_dr = 0;
13894e98e3e1Schristos     in_sr = FLD (in_sr);
13904e98e3e1Schristos     out_dr = FLD (out_dr);
13914e98e3e1Schristos     referenced |= 1 << 0;
13924e98e3e1Schristos     referenced |= 1 << 1;
13934e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
13944e98e3e1Schristos   }
13954e98e3e1Schristos   return cycles;
13964e98e3e1Schristos #undef FLD
13974e98e3e1Schristos }
13984e98e3e1Schristos 
13994e98e3e1Schristos static int
14004e98e3e1Schristos model_m32r2_ldub (SIM_CPU *current_cpu, void *sem_arg)
14014e98e3e1Schristos {
14024e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
14034e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
14044e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
14054e98e3e1Schristos   int cycles = 0;
14064e98e3e1Schristos   {
14074e98e3e1Schristos     int referenced = 0;
14084e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
14094e98e3e1Schristos     INT in_sr = 0;
14104e98e3e1Schristos     INT out_dr = 0;
14114e98e3e1Schristos     in_sr = FLD (in_sr);
14124e98e3e1Schristos     out_dr = FLD (out_dr);
14134e98e3e1Schristos     referenced |= 1 << 0;
14144e98e3e1Schristos     referenced |= 1 << 1;
14154e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
14164e98e3e1Schristos   }
14174e98e3e1Schristos   return cycles;
14184e98e3e1Schristos #undef FLD
14194e98e3e1Schristos }
14204e98e3e1Schristos 
14214e98e3e1Schristos static int
14224e98e3e1Schristos model_m32r2_ldub_d (SIM_CPU *current_cpu, void *sem_arg)
14234e98e3e1Schristos {
14244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
14254e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
14264e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
14274e98e3e1Schristos   int cycles = 0;
14284e98e3e1Schristos   {
14294e98e3e1Schristos     int referenced = 0;
14304e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
14314e98e3e1Schristos     INT in_sr = 0;
14324e98e3e1Schristos     INT out_dr = 0;
14334e98e3e1Schristos     in_sr = FLD (in_sr);
14344e98e3e1Schristos     out_dr = FLD (out_dr);
14354e98e3e1Schristos     referenced |= 1 << 0;
14364e98e3e1Schristos     referenced |= 1 << 1;
14374e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
14384e98e3e1Schristos   }
14394e98e3e1Schristos   return cycles;
14404e98e3e1Schristos #undef FLD
14414e98e3e1Schristos }
14424e98e3e1Schristos 
14434e98e3e1Schristos static int
14444e98e3e1Schristos model_m32r2_lduh (SIM_CPU *current_cpu, void *sem_arg)
14454e98e3e1Schristos {
14464e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
14474e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
14484e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
14494e98e3e1Schristos   int cycles = 0;
14504e98e3e1Schristos   {
14514e98e3e1Schristos     int referenced = 0;
14524e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
14534e98e3e1Schristos     INT in_sr = 0;
14544e98e3e1Schristos     INT out_dr = 0;
14554e98e3e1Schristos     in_sr = FLD (in_sr);
14564e98e3e1Schristos     out_dr = FLD (out_dr);
14574e98e3e1Schristos     referenced |= 1 << 0;
14584e98e3e1Schristos     referenced |= 1 << 1;
14594e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
14604e98e3e1Schristos   }
14614e98e3e1Schristos   return cycles;
14624e98e3e1Schristos #undef FLD
14634e98e3e1Schristos }
14644e98e3e1Schristos 
14654e98e3e1Schristos static int
14664e98e3e1Schristos model_m32r2_lduh_d (SIM_CPU *current_cpu, void *sem_arg)
14674e98e3e1Schristos {
14684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
14694e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
14704e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
14714e98e3e1Schristos   int cycles = 0;
14724e98e3e1Schristos   {
14734e98e3e1Schristos     int referenced = 0;
14744e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
14754e98e3e1Schristos     INT in_sr = 0;
14764e98e3e1Schristos     INT out_dr = 0;
14774e98e3e1Schristos     in_sr = FLD (in_sr);
14784e98e3e1Schristos     out_dr = FLD (out_dr);
14794e98e3e1Schristos     referenced |= 1 << 0;
14804e98e3e1Schristos     referenced |= 1 << 1;
14814e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
14824e98e3e1Schristos   }
14834e98e3e1Schristos   return cycles;
14844e98e3e1Schristos #undef FLD
14854e98e3e1Schristos }
14864e98e3e1Schristos 
14874e98e3e1Schristos static int
14884e98e3e1Schristos model_m32r2_ld_plus (SIM_CPU *current_cpu, void *sem_arg)
14894e98e3e1Schristos {
14904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
14914e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
14924e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
14934e98e3e1Schristos   int cycles = 0;
14944e98e3e1Schristos   {
14954e98e3e1Schristos     int referenced = 0;
14964e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
14974e98e3e1Schristos     INT in_sr = 0;
14984e98e3e1Schristos     INT out_dr = 0;
14994e98e3e1Schristos     in_sr = FLD (in_sr);
15004e98e3e1Schristos     out_dr = FLD (out_dr);
15014e98e3e1Schristos     referenced |= 1 << 0;
15024e98e3e1Schristos     referenced |= 1 << 1;
15034e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
15044e98e3e1Schristos   }
15054e98e3e1Schristos   {
15064e98e3e1Schristos     int referenced = 0;
15074e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
15084e98e3e1Schristos     INT in_sr = -1;
15094e98e3e1Schristos     INT in_dr = -1;
15104e98e3e1Schristos     INT out_dr = -1;
15114e98e3e1Schristos     in_dr = FLD (in_sr);
15124e98e3e1Schristos     out_dr = FLD (out_sr);
15134e98e3e1Schristos     referenced |= 1 << 0;
15144e98e3e1Schristos     referenced |= 1 << 2;
15154e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
15164e98e3e1Schristos   }
15174e98e3e1Schristos   return cycles;
15184e98e3e1Schristos #undef FLD
15194e98e3e1Schristos }
15204e98e3e1Schristos 
15214e98e3e1Schristos static int
15224e98e3e1Schristos model_m32r2_ld24 (SIM_CPU *current_cpu, void *sem_arg)
15234e98e3e1Schristos {
15244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld24.f
15254e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
15264e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
15274e98e3e1Schristos   int cycles = 0;
15284e98e3e1Schristos   {
15294e98e3e1Schristos     int referenced = 0;
15304e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
15314e98e3e1Schristos     INT in_sr = -1;
15324e98e3e1Schristos     INT in_dr = -1;
15334e98e3e1Schristos     INT out_dr = -1;
15344e98e3e1Schristos     out_dr = FLD (out_dr);
15354e98e3e1Schristos     referenced |= 1 << 2;
15364e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
15374e98e3e1Schristos   }
15384e98e3e1Schristos   return cycles;
15394e98e3e1Schristos #undef FLD
15404e98e3e1Schristos }
15414e98e3e1Schristos 
15424e98e3e1Schristos static int
15434e98e3e1Schristos model_m32r2_ldi8 (SIM_CPU *current_cpu, void *sem_arg)
15444e98e3e1Schristos {
15454e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
15464e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
15474e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
15484e98e3e1Schristos   int cycles = 0;
15494e98e3e1Schristos   {
15504e98e3e1Schristos     int referenced = 0;
15514e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
15524e98e3e1Schristos     INT in_sr = -1;
15534e98e3e1Schristos     INT in_dr = -1;
15544e98e3e1Schristos     INT out_dr = -1;
15554e98e3e1Schristos     out_dr = FLD (out_dr);
15564e98e3e1Schristos     referenced |= 1 << 2;
15574e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
15584e98e3e1Schristos   }
15594e98e3e1Schristos   return cycles;
15604e98e3e1Schristos #undef FLD
15614e98e3e1Schristos }
15624e98e3e1Schristos 
15634e98e3e1Schristos static int
15644e98e3e1Schristos model_m32r2_ldi16 (SIM_CPU *current_cpu, void *sem_arg)
15654e98e3e1Schristos {
15664e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
15674e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
15684e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
15694e98e3e1Schristos   int cycles = 0;
15704e98e3e1Schristos   {
15714e98e3e1Schristos     int referenced = 0;
15724e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
15734e98e3e1Schristos     INT in_sr = -1;
15744e98e3e1Schristos     INT in_dr = -1;
15754e98e3e1Schristos     INT out_dr = -1;
15764e98e3e1Schristos     out_dr = FLD (out_dr);
15774e98e3e1Schristos     referenced |= 1 << 2;
15784e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
15794e98e3e1Schristos   }
15804e98e3e1Schristos   return cycles;
15814e98e3e1Schristos #undef FLD
15824e98e3e1Schristos }
15834e98e3e1Schristos 
15844e98e3e1Schristos static int
15854e98e3e1Schristos model_m32r2_lock (SIM_CPU *current_cpu, void *sem_arg)
15864e98e3e1Schristos {
15874e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
15884e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
15894e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
15904e98e3e1Schristos   int cycles = 0;
15914e98e3e1Schristos   {
15924e98e3e1Schristos     int referenced = 0;
15934e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
15944e98e3e1Schristos     INT in_sr = 0;
15954e98e3e1Schristos     INT out_dr = 0;
15964e98e3e1Schristos     in_sr = FLD (in_sr);
15974e98e3e1Schristos     out_dr = FLD (out_dr);
15984e98e3e1Schristos     referenced |= 1 << 0;
15994e98e3e1Schristos     referenced |= 1 << 1;
16004e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
16014e98e3e1Schristos   }
16024e98e3e1Schristos   return cycles;
16034e98e3e1Schristos #undef FLD
16044e98e3e1Schristos }
16054e98e3e1Schristos 
16064e98e3e1Schristos static int
16074e98e3e1Schristos model_m32r2_machi_a (SIM_CPU *current_cpu, void *sem_arg)
16084e98e3e1Schristos {
16094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
16104e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
16114e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
16124e98e3e1Schristos   int cycles = 0;
16134e98e3e1Schristos   {
16144e98e3e1Schristos     int referenced = 0;
16154e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
16164e98e3e1Schristos     INT in_src1 = -1;
16174e98e3e1Schristos     INT in_src2 = -1;
16184e98e3e1Schristos     in_src1 = FLD (in_src1);
16194e98e3e1Schristos     in_src2 = FLD (in_src2);
16204e98e3e1Schristos     referenced |= 1 << 0;
16214e98e3e1Schristos     referenced |= 1 << 1;
16224e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
16234e98e3e1Schristos   }
16244e98e3e1Schristos   return cycles;
16254e98e3e1Schristos #undef FLD
16264e98e3e1Schristos }
16274e98e3e1Schristos 
16284e98e3e1Schristos static int
16294e98e3e1Schristos model_m32r2_maclo_a (SIM_CPU *current_cpu, void *sem_arg)
16304e98e3e1Schristos {
16314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
16324e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
16334e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
16344e98e3e1Schristos   int cycles = 0;
16354e98e3e1Schristos   {
16364e98e3e1Schristos     int referenced = 0;
16374e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
16384e98e3e1Schristos     INT in_src1 = -1;
16394e98e3e1Schristos     INT in_src2 = -1;
16404e98e3e1Schristos     in_src1 = FLD (in_src1);
16414e98e3e1Schristos     in_src2 = FLD (in_src2);
16424e98e3e1Schristos     referenced |= 1 << 0;
16434e98e3e1Schristos     referenced |= 1 << 1;
16444e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
16454e98e3e1Schristos   }
16464e98e3e1Schristos   return cycles;
16474e98e3e1Schristos #undef FLD
16484e98e3e1Schristos }
16494e98e3e1Schristos 
16504e98e3e1Schristos static int
16514e98e3e1Schristos model_m32r2_macwhi_a (SIM_CPU *current_cpu, void *sem_arg)
16524e98e3e1Schristos {
16534e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
16544e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
16554e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
16564e98e3e1Schristos   int cycles = 0;
16574e98e3e1Schristos   {
16584e98e3e1Schristos     int referenced = 0;
16594e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
16604e98e3e1Schristos     INT in_src1 = -1;
16614e98e3e1Schristos     INT in_src2 = -1;
16624e98e3e1Schristos     in_src1 = FLD (in_src1);
16634e98e3e1Schristos     in_src2 = FLD (in_src2);
16644e98e3e1Schristos     referenced |= 1 << 0;
16654e98e3e1Schristos     referenced |= 1 << 1;
16664e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
16674e98e3e1Schristos   }
16684e98e3e1Schristos   return cycles;
16694e98e3e1Schristos #undef FLD
16704e98e3e1Schristos }
16714e98e3e1Schristos 
16724e98e3e1Schristos static int
16734e98e3e1Schristos model_m32r2_macwlo_a (SIM_CPU *current_cpu, void *sem_arg)
16744e98e3e1Schristos {
16754e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
16764e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
16774e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
16784e98e3e1Schristos   int cycles = 0;
16794e98e3e1Schristos   {
16804e98e3e1Schristos     int referenced = 0;
16814e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
16824e98e3e1Schristos     INT in_src1 = -1;
16834e98e3e1Schristos     INT in_src2 = -1;
16844e98e3e1Schristos     in_src1 = FLD (in_src1);
16854e98e3e1Schristos     in_src2 = FLD (in_src2);
16864e98e3e1Schristos     referenced |= 1 << 0;
16874e98e3e1Schristos     referenced |= 1 << 1;
16884e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
16894e98e3e1Schristos   }
16904e98e3e1Schristos   return cycles;
16914e98e3e1Schristos #undef FLD
16924e98e3e1Schristos }
16934e98e3e1Schristos 
16944e98e3e1Schristos static int
16954e98e3e1Schristos model_m32r2_mul (SIM_CPU *current_cpu, void *sem_arg)
16964e98e3e1Schristos {
16974e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
16984e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
16994e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
17004e98e3e1Schristos   int cycles = 0;
17014e98e3e1Schristos   {
17024e98e3e1Schristos     int referenced = 0;
17034e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
17044e98e3e1Schristos     INT in_sr = -1;
17054e98e3e1Schristos     INT in_dr = -1;
17064e98e3e1Schristos     INT out_dr = -1;
17074e98e3e1Schristos     in_sr = FLD (in_sr);
17084e98e3e1Schristos     in_dr = FLD (in_dr);
17094e98e3e1Schristos     out_dr = FLD (out_dr);
17104e98e3e1Schristos     referenced |= 1 << 0;
17114e98e3e1Schristos     referenced |= 1 << 1;
17124e98e3e1Schristos     referenced |= 1 << 2;
17134e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
17144e98e3e1Schristos   }
17154e98e3e1Schristos   return cycles;
17164e98e3e1Schristos #undef FLD
17174e98e3e1Schristos }
17184e98e3e1Schristos 
17194e98e3e1Schristos static int
17204e98e3e1Schristos model_m32r2_mulhi_a (SIM_CPU *current_cpu, void *sem_arg)
17214e98e3e1Schristos {
17224e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
17234e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
17244e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
17254e98e3e1Schristos   int cycles = 0;
17264e98e3e1Schristos   {
17274e98e3e1Schristos     int referenced = 0;
17284e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
17294e98e3e1Schristos     INT in_src1 = -1;
17304e98e3e1Schristos     INT in_src2 = -1;
17314e98e3e1Schristos     in_src1 = FLD (in_src1);
17324e98e3e1Schristos     in_src2 = FLD (in_src2);
17334e98e3e1Schristos     referenced |= 1 << 0;
17344e98e3e1Schristos     referenced |= 1 << 1;
17354e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
17364e98e3e1Schristos   }
17374e98e3e1Schristos   return cycles;
17384e98e3e1Schristos #undef FLD
17394e98e3e1Schristos }
17404e98e3e1Schristos 
17414e98e3e1Schristos static int
17424e98e3e1Schristos model_m32r2_mullo_a (SIM_CPU *current_cpu, void *sem_arg)
17434e98e3e1Schristos {
17444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
17454e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
17464e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
17474e98e3e1Schristos   int cycles = 0;
17484e98e3e1Schristos   {
17494e98e3e1Schristos     int referenced = 0;
17504e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
17514e98e3e1Schristos     INT in_src1 = -1;
17524e98e3e1Schristos     INT in_src2 = -1;
17534e98e3e1Schristos     in_src1 = FLD (in_src1);
17544e98e3e1Schristos     in_src2 = FLD (in_src2);
17554e98e3e1Schristos     referenced |= 1 << 0;
17564e98e3e1Schristos     referenced |= 1 << 1;
17574e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
17584e98e3e1Schristos   }
17594e98e3e1Schristos   return cycles;
17604e98e3e1Schristos #undef FLD
17614e98e3e1Schristos }
17624e98e3e1Schristos 
17634e98e3e1Schristos static int
17644e98e3e1Schristos model_m32r2_mulwhi_a (SIM_CPU *current_cpu, void *sem_arg)
17654e98e3e1Schristos {
17664e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
17674e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
17684e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
17694e98e3e1Schristos   int cycles = 0;
17704e98e3e1Schristos   {
17714e98e3e1Schristos     int referenced = 0;
17724e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
17734e98e3e1Schristos     INT in_src1 = -1;
17744e98e3e1Schristos     INT in_src2 = -1;
17754e98e3e1Schristos     in_src1 = FLD (in_src1);
17764e98e3e1Schristos     in_src2 = FLD (in_src2);
17774e98e3e1Schristos     referenced |= 1 << 0;
17784e98e3e1Schristos     referenced |= 1 << 1;
17794e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
17804e98e3e1Schristos   }
17814e98e3e1Schristos   return cycles;
17824e98e3e1Schristos #undef FLD
17834e98e3e1Schristos }
17844e98e3e1Schristos 
17854e98e3e1Schristos static int
17864e98e3e1Schristos model_m32r2_mulwlo_a (SIM_CPU *current_cpu, void *sem_arg)
17874e98e3e1Schristos {
17884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
17894e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
17904e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
17914e98e3e1Schristos   int cycles = 0;
17924e98e3e1Schristos   {
17934e98e3e1Schristos     int referenced = 0;
17944e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
17954e98e3e1Schristos     INT in_src1 = -1;
17964e98e3e1Schristos     INT in_src2 = -1;
17974e98e3e1Schristos     in_src1 = FLD (in_src1);
17984e98e3e1Schristos     in_src2 = FLD (in_src2);
17994e98e3e1Schristos     referenced |= 1 << 0;
18004e98e3e1Schristos     referenced |= 1 << 1;
18014e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
18024e98e3e1Schristos   }
18034e98e3e1Schristos   return cycles;
18044e98e3e1Schristos #undef FLD
18054e98e3e1Schristos }
18064e98e3e1Schristos 
18074e98e3e1Schristos static int
18084e98e3e1Schristos model_m32r2_mv (SIM_CPU *current_cpu, void *sem_arg)
18094e98e3e1Schristos {
18104e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
18114e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
18124e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
18134e98e3e1Schristos   int cycles = 0;
18144e98e3e1Schristos   {
18154e98e3e1Schristos     int referenced = 0;
18164e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
18174e98e3e1Schristos     INT in_sr = -1;
18184e98e3e1Schristos     INT in_dr = -1;
18194e98e3e1Schristos     INT out_dr = -1;
18204e98e3e1Schristos     in_sr = FLD (in_sr);
18214e98e3e1Schristos     out_dr = FLD (out_dr);
18224e98e3e1Schristos     referenced |= 1 << 0;
18234e98e3e1Schristos     referenced |= 1 << 2;
18244e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
18254e98e3e1Schristos   }
18264e98e3e1Schristos   return cycles;
18274e98e3e1Schristos #undef FLD
18284e98e3e1Schristos }
18294e98e3e1Schristos 
18304e98e3e1Schristos static int
18314e98e3e1Schristos model_m32r2_mvfachi_a (SIM_CPU *current_cpu, void *sem_arg)
18324e98e3e1Schristos {
18334e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
18344e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
18354e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
18364e98e3e1Schristos   int cycles = 0;
18374e98e3e1Schristos   {
18384e98e3e1Schristos     int referenced = 0;
18394e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
18404e98e3e1Schristos     INT in_sr = -1;
18414e98e3e1Schristos     INT in_dr = -1;
18424e98e3e1Schristos     INT out_dr = -1;
18434e98e3e1Schristos     out_dr = FLD (out_dr);
18444e98e3e1Schristos     referenced |= 1 << 2;
18454e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
18464e98e3e1Schristos   }
18474e98e3e1Schristos   return cycles;
18484e98e3e1Schristos #undef FLD
18494e98e3e1Schristos }
18504e98e3e1Schristos 
18514e98e3e1Schristos static int
18524e98e3e1Schristos model_m32r2_mvfaclo_a (SIM_CPU *current_cpu, void *sem_arg)
18534e98e3e1Schristos {
18544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
18554e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
18564e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
18574e98e3e1Schristos   int cycles = 0;
18584e98e3e1Schristos   {
18594e98e3e1Schristos     int referenced = 0;
18604e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
18614e98e3e1Schristos     INT in_sr = -1;
18624e98e3e1Schristos     INT in_dr = -1;
18634e98e3e1Schristos     INT out_dr = -1;
18644e98e3e1Schristos     out_dr = FLD (out_dr);
18654e98e3e1Schristos     referenced |= 1 << 2;
18664e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
18674e98e3e1Schristos   }
18684e98e3e1Schristos   return cycles;
18694e98e3e1Schristos #undef FLD
18704e98e3e1Schristos }
18714e98e3e1Schristos 
18724e98e3e1Schristos static int
18734e98e3e1Schristos model_m32r2_mvfacmi_a (SIM_CPU *current_cpu, void *sem_arg)
18744e98e3e1Schristos {
18754e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
18764e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
18774e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
18784e98e3e1Schristos   int cycles = 0;
18794e98e3e1Schristos   {
18804e98e3e1Schristos     int referenced = 0;
18814e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
18824e98e3e1Schristos     INT in_sr = -1;
18834e98e3e1Schristos     INT in_dr = -1;
18844e98e3e1Schristos     INT out_dr = -1;
18854e98e3e1Schristos     out_dr = FLD (out_dr);
18864e98e3e1Schristos     referenced |= 1 << 2;
18874e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
18884e98e3e1Schristos   }
18894e98e3e1Schristos   return cycles;
18904e98e3e1Schristos #undef FLD
18914e98e3e1Schristos }
18924e98e3e1Schristos 
18934e98e3e1Schristos static int
18944e98e3e1Schristos model_m32r2_mvfc (SIM_CPU *current_cpu, void *sem_arg)
18954e98e3e1Schristos {
18964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
18974e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
18984e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
18994e98e3e1Schristos   int cycles = 0;
19004e98e3e1Schristos   {
19014e98e3e1Schristos     int referenced = 0;
19024e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
19034e98e3e1Schristos     INT in_sr = -1;
19044e98e3e1Schristos     INT in_dr = -1;
19054e98e3e1Schristos     INT out_dr = -1;
19064e98e3e1Schristos     out_dr = FLD (out_dr);
19074e98e3e1Schristos     referenced |= 1 << 2;
19084e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
19094e98e3e1Schristos   }
19104e98e3e1Schristos   return cycles;
19114e98e3e1Schristos #undef FLD
19124e98e3e1Schristos }
19134e98e3e1Schristos 
19144e98e3e1Schristos static int
19154e98e3e1Schristos model_m32r2_mvtachi_a (SIM_CPU *current_cpu, void *sem_arg)
19164e98e3e1Schristos {
19174e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
19184e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
19194e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
19204e98e3e1Schristos   int cycles = 0;
19214e98e3e1Schristos   {
19224e98e3e1Schristos     int referenced = 0;
19234e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
19244e98e3e1Schristos     INT in_sr = -1;
19254e98e3e1Schristos     INT in_dr = -1;
19264e98e3e1Schristos     INT out_dr = -1;
19274e98e3e1Schristos     in_sr = FLD (in_src1);
19284e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
19294e98e3e1Schristos   }
19304e98e3e1Schristos   return cycles;
19314e98e3e1Schristos #undef FLD
19324e98e3e1Schristos }
19334e98e3e1Schristos 
19344e98e3e1Schristos static int
19354e98e3e1Schristos model_m32r2_mvtaclo_a (SIM_CPU *current_cpu, void *sem_arg)
19364e98e3e1Schristos {
19374e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
19384e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
19394e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
19404e98e3e1Schristos   int cycles = 0;
19414e98e3e1Schristos   {
19424e98e3e1Schristos     int referenced = 0;
19434e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
19444e98e3e1Schristos     INT in_sr = -1;
19454e98e3e1Schristos     INT in_dr = -1;
19464e98e3e1Schristos     INT out_dr = -1;
19474e98e3e1Schristos     in_sr = FLD (in_src1);
19484e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
19494e98e3e1Schristos   }
19504e98e3e1Schristos   return cycles;
19514e98e3e1Schristos #undef FLD
19524e98e3e1Schristos }
19534e98e3e1Schristos 
19544e98e3e1Schristos static int
19554e98e3e1Schristos model_m32r2_mvtc (SIM_CPU *current_cpu, void *sem_arg)
19564e98e3e1Schristos {
19574e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
19584e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
19594e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
19604e98e3e1Schristos   int cycles = 0;
19614e98e3e1Schristos   {
19624e98e3e1Schristos     int referenced = 0;
19634e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
19644e98e3e1Schristos     INT in_sr = -1;
19654e98e3e1Schristos     INT in_dr = -1;
19664e98e3e1Schristos     INT out_dr = -1;
19674e98e3e1Schristos     in_sr = FLD (in_sr);
19684e98e3e1Schristos     referenced |= 1 << 0;
19694e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
19704e98e3e1Schristos   }
19714e98e3e1Schristos   return cycles;
19724e98e3e1Schristos #undef FLD
19734e98e3e1Schristos }
19744e98e3e1Schristos 
19754e98e3e1Schristos static int
19764e98e3e1Schristos model_m32r2_neg (SIM_CPU *current_cpu, void *sem_arg)
19774e98e3e1Schristos {
19784e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
19794e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
19804e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
19814e98e3e1Schristos   int cycles = 0;
19824e98e3e1Schristos   {
19834e98e3e1Schristos     int referenced = 0;
19844e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
19854e98e3e1Schristos     INT in_sr = -1;
19864e98e3e1Schristos     INT in_dr = -1;
19874e98e3e1Schristos     INT out_dr = -1;
19884e98e3e1Schristos     in_sr = FLD (in_sr);
19894e98e3e1Schristos     out_dr = FLD (out_dr);
19904e98e3e1Schristos     referenced |= 1 << 0;
19914e98e3e1Schristos     referenced |= 1 << 2;
19924e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
19934e98e3e1Schristos   }
19944e98e3e1Schristos   return cycles;
19954e98e3e1Schristos #undef FLD
19964e98e3e1Schristos }
19974e98e3e1Schristos 
19984e98e3e1Schristos static int
19994e98e3e1Schristos model_m32r2_nop (SIM_CPU *current_cpu, void *sem_arg)
20004e98e3e1Schristos {
20014e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
20024e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
20034e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
20044e98e3e1Schristos   int cycles = 0;
20054e98e3e1Schristos   {
20064e98e3e1Schristos     int referenced = 0;
20074e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
20084e98e3e1Schristos     INT in_sr = -1;
20094e98e3e1Schristos     INT in_dr = -1;
20104e98e3e1Schristos     INT out_dr = -1;
20114e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
20124e98e3e1Schristos   }
20134e98e3e1Schristos   return cycles;
20144e98e3e1Schristos #undef FLD
20154e98e3e1Schristos }
20164e98e3e1Schristos 
20174e98e3e1Schristos static int
20184e98e3e1Schristos model_m32r2_not (SIM_CPU *current_cpu, void *sem_arg)
20194e98e3e1Schristos {
20204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
20214e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
20224e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
20234e98e3e1Schristos   int cycles = 0;
20244e98e3e1Schristos   {
20254e98e3e1Schristos     int referenced = 0;
20264e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
20274e98e3e1Schristos     INT in_sr = -1;
20284e98e3e1Schristos     INT in_dr = -1;
20294e98e3e1Schristos     INT out_dr = -1;
20304e98e3e1Schristos     in_sr = FLD (in_sr);
20314e98e3e1Schristos     out_dr = FLD (out_dr);
20324e98e3e1Schristos     referenced |= 1 << 0;
20334e98e3e1Schristos     referenced |= 1 << 2;
20344e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
20354e98e3e1Schristos   }
20364e98e3e1Schristos   return cycles;
20374e98e3e1Schristos #undef FLD
20384e98e3e1Schristos }
20394e98e3e1Schristos 
20404e98e3e1Schristos static int
20414e98e3e1Schristos model_m32r2_rac_dsi (SIM_CPU *current_cpu, void *sem_arg)
20424e98e3e1Schristos {
20434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
20444e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
20454e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
20464e98e3e1Schristos   int cycles = 0;
20474e98e3e1Schristos   {
20484e98e3e1Schristos     int referenced = 0;
20494e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
20504e98e3e1Schristos     INT in_src1 = -1;
20514e98e3e1Schristos     INT in_src2 = -1;
20524e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
20534e98e3e1Schristos   }
20544e98e3e1Schristos   return cycles;
20554e98e3e1Schristos #undef FLD
20564e98e3e1Schristos }
20574e98e3e1Schristos 
20584e98e3e1Schristos static int
20594e98e3e1Schristos model_m32r2_rach_dsi (SIM_CPU *current_cpu, void *sem_arg)
20604e98e3e1Schristos {
20614e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
20624e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
20634e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
20644e98e3e1Schristos   int cycles = 0;
20654e98e3e1Schristos   {
20664e98e3e1Schristos     int referenced = 0;
20674e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
20684e98e3e1Schristos     INT in_src1 = -1;
20694e98e3e1Schristos     INT in_src2 = -1;
20704e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
20714e98e3e1Schristos   }
20724e98e3e1Schristos   return cycles;
20734e98e3e1Schristos #undef FLD
20744e98e3e1Schristos }
20754e98e3e1Schristos 
20764e98e3e1Schristos static int
20774e98e3e1Schristos model_m32r2_rte (SIM_CPU *current_cpu, void *sem_arg)
20784e98e3e1Schristos {
20794e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
20804e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
20814e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
20824e98e3e1Schristos   int cycles = 0;
20834e98e3e1Schristos   {
20844e98e3e1Schristos     int referenced = 0;
20854e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
20864e98e3e1Schristos     INT in_sr = -1;
20874e98e3e1Schristos     INT in_dr = -1;
20884e98e3e1Schristos     INT out_dr = -1;
20894e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
20904e98e3e1Schristos   }
20914e98e3e1Schristos   return cycles;
20924e98e3e1Schristos #undef FLD
20934e98e3e1Schristos }
20944e98e3e1Schristos 
20954e98e3e1Schristos static int
20964e98e3e1Schristos model_m32r2_seth (SIM_CPU *current_cpu, void *sem_arg)
20974e98e3e1Schristos {
20984e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f
20994e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
21004e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
21014e98e3e1Schristos   int cycles = 0;
21024e98e3e1Schristos   {
21034e98e3e1Schristos     int referenced = 0;
21044e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
21054e98e3e1Schristos     INT in_sr = -1;
21064e98e3e1Schristos     INT in_dr = -1;
21074e98e3e1Schristos     INT out_dr = -1;
21084e98e3e1Schristos     out_dr = FLD (out_dr);
21094e98e3e1Schristos     referenced |= 1 << 2;
21104e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
21114e98e3e1Schristos   }
21124e98e3e1Schristos   return cycles;
21134e98e3e1Schristos #undef FLD
21144e98e3e1Schristos }
21154e98e3e1Schristos 
21164e98e3e1Schristos static int
21174e98e3e1Schristos model_m32r2_sll (SIM_CPU *current_cpu, void *sem_arg)
21184e98e3e1Schristos {
21194e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
21204e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
21214e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
21224e98e3e1Schristos   int cycles = 0;
21234e98e3e1Schristos   {
21244e98e3e1Schristos     int referenced = 0;
21254e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
21264e98e3e1Schristos     INT in_sr = -1;
21274e98e3e1Schristos     INT in_dr = -1;
21284e98e3e1Schristos     INT out_dr = -1;
21294e98e3e1Schristos     in_sr = FLD (in_sr);
21304e98e3e1Schristos     in_dr = FLD (in_dr);
21314e98e3e1Schristos     out_dr = FLD (out_dr);
21324e98e3e1Schristos     referenced |= 1 << 0;
21334e98e3e1Schristos     referenced |= 1 << 1;
21344e98e3e1Schristos     referenced |= 1 << 2;
21354e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
21364e98e3e1Schristos   }
21374e98e3e1Schristos   return cycles;
21384e98e3e1Schristos #undef FLD
21394e98e3e1Schristos }
21404e98e3e1Schristos 
21414e98e3e1Schristos static int
21424e98e3e1Schristos model_m32r2_sll3 (SIM_CPU *current_cpu, void *sem_arg)
21434e98e3e1Schristos {
21444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
21454e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
21464e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
21474e98e3e1Schristos   int cycles = 0;
21484e98e3e1Schristos   {
21494e98e3e1Schristos     int referenced = 0;
21504e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
21514e98e3e1Schristos     INT in_sr = -1;
21524e98e3e1Schristos     INT in_dr = -1;
21534e98e3e1Schristos     INT out_dr = -1;
21544e98e3e1Schristos     in_sr = FLD (in_sr);
21554e98e3e1Schristos     out_dr = FLD (out_dr);
21564e98e3e1Schristos     referenced |= 1 << 0;
21574e98e3e1Schristos     referenced |= 1 << 2;
21584e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
21594e98e3e1Schristos   }
21604e98e3e1Schristos   return cycles;
21614e98e3e1Schristos #undef FLD
21624e98e3e1Schristos }
21634e98e3e1Schristos 
21644e98e3e1Schristos static int
21654e98e3e1Schristos model_m32r2_slli (SIM_CPU *current_cpu, void *sem_arg)
21664e98e3e1Schristos {
21674e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f
21684e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
21694e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
21704e98e3e1Schristos   int cycles = 0;
21714e98e3e1Schristos   {
21724e98e3e1Schristos     int referenced = 0;
21734e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
21744e98e3e1Schristos     INT in_sr = -1;
21754e98e3e1Schristos     INT in_dr = -1;
21764e98e3e1Schristos     INT out_dr = -1;
21774e98e3e1Schristos     in_dr = FLD (in_dr);
21784e98e3e1Schristos     out_dr = FLD (out_dr);
21794e98e3e1Schristos     referenced |= 1 << 1;
21804e98e3e1Schristos     referenced |= 1 << 2;
21814e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
21824e98e3e1Schristos   }
21834e98e3e1Schristos   return cycles;
21844e98e3e1Schristos #undef FLD
21854e98e3e1Schristos }
21864e98e3e1Schristos 
21874e98e3e1Schristos static int
21884e98e3e1Schristos model_m32r2_sra (SIM_CPU *current_cpu, void *sem_arg)
21894e98e3e1Schristos {
21904e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
21914e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
21924e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
21934e98e3e1Schristos   int cycles = 0;
21944e98e3e1Schristos   {
21954e98e3e1Schristos     int referenced = 0;
21964e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
21974e98e3e1Schristos     INT in_sr = -1;
21984e98e3e1Schristos     INT in_dr = -1;
21994e98e3e1Schristos     INT out_dr = -1;
22004e98e3e1Schristos     in_sr = FLD (in_sr);
22014e98e3e1Schristos     in_dr = FLD (in_dr);
22024e98e3e1Schristos     out_dr = FLD (out_dr);
22034e98e3e1Schristos     referenced |= 1 << 0;
22044e98e3e1Schristos     referenced |= 1 << 1;
22054e98e3e1Schristos     referenced |= 1 << 2;
22064e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
22074e98e3e1Schristos   }
22084e98e3e1Schristos   return cycles;
22094e98e3e1Schristos #undef FLD
22104e98e3e1Schristos }
22114e98e3e1Schristos 
22124e98e3e1Schristos static int
22134e98e3e1Schristos model_m32r2_sra3 (SIM_CPU *current_cpu, void *sem_arg)
22144e98e3e1Schristos {
22154e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
22164e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
22174e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
22184e98e3e1Schristos   int cycles = 0;
22194e98e3e1Schristos   {
22204e98e3e1Schristos     int referenced = 0;
22214e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
22224e98e3e1Schristos     INT in_sr = -1;
22234e98e3e1Schristos     INT in_dr = -1;
22244e98e3e1Schristos     INT out_dr = -1;
22254e98e3e1Schristos     in_sr = FLD (in_sr);
22264e98e3e1Schristos     out_dr = FLD (out_dr);
22274e98e3e1Schristos     referenced |= 1 << 0;
22284e98e3e1Schristos     referenced |= 1 << 2;
22294e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
22304e98e3e1Schristos   }
22314e98e3e1Schristos   return cycles;
22324e98e3e1Schristos #undef FLD
22334e98e3e1Schristos }
22344e98e3e1Schristos 
22354e98e3e1Schristos static int
22364e98e3e1Schristos model_m32r2_srai (SIM_CPU *current_cpu, void *sem_arg)
22374e98e3e1Schristos {
22384e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f
22394e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
22404e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
22414e98e3e1Schristos   int cycles = 0;
22424e98e3e1Schristos   {
22434e98e3e1Schristos     int referenced = 0;
22444e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
22454e98e3e1Schristos     INT in_sr = -1;
22464e98e3e1Schristos     INT in_dr = -1;
22474e98e3e1Schristos     INT out_dr = -1;
22484e98e3e1Schristos     in_dr = FLD (in_dr);
22494e98e3e1Schristos     out_dr = FLD (out_dr);
22504e98e3e1Schristos     referenced |= 1 << 1;
22514e98e3e1Schristos     referenced |= 1 << 2;
22524e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
22534e98e3e1Schristos   }
22544e98e3e1Schristos   return cycles;
22554e98e3e1Schristos #undef FLD
22564e98e3e1Schristos }
22574e98e3e1Schristos 
22584e98e3e1Schristos static int
22594e98e3e1Schristos model_m32r2_srl (SIM_CPU *current_cpu, void *sem_arg)
22604e98e3e1Schristos {
22614e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
22624e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
22634e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
22644e98e3e1Schristos   int cycles = 0;
22654e98e3e1Schristos   {
22664e98e3e1Schristos     int referenced = 0;
22674e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
22684e98e3e1Schristos     INT in_sr = -1;
22694e98e3e1Schristos     INT in_dr = -1;
22704e98e3e1Schristos     INT out_dr = -1;
22714e98e3e1Schristos     in_sr = FLD (in_sr);
22724e98e3e1Schristos     in_dr = FLD (in_dr);
22734e98e3e1Schristos     out_dr = FLD (out_dr);
22744e98e3e1Schristos     referenced |= 1 << 0;
22754e98e3e1Schristos     referenced |= 1 << 1;
22764e98e3e1Schristos     referenced |= 1 << 2;
22774e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
22784e98e3e1Schristos   }
22794e98e3e1Schristos   return cycles;
22804e98e3e1Schristos #undef FLD
22814e98e3e1Schristos }
22824e98e3e1Schristos 
22834e98e3e1Schristos static int
22844e98e3e1Schristos model_m32r2_srl3 (SIM_CPU *current_cpu, void *sem_arg)
22854e98e3e1Schristos {
22864e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f
22874e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
22884e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
22894e98e3e1Schristos   int cycles = 0;
22904e98e3e1Schristos   {
22914e98e3e1Schristos     int referenced = 0;
22924e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
22934e98e3e1Schristos     INT in_sr = -1;
22944e98e3e1Schristos     INT in_dr = -1;
22954e98e3e1Schristos     INT out_dr = -1;
22964e98e3e1Schristos     in_sr = FLD (in_sr);
22974e98e3e1Schristos     out_dr = FLD (out_dr);
22984e98e3e1Schristos     referenced |= 1 << 0;
22994e98e3e1Schristos     referenced |= 1 << 2;
23004e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
23014e98e3e1Schristos   }
23024e98e3e1Schristos   return cycles;
23034e98e3e1Schristos #undef FLD
23044e98e3e1Schristos }
23054e98e3e1Schristos 
23064e98e3e1Schristos static int
23074e98e3e1Schristos model_m32r2_srli (SIM_CPU *current_cpu, void *sem_arg)
23084e98e3e1Schristos {
23094e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f
23104e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
23114e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
23124e98e3e1Schristos   int cycles = 0;
23134e98e3e1Schristos   {
23144e98e3e1Schristos     int referenced = 0;
23154e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
23164e98e3e1Schristos     INT in_sr = -1;
23174e98e3e1Schristos     INT in_dr = -1;
23184e98e3e1Schristos     INT out_dr = -1;
23194e98e3e1Schristos     in_dr = FLD (in_dr);
23204e98e3e1Schristos     out_dr = FLD (out_dr);
23214e98e3e1Schristos     referenced |= 1 << 1;
23224e98e3e1Schristos     referenced |= 1 << 2;
23234e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
23244e98e3e1Schristos   }
23254e98e3e1Schristos   return cycles;
23264e98e3e1Schristos #undef FLD
23274e98e3e1Schristos }
23284e98e3e1Schristos 
23294e98e3e1Schristos static int
23304e98e3e1Schristos model_m32r2_st (SIM_CPU *current_cpu, void *sem_arg)
23314e98e3e1Schristos {
23324e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
23334e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
23344e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
23354e98e3e1Schristos   int cycles = 0;
23364e98e3e1Schristos   {
23374e98e3e1Schristos     int referenced = 0;
23384e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
23394e98e3e1Schristos     INT in_src1 = 0;
23404e98e3e1Schristos     INT in_src2 = 0;
23414e98e3e1Schristos     in_src1 = FLD (in_src1);
23424e98e3e1Schristos     in_src2 = FLD (in_src2);
23434e98e3e1Schristos     referenced |= 1 << 0;
23444e98e3e1Schristos     referenced |= 1 << 1;
23454e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
23464e98e3e1Schristos   }
23474e98e3e1Schristos   return cycles;
23484e98e3e1Schristos #undef FLD
23494e98e3e1Schristos }
23504e98e3e1Schristos 
23514e98e3e1Schristos static int
23524e98e3e1Schristos model_m32r2_st_d (SIM_CPU *current_cpu, void *sem_arg)
23534e98e3e1Schristos {
23544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
23554e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
23564e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
23574e98e3e1Schristos   int cycles = 0;
23584e98e3e1Schristos   {
23594e98e3e1Schristos     int referenced = 0;
23604e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
23614e98e3e1Schristos     INT in_src1 = 0;
23624e98e3e1Schristos     INT in_src2 = 0;
23634e98e3e1Schristos     in_src1 = FLD (in_src1);
23644e98e3e1Schristos     in_src2 = FLD (in_src2);
23654e98e3e1Schristos     referenced |= 1 << 0;
23664e98e3e1Schristos     referenced |= 1 << 1;
23674e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
23684e98e3e1Schristos   }
23694e98e3e1Schristos   return cycles;
23704e98e3e1Schristos #undef FLD
23714e98e3e1Schristos }
23724e98e3e1Schristos 
23734e98e3e1Schristos static int
23744e98e3e1Schristos model_m32r2_stb (SIM_CPU *current_cpu, void *sem_arg)
23754e98e3e1Schristos {
23764e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
23774e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
23784e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
23794e98e3e1Schristos   int cycles = 0;
23804e98e3e1Schristos   {
23814e98e3e1Schristos     int referenced = 0;
23824e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
23834e98e3e1Schristos     INT in_src1 = 0;
23844e98e3e1Schristos     INT in_src2 = 0;
23854e98e3e1Schristos     in_src1 = FLD (in_src1);
23864e98e3e1Schristos     in_src2 = FLD (in_src2);
23874e98e3e1Schristos     referenced |= 1 << 0;
23884e98e3e1Schristos     referenced |= 1 << 1;
23894e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
23904e98e3e1Schristos   }
23914e98e3e1Schristos   return cycles;
23924e98e3e1Schristos #undef FLD
23934e98e3e1Schristos }
23944e98e3e1Schristos 
23954e98e3e1Schristos static int
23964e98e3e1Schristos model_m32r2_stb_d (SIM_CPU *current_cpu, void *sem_arg)
23974e98e3e1Schristos {
23984e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
23994e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
24004e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
24014e98e3e1Schristos   int cycles = 0;
24024e98e3e1Schristos   {
24034e98e3e1Schristos     int referenced = 0;
24044e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
24054e98e3e1Schristos     INT in_src1 = 0;
24064e98e3e1Schristos     INT in_src2 = 0;
24074e98e3e1Schristos     in_src1 = FLD (in_src1);
24084e98e3e1Schristos     in_src2 = FLD (in_src2);
24094e98e3e1Schristos     referenced |= 1 << 0;
24104e98e3e1Schristos     referenced |= 1 << 1;
24114e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
24124e98e3e1Schristos   }
24134e98e3e1Schristos   return cycles;
24144e98e3e1Schristos #undef FLD
24154e98e3e1Schristos }
24164e98e3e1Schristos 
24174e98e3e1Schristos static int
24184e98e3e1Schristos model_m32r2_sth (SIM_CPU *current_cpu, void *sem_arg)
24194e98e3e1Schristos {
24204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
24214e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
24224e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
24234e98e3e1Schristos   int cycles = 0;
24244e98e3e1Schristos   {
24254e98e3e1Schristos     int referenced = 0;
24264e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
24274e98e3e1Schristos     INT in_src1 = 0;
24284e98e3e1Schristos     INT in_src2 = 0;
24294e98e3e1Schristos     in_src1 = FLD (in_src1);
24304e98e3e1Schristos     in_src2 = FLD (in_src2);
24314e98e3e1Schristos     referenced |= 1 << 0;
24324e98e3e1Schristos     referenced |= 1 << 1;
24334e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
24344e98e3e1Schristos   }
24354e98e3e1Schristos   return cycles;
24364e98e3e1Schristos #undef FLD
24374e98e3e1Schristos }
24384e98e3e1Schristos 
24394e98e3e1Schristos static int
24404e98e3e1Schristos model_m32r2_sth_d (SIM_CPU *current_cpu, void *sem_arg)
24414e98e3e1Schristos {
24424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.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_src1 = 0;
24504e98e3e1Schristos     INT in_src2 = 0;
24514e98e3e1Schristos     in_src1 = FLD (in_src1);
24524e98e3e1Schristos     in_src2 = FLD (in_src2);
24534e98e3e1Schristos     referenced |= 1 << 0;
24544e98e3e1Schristos     referenced |= 1 << 1;
24554e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
24564e98e3e1Schristos   }
24574e98e3e1Schristos   return cycles;
24584e98e3e1Schristos #undef FLD
24594e98e3e1Schristos }
24604e98e3e1Schristos 
24614e98e3e1Schristos static int
24624e98e3e1Schristos model_m32r2_st_plus (SIM_CPU *current_cpu, void *sem_arg)
24634e98e3e1Schristos {
24644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
24654e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
24664e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
24674e98e3e1Schristos   int cycles = 0;
24684e98e3e1Schristos   {
24694e98e3e1Schristos     int referenced = 0;
24704e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
24714e98e3e1Schristos     INT in_src1 = 0;
24724e98e3e1Schristos     INT in_src2 = 0;
24734e98e3e1Schristos     in_src1 = FLD (in_src1);
24744e98e3e1Schristos     in_src2 = FLD (in_src2);
24754e98e3e1Schristos     referenced |= 1 << 0;
24764e98e3e1Schristos     referenced |= 1 << 1;
24774e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
24784e98e3e1Schristos   }
24794e98e3e1Schristos   {
24804e98e3e1Schristos     int referenced = 0;
24814e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
24824e98e3e1Schristos     INT in_sr = -1;
24834e98e3e1Schristos     INT in_dr = -1;
24844e98e3e1Schristos     INT out_dr = -1;
24854e98e3e1Schristos     in_dr = FLD (in_src2);
24864e98e3e1Schristos     out_dr = FLD (out_src2);
24874e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
24884e98e3e1Schristos   }
24894e98e3e1Schristos   return cycles;
24904e98e3e1Schristos #undef FLD
24914e98e3e1Schristos }
24924e98e3e1Schristos 
24934e98e3e1Schristos static int
24944e98e3e1Schristos model_m32r2_sth_plus (SIM_CPU *current_cpu, void *sem_arg)
24954e98e3e1Schristos {
24964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
24974e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
24984e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
24994e98e3e1Schristos   int cycles = 0;
25004e98e3e1Schristos   {
25014e98e3e1Schristos     int referenced = 0;
25024e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25034e98e3e1Schristos     INT in_src1 = 0;
25044e98e3e1Schristos     INT in_src2 = 0;
25054e98e3e1Schristos     in_src1 = FLD (in_src1);
25064e98e3e1Schristos     in_src2 = FLD (in_src2);
25074e98e3e1Schristos     referenced |= 1 << 0;
25084e98e3e1Schristos     referenced |= 1 << 1;
25094e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
25104e98e3e1Schristos   }
25114e98e3e1Schristos   {
25124e98e3e1Schristos     int referenced = 0;
25134e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25144e98e3e1Schristos     INT in_sr = -1;
25154e98e3e1Schristos     INT in_dr = -1;
25164e98e3e1Schristos     INT out_dr = -1;
25174e98e3e1Schristos     in_dr = FLD (in_src2);
25184e98e3e1Schristos     out_dr = FLD (out_src2);
25194e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
25204e98e3e1Schristos   }
25214e98e3e1Schristos   return cycles;
25224e98e3e1Schristos #undef FLD
25234e98e3e1Schristos }
25244e98e3e1Schristos 
25254e98e3e1Schristos static int
25264e98e3e1Schristos model_m32r2_stb_plus (SIM_CPU *current_cpu, void *sem_arg)
25274e98e3e1Schristos {
25284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
25294e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
25304e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
25314e98e3e1Schristos   int cycles = 0;
25324e98e3e1Schristos   {
25334e98e3e1Schristos     int referenced = 0;
25344e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25354e98e3e1Schristos     INT in_src1 = 0;
25364e98e3e1Schristos     INT in_src2 = 0;
25374e98e3e1Schristos     in_src1 = FLD (in_src1);
25384e98e3e1Schristos     in_src2 = FLD (in_src2);
25394e98e3e1Schristos     referenced |= 1 << 0;
25404e98e3e1Schristos     referenced |= 1 << 1;
25414e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
25424e98e3e1Schristos   }
25434e98e3e1Schristos   {
25444e98e3e1Schristos     int referenced = 0;
25454e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25464e98e3e1Schristos     INT in_sr = -1;
25474e98e3e1Schristos     INT in_dr = -1;
25484e98e3e1Schristos     INT out_dr = -1;
25494e98e3e1Schristos     in_dr = FLD (in_src2);
25504e98e3e1Schristos     out_dr = FLD (out_src2);
25514e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
25524e98e3e1Schristos   }
25534e98e3e1Schristos   return cycles;
25544e98e3e1Schristos #undef FLD
25554e98e3e1Schristos }
25564e98e3e1Schristos 
25574e98e3e1Schristos static int
25584e98e3e1Schristos model_m32r2_st_minus (SIM_CPU *current_cpu, void *sem_arg)
25594e98e3e1Schristos {
25604e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
25614e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
25624e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
25634e98e3e1Schristos   int cycles = 0;
25644e98e3e1Schristos   {
25654e98e3e1Schristos     int referenced = 0;
25664e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25674e98e3e1Schristos     INT in_src1 = 0;
25684e98e3e1Schristos     INT in_src2 = 0;
25694e98e3e1Schristos     in_src1 = FLD (in_src1);
25704e98e3e1Schristos     in_src2 = FLD (in_src2);
25714e98e3e1Schristos     referenced |= 1 << 0;
25724e98e3e1Schristos     referenced |= 1 << 1;
25734e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
25744e98e3e1Schristos   }
25754e98e3e1Schristos   {
25764e98e3e1Schristos     int referenced = 0;
25774e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25784e98e3e1Schristos     INT in_sr = -1;
25794e98e3e1Schristos     INT in_dr = -1;
25804e98e3e1Schristos     INT out_dr = -1;
25814e98e3e1Schristos     in_dr = FLD (in_src2);
25824e98e3e1Schristos     out_dr = FLD (out_src2);
25834e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
25844e98e3e1Schristos   }
25854e98e3e1Schristos   return cycles;
25864e98e3e1Schristos #undef FLD
25874e98e3e1Schristos }
25884e98e3e1Schristos 
25894e98e3e1Schristos static int
25904e98e3e1Schristos model_m32r2_sub (SIM_CPU *current_cpu, void *sem_arg)
25914e98e3e1Schristos {
25924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
25934e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
25944e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
25954e98e3e1Schristos   int cycles = 0;
25964e98e3e1Schristos   {
25974e98e3e1Schristos     int referenced = 0;
25984e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
25994e98e3e1Schristos     INT in_sr = -1;
26004e98e3e1Schristos     INT in_dr = -1;
26014e98e3e1Schristos     INT out_dr = -1;
26024e98e3e1Schristos     in_sr = FLD (in_sr);
26034e98e3e1Schristos     in_dr = FLD (in_dr);
26044e98e3e1Schristos     out_dr = FLD (out_dr);
26054e98e3e1Schristos     referenced |= 1 << 0;
26064e98e3e1Schristos     referenced |= 1 << 1;
26074e98e3e1Schristos     referenced |= 1 << 2;
26084e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
26094e98e3e1Schristos   }
26104e98e3e1Schristos   return cycles;
26114e98e3e1Schristos #undef FLD
26124e98e3e1Schristos }
26134e98e3e1Schristos 
26144e98e3e1Schristos static int
26154e98e3e1Schristos model_m32r2_subv (SIM_CPU *current_cpu, void *sem_arg)
26164e98e3e1Schristos {
26174e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
26184e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
26194e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
26204e98e3e1Schristos   int cycles = 0;
26214e98e3e1Schristos   {
26224e98e3e1Schristos     int referenced = 0;
26234e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
26244e98e3e1Schristos     INT in_sr = -1;
26254e98e3e1Schristos     INT in_dr = -1;
26264e98e3e1Schristos     INT out_dr = -1;
26274e98e3e1Schristos     in_sr = FLD (in_sr);
26284e98e3e1Schristos     in_dr = FLD (in_dr);
26294e98e3e1Schristos     out_dr = FLD (out_dr);
26304e98e3e1Schristos     referenced |= 1 << 0;
26314e98e3e1Schristos     referenced |= 1 << 1;
26324e98e3e1Schristos     referenced |= 1 << 2;
26334e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
26344e98e3e1Schristos   }
26354e98e3e1Schristos   return cycles;
26364e98e3e1Schristos #undef FLD
26374e98e3e1Schristos }
26384e98e3e1Schristos 
26394e98e3e1Schristos static int
26404e98e3e1Schristos model_m32r2_subx (SIM_CPU *current_cpu, void *sem_arg)
26414e98e3e1Schristos {
26424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f
26434e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
26444e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
26454e98e3e1Schristos   int cycles = 0;
26464e98e3e1Schristos   {
26474e98e3e1Schristos     int referenced = 0;
26484e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
26494e98e3e1Schristos     INT in_sr = -1;
26504e98e3e1Schristos     INT in_dr = -1;
26514e98e3e1Schristos     INT out_dr = -1;
26524e98e3e1Schristos     in_sr = FLD (in_sr);
26534e98e3e1Schristos     in_dr = FLD (in_dr);
26544e98e3e1Schristos     out_dr = FLD (out_dr);
26554e98e3e1Schristos     referenced |= 1 << 0;
26564e98e3e1Schristos     referenced |= 1 << 1;
26574e98e3e1Schristos     referenced |= 1 << 2;
26584e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
26594e98e3e1Schristos   }
26604e98e3e1Schristos   return cycles;
26614e98e3e1Schristos #undef FLD
26624e98e3e1Schristos }
26634e98e3e1Schristos 
26644e98e3e1Schristos static int
26654e98e3e1Schristos model_m32r2_trap (SIM_CPU *current_cpu, void *sem_arg)
26664e98e3e1Schristos {
26674e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_trap.f
26684e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
26694e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
26704e98e3e1Schristos   int cycles = 0;
26714e98e3e1Schristos   {
26724e98e3e1Schristos     int referenced = 0;
26734e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
26744e98e3e1Schristos     INT in_sr = -1;
26754e98e3e1Schristos     INT in_dr = -1;
26764e98e3e1Schristos     INT out_dr = -1;
26774e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
26784e98e3e1Schristos   }
26794e98e3e1Schristos   return cycles;
26804e98e3e1Schristos #undef FLD
26814e98e3e1Schristos }
26824e98e3e1Schristos 
26834e98e3e1Schristos static int
26844e98e3e1Schristos model_m32r2_unlock (SIM_CPU *current_cpu, void *sem_arg)
26854e98e3e1Schristos {
26864e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
26874e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
26884e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
26894e98e3e1Schristos   int cycles = 0;
26904e98e3e1Schristos   {
26914e98e3e1Schristos     int referenced = 0;
26924e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
26934e98e3e1Schristos     INT in_sr = 0;
26944e98e3e1Schristos     INT out_dr = 0;
26954e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
26964e98e3e1Schristos   }
26974e98e3e1Schristos   return cycles;
26984e98e3e1Schristos #undef FLD
26994e98e3e1Schristos }
27004e98e3e1Schristos 
27014e98e3e1Schristos static int
27024e98e3e1Schristos model_m32r2_satb (SIM_CPU *current_cpu, void *sem_arg)
27034e98e3e1Schristos {
27044e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
27054e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
27064e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
27074e98e3e1Schristos   int cycles = 0;
27084e98e3e1Schristos   {
27094e98e3e1Schristos     int referenced = 0;
27104e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
27114e98e3e1Schristos     INT in_sr = -1;
27124e98e3e1Schristos     INT in_dr = -1;
27134e98e3e1Schristos     INT out_dr = -1;
27144e98e3e1Schristos     in_sr = FLD (in_sr);
27154e98e3e1Schristos     out_dr = FLD (out_dr);
27164e98e3e1Schristos     referenced |= 1 << 0;
27174e98e3e1Schristos     referenced |= 1 << 2;
27184e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
27194e98e3e1Schristos   }
27204e98e3e1Schristos   return cycles;
27214e98e3e1Schristos #undef FLD
27224e98e3e1Schristos }
27234e98e3e1Schristos 
27244e98e3e1Schristos static int
27254e98e3e1Schristos model_m32r2_sath (SIM_CPU *current_cpu, void *sem_arg)
27264e98e3e1Schristos {
27274e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
27284e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
27294e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
27304e98e3e1Schristos   int cycles = 0;
27314e98e3e1Schristos   {
27324e98e3e1Schristos     int referenced = 0;
27334e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
27344e98e3e1Schristos     INT in_sr = -1;
27354e98e3e1Schristos     INT in_dr = -1;
27364e98e3e1Schristos     INT out_dr = -1;
27374e98e3e1Schristos     in_sr = FLD (in_sr);
27384e98e3e1Schristos     out_dr = FLD (out_dr);
27394e98e3e1Schristos     referenced |= 1 << 0;
27404e98e3e1Schristos     referenced |= 1 << 2;
27414e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
27424e98e3e1Schristos   }
27434e98e3e1Schristos   return cycles;
27444e98e3e1Schristos #undef FLD
27454e98e3e1Schristos }
27464e98e3e1Schristos 
27474e98e3e1Schristos static int
27484e98e3e1Schristos model_m32r2_sat (SIM_CPU *current_cpu, void *sem_arg)
27494e98e3e1Schristos {
27504e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
27514e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
27524e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
27534e98e3e1Schristos   int cycles = 0;
27544e98e3e1Schristos   {
27554e98e3e1Schristos     int referenced = 0;
27564e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
27574e98e3e1Schristos     INT in_sr = -1;
27584e98e3e1Schristos     INT in_dr = -1;
27594e98e3e1Schristos     INT out_dr = -1;
27604e98e3e1Schristos     in_sr = FLD (in_sr);
27614e98e3e1Schristos     out_dr = FLD (out_dr);
27624e98e3e1Schristos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
27634e98e3e1Schristos     referenced |= 1 << 2;
27644e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
27654e98e3e1Schristos   }
27664e98e3e1Schristos   return cycles;
27674e98e3e1Schristos #undef FLD
27684e98e3e1Schristos }
27694e98e3e1Schristos 
27704e98e3e1Schristos static int
27714e98e3e1Schristos model_m32r2_pcmpbz (SIM_CPU *current_cpu, void *sem_arg)
27724e98e3e1Schristos {
27734e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
27744e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
27754e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
27764e98e3e1Schristos   int cycles = 0;
27774e98e3e1Schristos   {
27784e98e3e1Schristos     int referenced = 0;
27794e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
27804e98e3e1Schristos     INT in_src1 = -1;
27814e98e3e1Schristos     INT in_src2 = -1;
27824e98e3e1Schristos     in_src2 = FLD (in_src2);
27834e98e3e1Schristos     referenced |= 1 << 1;
27844e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
27854e98e3e1Schristos   }
27864e98e3e1Schristos   return cycles;
27874e98e3e1Schristos #undef FLD
27884e98e3e1Schristos }
27894e98e3e1Schristos 
27904e98e3e1Schristos static int
27914e98e3e1Schristos model_m32r2_sadd (SIM_CPU *current_cpu, void *sem_arg)
27924e98e3e1Schristos {
27934e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
27944e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
27954e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
27964e98e3e1Schristos   int cycles = 0;
27974e98e3e1Schristos   {
27984e98e3e1Schristos     int referenced = 0;
27994e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
28004e98e3e1Schristos     INT in_src1 = -1;
28014e98e3e1Schristos     INT in_src2 = -1;
28024e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
28034e98e3e1Schristos   }
28044e98e3e1Schristos   return cycles;
28054e98e3e1Schristos #undef FLD
28064e98e3e1Schristos }
28074e98e3e1Schristos 
28084e98e3e1Schristos static int
28094e98e3e1Schristos model_m32r2_macwu1 (SIM_CPU *current_cpu, void *sem_arg)
28104e98e3e1Schristos {
28114e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
28124e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
28134e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
28144e98e3e1Schristos   int cycles = 0;
28154e98e3e1Schristos   {
28164e98e3e1Schristos     int referenced = 0;
28174e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
28184e98e3e1Schristos     INT in_src1 = -1;
28194e98e3e1Schristos     INT in_src2 = -1;
28204e98e3e1Schristos     in_src1 = FLD (in_src1);
28214e98e3e1Schristos     in_src2 = FLD (in_src2);
28224e98e3e1Schristos     referenced |= 1 << 0;
28234e98e3e1Schristos     referenced |= 1 << 1;
28244e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
28254e98e3e1Schristos   }
28264e98e3e1Schristos   return cycles;
28274e98e3e1Schristos #undef FLD
28284e98e3e1Schristos }
28294e98e3e1Schristos 
28304e98e3e1Schristos static int
28314e98e3e1Schristos model_m32r2_msblo (SIM_CPU *current_cpu, void *sem_arg)
28324e98e3e1Schristos {
28334e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
28344e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
28354e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
28364e98e3e1Schristos   int cycles = 0;
28374e98e3e1Schristos   {
28384e98e3e1Schristos     int referenced = 0;
28394e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
28404e98e3e1Schristos     INT in_src1 = -1;
28414e98e3e1Schristos     INT in_src2 = -1;
28424e98e3e1Schristos     in_src1 = FLD (in_src1);
28434e98e3e1Schristos     in_src2 = FLD (in_src2);
28444e98e3e1Schristos     referenced |= 1 << 0;
28454e98e3e1Schristos     referenced |= 1 << 1;
28464e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
28474e98e3e1Schristos   }
28484e98e3e1Schristos   return cycles;
28494e98e3e1Schristos #undef FLD
28504e98e3e1Schristos }
28514e98e3e1Schristos 
28524e98e3e1Schristos static int
28534e98e3e1Schristos model_m32r2_mulwu1 (SIM_CPU *current_cpu, void *sem_arg)
28544e98e3e1Schristos {
28554e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
28564e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
28574e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
28584e98e3e1Schristos   int cycles = 0;
28594e98e3e1Schristos   {
28604e98e3e1Schristos     int referenced = 0;
28614e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
28624e98e3e1Schristos     INT in_src1 = -1;
28634e98e3e1Schristos     INT in_src2 = -1;
28644e98e3e1Schristos     in_src1 = FLD (in_src1);
28654e98e3e1Schristos     in_src2 = FLD (in_src2);
28664e98e3e1Schristos     referenced |= 1 << 0;
28674e98e3e1Schristos     referenced |= 1 << 1;
28684e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
28694e98e3e1Schristos   }
28704e98e3e1Schristos   return cycles;
28714e98e3e1Schristos #undef FLD
28724e98e3e1Schristos }
28734e98e3e1Schristos 
28744e98e3e1Schristos static int
28754e98e3e1Schristos model_m32r2_maclh1 (SIM_CPU *current_cpu, void *sem_arg)
28764e98e3e1Schristos {
28774e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
28784e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
28794e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
28804e98e3e1Schristos   int cycles = 0;
28814e98e3e1Schristos   {
28824e98e3e1Schristos     int referenced = 0;
28834e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
28844e98e3e1Schristos     INT in_src1 = -1;
28854e98e3e1Schristos     INT in_src2 = -1;
28864e98e3e1Schristos     in_src1 = FLD (in_src1);
28874e98e3e1Schristos     in_src2 = FLD (in_src2);
28884e98e3e1Schristos     referenced |= 1 << 0;
28894e98e3e1Schristos     referenced |= 1 << 1;
28904e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
28914e98e3e1Schristos   }
28924e98e3e1Schristos   return cycles;
28934e98e3e1Schristos #undef FLD
28944e98e3e1Schristos }
28954e98e3e1Schristos 
28964e98e3e1Schristos static int
28974e98e3e1Schristos model_m32r2_sc (SIM_CPU *current_cpu, void *sem_arg)
28984e98e3e1Schristos {
28994e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
29004e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
29014e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
29024e98e3e1Schristos   int cycles = 0;
29034e98e3e1Schristos   {
29044e98e3e1Schristos     int referenced = 0;
29054e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
29064e98e3e1Schristos     INT in_sr = -1;
29074e98e3e1Schristos     INT in_dr = -1;
29084e98e3e1Schristos     INT out_dr = -1;
29094e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
29104e98e3e1Schristos   }
29114e98e3e1Schristos   return cycles;
29124e98e3e1Schristos #undef FLD
29134e98e3e1Schristos }
29144e98e3e1Schristos 
29154e98e3e1Schristos static int
29164e98e3e1Schristos model_m32r2_snc (SIM_CPU *current_cpu, void *sem_arg)
29174e98e3e1Schristos {
29184e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
29194e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
29204e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
29214e98e3e1Schristos   int cycles = 0;
29224e98e3e1Schristos   {
29234e98e3e1Schristos     int referenced = 0;
29244e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
29254e98e3e1Schristos     INT in_sr = -1;
29264e98e3e1Schristos     INT in_dr = -1;
29274e98e3e1Schristos     INT out_dr = -1;
29284e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
29294e98e3e1Schristos   }
29304e98e3e1Schristos   return cycles;
29314e98e3e1Schristos #undef FLD
29324e98e3e1Schristos }
29334e98e3e1Schristos 
29344e98e3e1Schristos static int
29354e98e3e1Schristos model_m32r2_clrpsw (SIM_CPU *current_cpu, void *sem_arg)
29364e98e3e1Schristos {
29374e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
29384e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
29394e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
29404e98e3e1Schristos   int cycles = 0;
29414e98e3e1Schristos   {
29424e98e3e1Schristos     int referenced = 0;
29434e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
29444e98e3e1Schristos     INT in_sr = -1;
29454e98e3e1Schristos     INT in_dr = -1;
29464e98e3e1Schristos     INT out_dr = -1;
29474e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
29484e98e3e1Schristos   }
29494e98e3e1Schristos   return cycles;
29504e98e3e1Schristos #undef FLD
29514e98e3e1Schristos }
29524e98e3e1Schristos 
29534e98e3e1Schristos static int
29544e98e3e1Schristos model_m32r2_setpsw (SIM_CPU *current_cpu, void *sem_arg)
29554e98e3e1Schristos {
29564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
29574e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
29584e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
29594e98e3e1Schristos   int cycles = 0;
29604e98e3e1Schristos   {
29614e98e3e1Schristos     int referenced = 0;
29624e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
29634e98e3e1Schristos     INT in_sr = -1;
29644e98e3e1Schristos     INT in_dr = -1;
29654e98e3e1Schristos     INT out_dr = -1;
29664e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
29674e98e3e1Schristos   }
29684e98e3e1Schristos   return cycles;
29694e98e3e1Schristos #undef FLD
29704e98e3e1Schristos }
29714e98e3e1Schristos 
29724e98e3e1Schristos static int
29734e98e3e1Schristos model_m32r2_bset (SIM_CPU *current_cpu, void *sem_arg)
29744e98e3e1Schristos {
29754e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f
29764e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
29774e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
29784e98e3e1Schristos   int cycles = 0;
29794e98e3e1Schristos   {
29804e98e3e1Schristos     int referenced = 0;
29814e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
29824e98e3e1Schristos     INT in_sr = -1;
29834e98e3e1Schristos     INT in_dr = -1;
29844e98e3e1Schristos     INT out_dr = -1;
29854e98e3e1Schristos     in_sr = FLD (in_sr);
29864e98e3e1Schristos     referenced |= 1 << 0;
29874e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
29884e98e3e1Schristos   }
29894e98e3e1Schristos   return cycles;
29904e98e3e1Schristos #undef FLD
29914e98e3e1Schristos }
29924e98e3e1Schristos 
29934e98e3e1Schristos static int
29944e98e3e1Schristos model_m32r2_bclr (SIM_CPU *current_cpu, void *sem_arg)
29954e98e3e1Schristos {
29964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f
29974e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
29984e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
29994e98e3e1Schristos   int cycles = 0;
30004e98e3e1Schristos   {
30014e98e3e1Schristos     int referenced = 0;
30024e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
30034e98e3e1Schristos     INT in_sr = -1;
30044e98e3e1Schristos     INT in_dr = -1;
30054e98e3e1Schristos     INT out_dr = -1;
30064e98e3e1Schristos     in_sr = FLD (in_sr);
30074e98e3e1Schristos     referenced |= 1 << 0;
30084e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
30094e98e3e1Schristos   }
30104e98e3e1Schristos   return cycles;
30114e98e3e1Schristos #undef FLD
30124e98e3e1Schristos }
30134e98e3e1Schristos 
30144e98e3e1Schristos static int
30154e98e3e1Schristos model_m32r2_btst (SIM_CPU *current_cpu, void *sem_arg)
30164e98e3e1Schristos {
30174e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f
30184e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
30194e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
30204e98e3e1Schristos   int cycles = 0;
30214e98e3e1Schristos   {
30224e98e3e1Schristos     int referenced = 0;
30234e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
30244e98e3e1Schristos     INT in_sr = -1;
30254e98e3e1Schristos     INT in_dr = -1;
30264e98e3e1Schristos     INT out_dr = -1;
30274e98e3e1Schristos     in_sr = FLD (in_sr);
30284e98e3e1Schristos     referenced |= 1 << 0;
30294e98e3e1Schristos     cycles += m32r2f_model_m32r2_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
30304e98e3e1Schristos   }
30314e98e3e1Schristos   return cycles;
30324e98e3e1Schristos #undef FLD
30334e98e3e1Schristos }
30344e98e3e1Schristos 
30354e98e3e1Schristos /* We assume UNIT_NONE == 0 because the tables don't always terminate
30364e98e3e1Schristos    entries with it.  */
30374e98e3e1Schristos 
30384e98e3e1Schristos /* Model timing data for `m32r2'.  */
30394e98e3e1Schristos 
30404e98e3e1Schristos static const INSN_TIMING m32r2_timing[] = {
30414e98e3e1Schristos   { M32R2F_INSN_X_INVALID, 0, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30424e98e3e1Schristos   { M32R2F_INSN_X_AFTER, 0, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30434e98e3e1Schristos   { M32R2F_INSN_X_BEFORE, 0, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30444e98e3e1Schristos   { M32R2F_INSN_X_CTI_CHAIN, 0, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30454e98e3e1Schristos   { M32R2F_INSN_X_CHAIN, 0, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30464e98e3e1Schristos   { M32R2F_INSN_X_BEGIN, 0, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30474e98e3e1Schristos   { M32R2F_INSN_ADD, model_m32r2_add, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30484e98e3e1Schristos   { M32R2F_INSN_ADD3, model_m32r2_add3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30494e98e3e1Schristos   { M32R2F_INSN_AND, model_m32r2_and, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30504e98e3e1Schristos   { M32R2F_INSN_AND3, model_m32r2_and3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30514e98e3e1Schristos   { M32R2F_INSN_OR, model_m32r2_or, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30524e98e3e1Schristos   { M32R2F_INSN_OR3, model_m32r2_or3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30534e98e3e1Schristos   { M32R2F_INSN_XOR, model_m32r2_xor, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30544e98e3e1Schristos   { M32R2F_INSN_XOR3, model_m32r2_xor3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30554e98e3e1Schristos   { M32R2F_INSN_ADDI, model_m32r2_addi, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30564e98e3e1Schristos   { M32R2F_INSN_ADDV, model_m32r2_addv, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30574e98e3e1Schristos   { M32R2F_INSN_ADDV3, model_m32r2_addv3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30584e98e3e1Schristos   { M32R2F_INSN_ADDX, model_m32r2_addx, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
30594e98e3e1Schristos   { M32R2F_INSN_BC8, model_m32r2_bc8, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30604e98e3e1Schristos   { M32R2F_INSN_BC24, model_m32r2_bc24, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30614e98e3e1Schristos   { M32R2F_INSN_BEQ, model_m32r2_beq, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30624e98e3e1Schristos   { M32R2F_INSN_BEQZ, model_m32r2_beqz, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30634e98e3e1Schristos   { M32R2F_INSN_BGEZ, model_m32r2_bgez, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30644e98e3e1Schristos   { M32R2F_INSN_BGTZ, model_m32r2_bgtz, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30654e98e3e1Schristos   { M32R2F_INSN_BLEZ, model_m32r2_blez, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30664e98e3e1Schristos   { M32R2F_INSN_BLTZ, model_m32r2_bltz, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30674e98e3e1Schristos   { M32R2F_INSN_BNEZ, model_m32r2_bnez, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30684e98e3e1Schristos   { M32R2F_INSN_BL8, model_m32r2_bl8, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30694e98e3e1Schristos   { M32R2F_INSN_BL24, model_m32r2_bl24, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30704e98e3e1Schristos   { M32R2F_INSN_BCL8, model_m32r2_bcl8, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30714e98e3e1Schristos   { M32R2F_INSN_BCL24, model_m32r2_bcl24, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30724e98e3e1Schristos   { M32R2F_INSN_BNC8, model_m32r2_bnc8, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30734e98e3e1Schristos   { M32R2F_INSN_BNC24, model_m32r2_bnc24, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30744e98e3e1Schristos   { M32R2F_INSN_BNE, model_m32r2_bne, { { (int) UNIT_M32R2_U_CTI, 1, 1 }, { (int) UNIT_M32R2_U_CMP, 1, 0 } } },
30754e98e3e1Schristos   { M32R2F_INSN_BRA8, model_m32r2_bra8, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30764e98e3e1Schristos   { M32R2F_INSN_BRA24, model_m32r2_bra24, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30774e98e3e1Schristos   { M32R2F_INSN_BNCL8, model_m32r2_bncl8, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30784e98e3e1Schristos   { M32R2F_INSN_BNCL24, model_m32r2_bncl24, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30794e98e3e1Schristos   { M32R2F_INSN_CMP, model_m32r2_cmp, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
30804e98e3e1Schristos   { M32R2F_INSN_CMPI, model_m32r2_cmpi, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
30814e98e3e1Schristos   { M32R2F_INSN_CMPU, model_m32r2_cmpu, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
30824e98e3e1Schristos   { M32R2F_INSN_CMPUI, model_m32r2_cmpui, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
30834e98e3e1Schristos   { M32R2F_INSN_CMPEQ, model_m32r2_cmpeq, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
30844e98e3e1Schristos   { M32R2F_INSN_CMPZ, model_m32r2_cmpz, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
30854e98e3e1Schristos   { M32R2F_INSN_DIV, model_m32r2_div, { { (int) UNIT_M32R2_U_EXEC, 1, 37 } } },
30864e98e3e1Schristos   { M32R2F_INSN_DIVU, model_m32r2_divu, { { (int) UNIT_M32R2_U_EXEC, 1, 37 } } },
30874e98e3e1Schristos   { M32R2F_INSN_REM, model_m32r2_rem, { { (int) UNIT_M32R2_U_EXEC, 1, 37 } } },
30884e98e3e1Schristos   { M32R2F_INSN_REMU, model_m32r2_remu, { { (int) UNIT_M32R2_U_EXEC, 1, 37 } } },
30894e98e3e1Schristos   { M32R2F_INSN_REMH, model_m32r2_remh, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30904e98e3e1Schristos   { M32R2F_INSN_REMUH, model_m32r2_remuh, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30914e98e3e1Schristos   { M32R2F_INSN_REMB, model_m32r2_remb, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30924e98e3e1Schristos   { M32R2F_INSN_REMUB, model_m32r2_remub, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30934e98e3e1Schristos   { M32R2F_INSN_DIVUH, model_m32r2_divuh, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30944e98e3e1Schristos   { M32R2F_INSN_DIVB, model_m32r2_divb, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30954e98e3e1Schristos   { M32R2F_INSN_DIVUB, model_m32r2_divub, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30964e98e3e1Schristos   { M32R2F_INSN_DIVH, model_m32r2_divh, { { (int) UNIT_M32R2_U_EXEC, 1, 21 } } },
30974e98e3e1Schristos   { M32R2F_INSN_JC, model_m32r2_jc, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30984e98e3e1Schristos   { M32R2F_INSN_JNC, model_m32r2_jnc, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
30994e98e3e1Schristos   { M32R2F_INSN_JL, model_m32r2_jl, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
31004e98e3e1Schristos   { M32R2F_INSN_JMP, model_m32r2_jmp, { { (int) UNIT_M32R2_U_CTI, 1, 1 } } },
31014e98e3e1Schristos   { M32R2F_INSN_LD, model_m32r2_ld, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31024e98e3e1Schristos   { M32R2F_INSN_LD_D, model_m32r2_ld_d, { { (int) UNIT_M32R2_U_LOAD, 1, 2 } } },
31034e98e3e1Schristos   { M32R2F_INSN_LDB, model_m32r2_ldb, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31044e98e3e1Schristos   { M32R2F_INSN_LDB_D, model_m32r2_ldb_d, { { (int) UNIT_M32R2_U_LOAD, 1, 2 } } },
31054e98e3e1Schristos   { M32R2F_INSN_LDH, model_m32r2_ldh, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31064e98e3e1Schristos   { M32R2F_INSN_LDH_D, model_m32r2_ldh_d, { { (int) UNIT_M32R2_U_LOAD, 1, 2 } } },
31074e98e3e1Schristos   { M32R2F_INSN_LDUB, model_m32r2_ldub, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31084e98e3e1Schristos   { M32R2F_INSN_LDUB_D, model_m32r2_ldub_d, { { (int) UNIT_M32R2_U_LOAD, 1, 2 } } },
31094e98e3e1Schristos   { M32R2F_INSN_LDUH, model_m32r2_lduh, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31104e98e3e1Schristos   { M32R2F_INSN_LDUH_D, model_m32r2_lduh_d, { { (int) UNIT_M32R2_U_LOAD, 1, 2 } } },
31114e98e3e1Schristos   { M32R2F_INSN_LD_PLUS, model_m32r2_ld_plus, { { (int) UNIT_M32R2_U_LOAD, 1, 1 }, { (int) UNIT_M32R2_U_EXEC, 1, 0 } } },
31124e98e3e1Schristos   { M32R2F_INSN_LD24, model_m32r2_ld24, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31134e98e3e1Schristos   { M32R2F_INSN_LDI8, model_m32r2_ldi8, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31144e98e3e1Schristos   { M32R2F_INSN_LDI16, model_m32r2_ldi16, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31154e98e3e1Schristos   { M32R2F_INSN_LOCK, model_m32r2_lock, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31164e98e3e1Schristos   { M32R2F_INSN_MACHI_A, model_m32r2_machi_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31174e98e3e1Schristos   { M32R2F_INSN_MACLO_A, model_m32r2_maclo_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31184e98e3e1Schristos   { M32R2F_INSN_MACWHI_A, model_m32r2_macwhi_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31194e98e3e1Schristos   { M32R2F_INSN_MACWLO_A, model_m32r2_macwlo_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31204e98e3e1Schristos   { M32R2F_INSN_MUL, model_m32r2_mul, { { (int) UNIT_M32R2_U_EXEC, 1, 4 } } },
31214e98e3e1Schristos   { M32R2F_INSN_MULHI_A, model_m32r2_mulhi_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31224e98e3e1Schristos   { M32R2F_INSN_MULLO_A, model_m32r2_mullo_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31234e98e3e1Schristos   { M32R2F_INSN_MULWHI_A, model_m32r2_mulwhi_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31244e98e3e1Schristos   { M32R2F_INSN_MULWLO_A, model_m32r2_mulwlo_a, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31254e98e3e1Schristos   { M32R2F_INSN_MV, model_m32r2_mv, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31264e98e3e1Schristos   { M32R2F_INSN_MVFACHI_A, model_m32r2_mvfachi_a, { { (int) UNIT_M32R2_U_EXEC, 1, 2 } } },
31274e98e3e1Schristos   { M32R2F_INSN_MVFACLO_A, model_m32r2_mvfaclo_a, { { (int) UNIT_M32R2_U_EXEC, 1, 2 } } },
31284e98e3e1Schristos   { M32R2F_INSN_MVFACMI_A, model_m32r2_mvfacmi_a, { { (int) UNIT_M32R2_U_EXEC, 1, 2 } } },
31294e98e3e1Schristos   { M32R2F_INSN_MVFC, model_m32r2_mvfc, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31304e98e3e1Schristos   { M32R2F_INSN_MVTACHI_A, model_m32r2_mvtachi_a, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31314e98e3e1Schristos   { M32R2F_INSN_MVTACLO_A, model_m32r2_mvtaclo_a, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31324e98e3e1Schristos   { M32R2F_INSN_MVTC, model_m32r2_mvtc, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31334e98e3e1Schristos   { M32R2F_INSN_NEG, model_m32r2_neg, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31344e98e3e1Schristos   { M32R2F_INSN_NOP, model_m32r2_nop, { { (int) UNIT_M32R2_U_EXEC, 1, 0 } } },
31354e98e3e1Schristos   { M32R2F_INSN_NOT, model_m32r2_not, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31364e98e3e1Schristos   { M32R2F_INSN_RAC_DSI, model_m32r2_rac_dsi, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31374e98e3e1Schristos   { M32R2F_INSN_RACH_DSI, model_m32r2_rach_dsi, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31384e98e3e1Schristos   { M32R2F_INSN_RTE, model_m32r2_rte, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31394e98e3e1Schristos   { M32R2F_INSN_SETH, model_m32r2_seth, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31404e98e3e1Schristos   { M32R2F_INSN_SLL, model_m32r2_sll, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31414e98e3e1Schristos   { M32R2F_INSN_SLL3, model_m32r2_sll3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31424e98e3e1Schristos   { M32R2F_INSN_SLLI, model_m32r2_slli, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31434e98e3e1Schristos   { M32R2F_INSN_SRA, model_m32r2_sra, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31444e98e3e1Schristos   { M32R2F_INSN_SRA3, model_m32r2_sra3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31454e98e3e1Schristos   { M32R2F_INSN_SRAI, model_m32r2_srai, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31464e98e3e1Schristos   { M32R2F_INSN_SRL, model_m32r2_srl, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31474e98e3e1Schristos   { M32R2F_INSN_SRL3, model_m32r2_srl3, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31484e98e3e1Schristos   { M32R2F_INSN_SRLI, model_m32r2_srli, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31494e98e3e1Schristos   { M32R2F_INSN_ST, model_m32r2_st, { { (int) UNIT_M32R2_U_STORE, 1, 1 } } },
31504e98e3e1Schristos   { M32R2F_INSN_ST_D, model_m32r2_st_d, { { (int) UNIT_M32R2_U_STORE, 1, 2 } } },
31514e98e3e1Schristos   { M32R2F_INSN_STB, model_m32r2_stb, { { (int) UNIT_M32R2_U_STORE, 1, 1 } } },
31524e98e3e1Schristos   { M32R2F_INSN_STB_D, model_m32r2_stb_d, { { (int) UNIT_M32R2_U_STORE, 1, 2 } } },
31534e98e3e1Schristos   { M32R2F_INSN_STH, model_m32r2_sth, { { (int) UNIT_M32R2_U_STORE, 1, 1 } } },
31544e98e3e1Schristos   { M32R2F_INSN_STH_D, model_m32r2_sth_d, { { (int) UNIT_M32R2_U_STORE, 1, 2 } } },
31554e98e3e1Schristos   { M32R2F_INSN_ST_PLUS, model_m32r2_st_plus, { { (int) UNIT_M32R2_U_STORE, 1, 1 }, { (int) UNIT_M32R2_U_EXEC, 1, 0 } } },
31564e98e3e1Schristos   { M32R2F_INSN_STH_PLUS, model_m32r2_sth_plus, { { (int) UNIT_M32R2_U_STORE, 1, 1 }, { (int) UNIT_M32R2_U_EXEC, 1, 0 } } },
31574e98e3e1Schristos   { M32R2F_INSN_STB_PLUS, model_m32r2_stb_plus, { { (int) UNIT_M32R2_U_STORE, 1, 1 }, { (int) UNIT_M32R2_U_EXEC, 1, 0 } } },
31584e98e3e1Schristos   { M32R2F_INSN_ST_MINUS, model_m32r2_st_minus, { { (int) UNIT_M32R2_U_STORE, 1, 1 }, { (int) UNIT_M32R2_U_EXEC, 1, 0 } } },
31594e98e3e1Schristos   { M32R2F_INSN_SUB, model_m32r2_sub, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31604e98e3e1Schristos   { M32R2F_INSN_SUBV, model_m32r2_subv, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31614e98e3e1Schristos   { M32R2F_INSN_SUBX, model_m32r2_subx, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31624e98e3e1Schristos   { M32R2F_INSN_TRAP, model_m32r2_trap, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31634e98e3e1Schristos   { M32R2F_INSN_UNLOCK, model_m32r2_unlock, { { (int) UNIT_M32R2_U_LOAD, 1, 1 } } },
31644e98e3e1Schristos   { M32R2F_INSN_SATB, model_m32r2_satb, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31654e98e3e1Schristos   { M32R2F_INSN_SATH, model_m32r2_sath, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31664e98e3e1Schristos   { M32R2F_INSN_SAT, model_m32r2_sat, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31674e98e3e1Schristos   { M32R2F_INSN_PCMPBZ, model_m32r2_pcmpbz, { { (int) UNIT_M32R2_U_CMP, 1, 1 } } },
31684e98e3e1Schristos   { M32R2F_INSN_SADD, model_m32r2_sadd, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31694e98e3e1Schristos   { M32R2F_INSN_MACWU1, model_m32r2_macwu1, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31704e98e3e1Schristos   { M32R2F_INSN_MSBLO, model_m32r2_msblo, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31714e98e3e1Schristos   { M32R2F_INSN_MULWU1, model_m32r2_mulwu1, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31724e98e3e1Schristos   { M32R2F_INSN_MACLH1, model_m32r2_maclh1, { { (int) UNIT_M32R2_U_MAC, 1, 1 } } },
31734e98e3e1Schristos   { M32R2F_INSN_SC, model_m32r2_sc, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31744e98e3e1Schristos   { M32R2F_INSN_SNC, model_m32r2_snc, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31754e98e3e1Schristos   { M32R2F_INSN_CLRPSW, model_m32r2_clrpsw, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31764e98e3e1Schristos   { M32R2F_INSN_SETPSW, model_m32r2_setpsw, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31774e98e3e1Schristos   { M32R2F_INSN_BSET, model_m32r2_bset, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31784e98e3e1Schristos   { M32R2F_INSN_BCLR, model_m32r2_bclr, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31794e98e3e1Schristos   { M32R2F_INSN_BTST, model_m32r2_btst, { { (int) UNIT_M32R2_U_EXEC, 1, 1 } } },
31804e98e3e1Schristos };
31814e98e3e1Schristos 
31824e98e3e1Schristos #endif /* WITH_PROFILE_MODEL_P */
31834e98e3e1Schristos 
31844e98e3e1Schristos static void
31854e98e3e1Schristos m32r2_model_init (SIM_CPU *cpu)
31864e98e3e1Schristos {
31874e98e3e1Schristos   CPU_MODEL_DATA (cpu) = (void *) zalloc (sizeof (MODEL_M32R2_DATA));
31884e98e3e1Schristos }
31894e98e3e1Schristos 
31904e98e3e1Schristos #if WITH_PROFILE_MODEL_P
31914e98e3e1Schristos #define TIMING_DATA(td) td
31924e98e3e1Schristos #else
31934e98e3e1Schristos #define TIMING_DATA(td) 0
31944e98e3e1Schristos #endif
31954e98e3e1Schristos 
3196ba340e45Schristos static const SIM_MODEL m32r2_models[] =
31974e98e3e1Schristos {
31984e98e3e1Schristos   { "m32r2", & m32r2_mach, MODEL_M32R2, TIMING_DATA (& m32r2_timing[0]), m32r2_model_init },
31994e98e3e1Schristos   { 0 }
32004e98e3e1Schristos };
32014e98e3e1Schristos 
32024e98e3e1Schristos /* The properties of this cpu's implementation.  */
32034e98e3e1Schristos 
3204ba340e45Schristos static const SIM_MACH_IMP_PROPERTIES m32r2f_imp_properties =
32054e98e3e1Schristos {
32064e98e3e1Schristos   sizeof (SIM_CPU),
32074e98e3e1Schristos #if WITH_SCACHE
32084e98e3e1Schristos   sizeof (SCACHE)
32094e98e3e1Schristos #else
32104e98e3e1Schristos   0
32114e98e3e1Schristos #endif
32124e98e3e1Schristos };
32134e98e3e1Schristos 
32144e98e3e1Schristos 
32154e98e3e1Schristos static void
32164e98e3e1Schristos m32r2f_prepare_run (SIM_CPU *cpu)
32174e98e3e1Schristos {
32184e98e3e1Schristos   if (CPU_IDESC (cpu) == NULL)
32194e98e3e1Schristos     m32r2f_init_idesc_table (cpu);
32204e98e3e1Schristos }
32214e98e3e1Schristos 
32224e98e3e1Schristos static const CGEN_INSN *
32234e98e3e1Schristos m32r2f_get_idata (SIM_CPU *cpu, int inum)
32244e98e3e1Schristos {
32254e98e3e1Schristos   return CPU_IDESC (cpu) [inum].idata;
32264e98e3e1Schristos }
32274e98e3e1Schristos 
32284e98e3e1Schristos static void
32294e98e3e1Schristos m32r2_init_cpu (SIM_CPU *cpu)
32304e98e3e1Schristos {
32314e98e3e1Schristos   CPU_REG_FETCH (cpu) = m32r2f_fetch_register;
32324e98e3e1Schristos   CPU_REG_STORE (cpu) = m32r2f_store_register;
32334e98e3e1Schristos   CPU_PC_FETCH (cpu) = m32r2f_h_pc_get;
32344e98e3e1Schristos   CPU_PC_STORE (cpu) = m32r2f_h_pc_set;
32354e98e3e1Schristos   CPU_GET_IDATA (cpu) = m32r2f_get_idata;
32364e98e3e1Schristos   CPU_MAX_INSNS (cpu) = M32R2F_INSN__MAX;
32374e98e3e1Schristos   CPU_INSN_NAME (cpu) = cgen_insn_name;
32384e98e3e1Schristos   CPU_FULL_ENGINE_FN (cpu) = m32r2f_engine_run_full;
32394e98e3e1Schristos #if WITH_FAST
32404e98e3e1Schristos   CPU_FAST_ENGINE_FN (cpu) = m32r2f_engine_run_fast;
32414e98e3e1Schristos #else
32424e98e3e1Schristos   CPU_FAST_ENGINE_FN (cpu) = m32r2f_engine_run_full;
32434e98e3e1Schristos #endif
32444e98e3e1Schristos }
32454e98e3e1Schristos 
3246ba340e45Schristos const SIM_MACH m32r2_mach =
32474e98e3e1Schristos {
32484e98e3e1Schristos   "m32r2", "m32r2", MACH_M32R2,
32494e98e3e1Schristos   32, 32, & m32r2_models[0], & m32r2f_imp_properties,
32504e98e3e1Schristos   m32r2_init_cpu,
32514e98e3e1Schristos   m32r2f_prepare_run
32524e98e3e1Schristos };
32534e98e3e1Schristos 
3254