xref: /netbsd-src/external/gpl3/gdb/dist/sim/lm32/model.c (revision 88241920d21b339bf319c0e979ffda80c49a2936)
14e98e3e1Schristos /* Simulator model support for lm32bf.
24e98e3e1Schristos 
34e98e3e1Schristos THIS FILE IS MACHINE GENERATED WITH CGEN.
44e98e3e1Schristos 
5*88241920Schristos 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*88241920Schristos    with this program; if not, write to the Free Software Foundation, Inc.,
21*88241920Schristos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
224e98e3e1Schristos 
234e98e3e1Schristos */
244e98e3e1Schristos 
254e98e3e1Schristos #define WANT_CPU lm32bf
264e98e3e1Schristos #define WANT_CPU_LM32BF
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_lm32_add (SIM_CPU *current_cpu, void *sem_arg)
394e98e3e1Schristos {
404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
484e98e3e1Schristos   }
494e98e3e1Schristos   return cycles;
504e98e3e1Schristos #undef FLD
514e98e3e1Schristos }
524e98e3e1Schristos 
534e98e3e1Schristos static int
544e98e3e1Schristos model_lm32_addi (SIM_CPU *current_cpu, void *sem_arg)
554e98e3e1Schristos {
564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
574e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
584e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
594e98e3e1Schristos   int cycles = 0;
604e98e3e1Schristos   {
614e98e3e1Schristos     int referenced = 0;
624e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
634e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
644e98e3e1Schristos   }
654e98e3e1Schristos   return cycles;
664e98e3e1Schristos #undef FLD
674e98e3e1Schristos }
684e98e3e1Schristos 
694e98e3e1Schristos static int
704e98e3e1Schristos model_lm32_and (SIM_CPU *current_cpu, void *sem_arg)
714e98e3e1Schristos {
724e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
734e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
744e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
754e98e3e1Schristos   int cycles = 0;
764e98e3e1Schristos   {
774e98e3e1Schristos     int referenced = 0;
784e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
794e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
804e98e3e1Schristos   }
814e98e3e1Schristos   return cycles;
824e98e3e1Schristos #undef FLD
834e98e3e1Schristos }
844e98e3e1Schristos 
854e98e3e1Schristos static int
864e98e3e1Schristos model_lm32_andi (SIM_CPU *current_cpu, void *sem_arg)
874e98e3e1Schristos {
884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
964e98e3e1Schristos   }
974e98e3e1Schristos   return cycles;
984e98e3e1Schristos #undef FLD
994e98e3e1Schristos }
1004e98e3e1Schristos 
1014e98e3e1Schristos static int
1024e98e3e1Schristos model_lm32_andhii (SIM_CPU *current_cpu, void *sem_arg)
1034e98e3e1Schristos {
1044e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
1054e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1064e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
1074e98e3e1Schristos   int cycles = 0;
1084e98e3e1Schristos   {
1094e98e3e1Schristos     int referenced = 0;
1104e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
1114e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
1124e98e3e1Schristos   }
1134e98e3e1Schristos   return cycles;
1144e98e3e1Schristos #undef FLD
1154e98e3e1Schristos }
1164e98e3e1Schristos 
1174e98e3e1Schristos static int
1184e98e3e1Schristos model_lm32_b (SIM_CPU *current_cpu, void *sem_arg)
1194e98e3e1Schristos {
1204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.f
1214e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1224e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
1234e98e3e1Schristos   int cycles = 0;
1244e98e3e1Schristos   {
1254e98e3e1Schristos     int referenced = 0;
1264e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
1274e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
1284e98e3e1Schristos   }
1294e98e3e1Schristos   return cycles;
1304e98e3e1Schristos #undef FLD
1314e98e3e1Schristos }
1324e98e3e1Schristos 
1334e98e3e1Schristos static int
1344e98e3e1Schristos model_lm32_bi (SIM_CPU *current_cpu, void *sem_arg)
1354e98e3e1Schristos {
1364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bi.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
1444e98e3e1Schristos   }
1454e98e3e1Schristos   return cycles;
1464e98e3e1Schristos #undef FLD
1474e98e3e1Schristos }
1484e98e3e1Schristos 
1494e98e3e1Schristos static int
1504e98e3e1Schristos model_lm32_be (SIM_CPU *current_cpu, void *sem_arg)
1514e98e3e1Schristos {
1524e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.f
1534e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1544e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
1554e98e3e1Schristos   int cycles = 0;
1564e98e3e1Schristos   {
1574e98e3e1Schristos     int referenced = 0;
1584e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
1594e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
1604e98e3e1Schristos   }
1614e98e3e1Schristos   return cycles;
1624e98e3e1Schristos #undef FLD
1634e98e3e1Schristos }
1644e98e3e1Schristos 
1654e98e3e1Schristos static int
1664e98e3e1Schristos model_lm32_bg (SIM_CPU *current_cpu, void *sem_arg)
1674e98e3e1Schristos {
1684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.f
1694e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1704e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
1714e98e3e1Schristos   int cycles = 0;
1724e98e3e1Schristos   {
1734e98e3e1Schristos     int referenced = 0;
1744e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
1754e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
1764e98e3e1Schristos   }
1774e98e3e1Schristos   return cycles;
1784e98e3e1Schristos #undef FLD
1794e98e3e1Schristos }
1804e98e3e1Schristos 
1814e98e3e1Schristos static int
1824e98e3e1Schristos model_lm32_bge (SIM_CPU *current_cpu, void *sem_arg)
1834e98e3e1Schristos {
1844e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
1924e98e3e1Schristos   }
1934e98e3e1Schristos   return cycles;
1944e98e3e1Schristos #undef FLD
1954e98e3e1Schristos }
1964e98e3e1Schristos 
1974e98e3e1Schristos static int
1984e98e3e1Schristos model_lm32_bgeu (SIM_CPU *current_cpu, void *sem_arg)
1994e98e3e1Schristos {
2004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.f
2014e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2024e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
2034e98e3e1Schristos   int cycles = 0;
2044e98e3e1Schristos   {
2054e98e3e1Schristos     int referenced = 0;
2064e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
2074e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
2084e98e3e1Schristos   }
2094e98e3e1Schristos   return cycles;
2104e98e3e1Schristos #undef FLD
2114e98e3e1Schristos }
2124e98e3e1Schristos 
2134e98e3e1Schristos static int
2144e98e3e1Schristos model_lm32_bgu (SIM_CPU *current_cpu, void *sem_arg)
2154e98e3e1Schristos {
2164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.f
2174e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2184e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
2194e98e3e1Schristos   int cycles = 0;
2204e98e3e1Schristos   {
2214e98e3e1Schristos     int referenced = 0;
2224e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
2234e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
2244e98e3e1Schristos   }
2254e98e3e1Schristos   return cycles;
2264e98e3e1Schristos #undef FLD
2274e98e3e1Schristos }
2284e98e3e1Schristos 
2294e98e3e1Schristos static int
2304e98e3e1Schristos model_lm32_bne (SIM_CPU *current_cpu, void *sem_arg)
2314e98e3e1Schristos {
2324e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
2404e98e3e1Schristos   }
2414e98e3e1Schristos   return cycles;
2424e98e3e1Schristos #undef FLD
2434e98e3e1Schristos }
2444e98e3e1Schristos 
2454e98e3e1Schristos static int
2464e98e3e1Schristos model_lm32_call (SIM_CPU *current_cpu, void *sem_arg)
2474e98e3e1Schristos {
2484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_be.f
2494e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2504e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
2514e98e3e1Schristos   int cycles = 0;
2524e98e3e1Schristos   {
2534e98e3e1Schristos     int referenced = 0;
2544e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
2554e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
2564e98e3e1Schristos   }
2574e98e3e1Schristos   return cycles;
2584e98e3e1Schristos #undef FLD
2594e98e3e1Schristos }
2604e98e3e1Schristos 
2614e98e3e1Schristos static int
2624e98e3e1Schristos model_lm32_calli (SIM_CPU *current_cpu, void *sem_arg)
2634e98e3e1Schristos {
2644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bi.f
2654e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2664e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
2674e98e3e1Schristos   int cycles = 0;
2684e98e3e1Schristos   {
2694e98e3e1Schristos     int referenced = 0;
2704e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
2714e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
2724e98e3e1Schristos   }
2734e98e3e1Schristos   return cycles;
2744e98e3e1Schristos #undef FLD
2754e98e3e1Schristos }
2764e98e3e1Schristos 
2774e98e3e1Schristos static int
2784e98e3e1Schristos model_lm32_cmpe (SIM_CPU *current_cpu, void *sem_arg)
2794e98e3e1Schristos {
2804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
2884e98e3e1Schristos   }
2894e98e3e1Schristos   return cycles;
2904e98e3e1Schristos #undef FLD
2914e98e3e1Schristos }
2924e98e3e1Schristos 
2934e98e3e1Schristos static int
2944e98e3e1Schristos model_lm32_cmpei (SIM_CPU *current_cpu, void *sem_arg)
2954e98e3e1Schristos {
2964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
2974e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2984e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
2994e98e3e1Schristos   int cycles = 0;
3004e98e3e1Schristos   {
3014e98e3e1Schristos     int referenced = 0;
3024e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
3034e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
3044e98e3e1Schristos   }
3054e98e3e1Schristos   return cycles;
3064e98e3e1Schristos #undef FLD
3074e98e3e1Schristos }
3084e98e3e1Schristos 
3094e98e3e1Schristos static int
3104e98e3e1Schristos model_lm32_cmpg (SIM_CPU *current_cpu, void *sem_arg)
3114e98e3e1Schristos {
3124e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
3134e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
3144e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
3154e98e3e1Schristos   int cycles = 0;
3164e98e3e1Schristos   {
3174e98e3e1Schristos     int referenced = 0;
3184e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
3194e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
3204e98e3e1Schristos   }
3214e98e3e1Schristos   return cycles;
3224e98e3e1Schristos #undef FLD
3234e98e3e1Schristos }
3244e98e3e1Schristos 
3254e98e3e1Schristos static int
3264e98e3e1Schristos model_lm32_cmpgi (SIM_CPU *current_cpu, void *sem_arg)
3274e98e3e1Schristos {
3284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
3364e98e3e1Schristos   }
3374e98e3e1Schristos   return cycles;
3384e98e3e1Schristos #undef FLD
3394e98e3e1Schristos }
3404e98e3e1Schristos 
3414e98e3e1Schristos static int
3424e98e3e1Schristos model_lm32_cmpge (SIM_CPU *current_cpu, void *sem_arg)
3434e98e3e1Schristos {
3444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
3454e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
3464e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
3474e98e3e1Schristos   int cycles = 0;
3484e98e3e1Schristos   {
3494e98e3e1Schristos     int referenced = 0;
3504e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
3514e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
3524e98e3e1Schristos   }
3534e98e3e1Schristos   return cycles;
3544e98e3e1Schristos #undef FLD
3554e98e3e1Schristos }
3564e98e3e1Schristos 
3574e98e3e1Schristos static int
3584e98e3e1Schristos model_lm32_cmpgei (SIM_CPU *current_cpu, void *sem_arg)
3594e98e3e1Schristos {
3604e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
3614e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
3624e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
3634e98e3e1Schristos   int cycles = 0;
3644e98e3e1Schristos   {
3654e98e3e1Schristos     int referenced = 0;
3664e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
3674e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
3684e98e3e1Schristos   }
3694e98e3e1Schristos   return cycles;
3704e98e3e1Schristos #undef FLD
3714e98e3e1Schristos }
3724e98e3e1Schristos 
3734e98e3e1Schristos static int
3744e98e3e1Schristos model_lm32_cmpgeu (SIM_CPU *current_cpu, void *sem_arg)
3754e98e3e1Schristos {
3764e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
3774e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
3784e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
3794e98e3e1Schristos   int cycles = 0;
3804e98e3e1Schristos   {
3814e98e3e1Schristos     int referenced = 0;
3824e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
3834e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
3844e98e3e1Schristos   }
3854e98e3e1Schristos   return cycles;
3864e98e3e1Schristos #undef FLD
3874e98e3e1Schristos }
3884e98e3e1Schristos 
3894e98e3e1Schristos static int
3904e98e3e1Schristos model_lm32_cmpgeui (SIM_CPU *current_cpu, void *sem_arg)
3914e98e3e1Schristos {
3924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
3934e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
3944e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
3954e98e3e1Schristos   int cycles = 0;
3964e98e3e1Schristos   {
3974e98e3e1Schristos     int referenced = 0;
3984e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
3994e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4004e98e3e1Schristos   }
4014e98e3e1Schristos   return cycles;
4024e98e3e1Schristos #undef FLD
4034e98e3e1Schristos }
4044e98e3e1Schristos 
4054e98e3e1Schristos static int
4064e98e3e1Schristos model_lm32_cmpgu (SIM_CPU *current_cpu, void *sem_arg)
4074e98e3e1Schristos {
4084e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
4094e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
4104e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
4114e98e3e1Schristos   int cycles = 0;
4124e98e3e1Schristos   {
4134e98e3e1Schristos     int referenced = 0;
4144e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
4154e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4164e98e3e1Schristos   }
4174e98e3e1Schristos   return cycles;
4184e98e3e1Schristos #undef FLD
4194e98e3e1Schristos }
4204e98e3e1Schristos 
4214e98e3e1Schristos static int
4224e98e3e1Schristos model_lm32_cmpgui (SIM_CPU *current_cpu, void *sem_arg)
4234e98e3e1Schristos {
4244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
4254e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
4264e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
4274e98e3e1Schristos   int cycles = 0;
4284e98e3e1Schristos   {
4294e98e3e1Schristos     int referenced = 0;
4304e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
4314e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4324e98e3e1Schristos   }
4334e98e3e1Schristos   return cycles;
4344e98e3e1Schristos #undef FLD
4354e98e3e1Schristos }
4364e98e3e1Schristos 
4374e98e3e1Schristos static int
4384e98e3e1Schristos model_lm32_cmpne (SIM_CPU *current_cpu, void *sem_arg)
4394e98e3e1Schristos {
4404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
4414e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
4424e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
4434e98e3e1Schristos   int cycles = 0;
4444e98e3e1Schristos   {
4454e98e3e1Schristos     int referenced = 0;
4464e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
4474e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4484e98e3e1Schristos   }
4494e98e3e1Schristos   return cycles;
4504e98e3e1Schristos #undef FLD
4514e98e3e1Schristos }
4524e98e3e1Schristos 
4534e98e3e1Schristos static int
4544e98e3e1Schristos model_lm32_cmpnei (SIM_CPU *current_cpu, void *sem_arg)
4554e98e3e1Schristos {
4564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
4574e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
4584e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
4594e98e3e1Schristos   int cycles = 0;
4604e98e3e1Schristos   {
4614e98e3e1Schristos     int referenced = 0;
4624e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
4634e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4644e98e3e1Schristos   }
4654e98e3e1Schristos   return cycles;
4664e98e3e1Schristos #undef FLD
4674e98e3e1Schristos }
4684e98e3e1Schristos 
4694e98e3e1Schristos static int
4704e98e3e1Schristos model_lm32_divu (SIM_CPU *current_cpu, void *sem_arg)
4714e98e3e1Schristos {
4724e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
4734e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
4744e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
4754e98e3e1Schristos   int cycles = 0;
4764e98e3e1Schristos   {
4774e98e3e1Schristos     int referenced = 0;
4784e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
4794e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4804e98e3e1Schristos   }
4814e98e3e1Schristos   return cycles;
4824e98e3e1Schristos #undef FLD
4834e98e3e1Schristos }
4844e98e3e1Schristos 
4854e98e3e1Schristos static int
4864e98e3e1Schristos model_lm32_lb (SIM_CPU *current_cpu, void *sem_arg)
4874e98e3e1Schristos {
4884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
4894e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
4904e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
4914e98e3e1Schristos   int cycles = 0;
4924e98e3e1Schristos   {
4934e98e3e1Schristos     int referenced = 0;
4944e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
4954e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
4964e98e3e1Schristos   }
4974e98e3e1Schristos   return cycles;
4984e98e3e1Schristos #undef FLD
4994e98e3e1Schristos }
5004e98e3e1Schristos 
5014e98e3e1Schristos static int
5024e98e3e1Schristos model_lm32_lbu (SIM_CPU *current_cpu, void *sem_arg)
5034e98e3e1Schristos {
5044e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
5054e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
5064e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
5074e98e3e1Schristos   int cycles = 0;
5084e98e3e1Schristos   {
5094e98e3e1Schristos     int referenced = 0;
5104e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
5114e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
5124e98e3e1Schristos   }
5134e98e3e1Schristos   return cycles;
5144e98e3e1Schristos #undef FLD
5154e98e3e1Schristos }
5164e98e3e1Schristos 
5174e98e3e1Schristos static int
5184e98e3e1Schristos model_lm32_lh (SIM_CPU *current_cpu, void *sem_arg)
5194e98e3e1Schristos {
5204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
5214e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
5224e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
5234e98e3e1Schristos   int cycles = 0;
5244e98e3e1Schristos   {
5254e98e3e1Schristos     int referenced = 0;
5264e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
5274e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
5284e98e3e1Schristos   }
5294e98e3e1Schristos   return cycles;
5304e98e3e1Schristos #undef FLD
5314e98e3e1Schristos }
5324e98e3e1Schristos 
5334e98e3e1Schristos static int
5344e98e3e1Schristos model_lm32_lhu (SIM_CPU *current_cpu, void *sem_arg)
5354e98e3e1Schristos {
5364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
5374e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
5384e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
5394e98e3e1Schristos   int cycles = 0;
5404e98e3e1Schristos   {
5414e98e3e1Schristos     int referenced = 0;
5424e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
5434e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
5444e98e3e1Schristos   }
5454e98e3e1Schristos   return cycles;
5464e98e3e1Schristos #undef FLD
5474e98e3e1Schristos }
5484e98e3e1Schristos 
5494e98e3e1Schristos static int
5504e98e3e1Schristos model_lm32_lw (SIM_CPU *current_cpu, void *sem_arg)
5514e98e3e1Schristos {
5524e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
5534e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
5544e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
5554e98e3e1Schristos   int cycles = 0;
5564e98e3e1Schristos   {
5574e98e3e1Schristos     int referenced = 0;
5584e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
5594e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
5604e98e3e1Schristos   }
5614e98e3e1Schristos   return cycles;
5624e98e3e1Schristos #undef FLD
5634e98e3e1Schristos }
5644e98e3e1Schristos 
5654e98e3e1Schristos static int
5664e98e3e1Schristos model_lm32_modu (SIM_CPU *current_cpu, void *sem_arg)
5674e98e3e1Schristos {
5684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
5694e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
5704e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
5714e98e3e1Schristos   int cycles = 0;
5724e98e3e1Schristos   {
5734e98e3e1Schristos     int referenced = 0;
5744e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
5754e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
5764e98e3e1Schristos   }
5774e98e3e1Schristos   return cycles;
5784e98e3e1Schristos #undef FLD
5794e98e3e1Schristos }
5804e98e3e1Schristos 
5814e98e3e1Schristos static int
5824e98e3e1Schristos model_lm32_mul (SIM_CPU *current_cpu, void *sem_arg)
5834e98e3e1Schristos {
5844e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
5854e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
5864e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
5874e98e3e1Schristos   int cycles = 0;
5884e98e3e1Schristos   {
5894e98e3e1Schristos     int referenced = 0;
5904e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
5914e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
5924e98e3e1Schristos   }
5934e98e3e1Schristos   return cycles;
5944e98e3e1Schristos #undef FLD
5954e98e3e1Schristos }
5964e98e3e1Schristos 
5974e98e3e1Schristos static int
5984e98e3e1Schristos model_lm32_muli (SIM_CPU *current_cpu, void *sem_arg)
5994e98e3e1Schristos {
6004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
6014e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6024e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6034e98e3e1Schristos   int cycles = 0;
6044e98e3e1Schristos   {
6054e98e3e1Schristos     int referenced = 0;
6064e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
6074e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
6084e98e3e1Schristos   }
6094e98e3e1Schristos   return cycles;
6104e98e3e1Schristos #undef FLD
6114e98e3e1Schristos }
6124e98e3e1Schristos 
6134e98e3e1Schristos static int
6144e98e3e1Schristos model_lm32_nor (SIM_CPU *current_cpu, void *sem_arg)
6154e98e3e1Schristos {
6164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
6174e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6184e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6194e98e3e1Schristos   int cycles = 0;
6204e98e3e1Schristos   {
6214e98e3e1Schristos     int referenced = 0;
6224e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
6234e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
6244e98e3e1Schristos   }
6254e98e3e1Schristos   return cycles;
6264e98e3e1Schristos #undef FLD
6274e98e3e1Schristos }
6284e98e3e1Schristos 
6294e98e3e1Schristos static int
6304e98e3e1Schristos model_lm32_nori (SIM_CPU *current_cpu, void *sem_arg)
6314e98e3e1Schristos {
6324e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
6334e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6344e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6354e98e3e1Schristos   int cycles = 0;
6364e98e3e1Schristos   {
6374e98e3e1Schristos     int referenced = 0;
6384e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
6394e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
6404e98e3e1Schristos   }
6414e98e3e1Schristos   return cycles;
6424e98e3e1Schristos #undef FLD
6434e98e3e1Schristos }
6444e98e3e1Schristos 
6454e98e3e1Schristos static int
6464e98e3e1Schristos model_lm32_or (SIM_CPU *current_cpu, void *sem_arg)
6474e98e3e1Schristos {
6484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
6494e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6504e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6514e98e3e1Schristos   int cycles = 0;
6524e98e3e1Schristos   {
6534e98e3e1Schristos     int referenced = 0;
6544e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
6554e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
6564e98e3e1Schristos   }
6574e98e3e1Schristos   return cycles;
6584e98e3e1Schristos #undef FLD
6594e98e3e1Schristos }
6604e98e3e1Schristos 
6614e98e3e1Schristos static int
6624e98e3e1Schristos model_lm32_ori (SIM_CPU *current_cpu, void *sem_arg)
6634e98e3e1Schristos {
6644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
6654e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6664e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6674e98e3e1Schristos   int cycles = 0;
6684e98e3e1Schristos   {
6694e98e3e1Schristos     int referenced = 0;
6704e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
6714e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
6724e98e3e1Schristos   }
6734e98e3e1Schristos   return cycles;
6744e98e3e1Schristos #undef FLD
6754e98e3e1Schristos }
6764e98e3e1Schristos 
6774e98e3e1Schristos static int
6784e98e3e1Schristos model_lm32_orhii (SIM_CPU *current_cpu, void *sem_arg)
6794e98e3e1Schristos {
6804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
6814e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6824e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6834e98e3e1Schristos   int cycles = 0;
6844e98e3e1Schristos   {
6854e98e3e1Schristos     int referenced = 0;
6864e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
6874e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
6884e98e3e1Schristos   }
6894e98e3e1Schristos   return cycles;
6904e98e3e1Schristos #undef FLD
6914e98e3e1Schristos }
6924e98e3e1Schristos 
6934e98e3e1Schristos static int
6944e98e3e1Schristos model_lm32_rcsr (SIM_CPU *current_cpu, void *sem_arg)
6954e98e3e1Schristos {
6964e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_rcsr.f
6974e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
6984e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
6994e98e3e1Schristos   int cycles = 0;
7004e98e3e1Schristos   {
7014e98e3e1Schristos     int referenced = 0;
7024e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
7034e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
7044e98e3e1Schristos   }
7054e98e3e1Schristos   return cycles;
7064e98e3e1Schristos #undef FLD
7074e98e3e1Schristos }
7084e98e3e1Schristos 
7094e98e3e1Schristos static int
7104e98e3e1Schristos model_lm32_sb (SIM_CPU *current_cpu, void *sem_arg)
7114e98e3e1Schristos {
7124e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
7134e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
7144e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
7154e98e3e1Schristos   int cycles = 0;
7164e98e3e1Schristos   {
7174e98e3e1Schristos     int referenced = 0;
7184e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
7194e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
7204e98e3e1Schristos   }
7214e98e3e1Schristos   return cycles;
7224e98e3e1Schristos #undef FLD
7234e98e3e1Schristos }
7244e98e3e1Schristos 
7254e98e3e1Schristos static int
7264e98e3e1Schristos model_lm32_sextb (SIM_CPU *current_cpu, void *sem_arg)
7274e98e3e1Schristos {
7284e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.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     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
7364e98e3e1Schristos   }
7374e98e3e1Schristos   return cycles;
7384e98e3e1Schristos #undef FLD
7394e98e3e1Schristos }
7404e98e3e1Schristos 
7414e98e3e1Schristos static int
7424e98e3e1Schristos model_lm32_sexth (SIM_CPU *current_cpu, void *sem_arg)
7434e98e3e1Schristos {
7444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
7454e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
7464e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
7474e98e3e1Schristos   int cycles = 0;
7484e98e3e1Schristos   {
7494e98e3e1Schristos     int referenced = 0;
7504e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
7514e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
7524e98e3e1Schristos   }
7534e98e3e1Schristos   return cycles;
7544e98e3e1Schristos #undef FLD
7554e98e3e1Schristos }
7564e98e3e1Schristos 
7574e98e3e1Schristos static int
7584e98e3e1Schristos model_lm32_sh (SIM_CPU *current_cpu, void *sem_arg)
7594e98e3e1Schristos {
7604e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
7614e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
7624e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
7634e98e3e1Schristos   int cycles = 0;
7644e98e3e1Schristos   {
7654e98e3e1Schristos     int referenced = 0;
7664e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
7674e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
7684e98e3e1Schristos   }
7694e98e3e1Schristos   return cycles;
7704e98e3e1Schristos #undef FLD
7714e98e3e1Schristos }
7724e98e3e1Schristos 
7734e98e3e1Schristos static int
7744e98e3e1Schristos model_lm32_sl (SIM_CPU *current_cpu, void *sem_arg)
7754e98e3e1Schristos {
7764e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
7774e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
7784e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
7794e98e3e1Schristos   int cycles = 0;
7804e98e3e1Schristos   {
7814e98e3e1Schristos     int referenced = 0;
7824e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
7834e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
7844e98e3e1Schristos   }
7854e98e3e1Schristos   return cycles;
7864e98e3e1Schristos #undef FLD
7874e98e3e1Schristos }
7884e98e3e1Schristos 
7894e98e3e1Schristos static int
7904e98e3e1Schristos model_lm32_sli (SIM_CPU *current_cpu, void *sem_arg)
7914e98e3e1Schristos {
7924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
7934e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
7944e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
7954e98e3e1Schristos   int cycles = 0;
7964e98e3e1Schristos   {
7974e98e3e1Schristos     int referenced = 0;
7984e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
7994e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8004e98e3e1Schristos   }
8014e98e3e1Schristos   return cycles;
8024e98e3e1Schristos #undef FLD
8034e98e3e1Schristos }
8044e98e3e1Schristos 
8054e98e3e1Schristos static int
8064e98e3e1Schristos model_lm32_sr (SIM_CPU *current_cpu, void *sem_arg)
8074e98e3e1Schristos {
8084e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
8094e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
8104e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
8114e98e3e1Schristos   int cycles = 0;
8124e98e3e1Schristos   {
8134e98e3e1Schristos     int referenced = 0;
8144e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
8154e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8164e98e3e1Schristos   }
8174e98e3e1Schristos   return cycles;
8184e98e3e1Schristos #undef FLD
8194e98e3e1Schristos }
8204e98e3e1Schristos 
8214e98e3e1Schristos static int
8224e98e3e1Schristos model_lm32_sri (SIM_CPU *current_cpu, void *sem_arg)
8234e98e3e1Schristos {
8244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
8254e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
8264e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
8274e98e3e1Schristos   int cycles = 0;
8284e98e3e1Schristos   {
8294e98e3e1Schristos     int referenced = 0;
8304e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
8314e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8324e98e3e1Schristos   }
8334e98e3e1Schristos   return cycles;
8344e98e3e1Schristos #undef FLD
8354e98e3e1Schristos }
8364e98e3e1Schristos 
8374e98e3e1Schristos static int
8384e98e3e1Schristos model_lm32_sru (SIM_CPU *current_cpu, void *sem_arg)
8394e98e3e1Schristos {
8404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
8414e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
8424e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
8434e98e3e1Schristos   int cycles = 0;
8444e98e3e1Schristos   {
8454e98e3e1Schristos     int referenced = 0;
8464e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
8474e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8484e98e3e1Schristos   }
8494e98e3e1Schristos   return cycles;
8504e98e3e1Schristos #undef FLD
8514e98e3e1Schristos }
8524e98e3e1Schristos 
8534e98e3e1Schristos static int
8544e98e3e1Schristos model_lm32_srui (SIM_CPU *current_cpu, void *sem_arg)
8554e98e3e1Schristos {
8564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
8574e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
8584e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
8594e98e3e1Schristos   int cycles = 0;
8604e98e3e1Schristos   {
8614e98e3e1Schristos     int referenced = 0;
8624e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
8634e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8644e98e3e1Schristos   }
8654e98e3e1Schristos   return cycles;
8664e98e3e1Schristos #undef FLD
8674e98e3e1Schristos }
8684e98e3e1Schristos 
8694e98e3e1Schristos static int
8704e98e3e1Schristos model_lm32_sub (SIM_CPU *current_cpu, void *sem_arg)
8714e98e3e1Schristos {
8724e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
8734e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
8744e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
8754e98e3e1Schristos   int cycles = 0;
8764e98e3e1Schristos   {
8774e98e3e1Schristos     int referenced = 0;
8784e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
8794e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8804e98e3e1Schristos   }
8814e98e3e1Schristos   return cycles;
8824e98e3e1Schristos #undef FLD
8834e98e3e1Schristos }
8844e98e3e1Schristos 
8854e98e3e1Schristos static int
8864e98e3e1Schristos model_lm32_sw (SIM_CPU *current_cpu, void *sem_arg)
8874e98e3e1Schristos {
8884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f
8894e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
8904e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
8914e98e3e1Schristos   int cycles = 0;
8924e98e3e1Schristos   {
8934e98e3e1Schristos     int referenced = 0;
8944e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
8954e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
8964e98e3e1Schristos   }
8974e98e3e1Schristos   return cycles;
8984e98e3e1Schristos #undef FLD
8994e98e3e1Schristos }
9004e98e3e1Schristos 
9014e98e3e1Schristos static int
9024e98e3e1Schristos model_lm32_user (SIM_CPU *current_cpu, void *sem_arg)
9034e98e3e1Schristos {
9044e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
9054e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
9064e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
9074e98e3e1Schristos   int cycles = 0;
9084e98e3e1Schristos   {
9094e98e3e1Schristos     int referenced = 0;
9104e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
9114e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
9124e98e3e1Schristos   }
9134e98e3e1Schristos   return cycles;
9144e98e3e1Schristos #undef FLD
9154e98e3e1Schristos }
9164e98e3e1Schristos 
9174e98e3e1Schristos static int
9184e98e3e1Schristos model_lm32_wcsr (SIM_CPU *current_cpu, void *sem_arg)
9194e98e3e1Schristos {
9204e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_wcsr.f
9214e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
9224e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
9234e98e3e1Schristos   int cycles = 0;
9244e98e3e1Schristos   {
9254e98e3e1Schristos     int referenced = 0;
9264e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
9274e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
9284e98e3e1Schristos   }
9294e98e3e1Schristos   return cycles;
9304e98e3e1Schristos #undef FLD
9314e98e3e1Schristos }
9324e98e3e1Schristos 
9334e98e3e1Schristos static int
9344e98e3e1Schristos model_lm32_xor (SIM_CPU *current_cpu, void *sem_arg)
9354e98e3e1Schristos {
9364e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
9374e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
9384e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
9394e98e3e1Schristos   int cycles = 0;
9404e98e3e1Schristos   {
9414e98e3e1Schristos     int referenced = 0;
9424e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
9434e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
9444e98e3e1Schristos   }
9454e98e3e1Schristos   return cycles;
9464e98e3e1Schristos #undef FLD
9474e98e3e1Schristos }
9484e98e3e1Schristos 
9494e98e3e1Schristos static int
9504e98e3e1Schristos model_lm32_xori (SIM_CPU *current_cpu, void *sem_arg)
9514e98e3e1Schristos {
9524e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
9534e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
9544e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
9554e98e3e1Schristos   int cycles = 0;
9564e98e3e1Schristos   {
9574e98e3e1Schristos     int referenced = 0;
9584e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
9594e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
9604e98e3e1Schristos   }
9614e98e3e1Schristos   return cycles;
9624e98e3e1Schristos #undef FLD
9634e98e3e1Schristos }
9644e98e3e1Schristos 
9654e98e3e1Schristos static int
9664e98e3e1Schristos model_lm32_xnor (SIM_CPU *current_cpu, void *sem_arg)
9674e98e3e1Schristos {
9684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_user.f
9694e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
9704e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
9714e98e3e1Schristos   int cycles = 0;
9724e98e3e1Schristos   {
9734e98e3e1Schristos     int referenced = 0;
9744e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
9754e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
9764e98e3e1Schristos   }
9774e98e3e1Schristos   return cycles;
9784e98e3e1Schristos #undef FLD
9794e98e3e1Schristos }
9804e98e3e1Schristos 
9814e98e3e1Schristos static int
9824e98e3e1Schristos model_lm32_xnori (SIM_CPU *current_cpu, void *sem_arg)
9834e98e3e1Schristos {
9844e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_andi.f
9854e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
9864e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
9874e98e3e1Schristos   int cycles = 0;
9884e98e3e1Schristos   {
9894e98e3e1Schristos     int referenced = 0;
9904e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
9914e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
9924e98e3e1Schristos   }
9934e98e3e1Schristos   return cycles;
9944e98e3e1Schristos #undef FLD
9954e98e3e1Schristos }
9964e98e3e1Schristos 
9974e98e3e1Schristos static int
9984e98e3e1Schristos model_lm32_break (SIM_CPU *current_cpu, void *sem_arg)
9994e98e3e1Schristos {
10004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
10014e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
10024e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
10034e98e3e1Schristos   int cycles = 0;
10044e98e3e1Schristos   {
10054e98e3e1Schristos     int referenced = 0;
10064e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
10074e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
10084e98e3e1Schristos   }
10094e98e3e1Schristos   return cycles;
10104e98e3e1Schristos #undef FLD
10114e98e3e1Schristos }
10124e98e3e1Schristos 
10134e98e3e1Schristos static int
10144e98e3e1Schristos model_lm32_scall (SIM_CPU *current_cpu, void *sem_arg)
10154e98e3e1Schristos {
10164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f
10174e98e3e1Schristos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
10184e98e3e1Schristos   const IDESC * UNUSED idesc = abuf->idesc;
10194e98e3e1Schristos   int cycles = 0;
10204e98e3e1Schristos   {
10214e98e3e1Schristos     int referenced = 0;
10224e98e3e1Schristos     int UNUSED insn_referenced = abuf->written;
10234e98e3e1Schristos     cycles += lm32bf_model_lm32_u_exec (current_cpu, idesc, 0, referenced);
10244e98e3e1Schristos   }
10254e98e3e1Schristos   return cycles;
10264e98e3e1Schristos #undef FLD
10274e98e3e1Schristos }
10284e98e3e1Schristos 
10294e98e3e1Schristos /* We assume UNIT_NONE == 0 because the tables don't always terminate
10304e98e3e1Schristos    entries with it.  */
10314e98e3e1Schristos 
10324e98e3e1Schristos /* Model timing data for `lm32'.  */
10334e98e3e1Schristos 
10344e98e3e1Schristos static const INSN_TIMING lm32_timing[] = {
10354e98e3e1Schristos   { LM32BF_INSN_X_INVALID, 0, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10364e98e3e1Schristos   { LM32BF_INSN_X_AFTER, 0, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10374e98e3e1Schristos   { LM32BF_INSN_X_BEFORE, 0, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10384e98e3e1Schristos   { LM32BF_INSN_X_CTI_CHAIN, 0, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10394e98e3e1Schristos   { LM32BF_INSN_X_CHAIN, 0, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10404e98e3e1Schristos   { LM32BF_INSN_X_BEGIN, 0, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10414e98e3e1Schristos   { LM32BF_INSN_ADD, model_lm32_add, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10424e98e3e1Schristos   { LM32BF_INSN_ADDI, model_lm32_addi, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10434e98e3e1Schristos   { LM32BF_INSN_AND, model_lm32_and, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10444e98e3e1Schristos   { LM32BF_INSN_ANDI, model_lm32_andi, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10454e98e3e1Schristos   { LM32BF_INSN_ANDHII, model_lm32_andhii, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10464e98e3e1Schristos   { LM32BF_INSN_B, model_lm32_b, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10474e98e3e1Schristos   { LM32BF_INSN_BI, model_lm32_bi, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10484e98e3e1Schristos   { LM32BF_INSN_BE, model_lm32_be, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10494e98e3e1Schristos   { LM32BF_INSN_BG, model_lm32_bg, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10504e98e3e1Schristos   { LM32BF_INSN_BGE, model_lm32_bge, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10514e98e3e1Schristos   { LM32BF_INSN_BGEU, model_lm32_bgeu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10524e98e3e1Schristos   { LM32BF_INSN_BGU, model_lm32_bgu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10534e98e3e1Schristos   { LM32BF_INSN_BNE, model_lm32_bne, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10544e98e3e1Schristos   { LM32BF_INSN_CALL, model_lm32_call, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10554e98e3e1Schristos   { LM32BF_INSN_CALLI, model_lm32_calli, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10564e98e3e1Schristos   { LM32BF_INSN_CMPE, model_lm32_cmpe, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10574e98e3e1Schristos   { LM32BF_INSN_CMPEI, model_lm32_cmpei, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10584e98e3e1Schristos   { LM32BF_INSN_CMPG, model_lm32_cmpg, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10594e98e3e1Schristos   { LM32BF_INSN_CMPGI, model_lm32_cmpgi, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10604e98e3e1Schristos   { LM32BF_INSN_CMPGE, model_lm32_cmpge, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10614e98e3e1Schristos   { LM32BF_INSN_CMPGEI, model_lm32_cmpgei, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10624e98e3e1Schristos   { LM32BF_INSN_CMPGEU, model_lm32_cmpgeu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10634e98e3e1Schristos   { LM32BF_INSN_CMPGEUI, model_lm32_cmpgeui, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10644e98e3e1Schristos   { LM32BF_INSN_CMPGU, model_lm32_cmpgu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10654e98e3e1Schristos   { LM32BF_INSN_CMPGUI, model_lm32_cmpgui, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10664e98e3e1Schristos   { LM32BF_INSN_CMPNE, model_lm32_cmpne, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10674e98e3e1Schristos   { LM32BF_INSN_CMPNEI, model_lm32_cmpnei, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10684e98e3e1Schristos   { LM32BF_INSN_DIVU, model_lm32_divu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10694e98e3e1Schristos   { LM32BF_INSN_LB, model_lm32_lb, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10704e98e3e1Schristos   { LM32BF_INSN_LBU, model_lm32_lbu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10714e98e3e1Schristos   { LM32BF_INSN_LH, model_lm32_lh, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10724e98e3e1Schristos   { LM32BF_INSN_LHU, model_lm32_lhu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10734e98e3e1Schristos   { LM32BF_INSN_LW, model_lm32_lw, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10744e98e3e1Schristos   { LM32BF_INSN_MODU, model_lm32_modu, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10754e98e3e1Schristos   { LM32BF_INSN_MUL, model_lm32_mul, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10764e98e3e1Schristos   { LM32BF_INSN_MULI, model_lm32_muli, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10774e98e3e1Schristos   { LM32BF_INSN_NOR, model_lm32_nor, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10784e98e3e1Schristos   { LM32BF_INSN_NORI, model_lm32_nori, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10794e98e3e1Schristos   { LM32BF_INSN_OR, model_lm32_or, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10804e98e3e1Schristos   { LM32BF_INSN_ORI, model_lm32_ori, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10814e98e3e1Schristos   { LM32BF_INSN_ORHII, model_lm32_orhii, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10824e98e3e1Schristos   { LM32BF_INSN_RCSR, model_lm32_rcsr, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10834e98e3e1Schristos   { LM32BF_INSN_SB, model_lm32_sb, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10844e98e3e1Schristos   { LM32BF_INSN_SEXTB, model_lm32_sextb, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10854e98e3e1Schristos   { LM32BF_INSN_SEXTH, model_lm32_sexth, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10864e98e3e1Schristos   { LM32BF_INSN_SH, model_lm32_sh, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10874e98e3e1Schristos   { LM32BF_INSN_SL, model_lm32_sl, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10884e98e3e1Schristos   { LM32BF_INSN_SLI, model_lm32_sli, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10894e98e3e1Schristos   { LM32BF_INSN_SR, model_lm32_sr, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10904e98e3e1Schristos   { LM32BF_INSN_SRI, model_lm32_sri, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10914e98e3e1Schristos   { LM32BF_INSN_SRU, model_lm32_sru, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10924e98e3e1Schristos   { LM32BF_INSN_SRUI, model_lm32_srui, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10934e98e3e1Schristos   { LM32BF_INSN_SUB, model_lm32_sub, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10944e98e3e1Schristos   { LM32BF_INSN_SW, model_lm32_sw, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10954e98e3e1Schristos   { LM32BF_INSN_USER, model_lm32_user, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10964e98e3e1Schristos   { LM32BF_INSN_WCSR, model_lm32_wcsr, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10974e98e3e1Schristos   { LM32BF_INSN_XOR, model_lm32_xor, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10984e98e3e1Schristos   { LM32BF_INSN_XORI, model_lm32_xori, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
10994e98e3e1Schristos   { LM32BF_INSN_XNOR, model_lm32_xnor, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
11004e98e3e1Schristos   { LM32BF_INSN_XNORI, model_lm32_xnori, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
11014e98e3e1Schristos   { LM32BF_INSN_BREAK, model_lm32_break, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
11024e98e3e1Schristos   { LM32BF_INSN_SCALL, model_lm32_scall, { { (int) UNIT_LM32_U_EXEC, 1, 1 } } },
11034e98e3e1Schristos };
11044e98e3e1Schristos 
11054e98e3e1Schristos #endif /* WITH_PROFILE_MODEL_P */
11064e98e3e1Schristos 
11074e98e3e1Schristos static void
11084e98e3e1Schristos lm32_model_init (SIM_CPU *cpu)
11094e98e3e1Schristos {
11104e98e3e1Schristos   CPU_MODEL_DATA (cpu) = (void *) zalloc (sizeof (MODEL_LM32_DATA));
11114e98e3e1Schristos }
11124e98e3e1Schristos 
11134e98e3e1Schristos #if WITH_PROFILE_MODEL_P
11144e98e3e1Schristos #define TIMING_DATA(td) td
11154e98e3e1Schristos #else
11164e98e3e1Schristos #define TIMING_DATA(td) 0
11174e98e3e1Schristos #endif
11184e98e3e1Schristos 
1119ba340e45Schristos static const SIM_MODEL lm32_models[] =
11204e98e3e1Schristos {
11214e98e3e1Schristos   { "lm32", & lm32_mach, MODEL_LM32, TIMING_DATA (& lm32_timing[0]), lm32_model_init },
11224e98e3e1Schristos   { 0 }
11234e98e3e1Schristos };
11244e98e3e1Schristos 
11254e98e3e1Schristos /* The properties of this cpu's implementation.  */
11264e98e3e1Schristos 
1127ba340e45Schristos static const SIM_MACH_IMP_PROPERTIES lm32bf_imp_properties =
11284e98e3e1Schristos {
11294e98e3e1Schristos   sizeof (SIM_CPU),
11304e98e3e1Schristos #if WITH_SCACHE
11314e98e3e1Schristos   sizeof (SCACHE)
11324e98e3e1Schristos #else
11334e98e3e1Schristos   0
11344e98e3e1Schristos #endif
11354e98e3e1Schristos };
11364e98e3e1Schristos 
11374e98e3e1Schristos 
11384e98e3e1Schristos static void
11394e98e3e1Schristos lm32bf_prepare_run (SIM_CPU *cpu)
11404e98e3e1Schristos {
11414e98e3e1Schristos   if (CPU_IDESC (cpu) == NULL)
11424e98e3e1Schristos     lm32bf_init_idesc_table (cpu);
11434e98e3e1Schristos }
11444e98e3e1Schristos 
11454e98e3e1Schristos static const CGEN_INSN *
11464e98e3e1Schristos lm32bf_get_idata (SIM_CPU *cpu, int inum)
11474e98e3e1Schristos {
11484e98e3e1Schristos   return CPU_IDESC (cpu) [inum].idata;
11494e98e3e1Schristos }
11504e98e3e1Schristos 
11514e98e3e1Schristos static void
11524e98e3e1Schristos lm32_init_cpu (SIM_CPU *cpu)
11534e98e3e1Schristos {
11544e98e3e1Schristos   CPU_REG_FETCH (cpu) = lm32bf_fetch_register;
11554e98e3e1Schristos   CPU_REG_STORE (cpu) = lm32bf_store_register;
11564e98e3e1Schristos   CPU_PC_FETCH (cpu) = lm32bf_h_pc_get;
11574e98e3e1Schristos   CPU_PC_STORE (cpu) = lm32bf_h_pc_set;
11584e98e3e1Schristos   CPU_GET_IDATA (cpu) = lm32bf_get_idata;
11594e98e3e1Schristos   CPU_MAX_INSNS (cpu) = LM32BF_INSN__MAX;
11604e98e3e1Schristos   CPU_INSN_NAME (cpu) = cgen_insn_name;
11614e98e3e1Schristos   CPU_FULL_ENGINE_FN (cpu) = lm32bf_engine_run_full;
11624e98e3e1Schristos #if WITH_FAST
11634e98e3e1Schristos   CPU_FAST_ENGINE_FN (cpu) = lm32bf_engine_run_fast;
11644e98e3e1Schristos #else
11654e98e3e1Schristos   CPU_FAST_ENGINE_FN (cpu) = lm32bf_engine_run_full;
11664e98e3e1Schristos #endif
11674e98e3e1Schristos }
11684e98e3e1Schristos 
1169ba340e45Schristos const SIM_MACH lm32_mach =
11704e98e3e1Schristos {
11714e98e3e1Schristos   "lm32", "lm32", MACH_LM32,
11724e98e3e1Schristos   32, 32, & lm32_models[0], & lm32bf_imp_properties,
11734e98e3e1Schristos   lm32_init_cpu,
11744e98e3e1Schristos   lm32bf_prepare_run
11754e98e3e1Schristos };
11764e98e3e1Schristos 
1177