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