Home | History | Annotate | Line # | Download | only in cris
modelv32.c revision 1.11
      1   1.1  christos /* Simulator model support for crisv32f.
      2   1.1  christos 
      3   1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      4   1.1  christos 
      5  1.11  christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
      6   1.1  christos 
      7   1.1  christos This file is part of the GNU simulators.
      8   1.1  christos 
      9   1.1  christos    This file is free software; you can redistribute it and/or modify
     10   1.1  christos    it under the terms of the GNU General Public License as published by
     11   1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     12   1.1  christos    any later version.
     13   1.1  christos 
     14   1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     15   1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     16   1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     17   1.1  christos    License for more details.
     18   1.1  christos 
     19   1.1  christos    You should have received a copy of the GNU General Public License along
     20  1.11  christos    with this program; if not, write to the Free Software Foundation, Inc.,
     21  1.11  christos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     22   1.1  christos 
     23   1.1  christos */
     24   1.1  christos 
     25   1.1  christos #define WANT_CPU crisv32f
     26   1.1  christos #define WANT_CPU_CRISV32F
     27   1.1  christos 
     28   1.1  christos #include "sim-main.h"
     29   1.1  christos 
     30   1.1  christos /* The profiling data is recorded here, but is accessed via the profiling
     31   1.1  christos    mechanism.  After all, this is information for profiling.  */
     32   1.1  christos 
     33   1.1  christos #if WITH_PROFILE_MODEL_P
     34   1.1  christos 
     35   1.1  christos /* Model handlers for each insn.  */
     36   1.1  christos 
     37   1.1  christos static int
     38   1.1  christos model_crisv32_move_b_r (SIM_CPU *current_cpu, void *sem_arg)
     39   1.1  christos {
     40   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
     41   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
     42   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
     43   1.1  christos   int cycles = 0;
     44   1.1  christos   {
     45   1.1  christos     int referenced = 0;
     46   1.1  christos     int UNUSED insn_referenced = abuf->written;
     47   1.1  christos     INT in_Rd = -1;
     48   1.1  christos     INT in_Rs = -1;
     49   1.1  christos     INT out_Rd = -1;
     50   1.1  christos     in_Rs = FLD (in_Rs);
     51   1.1  christos     referenced |= 1 << 1;
     52   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
     53   1.1  christos   }
     54   1.1  christos   return cycles;
     55   1.1  christos #undef FLD
     56   1.1  christos }
     57   1.1  christos 
     58   1.1  christos static int
     59   1.1  christos model_crisv32_move_w_r (SIM_CPU *current_cpu, void *sem_arg)
     60   1.1  christos {
     61   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
     62   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
     63   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
     64   1.1  christos   int cycles = 0;
     65   1.1  christos   {
     66   1.1  christos     int referenced = 0;
     67   1.1  christos     int UNUSED insn_referenced = abuf->written;
     68   1.1  christos     INT in_Rd = -1;
     69   1.1  christos     INT in_Rs = -1;
     70   1.1  christos     INT out_Rd = -1;
     71   1.1  christos     in_Rs = FLD (in_Rs);
     72   1.1  christos     referenced |= 1 << 1;
     73   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
     74   1.1  christos   }
     75   1.1  christos   return cycles;
     76   1.1  christos #undef FLD
     77   1.1  christos }
     78   1.1  christos 
     79   1.1  christos static int
     80   1.1  christos model_crisv32_move_d_r (SIM_CPU *current_cpu, void *sem_arg)
     81   1.1  christos {
     82   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
     83   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
     84   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
     85   1.1  christos   int cycles = 0;
     86   1.1  christos   {
     87   1.1  christos     int referenced = 0;
     88   1.1  christos     int UNUSED insn_referenced = abuf->written;
     89   1.1  christos     INT in_Rd = -1;
     90   1.1  christos     INT in_Rs = -1;
     91   1.1  christos     INT out_Rd = -1;
     92   1.1  christos     in_Rs = FLD (in_Rs);
     93   1.1  christos     referenced |= 1 << 1;
     94   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
     95   1.1  christos   }
     96   1.1  christos   return cycles;
     97   1.1  christos #undef FLD
     98   1.1  christos }
     99   1.1  christos 
    100   1.1  christos static int
    101   1.1  christos model_crisv32_moveq (SIM_CPU *current_cpu, void *sem_arg)
    102   1.1  christos {
    103   1.1  christos #define FLD(f) abuf->fields.sfmt_moveq.f
    104   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    105   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    106   1.1  christos   int cycles = 0;
    107   1.1  christos   {
    108   1.1  christos     int referenced = 0;
    109   1.1  christos     int UNUSED insn_referenced = abuf->written;
    110   1.1  christos     INT in_Rd = -1;
    111   1.1  christos     INT in_Rs = -1;
    112   1.1  christos     INT out_Rd = -1;
    113   1.1  christos     out_Rd = FLD (out_Rd);
    114   1.1  christos     referenced |= 1 << 2;
    115   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    116   1.1  christos   }
    117   1.1  christos   return cycles;
    118   1.1  christos #undef FLD
    119   1.1  christos }
    120   1.1  christos 
    121   1.1  christos static int
    122   1.1  christos model_crisv32_movs_b_r (SIM_CPU *current_cpu, void *sem_arg)
    123   1.1  christos {
    124   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    125   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    126   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    127   1.1  christos   int cycles = 0;
    128   1.1  christos   {
    129   1.1  christos     int referenced = 0;
    130   1.1  christos     int UNUSED insn_referenced = abuf->written;
    131   1.1  christos     INT in_Rd = -1;
    132   1.1  christos     INT in_Rs = -1;
    133   1.1  christos     INT out_Rd = -1;
    134   1.1  christos     in_Rs = FLD (in_Rs);
    135   1.1  christos     out_Rd = FLD (out_Rd);
    136   1.1  christos     referenced |= 1 << 1;
    137   1.1  christos     referenced |= 1 << 2;
    138   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    139   1.1  christos   }
    140   1.1  christos   return cycles;
    141   1.1  christos #undef FLD
    142   1.1  christos }
    143   1.1  christos 
    144   1.1  christos static int
    145   1.1  christos model_crisv32_movs_w_r (SIM_CPU *current_cpu, void *sem_arg)
    146   1.1  christos {
    147   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    148   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    149   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    150   1.1  christos   int cycles = 0;
    151   1.1  christos   {
    152   1.1  christos     int referenced = 0;
    153   1.1  christos     int UNUSED insn_referenced = abuf->written;
    154   1.1  christos     INT in_Rd = -1;
    155   1.1  christos     INT in_Rs = -1;
    156   1.1  christos     INT out_Rd = -1;
    157   1.1  christos     in_Rs = FLD (in_Rs);
    158   1.1  christos     out_Rd = FLD (out_Rd);
    159   1.1  christos     referenced |= 1 << 1;
    160   1.1  christos     referenced |= 1 << 2;
    161   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    162   1.1  christos   }
    163   1.1  christos   return cycles;
    164   1.1  christos #undef FLD
    165   1.1  christos }
    166   1.1  christos 
    167   1.1  christos static int
    168   1.1  christos model_crisv32_movu_b_r (SIM_CPU *current_cpu, void *sem_arg)
    169   1.1  christos {
    170   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    171   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    172   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    173   1.1  christos   int cycles = 0;
    174   1.1  christos   {
    175   1.1  christos     int referenced = 0;
    176   1.1  christos     int UNUSED insn_referenced = abuf->written;
    177   1.1  christos     INT in_Rd = -1;
    178   1.1  christos     INT in_Rs = -1;
    179   1.1  christos     INT out_Rd = -1;
    180   1.1  christos     in_Rs = FLD (in_Rs);
    181   1.1  christos     out_Rd = FLD (out_Rd);
    182   1.1  christos     referenced |= 1 << 1;
    183   1.1  christos     referenced |= 1 << 2;
    184   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    185   1.1  christos   }
    186   1.1  christos   return cycles;
    187   1.1  christos #undef FLD
    188   1.1  christos }
    189   1.1  christos 
    190   1.1  christos static int
    191   1.1  christos model_crisv32_movu_w_r (SIM_CPU *current_cpu, void *sem_arg)
    192   1.1  christos {
    193   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    194   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    195   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    196   1.1  christos   int cycles = 0;
    197   1.1  christos   {
    198   1.1  christos     int referenced = 0;
    199   1.1  christos     int UNUSED insn_referenced = abuf->written;
    200   1.1  christos     INT in_Rd = -1;
    201   1.1  christos     INT in_Rs = -1;
    202   1.1  christos     INT out_Rd = -1;
    203   1.1  christos     in_Rs = FLD (in_Rs);
    204   1.1  christos     out_Rd = FLD (out_Rd);
    205   1.1  christos     referenced |= 1 << 1;
    206   1.1  christos     referenced |= 1 << 2;
    207   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    208   1.1  christos   }
    209   1.1  christos   return cycles;
    210   1.1  christos #undef FLD
    211   1.1  christos }
    212   1.1  christos 
    213   1.1  christos static int
    214   1.1  christos model_crisv32_movecbr (SIM_CPU *current_cpu, void *sem_arg)
    215   1.1  christos {
    216   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
    217   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    218   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    219   1.1  christos   int cycles = 0;
    220   1.1  christos   {
    221   1.1  christos     int referenced = 0;
    222   1.1  christos     int UNUSED insn_referenced = abuf->written;
    223   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    224   1.1  christos   }
    225   1.1  christos   {
    226   1.1  christos     int referenced = 0;
    227   1.1  christos     int UNUSED insn_referenced = abuf->written;
    228   1.1  christos     INT in_Rd = -1;
    229   1.1  christos     INT in_Rs = -1;
    230   1.1  christos     INT out_Rd = -1;
    231   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    232   1.1  christos   }
    233   1.1  christos   return cycles;
    234   1.1  christos #undef FLD
    235   1.1  christos }
    236   1.1  christos 
    237   1.1  christos static int
    238   1.1  christos model_crisv32_movecwr (SIM_CPU *current_cpu, void *sem_arg)
    239   1.1  christos {
    240   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
    241   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    242   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    243   1.1  christos   int cycles = 0;
    244   1.1  christos   {
    245   1.1  christos     int referenced = 0;
    246   1.1  christos     int UNUSED insn_referenced = abuf->written;
    247   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    248   1.1  christos   }
    249   1.1  christos   {
    250   1.1  christos     int referenced = 0;
    251   1.1  christos     int UNUSED insn_referenced = abuf->written;
    252   1.1  christos     INT in_Rd = -1;
    253   1.1  christos     INT in_Rs = -1;
    254   1.1  christos     INT out_Rd = -1;
    255   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    256   1.1  christos   }
    257   1.1  christos   return cycles;
    258   1.1  christos #undef FLD
    259   1.1  christos }
    260   1.1  christos 
    261   1.1  christos static int
    262   1.1  christos model_crisv32_movecdr (SIM_CPU *current_cpu, void *sem_arg)
    263   1.1  christos {
    264   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
    265   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    266   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    267   1.1  christos   int cycles = 0;
    268   1.1  christos   {
    269   1.1  christos     int referenced = 0;
    270   1.1  christos     int UNUSED insn_referenced = abuf->written;
    271   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
    272   1.1  christos   }
    273   1.1  christos   {
    274   1.1  christos     int referenced = 0;
    275   1.1  christos     int UNUSED insn_referenced = abuf->written;
    276   1.1  christos     INT in_Rd = -1;
    277   1.1  christos     INT in_Rs = -1;
    278   1.1  christos     INT out_Rd = -1;
    279   1.1  christos     out_Rd = FLD (out_Rd);
    280   1.1  christos     referenced |= 1 << 2;
    281   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    282   1.1  christos   }
    283   1.1  christos   return cycles;
    284   1.1  christos #undef FLD
    285   1.1  christos }
    286   1.1  christos 
    287   1.1  christos static int
    288   1.1  christos model_crisv32_movscbr (SIM_CPU *current_cpu, void *sem_arg)
    289   1.1  christos {
    290   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
    291   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    292   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    293   1.1  christos   int cycles = 0;
    294   1.1  christos   {
    295   1.1  christos     int referenced = 0;
    296   1.1  christos     int UNUSED insn_referenced = abuf->written;
    297   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    298   1.1  christos   }
    299   1.1  christos   {
    300   1.1  christos     int referenced = 0;
    301   1.1  christos     int UNUSED insn_referenced = abuf->written;
    302   1.1  christos     INT in_Rd = -1;
    303   1.1  christos     INT in_Rs = -1;
    304   1.1  christos     INT out_Rd = -1;
    305   1.1  christos     out_Rd = FLD (out_Rd);
    306   1.1  christos     referenced |= 1 << 2;
    307   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    308   1.1  christos   }
    309   1.1  christos   return cycles;
    310   1.1  christos #undef FLD
    311   1.1  christos }
    312   1.1  christos 
    313   1.1  christos static int
    314   1.1  christos model_crisv32_movscwr (SIM_CPU *current_cpu, void *sem_arg)
    315   1.1  christos {
    316   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
    317   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    318   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    319   1.1  christos   int cycles = 0;
    320   1.1  christos   {
    321   1.1  christos     int referenced = 0;
    322   1.1  christos     int UNUSED insn_referenced = abuf->written;
    323   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    324   1.1  christos   }
    325   1.1  christos   {
    326   1.1  christos     int referenced = 0;
    327   1.1  christos     int UNUSED insn_referenced = abuf->written;
    328   1.1  christos     INT in_Rd = -1;
    329   1.1  christos     INT in_Rs = -1;
    330   1.1  christos     INT out_Rd = -1;
    331   1.1  christos     out_Rd = FLD (out_Rd);
    332   1.1  christos     referenced |= 1 << 2;
    333   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    334   1.1  christos   }
    335   1.1  christos   return cycles;
    336   1.1  christos #undef FLD
    337   1.1  christos }
    338   1.1  christos 
    339   1.1  christos static int
    340   1.1  christos model_crisv32_movucbr (SIM_CPU *current_cpu, void *sem_arg)
    341   1.1  christos {
    342   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
    343   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    344   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    345   1.1  christos   int cycles = 0;
    346   1.1  christos   {
    347   1.1  christos     int referenced = 0;
    348   1.1  christos     int UNUSED insn_referenced = abuf->written;
    349   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    350   1.1  christos   }
    351   1.1  christos   {
    352   1.1  christos     int referenced = 0;
    353   1.1  christos     int UNUSED insn_referenced = abuf->written;
    354   1.1  christos     INT in_Rd = -1;
    355   1.1  christos     INT in_Rs = -1;
    356   1.1  christos     INT out_Rd = -1;
    357   1.1  christos     out_Rd = FLD (out_Rd);
    358   1.1  christos     referenced |= 1 << 2;
    359   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    360   1.1  christos   }
    361   1.1  christos   return cycles;
    362   1.1  christos #undef FLD
    363   1.1  christos }
    364   1.1  christos 
    365   1.1  christos static int
    366   1.1  christos model_crisv32_movucwr (SIM_CPU *current_cpu, void *sem_arg)
    367   1.1  christos {
    368   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
    369   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    370   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    371   1.1  christos   int cycles = 0;
    372   1.1  christos   {
    373   1.1  christos     int referenced = 0;
    374   1.1  christos     int UNUSED insn_referenced = abuf->written;
    375   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    376   1.1  christos   }
    377   1.1  christos   {
    378   1.1  christos     int referenced = 0;
    379   1.1  christos     int UNUSED insn_referenced = abuf->written;
    380   1.1  christos     INT in_Rd = -1;
    381   1.1  christos     INT in_Rs = -1;
    382   1.1  christos     INT out_Rd = -1;
    383   1.1  christos     out_Rd = FLD (out_Rd);
    384   1.1  christos     referenced |= 1 << 2;
    385   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    386   1.1  christos   }
    387   1.1  christos   return cycles;
    388   1.1  christos #undef FLD
    389   1.1  christos }
    390   1.1  christos 
    391   1.1  christos static int
    392   1.1  christos model_crisv32_addq (SIM_CPU *current_cpu, void *sem_arg)
    393   1.1  christos {
    394   1.1  christos #define FLD(f) abuf->fields.sfmt_addq.f
    395   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    396   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    397   1.1  christos   int cycles = 0;
    398   1.1  christos   {
    399   1.1  christos     int referenced = 0;
    400   1.1  christos     int UNUSED insn_referenced = abuf->written;
    401   1.1  christos     INT in_Rd = -1;
    402   1.1  christos     INT in_Rs = -1;
    403   1.1  christos     INT out_Rd = -1;
    404   1.1  christos     in_Rd = FLD (in_Rd);
    405   1.1  christos     referenced |= 1 << 0;
    406   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    407   1.1  christos   }
    408   1.1  christos   return cycles;
    409   1.1  christos #undef FLD
    410   1.1  christos }
    411   1.1  christos 
    412   1.1  christos static int
    413   1.1  christos model_crisv32_subq (SIM_CPU *current_cpu, void *sem_arg)
    414   1.1  christos {
    415   1.1  christos #define FLD(f) abuf->fields.sfmt_addq.f
    416   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    417   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    418   1.1  christos   int cycles = 0;
    419   1.1  christos   {
    420   1.1  christos     int referenced = 0;
    421   1.1  christos     int UNUSED insn_referenced = abuf->written;
    422   1.1  christos     INT in_Rd = -1;
    423   1.1  christos     INT in_Rs = -1;
    424   1.1  christos     INT out_Rd = -1;
    425   1.1  christos     in_Rd = FLD (in_Rd);
    426   1.1  christos     referenced |= 1 << 0;
    427   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    428   1.1  christos   }
    429   1.1  christos   return cycles;
    430   1.1  christos #undef FLD
    431   1.1  christos }
    432   1.1  christos 
    433   1.1  christos static int
    434   1.1  christos model_crisv32_cmp_r_b_r (SIM_CPU *current_cpu, void *sem_arg)
    435   1.1  christos {
    436   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    437   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    438   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    439   1.1  christos   int cycles = 0;
    440   1.1  christos   {
    441   1.1  christos     int referenced = 0;
    442   1.1  christos     int UNUSED insn_referenced = abuf->written;
    443   1.1  christos     INT in_Rd = -1;
    444   1.1  christos     INT in_Rs = -1;
    445   1.1  christos     INT out_Rd = -1;
    446   1.1  christos     in_Rd = FLD (in_Rd);
    447   1.1  christos     in_Rs = FLD (in_Rs);
    448   1.1  christos     referenced |= 1 << 0;
    449   1.1  christos     referenced |= 1 << 1;
    450   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    451   1.1  christos   }
    452   1.1  christos   return cycles;
    453   1.1  christos #undef FLD
    454   1.1  christos }
    455   1.1  christos 
    456   1.1  christos static int
    457   1.1  christos model_crisv32_cmp_r_w_r (SIM_CPU *current_cpu, void *sem_arg)
    458   1.1  christos {
    459   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    460   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    461   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    462   1.1  christos   int cycles = 0;
    463   1.1  christos   {
    464   1.1  christos     int referenced = 0;
    465   1.1  christos     int UNUSED insn_referenced = abuf->written;
    466   1.1  christos     INT in_Rd = -1;
    467   1.1  christos     INT in_Rs = -1;
    468   1.1  christos     INT out_Rd = -1;
    469   1.1  christos     in_Rd = FLD (in_Rd);
    470   1.1  christos     in_Rs = FLD (in_Rs);
    471   1.1  christos     referenced |= 1 << 0;
    472   1.1  christos     referenced |= 1 << 1;
    473   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    474   1.1  christos   }
    475   1.1  christos   return cycles;
    476   1.1  christos #undef FLD
    477   1.1  christos }
    478   1.1  christos 
    479   1.1  christos static int
    480   1.1  christos model_crisv32_cmp_r_d_r (SIM_CPU *current_cpu, void *sem_arg)
    481   1.1  christos {
    482   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
    483   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    484   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    485   1.1  christos   int cycles = 0;
    486   1.1  christos   {
    487   1.1  christos     int referenced = 0;
    488   1.1  christos     int UNUSED insn_referenced = abuf->written;
    489   1.1  christos     INT in_Rd = -1;
    490   1.1  christos     INT in_Rs = -1;
    491   1.1  christos     INT out_Rd = -1;
    492   1.1  christos     in_Rd = FLD (in_Rd);
    493   1.1  christos     in_Rs = FLD (in_Rs);
    494   1.1  christos     referenced |= 1 << 0;
    495   1.1  christos     referenced |= 1 << 1;
    496   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    497   1.1  christos   }
    498   1.1  christos   return cycles;
    499   1.1  christos #undef FLD
    500   1.1  christos }
    501   1.1  christos 
    502   1.1  christos static int
    503   1.1  christos model_crisv32_cmp_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
    504   1.1  christos {
    505   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    506   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    507   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    508   1.1  christos   int cycles = 0;
    509   1.1  christos   {
    510   1.1  christos     int referenced = 0;
    511   1.1  christos     int UNUSED insn_referenced = abuf->written;
    512   1.1  christos     INT in_Rs = -1;
    513   1.1  christos     in_Rs = FLD (in_Rs);
    514   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    515   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    516   1.1  christos   }
    517   1.1  christos   {
    518   1.1  christos     int referenced = 0;
    519   1.1  christos     int UNUSED insn_referenced = abuf->written;
    520   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    521   1.1  christos   }
    522   1.1  christos   {
    523   1.1  christos     int referenced = 0;
    524   1.1  christos     int UNUSED insn_referenced = abuf->written;
    525   1.1  christos     INT in_Rd = -1;
    526   1.1  christos     INT in_Rs = -1;
    527   1.1  christos     INT out_Rd = -1;
    528   1.1  christos     in_Rd = FLD (in_Rd);
    529   1.1  christos     in_Rs = FLD (in_Rs);
    530   1.1  christos     referenced |= 1 << 0;
    531   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    532   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    533   1.1  christos   }
    534   1.1  christos   return cycles;
    535   1.1  christos #undef FLD
    536   1.1  christos }
    537   1.1  christos 
    538   1.1  christos static int
    539   1.1  christos model_crisv32_cmp_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
    540   1.1  christos {
    541   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    542   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    543   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    544   1.1  christos   int cycles = 0;
    545   1.1  christos   {
    546   1.1  christos     int referenced = 0;
    547   1.1  christos     int UNUSED insn_referenced = abuf->written;
    548   1.1  christos     INT in_Rs = -1;
    549   1.1  christos     in_Rs = FLD (in_Rs);
    550   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    551   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    552   1.1  christos   }
    553   1.1  christos   {
    554   1.1  christos     int referenced = 0;
    555   1.1  christos     int UNUSED insn_referenced = abuf->written;
    556   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    557   1.1  christos   }
    558   1.1  christos   {
    559   1.1  christos     int referenced = 0;
    560   1.1  christos     int UNUSED insn_referenced = abuf->written;
    561   1.1  christos     INT in_Rd = -1;
    562   1.1  christos     INT in_Rs = -1;
    563   1.1  christos     INT out_Rd = -1;
    564   1.1  christos     in_Rd = FLD (in_Rd);
    565   1.1  christos     in_Rs = FLD (in_Rs);
    566   1.1  christos     referenced |= 1 << 0;
    567   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    568   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    569   1.1  christos   }
    570   1.1  christos   return cycles;
    571   1.1  christos #undef FLD
    572   1.1  christos }
    573   1.1  christos 
    574   1.1  christos static int
    575   1.1  christos model_crisv32_cmp_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
    576   1.1  christos {
    577   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    578   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    579   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    580   1.1  christos   int cycles = 0;
    581   1.1  christos   {
    582   1.1  christos     int referenced = 0;
    583   1.1  christos     int UNUSED insn_referenced = abuf->written;
    584   1.1  christos     INT in_Rs = -1;
    585   1.1  christos     in_Rs = FLD (in_Rs);
    586   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    587   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    588   1.1  christos   }
    589   1.1  christos   {
    590   1.1  christos     int referenced = 0;
    591   1.1  christos     int UNUSED insn_referenced = abuf->written;
    592   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    593   1.1  christos   }
    594   1.1  christos   {
    595   1.1  christos     int referenced = 0;
    596   1.1  christos     int UNUSED insn_referenced = abuf->written;
    597   1.1  christos     INT in_Rd = -1;
    598   1.1  christos     INT in_Rs = -1;
    599   1.1  christos     INT out_Rd = -1;
    600   1.1  christos     in_Rd = FLD (in_Rd);
    601   1.1  christos     in_Rs = FLD (in_Rs);
    602   1.1  christos     referenced |= 1 << 0;
    603   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    604   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    605   1.1  christos   }
    606   1.1  christos   return cycles;
    607   1.1  christos #undef FLD
    608   1.1  christos }
    609   1.1  christos 
    610   1.1  christos static int
    611   1.1  christos model_crisv32_cmpcbr (SIM_CPU *current_cpu, void *sem_arg)
    612   1.1  christos {
    613   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
    614   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    615   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    616   1.1  christos   int cycles = 0;
    617   1.1  christos   {
    618   1.1  christos     int referenced = 0;
    619   1.1  christos     int UNUSED insn_referenced = abuf->written;
    620   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    621   1.1  christos   }
    622   1.1  christos   {
    623   1.1  christos     int referenced = 0;
    624   1.1  christos     int UNUSED insn_referenced = abuf->written;
    625   1.1  christos     INT in_Rd = -1;
    626   1.1  christos     INT in_Rs = -1;
    627   1.1  christos     INT out_Rd = -1;
    628   1.1  christos     in_Rd = FLD (in_Rd);
    629   1.1  christos     referenced |= 1 << 0;
    630   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    631   1.1  christos   }
    632   1.1  christos   return cycles;
    633   1.1  christos #undef FLD
    634   1.1  christos }
    635   1.1  christos 
    636   1.1  christos static int
    637   1.1  christos model_crisv32_cmpcwr (SIM_CPU *current_cpu, void *sem_arg)
    638   1.1  christos {
    639   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
    640   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    641   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    642   1.1  christos   int cycles = 0;
    643   1.1  christos   {
    644   1.1  christos     int referenced = 0;
    645   1.1  christos     int UNUSED insn_referenced = abuf->written;
    646   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    647   1.1  christos   }
    648   1.1  christos   {
    649   1.1  christos     int referenced = 0;
    650   1.1  christos     int UNUSED insn_referenced = abuf->written;
    651   1.1  christos     INT in_Rd = -1;
    652   1.1  christos     INT in_Rs = -1;
    653   1.1  christos     INT out_Rd = -1;
    654   1.1  christos     in_Rd = FLD (in_Rd);
    655   1.1  christos     referenced |= 1 << 0;
    656   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    657   1.1  christos   }
    658   1.1  christos   return cycles;
    659   1.1  christos #undef FLD
    660   1.1  christos }
    661   1.1  christos 
    662   1.1  christos static int
    663   1.1  christos model_crisv32_cmpcdr (SIM_CPU *current_cpu, void *sem_arg)
    664   1.1  christos {
    665   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
    666   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    667   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    668   1.1  christos   int cycles = 0;
    669   1.1  christos   {
    670   1.1  christos     int referenced = 0;
    671   1.1  christos     int UNUSED insn_referenced = abuf->written;
    672   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
    673   1.1  christos   }
    674   1.1  christos   {
    675   1.1  christos     int referenced = 0;
    676   1.1  christos     int UNUSED insn_referenced = abuf->written;
    677   1.1  christos     INT in_Rd = -1;
    678   1.1  christos     INT in_Rs = -1;
    679   1.1  christos     INT out_Rd = -1;
    680   1.1  christos     in_Rd = FLD (in_Rd);
    681   1.1  christos     referenced |= 1 << 0;
    682   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    683   1.1  christos   }
    684   1.1  christos   return cycles;
    685   1.1  christos #undef FLD
    686   1.1  christos }
    687   1.1  christos 
    688   1.1  christos static int
    689   1.1  christos model_crisv32_cmpq (SIM_CPU *current_cpu, void *sem_arg)
    690   1.1  christos {
    691   1.1  christos #define FLD(f) abuf->fields.sfmt_andq.f
    692   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    693   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    694   1.1  christos   int cycles = 0;
    695   1.1  christos   {
    696   1.1  christos     int referenced = 0;
    697   1.1  christos     int UNUSED insn_referenced = abuf->written;
    698   1.1  christos     INT in_Rd = -1;
    699   1.1  christos     INT in_Rs = -1;
    700   1.1  christos     INT out_Rd = -1;
    701   1.1  christos     in_Rd = FLD (in_Rd);
    702   1.1  christos     referenced |= 1 << 0;
    703   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
    704   1.1  christos   }
    705   1.1  christos   return cycles;
    706   1.1  christos #undef FLD
    707   1.1  christos }
    708   1.1  christos 
    709   1.1  christos static int
    710   1.1  christos model_crisv32_cmps_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
    711   1.1  christos {
    712   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    713   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    714   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    715   1.1  christos   int cycles = 0;
    716   1.1  christos   {
    717   1.1  christos     int referenced = 0;
    718   1.1  christos     int UNUSED insn_referenced = abuf->written;
    719   1.1  christos     INT in_Rs = -1;
    720   1.1  christos     in_Rs = FLD (in_Rs);
    721   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    722   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    723   1.1  christos   }
    724   1.1  christos   {
    725   1.1  christos     int referenced = 0;
    726   1.1  christos     int UNUSED insn_referenced = abuf->written;
    727   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    728   1.1  christos   }
    729   1.1  christos   {
    730   1.1  christos     int referenced = 0;
    731   1.1  christos     int UNUSED insn_referenced = abuf->written;
    732   1.1  christos     INT in_Rd = -1;
    733   1.1  christos     INT in_Rs = -1;
    734   1.1  christos     INT out_Rd = -1;
    735   1.1  christos     in_Rd = FLD (in_Rd);
    736   1.1  christos     in_Rs = FLD (in_Rs);
    737   1.1  christos     referenced |= 1 << 0;
    738   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    739   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    740   1.1  christos   }
    741   1.1  christos   return cycles;
    742   1.1  christos #undef FLD
    743   1.1  christos }
    744   1.1  christos 
    745   1.1  christos static int
    746   1.1  christos model_crisv32_cmps_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
    747   1.1  christos {
    748   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    749   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    750   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    751   1.1  christos   int cycles = 0;
    752   1.1  christos   {
    753   1.1  christos     int referenced = 0;
    754   1.1  christos     int UNUSED insn_referenced = abuf->written;
    755   1.1  christos     INT in_Rs = -1;
    756   1.1  christos     in_Rs = FLD (in_Rs);
    757   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    758   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    759   1.1  christos   }
    760   1.1  christos   {
    761   1.1  christos     int referenced = 0;
    762   1.1  christos     int UNUSED insn_referenced = abuf->written;
    763   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    764   1.1  christos   }
    765   1.1  christos   {
    766   1.1  christos     int referenced = 0;
    767   1.1  christos     int UNUSED insn_referenced = abuf->written;
    768   1.1  christos     INT in_Rd = -1;
    769   1.1  christos     INT in_Rs = -1;
    770   1.1  christos     INT out_Rd = -1;
    771   1.1  christos     in_Rd = FLD (in_Rd);
    772   1.1  christos     in_Rs = FLD (in_Rs);
    773   1.1  christos     referenced |= 1 << 0;
    774   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    775   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    776   1.1  christos   }
    777   1.1  christos   return cycles;
    778   1.1  christos #undef FLD
    779   1.1  christos }
    780   1.1  christos 
    781   1.1  christos static int
    782   1.1  christos model_crisv32_cmpscbr (SIM_CPU *current_cpu, void *sem_arg)
    783   1.1  christos {
    784   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
    785   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    786   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    787   1.1  christos   int cycles = 0;
    788   1.1  christos   {
    789   1.1  christos     int referenced = 0;
    790   1.1  christos     int UNUSED insn_referenced = abuf->written;
    791   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    792   1.1  christos   }
    793   1.1  christos   {
    794   1.1  christos     int referenced = 0;
    795   1.1  christos     int UNUSED insn_referenced = abuf->written;
    796   1.1  christos     INT in_Rd = -1;
    797   1.1  christos     INT in_Rs = -1;
    798   1.1  christos     INT out_Rd = -1;
    799   1.1  christos     in_Rd = FLD (in_Rd);
    800   1.1  christos     referenced |= 1 << 0;
    801   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    802   1.1  christos   }
    803   1.1  christos   return cycles;
    804   1.1  christos #undef FLD
    805   1.1  christos }
    806   1.1  christos 
    807   1.1  christos static int
    808   1.1  christos model_crisv32_cmpscwr (SIM_CPU *current_cpu, void *sem_arg)
    809   1.1  christos {
    810   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
    811   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    812   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    813   1.1  christos   int cycles = 0;
    814   1.1  christos   {
    815   1.1  christos     int referenced = 0;
    816   1.1  christos     int UNUSED insn_referenced = abuf->written;
    817   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    818   1.1  christos   }
    819   1.1  christos   {
    820   1.1  christos     int referenced = 0;
    821   1.1  christos     int UNUSED insn_referenced = abuf->written;
    822   1.1  christos     INT in_Rd = -1;
    823   1.1  christos     INT in_Rs = -1;
    824   1.1  christos     INT out_Rd = -1;
    825   1.1  christos     in_Rd = FLD (in_Rd);
    826   1.1  christos     referenced |= 1 << 0;
    827   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    828   1.1  christos   }
    829   1.1  christos   return cycles;
    830   1.1  christos #undef FLD
    831   1.1  christos }
    832   1.1  christos 
    833   1.1  christos static int
    834   1.1  christos model_crisv32_cmpu_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
    835   1.1  christos {
    836   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    837   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    838   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    839   1.1  christos   int cycles = 0;
    840   1.1  christos   {
    841   1.1  christos     int referenced = 0;
    842   1.1  christos     int UNUSED insn_referenced = abuf->written;
    843   1.1  christos     INT in_Rs = -1;
    844   1.1  christos     in_Rs = FLD (in_Rs);
    845   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    846   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    847   1.1  christos   }
    848   1.1  christos   {
    849   1.1  christos     int referenced = 0;
    850   1.1  christos     int UNUSED insn_referenced = abuf->written;
    851   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    852   1.1  christos   }
    853   1.1  christos   {
    854   1.1  christos     int referenced = 0;
    855   1.1  christos     int UNUSED insn_referenced = abuf->written;
    856   1.1  christos     INT in_Rd = -1;
    857   1.1  christos     INT in_Rs = -1;
    858   1.1  christos     INT out_Rd = -1;
    859   1.1  christos     in_Rd = FLD (in_Rd);
    860   1.1  christos     in_Rs = FLD (in_Rs);
    861   1.1  christos     referenced |= 1 << 0;
    862   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    863   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    864   1.1  christos   }
    865   1.1  christos   return cycles;
    866   1.1  christos #undef FLD
    867   1.1  christos }
    868   1.1  christos 
    869   1.1  christos static int
    870   1.1  christos model_crisv32_cmpu_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
    871   1.1  christos {
    872   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
    873   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    874   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    875   1.1  christos   int cycles = 0;
    876   1.1  christos   {
    877   1.1  christos     int referenced = 0;
    878   1.1  christos     int UNUSED insn_referenced = abuf->written;
    879   1.1  christos     INT in_Rs = -1;
    880   1.1  christos     in_Rs = FLD (in_Rs);
    881   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
    882   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    883   1.1  christos   }
    884   1.1  christos   {
    885   1.1  christos     int referenced = 0;
    886   1.1  christos     int UNUSED insn_referenced = abuf->written;
    887   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    888   1.1  christos   }
    889   1.1  christos   {
    890   1.1  christos     int referenced = 0;
    891   1.1  christos     int UNUSED insn_referenced = abuf->written;
    892   1.1  christos     INT in_Rd = -1;
    893   1.1  christos     INT in_Rs = -1;
    894   1.1  christos     INT out_Rd = -1;
    895   1.1  christos     in_Rd = FLD (in_Rd);
    896   1.1  christos     in_Rs = FLD (in_Rs);
    897   1.1  christos     referenced |= 1 << 0;
    898   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
    899   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    900   1.1  christos   }
    901   1.1  christos   return cycles;
    902   1.1  christos #undef FLD
    903   1.1  christos }
    904   1.1  christos 
    905   1.1  christos static int
    906   1.1  christos model_crisv32_cmpucbr (SIM_CPU *current_cpu, void *sem_arg)
    907   1.1  christos {
    908   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
    909   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    910   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    911   1.1  christos   int cycles = 0;
    912   1.1  christos   {
    913   1.1  christos     int referenced = 0;
    914   1.1  christos     int UNUSED insn_referenced = abuf->written;
    915   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    916   1.1  christos   }
    917   1.1  christos   {
    918   1.1  christos     int referenced = 0;
    919   1.1  christos     int UNUSED insn_referenced = abuf->written;
    920   1.1  christos     INT in_Rd = -1;
    921   1.1  christos     INT in_Rs = -1;
    922   1.1  christos     INT out_Rd = -1;
    923   1.1  christos     in_Rd = FLD (in_Rd);
    924   1.1  christos     referenced |= 1 << 0;
    925   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    926   1.1  christos   }
    927   1.1  christos   return cycles;
    928   1.1  christos #undef FLD
    929   1.1  christos }
    930   1.1  christos 
    931   1.1  christos static int
    932   1.1  christos model_crisv32_cmpucwr (SIM_CPU *current_cpu, void *sem_arg)
    933   1.1  christos {
    934   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
    935   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    936   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    937   1.1  christos   int cycles = 0;
    938   1.1  christos   {
    939   1.1  christos     int referenced = 0;
    940   1.1  christos     int UNUSED insn_referenced = abuf->written;
    941   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
    942   1.1  christos   }
    943   1.1  christos   {
    944   1.1  christos     int referenced = 0;
    945   1.1  christos     int UNUSED insn_referenced = abuf->written;
    946   1.1  christos     INT in_Rd = -1;
    947   1.1  christos     INT in_Rs = -1;
    948   1.1  christos     INT out_Rd = -1;
    949   1.1  christos     in_Rd = FLD (in_Rd);
    950   1.1  christos     referenced |= 1 << 0;
    951   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
    952   1.1  christos   }
    953   1.1  christos   return cycles;
    954   1.1  christos #undef FLD
    955   1.1  christos }
    956   1.1  christos 
    957   1.1  christos static int
    958   1.1  christos model_crisv32_move_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
    959   1.1  christos {
    960   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
    961   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    962   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    963   1.1  christos   int cycles = 0;
    964   1.1  christos   {
    965   1.1  christos     int referenced = 0;
    966   1.1  christos     int UNUSED insn_referenced = abuf->written;
    967   1.1  christos     INT in_Rs = -1;
    968   1.1  christos     in_Rs = FLD (in_Rs);
    969   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
    970   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
    971   1.1  christos   }
    972   1.1  christos   {
    973   1.1  christos     int referenced = 0;
    974   1.1  christos     int UNUSED insn_referenced = abuf->written;
    975   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
    976   1.1  christos   }
    977   1.1  christos   {
    978   1.1  christos     int referenced = 0;
    979   1.1  christos     int UNUSED insn_referenced = abuf->written;
    980   1.1  christos     INT in_Rd = -1;
    981   1.1  christos     INT in_Rs = -1;
    982   1.1  christos     INT out_Rd = -1;
    983   1.1  christos     in_Rs = FLD (in_Rs);
    984   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
    985   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
    986   1.1  christos   }
    987   1.1  christos   return cycles;
    988   1.1  christos #undef FLD
    989   1.1  christos }
    990   1.1  christos 
    991   1.1  christos static int
    992   1.1  christos model_crisv32_move_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
    993   1.1  christos {
    994   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
    995   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
    996   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
    997   1.1  christos   int cycles = 0;
    998   1.1  christos   {
    999   1.1  christos     int referenced = 0;
   1000   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1001   1.1  christos     INT in_Rs = -1;
   1002   1.1  christos     in_Rs = FLD (in_Rs);
   1003   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1004   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1005   1.1  christos   }
   1006   1.1  christos   {
   1007   1.1  christos     int referenced = 0;
   1008   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1009   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1010   1.1  christos   }
   1011   1.1  christos   {
   1012   1.1  christos     int referenced = 0;
   1013   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1014   1.1  christos     INT in_Rd = -1;
   1015   1.1  christos     INT in_Rs = -1;
   1016   1.1  christos     INT out_Rd = -1;
   1017   1.1  christos     in_Rs = FLD (in_Rs);
   1018   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   1019   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1020   1.1  christos   }
   1021   1.1  christos   return cycles;
   1022   1.1  christos #undef FLD
   1023   1.1  christos }
   1024   1.1  christos 
   1025   1.1  christos static int
   1026   1.1  christos model_crisv32_move_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   1027   1.1  christos {
   1028   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   1029   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1030   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1031   1.1  christos   int cycles = 0;
   1032   1.1  christos   {
   1033   1.1  christos     int referenced = 0;
   1034   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1035   1.1  christos     INT in_Rs = -1;
   1036   1.1  christos     in_Rs = FLD (in_Rs);
   1037   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1038   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1039   1.1  christos   }
   1040   1.1  christos   {
   1041   1.1  christos     int referenced = 0;
   1042   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1043   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1044   1.1  christos   }
   1045   1.1  christos   {
   1046   1.1  christos     int referenced = 0;
   1047   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1048   1.1  christos     INT in_Rd = -1;
   1049   1.1  christos     INT in_Rs = -1;
   1050   1.1  christos     INT out_Rd = -1;
   1051   1.1  christos     in_Rs = FLD (in_Rs);
   1052   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   1053   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1054   1.1  christos   }
   1055   1.1  christos   return cycles;
   1056   1.1  christos #undef FLD
   1057   1.1  christos }
   1058   1.1  christos 
   1059   1.1  christos static int
   1060   1.1  christos model_crisv32_movs_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   1061   1.1  christos {
   1062   1.1  christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
   1063   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1064   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1065   1.1  christos   int cycles = 0;
   1066   1.1  christos   {
   1067   1.1  christos     int referenced = 0;
   1068   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1069   1.1  christos     INT in_Rs = -1;
   1070   1.1  christos     in_Rs = FLD (in_Rs);
   1071   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1072   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1073   1.1  christos   }
   1074   1.1  christos   {
   1075   1.1  christos     int referenced = 0;
   1076   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1077   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1078   1.1  christos   }
   1079   1.1  christos   {
   1080   1.1  christos     int referenced = 0;
   1081   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1082   1.1  christos     INT in_Rd = -1;
   1083   1.1  christos     INT in_Rs = -1;
   1084   1.1  christos     INT out_Rd = -1;
   1085   1.1  christos     in_Rs = FLD (in_Rs);
   1086   1.1  christos     out_Rd = FLD (out_Rd);
   1087   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   1088   1.1  christos     if (insn_referenced & (1 << 7)) referenced |= 1 << 2;
   1089   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1090   1.1  christos   }
   1091   1.1  christos   return cycles;
   1092   1.1  christos #undef FLD
   1093   1.1  christos }
   1094   1.1  christos 
   1095   1.1  christos static int
   1096   1.1  christos model_crisv32_movs_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   1097   1.1  christos {
   1098   1.1  christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
   1099   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1100   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1101   1.1  christos   int cycles = 0;
   1102   1.1  christos   {
   1103   1.1  christos     int referenced = 0;
   1104   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1105   1.1  christos     INT in_Rs = -1;
   1106   1.1  christos     in_Rs = FLD (in_Rs);
   1107   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1108   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1109   1.1  christos   }
   1110   1.1  christos   {
   1111   1.1  christos     int referenced = 0;
   1112   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1113   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1114   1.1  christos   }
   1115   1.1  christos   {
   1116   1.1  christos     int referenced = 0;
   1117   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1118   1.1  christos     INT in_Rd = -1;
   1119   1.1  christos     INT in_Rs = -1;
   1120   1.1  christos     INT out_Rd = -1;
   1121   1.1  christos     in_Rs = FLD (in_Rs);
   1122   1.1  christos     out_Rd = FLD (out_Rd);
   1123   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   1124   1.1  christos     if (insn_referenced & (1 << 7)) referenced |= 1 << 2;
   1125   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1126   1.1  christos   }
   1127   1.1  christos   return cycles;
   1128   1.1  christos #undef FLD
   1129   1.1  christos }
   1130   1.1  christos 
   1131   1.1  christos static int
   1132   1.1  christos model_crisv32_movu_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   1133   1.1  christos {
   1134   1.1  christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
   1135   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1136   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1137   1.1  christos   int cycles = 0;
   1138   1.1  christos   {
   1139   1.1  christos     int referenced = 0;
   1140   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1141   1.1  christos     INT in_Rs = -1;
   1142   1.1  christos     in_Rs = FLD (in_Rs);
   1143   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1144   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1145   1.1  christos   }
   1146   1.1  christos   {
   1147   1.1  christos     int referenced = 0;
   1148   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1149   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1150   1.1  christos   }
   1151   1.1  christos   {
   1152   1.1  christos     int referenced = 0;
   1153   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1154   1.1  christos     INT in_Rd = -1;
   1155   1.1  christos     INT in_Rs = -1;
   1156   1.1  christos     INT out_Rd = -1;
   1157   1.1  christos     in_Rs = FLD (in_Rs);
   1158   1.1  christos     out_Rd = FLD (out_Rd);
   1159   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   1160   1.1  christos     if (insn_referenced & (1 << 7)) referenced |= 1 << 2;
   1161   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1162   1.1  christos   }
   1163   1.1  christos   return cycles;
   1164   1.1  christos #undef FLD
   1165   1.1  christos }
   1166   1.1  christos 
   1167   1.1  christos static int
   1168   1.1  christos model_crisv32_movu_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   1169   1.1  christos {
   1170   1.1  christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
   1171   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1172   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1173   1.1  christos   int cycles = 0;
   1174   1.1  christos   {
   1175   1.1  christos     int referenced = 0;
   1176   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1177   1.1  christos     INT in_Rs = -1;
   1178   1.1  christos     in_Rs = FLD (in_Rs);
   1179   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1180   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1181   1.1  christos   }
   1182   1.1  christos   {
   1183   1.1  christos     int referenced = 0;
   1184   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1185   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1186   1.1  christos   }
   1187   1.1  christos   {
   1188   1.1  christos     int referenced = 0;
   1189   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1190   1.1  christos     INT in_Rd = -1;
   1191   1.1  christos     INT in_Rs = -1;
   1192   1.1  christos     INT out_Rd = -1;
   1193   1.1  christos     in_Rs = FLD (in_Rs);
   1194   1.1  christos     out_Rd = FLD (out_Rd);
   1195   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   1196   1.1  christos     if (insn_referenced & (1 << 7)) referenced |= 1 << 2;
   1197   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1198   1.1  christos   }
   1199   1.1  christos   return cycles;
   1200   1.1  christos #undef FLD
   1201   1.1  christos }
   1202   1.1  christos 
   1203   1.1  christos static int
   1204   1.1  christos model_crisv32_move_r_sprv32 (SIM_CPU *current_cpu, void *sem_arg)
   1205   1.1  christos {
   1206   1.1  christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
   1207   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1208   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1209   1.1  christos   int cycles = 0;
   1210   1.1  christos   {
   1211   1.1  christos     int referenced = 0;
   1212   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1213   1.1  christos     INT in_Rs = -1;
   1214   1.1  christos     INT out_Pd = -1;
   1215   1.1  christos     in_Rs = FLD (in_Rs);
   1216   1.1  christos     out_Pd = FLD (out_Pd);
   1217   1.1  christos     referenced |= 1 << 0;
   1218   1.1  christos     if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
   1219   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 0, referenced, in_Rs, out_Pd);
   1220   1.1  christos   }
   1221   1.1  christos   return cycles;
   1222   1.1  christos #undef FLD
   1223   1.1  christos }
   1224   1.1  christos 
   1225   1.1  christos static int
   1226   1.1  christos model_crisv32_move_spr_rv32 (SIM_CPU *current_cpu, void *sem_arg)
   1227   1.1  christos {
   1228   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   1229   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1230   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1231   1.1  christos   int cycles = 0;
   1232   1.1  christos   {
   1233   1.1  christos     int referenced = 0;
   1234   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1235   1.1  christos     INT in_Rd = -1;
   1236   1.1  christos     INT in_Rs = -1;
   1237   1.1  christos     INT out_Rd = -1;
   1238   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   1239   1.1  christos   }
   1240   1.1  christos   return cycles;
   1241   1.1  christos #undef FLD
   1242   1.1  christos }
   1243   1.1  christos 
   1244   1.1  christos static int
   1245   1.1  christos model_crisv32_move_m_sprv32 (SIM_CPU *current_cpu, void *sem_arg)
   1246   1.1  christos {
   1247   1.1  christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
   1248   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1249   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1250   1.1  christos   int cycles = 0;
   1251   1.1  christos   {
   1252   1.1  christos     int referenced = 0;
   1253   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1254   1.1  christos     INT in_Rs = -1;
   1255   1.1  christos     in_Rs = FLD (in_Rs);
   1256   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1257   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1258   1.1  christos   }
   1259   1.1  christos   {
   1260   1.1  christos     int referenced = 0;
   1261   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1262   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1263   1.1  christos   }
   1264   1.1  christos   {
   1265   1.1  christos     int referenced = 0;
   1266   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1267   1.1  christos     INT in_Rs = -1;
   1268   1.1  christos     INT out_Pd = -1;
   1269   1.1  christos     in_Rs = FLD (in_Rs);
   1270   1.1  christos     out_Pd = FLD (out_Pd);
   1271   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   1272   1.1  christos     referenced |= 1 << 1;
   1273   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 2, referenced, in_Rs, out_Pd);
   1274   1.1  christos   }
   1275   1.1  christos   return cycles;
   1276   1.1  christos #undef FLD
   1277   1.1  christos }
   1278   1.1  christos 
   1279   1.1  christos static int
   1280   1.1  christos model_crisv32_move_c_sprv32_p2 (SIM_CPU *current_cpu, void *sem_arg)
   1281   1.1  christos {
   1282   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1283   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1284   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1285   1.1  christos   int cycles = 0;
   1286   1.1  christos   {
   1287   1.1  christos     int referenced = 0;
   1288   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1289   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1290   1.1  christos   }
   1291   1.1  christos   {
   1292   1.1  christos     int referenced = 0;
   1293   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1294   1.1  christos     INT in_Rs = -1;
   1295   1.1  christos     INT out_Pd = -1;
   1296   1.1  christos     out_Pd = FLD (out_Pd);
   1297   1.1  christos     referenced |= 1 << 1;
   1298   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1299   1.1  christos   }
   1300   1.1  christos   return cycles;
   1301   1.1  christos #undef FLD
   1302   1.1  christos }
   1303   1.1  christos 
   1304   1.1  christos static int
   1305   1.1  christos model_crisv32_move_c_sprv32_p3 (SIM_CPU *current_cpu, void *sem_arg)
   1306   1.1  christos {
   1307   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1308   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1309   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1310   1.1  christos   int cycles = 0;
   1311   1.1  christos   {
   1312   1.1  christos     int referenced = 0;
   1313   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1314   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1315   1.1  christos   }
   1316   1.1  christos   {
   1317   1.1  christos     int referenced = 0;
   1318   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1319   1.1  christos     INT in_Rs = -1;
   1320   1.1  christos     INT out_Pd = -1;
   1321   1.1  christos     out_Pd = FLD (out_Pd);
   1322   1.1  christos     referenced |= 1 << 1;
   1323   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1324   1.1  christos   }
   1325   1.1  christos   return cycles;
   1326   1.1  christos #undef FLD
   1327   1.1  christos }
   1328   1.1  christos 
   1329   1.1  christos static int
   1330   1.1  christos model_crisv32_move_c_sprv32_p5 (SIM_CPU *current_cpu, void *sem_arg)
   1331   1.1  christos {
   1332   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1333   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1334   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1335   1.1  christos   int cycles = 0;
   1336   1.1  christos   {
   1337   1.1  christos     int referenced = 0;
   1338   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1339   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1340   1.1  christos   }
   1341   1.1  christos   {
   1342   1.1  christos     int referenced = 0;
   1343   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1344   1.1  christos     INT in_Rs = -1;
   1345   1.1  christos     INT out_Pd = -1;
   1346   1.1  christos     out_Pd = FLD (out_Pd);
   1347   1.1  christos     referenced |= 1 << 1;
   1348   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1349   1.1  christos   }
   1350   1.1  christos   return cycles;
   1351   1.1  christos #undef FLD
   1352   1.1  christos }
   1353   1.1  christos 
   1354   1.1  christos static int
   1355   1.1  christos model_crisv32_move_c_sprv32_p6 (SIM_CPU *current_cpu, void *sem_arg)
   1356   1.1  christos {
   1357   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1358   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1359   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1360   1.1  christos   int cycles = 0;
   1361   1.1  christos   {
   1362   1.1  christos     int referenced = 0;
   1363   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1364   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1365   1.1  christos   }
   1366   1.1  christos   {
   1367   1.1  christos     int referenced = 0;
   1368   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1369   1.1  christos     INT in_Rs = -1;
   1370   1.1  christos     INT out_Pd = -1;
   1371   1.1  christos     out_Pd = FLD (out_Pd);
   1372   1.1  christos     referenced |= 1 << 1;
   1373   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1374   1.1  christos   }
   1375   1.1  christos   return cycles;
   1376   1.1  christos #undef FLD
   1377   1.1  christos }
   1378   1.1  christos 
   1379   1.1  christos static int
   1380   1.1  christos model_crisv32_move_c_sprv32_p7 (SIM_CPU *current_cpu, void *sem_arg)
   1381   1.1  christos {
   1382   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1383   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1384   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1385   1.1  christos   int cycles = 0;
   1386   1.1  christos   {
   1387   1.1  christos     int referenced = 0;
   1388   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1389   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1390   1.1  christos   }
   1391   1.1  christos   {
   1392   1.1  christos     int referenced = 0;
   1393   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1394   1.1  christos     INT in_Rs = -1;
   1395   1.1  christos     INT out_Pd = -1;
   1396   1.1  christos     out_Pd = FLD (out_Pd);
   1397   1.1  christos     referenced |= 1 << 1;
   1398   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1399   1.1  christos   }
   1400   1.1  christos   return cycles;
   1401   1.1  christos #undef FLD
   1402   1.1  christos }
   1403   1.1  christos 
   1404   1.1  christos static int
   1405   1.1  christos model_crisv32_move_c_sprv32_p9 (SIM_CPU *current_cpu, void *sem_arg)
   1406   1.1  christos {
   1407   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1408   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1409   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1410   1.1  christos   int cycles = 0;
   1411   1.1  christos   {
   1412   1.1  christos     int referenced = 0;
   1413   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1414   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1415   1.1  christos   }
   1416   1.1  christos   {
   1417   1.1  christos     int referenced = 0;
   1418   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1419   1.1  christos     INT in_Rs = -1;
   1420   1.1  christos     INT out_Pd = -1;
   1421   1.1  christos     out_Pd = FLD (out_Pd);
   1422   1.1  christos     referenced |= 1 << 1;
   1423   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1424   1.1  christos   }
   1425   1.1  christos   return cycles;
   1426   1.1  christos #undef FLD
   1427   1.1  christos }
   1428   1.1  christos 
   1429   1.1  christos static int
   1430   1.1  christos model_crisv32_move_c_sprv32_p10 (SIM_CPU *current_cpu, void *sem_arg)
   1431   1.1  christos {
   1432   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1433   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1434   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1435   1.1  christos   int cycles = 0;
   1436   1.1  christos   {
   1437   1.1  christos     int referenced = 0;
   1438   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1439   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1440   1.1  christos   }
   1441   1.1  christos   {
   1442   1.1  christos     int referenced = 0;
   1443   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1444   1.1  christos     INT in_Rs = -1;
   1445   1.1  christos     INT out_Pd = -1;
   1446   1.1  christos     out_Pd = FLD (out_Pd);
   1447   1.1  christos     referenced |= 1 << 1;
   1448   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1449   1.1  christos   }
   1450   1.1  christos   return cycles;
   1451   1.1  christos #undef FLD
   1452   1.1  christos }
   1453   1.1  christos 
   1454   1.1  christos static int
   1455   1.1  christos model_crisv32_move_c_sprv32_p11 (SIM_CPU *current_cpu, void *sem_arg)
   1456   1.1  christos {
   1457   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1458   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1459   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1460   1.1  christos   int cycles = 0;
   1461   1.1  christos   {
   1462   1.1  christos     int referenced = 0;
   1463   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1464   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1465   1.1  christos   }
   1466   1.1  christos   {
   1467   1.1  christos     int referenced = 0;
   1468   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1469   1.1  christos     INT in_Rs = -1;
   1470   1.1  christos     INT out_Pd = -1;
   1471   1.1  christos     out_Pd = FLD (out_Pd);
   1472   1.1  christos     referenced |= 1 << 1;
   1473   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1474   1.1  christos   }
   1475   1.1  christos   return cycles;
   1476   1.1  christos #undef FLD
   1477   1.1  christos }
   1478   1.1  christos 
   1479   1.1  christos static int
   1480   1.1  christos model_crisv32_move_c_sprv32_p12 (SIM_CPU *current_cpu, void *sem_arg)
   1481   1.1  christos {
   1482   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1483   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1484   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1485   1.1  christos   int cycles = 0;
   1486   1.1  christos   {
   1487   1.1  christos     int referenced = 0;
   1488   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1489   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1490   1.1  christos   }
   1491   1.1  christos   {
   1492   1.1  christos     int referenced = 0;
   1493   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1494   1.1  christos     INT in_Rs = -1;
   1495   1.1  christos     INT out_Pd = -1;
   1496   1.1  christos     out_Pd = FLD (out_Pd);
   1497   1.1  christos     referenced |= 1 << 1;
   1498   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1499   1.1  christos   }
   1500   1.1  christos   return cycles;
   1501   1.1  christos #undef FLD
   1502   1.1  christos }
   1503   1.1  christos 
   1504   1.1  christos static int
   1505   1.1  christos model_crisv32_move_c_sprv32_p13 (SIM_CPU *current_cpu, void *sem_arg)
   1506   1.1  christos {
   1507   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1508   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1509   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1510   1.1  christos   int cycles = 0;
   1511   1.1  christos   {
   1512   1.1  christos     int referenced = 0;
   1513   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1514   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1515   1.1  christos   }
   1516   1.1  christos   {
   1517   1.1  christos     int referenced = 0;
   1518   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1519   1.1  christos     INT in_Rs = -1;
   1520   1.1  christos     INT out_Pd = -1;
   1521   1.1  christos     out_Pd = FLD (out_Pd);
   1522   1.1  christos     referenced |= 1 << 1;
   1523   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1524   1.1  christos   }
   1525   1.1  christos   return cycles;
   1526   1.1  christos #undef FLD
   1527   1.1  christos }
   1528   1.1  christos 
   1529   1.1  christos static int
   1530   1.1  christos model_crisv32_move_c_sprv32_p14 (SIM_CPU *current_cpu, void *sem_arg)
   1531   1.1  christos {
   1532   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1533   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1534   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1535   1.1  christos   int cycles = 0;
   1536   1.1  christos   {
   1537   1.1  christos     int referenced = 0;
   1538   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1539   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1540   1.1  christos   }
   1541   1.1  christos   {
   1542   1.1  christos     int referenced = 0;
   1543   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1544   1.1  christos     INT in_Rs = -1;
   1545   1.1  christos     INT out_Pd = -1;
   1546   1.1  christos     out_Pd = FLD (out_Pd);
   1547   1.1  christos     referenced |= 1 << 1;
   1548   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1549   1.1  christos   }
   1550   1.1  christos   return cycles;
   1551   1.1  christos #undef FLD
   1552   1.1  christos }
   1553   1.1  christos 
   1554   1.1  christos static int
   1555   1.1  christos model_crisv32_move_c_sprv32_p15 (SIM_CPU *current_cpu, void *sem_arg)
   1556   1.1  christos {
   1557   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   1558   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1559   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1560   1.1  christos   int cycles = 0;
   1561   1.1  christos   {
   1562   1.1  christos     int referenced = 0;
   1563   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1564   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1565   1.1  christos   }
   1566   1.1  christos   {
   1567   1.1  christos     int referenced = 0;
   1568   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1569   1.1  christos     INT in_Rs = -1;
   1570   1.1  christos     INT out_Pd = -1;
   1571   1.1  christos     out_Pd = FLD (out_Pd);
   1572   1.1  christos     referenced |= 1 << 1;
   1573   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_to_sr (current_cpu, idesc, 1, referenced, in_Rs, out_Pd);
   1574   1.1  christos   }
   1575   1.1  christos   return cycles;
   1576   1.1  christos #undef FLD
   1577   1.1  christos }
   1578   1.1  christos 
   1579   1.1  christos static int
   1580   1.1  christos model_crisv32_move_spr_mv32 (SIM_CPU *current_cpu, void *sem_arg)
   1581   1.1  christos {
   1582   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   1583   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1584   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1585   1.1  christos   int cycles = 0;
   1586   1.1  christos   {
   1587   1.1  christos     int referenced = 0;
   1588   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1589   1.1  christos     INT in_Rs = -1;
   1590   1.1  christos     in_Rs = FLD (in_Rs);
   1591   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   1592   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1593   1.1  christos   }
   1594   1.1  christos   {
   1595   1.1  christos     int referenced = 0;
   1596   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1597   1.1  christos     INT in_Rd = -1;
   1598   1.1  christos     INT in_Rs = -1;
   1599   1.1  christos     INT out_Rd = -1;
   1600   1.1  christos     in_Rs = FLD (in_Rs);
   1601   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   1602   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   1603   1.1  christos   }
   1604   1.1  christos   {
   1605   1.1  christos     int referenced = 0;
   1606   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1607   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_w (current_cpu, idesc, 2, referenced);
   1608   1.1  christos   }
   1609   1.1  christos   return cycles;
   1610   1.1  christos #undef FLD
   1611   1.1  christos }
   1612   1.1  christos 
   1613   1.1  christos static int
   1614   1.1  christos model_crisv32_move_ss_r (SIM_CPU *current_cpu, void *sem_arg)
   1615   1.1  christos {
   1616   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   1617   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1618   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1619   1.1  christos   int cycles = 0;
   1620   1.1  christos   {
   1621   1.1  christos     int referenced = 0;
   1622   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1623   1.1  christos     INT in_Rd = -1;
   1624   1.1  christos     INT in_Rs = -1;
   1625   1.1  christos     INT out_Rd = -1;
   1626   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   1627   1.1  christos   }
   1628   1.1  christos   return cycles;
   1629   1.1  christos #undef FLD
   1630   1.1  christos }
   1631   1.1  christos 
   1632   1.1  christos static int
   1633   1.1  christos model_crisv32_move_r_ss (SIM_CPU *current_cpu, void *sem_arg)
   1634   1.1  christos {
   1635   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   1636   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1637   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1638   1.1  christos   int cycles = 0;
   1639   1.1  christos   {
   1640   1.1  christos     int referenced = 0;
   1641   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1642   1.1  christos     INT in_Rd = -1;
   1643   1.1  christos     INT in_Rs = -1;
   1644   1.1  christos     INT out_Rd = -1;
   1645   1.1  christos     in_Rs = FLD (in_Rs);
   1646   1.1  christos     referenced |= 1 << 1;
   1647   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   1648   1.1  christos   }
   1649   1.1  christos   return cycles;
   1650   1.1  christos #undef FLD
   1651   1.1  christos }
   1652   1.1  christos 
   1653   1.1  christos static int
   1654   1.1  christos model_crisv32_movem_r_m_v32 (SIM_CPU *current_cpu, void *sem_arg)
   1655   1.1  christos {
   1656   1.1  christos #define FLD(f) abuf->fields.sfmt_movem_r_m_v32.f
   1657   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1658   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1659   1.1  christos   int cycles = 0;
   1660   1.1  christos   {
   1661   1.1  christos     int referenced = 0;
   1662   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1663   1.1  christos     INT in_Rs = -1;
   1664   1.1  christos     in_Rs = FLD (in_Rs);
   1665   1.1  christos     referenced |= 1 << 0;
   1666   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1667   1.1  christos   }
   1668   1.1  christos   {
   1669   1.1  christos     int referenced = 0;
   1670   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1671   1.1  christos     INT in_Rs = -1;
   1672   1.1  christos     INT in_Rd = -1;
   1673   1.1  christos     in_Rs = FLD (in_Rs);
   1674   1.1  christos     in_Rd = FLD (in_Rd);
   1675   1.1  christos     referenced |= 1 << 0;
   1676   1.1  christos     referenced |= 1 << 1;
   1677   1.1  christos     cycles += crisv32f_model_crisv32_u_movem_rtom (current_cpu, idesc, 1, referenced, in_Rs, in_Rd);
   1678   1.1  christos   }
   1679   1.1  christos   {
   1680   1.1  christos     int referenced = 0;
   1681   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1682   1.1  christos     INT in_Rs = -1;
   1683   1.1  christos     INT out_Rd = -1;
   1684   1.1  christos     in_Rs = FLD (in_Rs);
   1685   1.1  christos     referenced |= 1 << 0;
   1686   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_movem (current_cpu, idesc, 2, referenced, in_Rs, out_Rd);
   1687   1.1  christos   }
   1688   1.1  christos   {
   1689   1.1  christos     int referenced = 0;
   1690   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1691   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_w (current_cpu, idesc, 3, referenced);
   1692   1.1  christos   }
   1693   1.1  christos   return cycles;
   1694   1.1  christos #undef FLD
   1695   1.1  christos }
   1696   1.1  christos 
   1697   1.1  christos static int
   1698   1.1  christos model_crisv32_movem_m_r_v32 (SIM_CPU *current_cpu, void *sem_arg)
   1699   1.1  christos {
   1700   1.1  christos #define FLD(f) abuf->fields.sfmt_movem_m_r_v32.f
   1701   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1702   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1703   1.1  christos   int cycles = 0;
   1704   1.1  christos   {
   1705   1.1  christos     int referenced = 0;
   1706   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1707   1.1  christos     INT in_Rs = -1;
   1708   1.1  christos     in_Rs = FLD (in_Rs);
   1709   1.1  christos     referenced |= 1 << 0;
   1710   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1711   1.1  christos   }
   1712   1.1  christos   {
   1713   1.1  christos     int referenced = 0;
   1714   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1715   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1716   1.1  christos   }
   1717   1.1  christos   {
   1718   1.1  christos     int referenced = 0;
   1719   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1720   1.1  christos     INT in_Rs = -1;
   1721   1.1  christos     INT in_Rd = -1;
   1722   1.1  christos     in_Rs = FLD (in_Rs);
   1723   1.1  christos     in_Rd = FLD (in_Rd);
   1724   1.1  christos     referenced |= 1 << 0;
   1725   1.1  christos     referenced |= 1 << 1;
   1726   1.1  christos     cycles += crisv32f_model_crisv32_u_movem_mtor (current_cpu, idesc, 2, referenced, in_Rs, in_Rd);
   1727   1.1  christos   }
   1728   1.1  christos   {
   1729   1.1  christos     int referenced = 0;
   1730   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1731   1.1  christos     INT in_Rs = -1;
   1732   1.1  christos     INT out_Rd = -1;
   1733   1.1  christos     in_Rs = FLD (in_Rs);
   1734   1.1  christos     referenced |= 1 << 0;
   1735   1.1  christos     cycles += crisv32f_model_crisv32_u_exec_movem (current_cpu, idesc, 3, referenced, in_Rs, out_Rd);
   1736   1.1  christos   }
   1737   1.1  christos   return cycles;
   1738   1.1  christos #undef FLD
   1739   1.1  christos }
   1740   1.1  christos 
   1741   1.1  christos static int
   1742   1.1  christos model_crisv32_add_b_r (SIM_CPU *current_cpu, void *sem_arg)
   1743   1.1  christos {
   1744   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   1745   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1746   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1747   1.1  christos   int cycles = 0;
   1748   1.1  christos   {
   1749   1.1  christos     int referenced = 0;
   1750   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1751   1.1  christos     INT in_Rd = -1;
   1752   1.1  christos     INT in_Rs = -1;
   1753   1.1  christos     INT out_Rd = -1;
   1754   1.1  christos     in_Rd = FLD (in_Rd);
   1755   1.1  christos     in_Rs = FLD (in_Rs);
   1756   1.1  christos     referenced |= 1 << 0;
   1757   1.1  christos     referenced |= 1 << 1;
   1758   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   1759   1.1  christos   }
   1760   1.1  christos   return cycles;
   1761   1.1  christos #undef FLD
   1762   1.1  christos }
   1763   1.1  christos 
   1764   1.1  christos static int
   1765   1.1  christos model_crisv32_add_w_r (SIM_CPU *current_cpu, void *sem_arg)
   1766   1.1  christos {
   1767   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   1768   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1769   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1770   1.1  christos   int cycles = 0;
   1771   1.1  christos   {
   1772   1.1  christos     int referenced = 0;
   1773   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1774   1.1  christos     INT in_Rd = -1;
   1775   1.1  christos     INT in_Rs = -1;
   1776   1.1  christos     INT out_Rd = -1;
   1777   1.1  christos     in_Rd = FLD (in_Rd);
   1778   1.1  christos     in_Rs = FLD (in_Rs);
   1779   1.1  christos     referenced |= 1 << 0;
   1780   1.1  christos     referenced |= 1 << 1;
   1781   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   1782   1.1  christos   }
   1783   1.1  christos   return cycles;
   1784   1.1  christos #undef FLD
   1785   1.1  christos }
   1786   1.1  christos 
   1787   1.1  christos static int
   1788   1.1  christos model_crisv32_add_d_r (SIM_CPU *current_cpu, void *sem_arg)
   1789   1.1  christos {
   1790   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   1791   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1792   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1793   1.1  christos   int cycles = 0;
   1794   1.1  christos   {
   1795   1.1  christos     int referenced = 0;
   1796   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1797   1.1  christos     INT in_Rd = -1;
   1798   1.1  christos     INT in_Rs = -1;
   1799   1.1  christos     INT out_Rd = -1;
   1800   1.1  christos     in_Rd = FLD (in_Rd);
   1801   1.1  christos     in_Rs = FLD (in_Rs);
   1802   1.1  christos     referenced |= 1 << 0;
   1803   1.1  christos     referenced |= 1 << 1;
   1804   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   1805   1.1  christos   }
   1806   1.1  christos   return cycles;
   1807   1.1  christos #undef FLD
   1808   1.1  christos }
   1809   1.1  christos 
   1810   1.1  christos static int
   1811   1.1  christos model_crisv32_add_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   1812   1.1  christos {
   1813   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   1814   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1815   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1816   1.1  christos   int cycles = 0;
   1817   1.1  christos   {
   1818   1.1  christos     int referenced = 0;
   1819   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1820   1.1  christos     INT in_Rs = -1;
   1821   1.1  christos     in_Rs = FLD (in_Rs);
   1822   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   1823   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1824   1.1  christos   }
   1825   1.1  christos   {
   1826   1.1  christos     int referenced = 0;
   1827   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1828   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1829   1.1  christos   }
   1830   1.1  christos   {
   1831   1.1  christos     int referenced = 0;
   1832   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1833   1.1  christos     INT in_Rd = -1;
   1834   1.1  christos     INT in_Rs = -1;
   1835   1.1  christos     INT out_Rd = -1;
   1836   1.1  christos     in_Rd = FLD (in_Rd);
   1837   1.1  christos     in_Rs = FLD (in_Rs);
   1838   1.1  christos     referenced |= 1 << 0;
   1839   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   1840   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1841   1.1  christos   }
   1842   1.1  christos   return cycles;
   1843   1.1  christos #undef FLD
   1844   1.1  christos }
   1845   1.1  christos 
   1846   1.1  christos static int
   1847   1.1  christos model_crisv32_add_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   1848   1.1  christos {
   1849   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   1850   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1851   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1852   1.1  christos   int cycles = 0;
   1853   1.1  christos   {
   1854   1.1  christos     int referenced = 0;
   1855   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1856   1.1  christos     INT in_Rs = -1;
   1857   1.1  christos     in_Rs = FLD (in_Rs);
   1858   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   1859   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1860   1.1  christos   }
   1861   1.1  christos   {
   1862   1.1  christos     int referenced = 0;
   1863   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1864   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1865   1.1  christos   }
   1866   1.1  christos   {
   1867   1.1  christos     int referenced = 0;
   1868   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1869   1.1  christos     INT in_Rd = -1;
   1870   1.1  christos     INT in_Rs = -1;
   1871   1.1  christos     INT out_Rd = -1;
   1872   1.1  christos     in_Rd = FLD (in_Rd);
   1873   1.1  christos     in_Rs = FLD (in_Rs);
   1874   1.1  christos     referenced |= 1 << 0;
   1875   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   1876   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1877   1.1  christos   }
   1878   1.1  christos   return cycles;
   1879   1.1  christos #undef FLD
   1880   1.1  christos }
   1881   1.1  christos 
   1882   1.1  christos static int
   1883   1.1  christos model_crisv32_add_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   1884   1.1  christos {
   1885   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   1886   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1887   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1888   1.1  christos   int cycles = 0;
   1889   1.1  christos   {
   1890   1.1  christos     int referenced = 0;
   1891   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1892   1.1  christos     INT in_Rs = -1;
   1893   1.1  christos     in_Rs = FLD (in_Rs);
   1894   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   1895   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   1896   1.1  christos   }
   1897   1.1  christos   {
   1898   1.1  christos     int referenced = 0;
   1899   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1900   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   1901   1.1  christos   }
   1902   1.1  christos   {
   1903   1.1  christos     int referenced = 0;
   1904   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1905   1.1  christos     INT in_Rd = -1;
   1906   1.1  christos     INT in_Rs = -1;
   1907   1.1  christos     INT out_Rd = -1;
   1908   1.1  christos     in_Rd = FLD (in_Rd);
   1909   1.1  christos     in_Rs = FLD (in_Rs);
   1910   1.1  christos     referenced |= 1 << 0;
   1911   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   1912   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   1913   1.1  christos   }
   1914   1.1  christos   return cycles;
   1915   1.1  christos #undef FLD
   1916   1.1  christos }
   1917   1.1  christos 
   1918   1.1  christos static int
   1919   1.1  christos model_crisv32_addcbr (SIM_CPU *current_cpu, void *sem_arg)
   1920   1.1  christos {
   1921   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   1922   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1923   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1924   1.1  christos   int cycles = 0;
   1925   1.1  christos   {
   1926   1.1  christos     int referenced = 0;
   1927   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1928   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   1929   1.1  christos   }
   1930   1.1  christos   {
   1931   1.1  christos     int referenced = 0;
   1932   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1933   1.1  christos     INT in_Rd = -1;
   1934   1.1  christos     INT in_Rs = -1;
   1935   1.1  christos     INT out_Rd = -1;
   1936   1.1  christos     in_Rd = FLD (in_Rd);
   1937   1.1  christos     referenced |= 1 << 0;
   1938   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   1939   1.1  christos   }
   1940   1.1  christos   return cycles;
   1941   1.1  christos #undef FLD
   1942   1.1  christos }
   1943   1.1  christos 
   1944   1.1  christos static int
   1945   1.1  christos model_crisv32_addcwr (SIM_CPU *current_cpu, void *sem_arg)
   1946   1.1  christos {
   1947   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   1948   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1949   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1950   1.1  christos   int cycles = 0;
   1951   1.1  christos   {
   1952   1.1  christos     int referenced = 0;
   1953   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1954   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   1955   1.1  christos   }
   1956   1.1  christos   {
   1957   1.1  christos     int referenced = 0;
   1958   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1959   1.1  christos     INT in_Rd = -1;
   1960   1.1  christos     INT in_Rs = -1;
   1961   1.1  christos     INT out_Rd = -1;
   1962   1.1  christos     in_Rd = FLD (in_Rd);
   1963   1.1  christos     referenced |= 1 << 0;
   1964   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   1965   1.1  christos   }
   1966   1.1  christos   return cycles;
   1967   1.1  christos #undef FLD
   1968   1.1  christos }
   1969   1.1  christos 
   1970   1.1  christos static int
   1971   1.1  christos model_crisv32_addcdr (SIM_CPU *current_cpu, void *sem_arg)
   1972   1.1  christos {
   1973   1.1  christos #define FLD(f) abuf->fields.sfmt_addcdr.f
   1974   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   1975   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   1976   1.1  christos   int cycles = 0;
   1977   1.1  christos   {
   1978   1.1  christos     int referenced = 0;
   1979   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1980   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   1981   1.1  christos   }
   1982   1.1  christos   {
   1983   1.1  christos     int referenced = 0;
   1984   1.1  christos     int UNUSED insn_referenced = abuf->written;
   1985   1.1  christos     INT in_Rd = -1;
   1986   1.1  christos     INT in_Rs = -1;
   1987   1.1  christos     INT out_Rd = -1;
   1988   1.1  christos     in_Rd = FLD (in_Rd);
   1989   1.1  christos     referenced |= 1 << 0;
   1990   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   1991   1.1  christos   }
   1992   1.1  christos   return cycles;
   1993   1.1  christos #undef FLD
   1994   1.1  christos }
   1995   1.1  christos 
   1996   1.1  christos static int
   1997   1.1  christos model_crisv32_adds_b_r (SIM_CPU *current_cpu, void *sem_arg)
   1998   1.1  christos {
   1999   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2000   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2001   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2002   1.1  christos   int cycles = 0;
   2003   1.1  christos   {
   2004   1.1  christos     int referenced = 0;
   2005   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2006   1.1  christos     INT in_Rd = -1;
   2007   1.1  christos     INT in_Rs = -1;
   2008   1.1  christos     INT out_Rd = -1;
   2009   1.1  christos     in_Rd = FLD (in_Rd);
   2010   1.1  christos     in_Rs = FLD (in_Rs);
   2011   1.1  christos     referenced |= 1 << 0;
   2012   1.1  christos     referenced |= 1 << 1;
   2013   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2014   1.1  christos   }
   2015   1.1  christos   return cycles;
   2016   1.1  christos #undef FLD
   2017   1.1  christos }
   2018   1.1  christos 
   2019   1.1  christos static int
   2020   1.1  christos model_crisv32_adds_w_r (SIM_CPU *current_cpu, void *sem_arg)
   2021   1.1  christos {
   2022   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2023   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2024   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2025   1.1  christos   int cycles = 0;
   2026   1.1  christos   {
   2027   1.1  christos     int referenced = 0;
   2028   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2029   1.1  christos     INT in_Rd = -1;
   2030   1.1  christos     INT in_Rs = -1;
   2031   1.1  christos     INT out_Rd = -1;
   2032   1.1  christos     in_Rd = FLD (in_Rd);
   2033   1.1  christos     in_Rs = FLD (in_Rs);
   2034   1.1  christos     referenced |= 1 << 0;
   2035   1.1  christos     referenced |= 1 << 1;
   2036   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2037   1.1  christos   }
   2038   1.1  christos   return cycles;
   2039   1.1  christos #undef FLD
   2040   1.1  christos }
   2041   1.1  christos 
   2042   1.1  christos static int
   2043   1.1  christos model_crisv32_adds_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   2044   1.1  christos {
   2045   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2046   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2047   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2048   1.1  christos   int cycles = 0;
   2049   1.1  christos   {
   2050   1.1  christos     int referenced = 0;
   2051   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2052   1.1  christos     INT in_Rs = -1;
   2053   1.1  christos     in_Rs = FLD (in_Rs);
   2054   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2055   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2056   1.1  christos   }
   2057   1.1  christos   {
   2058   1.1  christos     int referenced = 0;
   2059   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2060   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2061   1.1  christos   }
   2062   1.1  christos   {
   2063   1.1  christos     int referenced = 0;
   2064   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2065   1.1  christos     INT in_Rd = -1;
   2066   1.1  christos     INT in_Rs = -1;
   2067   1.1  christos     INT out_Rd = -1;
   2068   1.1  christos     in_Rd = FLD (in_Rd);
   2069   1.1  christos     in_Rs = FLD (in_Rs);
   2070   1.1  christos     referenced |= 1 << 0;
   2071   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2072   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2073   1.1  christos   }
   2074   1.1  christos   return cycles;
   2075   1.1  christos #undef FLD
   2076   1.1  christos }
   2077   1.1  christos 
   2078   1.1  christos static int
   2079   1.1  christos model_crisv32_adds_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   2080   1.1  christos {
   2081   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2082   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2083   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2084   1.1  christos   int cycles = 0;
   2085   1.1  christos   {
   2086   1.1  christos     int referenced = 0;
   2087   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2088   1.1  christos     INT in_Rs = -1;
   2089   1.1  christos     in_Rs = FLD (in_Rs);
   2090   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2091   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2092   1.1  christos   }
   2093   1.1  christos   {
   2094   1.1  christos     int referenced = 0;
   2095   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2096   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2097   1.1  christos   }
   2098   1.1  christos   {
   2099   1.1  christos     int referenced = 0;
   2100   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2101   1.1  christos     INT in_Rd = -1;
   2102   1.1  christos     INT in_Rs = -1;
   2103   1.1  christos     INT out_Rd = -1;
   2104   1.1  christos     in_Rd = FLD (in_Rd);
   2105   1.1  christos     in_Rs = FLD (in_Rs);
   2106   1.1  christos     referenced |= 1 << 0;
   2107   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2108   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2109   1.1  christos   }
   2110   1.1  christos   return cycles;
   2111   1.1  christos #undef FLD
   2112   1.1  christos }
   2113   1.1  christos 
   2114   1.1  christos static int
   2115   1.1  christos model_crisv32_addscbr (SIM_CPU *current_cpu, void *sem_arg)
   2116   1.1  christos {
   2117   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   2118   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2119   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2120   1.1  christos   int cycles = 0;
   2121   1.1  christos   {
   2122   1.1  christos     int referenced = 0;
   2123   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2124   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2125   1.1  christos   }
   2126   1.1  christos   {
   2127   1.1  christos     int referenced = 0;
   2128   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2129   1.1  christos     INT in_Rd = -1;
   2130   1.1  christos     INT in_Rs = -1;
   2131   1.1  christos     INT out_Rd = -1;
   2132   1.1  christos     in_Rd = FLD (in_Rd);
   2133   1.1  christos     referenced |= 1 << 0;
   2134   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2135   1.1  christos   }
   2136   1.1  christos   return cycles;
   2137   1.1  christos #undef FLD
   2138   1.1  christos }
   2139   1.1  christos 
   2140   1.1  christos static int
   2141   1.1  christos model_crisv32_addscwr (SIM_CPU *current_cpu, void *sem_arg)
   2142   1.1  christos {
   2143   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   2144   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2145   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2146   1.1  christos   int cycles = 0;
   2147   1.1  christos   {
   2148   1.1  christos     int referenced = 0;
   2149   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2150   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2151   1.1  christos   }
   2152   1.1  christos   {
   2153   1.1  christos     int referenced = 0;
   2154   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2155   1.1  christos     INT in_Rd = -1;
   2156   1.1  christos     INT in_Rs = -1;
   2157   1.1  christos     INT out_Rd = -1;
   2158   1.1  christos     in_Rd = FLD (in_Rd);
   2159   1.1  christos     referenced |= 1 << 0;
   2160   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2161   1.1  christos   }
   2162   1.1  christos   return cycles;
   2163   1.1  christos #undef FLD
   2164   1.1  christos }
   2165   1.1  christos 
   2166   1.1  christos static int
   2167   1.1  christos model_crisv32_addu_b_r (SIM_CPU *current_cpu, void *sem_arg)
   2168   1.1  christos {
   2169   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2170   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2171   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2172   1.1  christos   int cycles = 0;
   2173   1.1  christos   {
   2174   1.1  christos     int referenced = 0;
   2175   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2176   1.1  christos     INT in_Rd = -1;
   2177   1.1  christos     INT in_Rs = -1;
   2178   1.1  christos     INT out_Rd = -1;
   2179   1.1  christos     in_Rd = FLD (in_Rd);
   2180   1.1  christos     in_Rs = FLD (in_Rs);
   2181   1.1  christos     referenced |= 1 << 0;
   2182   1.1  christos     referenced |= 1 << 1;
   2183   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2184   1.1  christos   }
   2185   1.1  christos   return cycles;
   2186   1.1  christos #undef FLD
   2187   1.1  christos }
   2188   1.1  christos 
   2189   1.1  christos static int
   2190   1.1  christos model_crisv32_addu_w_r (SIM_CPU *current_cpu, void *sem_arg)
   2191   1.1  christos {
   2192   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2193   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2194   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2195   1.1  christos   int cycles = 0;
   2196   1.1  christos   {
   2197   1.1  christos     int referenced = 0;
   2198   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2199   1.1  christos     INT in_Rd = -1;
   2200   1.1  christos     INT in_Rs = -1;
   2201   1.1  christos     INT out_Rd = -1;
   2202   1.1  christos     in_Rd = FLD (in_Rd);
   2203   1.1  christos     in_Rs = FLD (in_Rs);
   2204   1.1  christos     referenced |= 1 << 0;
   2205   1.1  christos     referenced |= 1 << 1;
   2206   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2207   1.1  christos   }
   2208   1.1  christos   return cycles;
   2209   1.1  christos #undef FLD
   2210   1.1  christos }
   2211   1.1  christos 
   2212   1.1  christos static int
   2213   1.1  christos model_crisv32_addu_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   2214   1.1  christos {
   2215   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2216   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2217   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2218   1.1  christos   int cycles = 0;
   2219   1.1  christos   {
   2220   1.1  christos     int referenced = 0;
   2221   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2222   1.1  christos     INT in_Rs = -1;
   2223   1.1  christos     in_Rs = FLD (in_Rs);
   2224   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2225   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2226   1.1  christos   }
   2227   1.1  christos   {
   2228   1.1  christos     int referenced = 0;
   2229   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2230   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2231   1.1  christos   }
   2232   1.1  christos   {
   2233   1.1  christos     int referenced = 0;
   2234   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2235   1.1  christos     INT in_Rd = -1;
   2236   1.1  christos     INT in_Rs = -1;
   2237   1.1  christos     INT out_Rd = -1;
   2238   1.1  christos     in_Rd = FLD (in_Rd);
   2239   1.1  christos     in_Rs = FLD (in_Rs);
   2240   1.1  christos     referenced |= 1 << 0;
   2241   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2242   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2243   1.1  christos   }
   2244   1.1  christos   return cycles;
   2245   1.1  christos #undef FLD
   2246   1.1  christos }
   2247   1.1  christos 
   2248   1.1  christos static int
   2249   1.1  christos model_crisv32_addu_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   2250   1.1  christos {
   2251   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2252   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2253   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2254   1.1  christos   int cycles = 0;
   2255   1.1  christos   {
   2256   1.1  christos     int referenced = 0;
   2257   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2258   1.1  christos     INT in_Rs = -1;
   2259   1.1  christos     in_Rs = FLD (in_Rs);
   2260   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2261   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2262   1.1  christos   }
   2263   1.1  christos   {
   2264   1.1  christos     int referenced = 0;
   2265   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2266   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2267   1.1  christos   }
   2268   1.1  christos   {
   2269   1.1  christos     int referenced = 0;
   2270   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2271   1.1  christos     INT in_Rd = -1;
   2272   1.1  christos     INT in_Rs = -1;
   2273   1.1  christos     INT out_Rd = -1;
   2274   1.1  christos     in_Rd = FLD (in_Rd);
   2275   1.1  christos     in_Rs = FLD (in_Rs);
   2276   1.1  christos     referenced |= 1 << 0;
   2277   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2278   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2279   1.1  christos   }
   2280   1.1  christos   return cycles;
   2281   1.1  christos #undef FLD
   2282   1.1  christos }
   2283   1.1  christos 
   2284   1.1  christos static int
   2285   1.1  christos model_crisv32_adducbr (SIM_CPU *current_cpu, void *sem_arg)
   2286   1.1  christos {
   2287   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   2288   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2289   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2290   1.1  christos   int cycles = 0;
   2291   1.1  christos   {
   2292   1.1  christos     int referenced = 0;
   2293   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2294   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2295   1.1  christos   }
   2296   1.1  christos   {
   2297   1.1  christos     int referenced = 0;
   2298   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2299   1.1  christos     INT in_Rd = -1;
   2300   1.1  christos     INT in_Rs = -1;
   2301   1.1  christos     INT out_Rd = -1;
   2302   1.1  christos     in_Rd = FLD (in_Rd);
   2303   1.1  christos     referenced |= 1 << 0;
   2304   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2305   1.1  christos   }
   2306   1.1  christos   return cycles;
   2307   1.1  christos #undef FLD
   2308   1.1  christos }
   2309   1.1  christos 
   2310   1.1  christos static int
   2311   1.1  christos model_crisv32_adducwr (SIM_CPU *current_cpu, void *sem_arg)
   2312   1.1  christos {
   2313   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   2314   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2315   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2316   1.1  christos   int cycles = 0;
   2317   1.1  christos   {
   2318   1.1  christos     int referenced = 0;
   2319   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2320   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2321   1.1  christos   }
   2322   1.1  christos   {
   2323   1.1  christos     int referenced = 0;
   2324   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2325   1.1  christos     INT in_Rd = -1;
   2326   1.1  christos     INT in_Rs = -1;
   2327   1.1  christos     INT out_Rd = -1;
   2328   1.1  christos     in_Rd = FLD (in_Rd);
   2329   1.1  christos     referenced |= 1 << 0;
   2330   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2331   1.1  christos   }
   2332   1.1  christos   return cycles;
   2333   1.1  christos #undef FLD
   2334   1.1  christos }
   2335   1.1  christos 
   2336   1.1  christos static int
   2337   1.1  christos model_crisv32_sub_b_r (SIM_CPU *current_cpu, void *sem_arg)
   2338   1.1  christos {
   2339   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2340   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2341   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2342   1.1  christos   int cycles = 0;
   2343   1.1  christos   {
   2344   1.1  christos     int referenced = 0;
   2345   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2346   1.1  christos     INT in_Rd = -1;
   2347   1.1  christos     INT in_Rs = -1;
   2348   1.1  christos     INT out_Rd = -1;
   2349   1.1  christos     in_Rd = FLD (in_Rd);
   2350   1.1  christos     in_Rs = FLD (in_Rs);
   2351   1.1  christos     referenced |= 1 << 0;
   2352   1.1  christos     referenced |= 1 << 1;
   2353   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2354   1.1  christos   }
   2355   1.1  christos   return cycles;
   2356   1.1  christos #undef FLD
   2357   1.1  christos }
   2358   1.1  christos 
   2359   1.1  christos static int
   2360   1.1  christos model_crisv32_sub_w_r (SIM_CPU *current_cpu, void *sem_arg)
   2361   1.1  christos {
   2362   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2363   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2364   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2365   1.1  christos   int cycles = 0;
   2366   1.1  christos   {
   2367   1.1  christos     int referenced = 0;
   2368   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2369   1.1  christos     INT in_Rd = -1;
   2370   1.1  christos     INT in_Rs = -1;
   2371   1.1  christos     INT out_Rd = -1;
   2372   1.1  christos     in_Rd = FLD (in_Rd);
   2373   1.1  christos     in_Rs = FLD (in_Rs);
   2374   1.1  christos     referenced |= 1 << 0;
   2375   1.1  christos     referenced |= 1 << 1;
   2376   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2377   1.1  christos   }
   2378   1.1  christos   return cycles;
   2379   1.1  christos #undef FLD
   2380   1.1  christos }
   2381   1.1  christos 
   2382   1.1  christos static int
   2383   1.1  christos model_crisv32_sub_d_r (SIM_CPU *current_cpu, void *sem_arg)
   2384   1.1  christos {
   2385   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2386   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2387   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2388   1.1  christos   int cycles = 0;
   2389   1.1  christos   {
   2390   1.1  christos     int referenced = 0;
   2391   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2392   1.1  christos     INT in_Rd = -1;
   2393   1.1  christos     INT in_Rs = -1;
   2394   1.1  christos     INT out_Rd = -1;
   2395   1.1  christos     in_Rd = FLD (in_Rd);
   2396   1.1  christos     in_Rs = FLD (in_Rs);
   2397   1.1  christos     referenced |= 1 << 0;
   2398   1.1  christos     referenced |= 1 << 1;
   2399   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2400   1.1  christos   }
   2401   1.1  christos   return cycles;
   2402   1.1  christos #undef FLD
   2403   1.1  christos }
   2404   1.1  christos 
   2405   1.1  christos static int
   2406   1.1  christos model_crisv32_sub_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   2407   1.1  christos {
   2408   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2409   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2410   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2411   1.1  christos   int cycles = 0;
   2412   1.1  christos   {
   2413   1.1  christos     int referenced = 0;
   2414   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2415   1.1  christos     INT in_Rs = -1;
   2416   1.1  christos     in_Rs = FLD (in_Rs);
   2417   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2418   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2419   1.1  christos   }
   2420   1.1  christos   {
   2421   1.1  christos     int referenced = 0;
   2422   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2423   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2424   1.1  christos   }
   2425   1.1  christos   {
   2426   1.1  christos     int referenced = 0;
   2427   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2428   1.1  christos     INT in_Rd = -1;
   2429   1.1  christos     INT in_Rs = -1;
   2430   1.1  christos     INT out_Rd = -1;
   2431   1.1  christos     in_Rd = FLD (in_Rd);
   2432   1.1  christos     in_Rs = FLD (in_Rs);
   2433   1.1  christos     referenced |= 1 << 0;
   2434   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2435   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2436   1.1  christos   }
   2437   1.1  christos   return cycles;
   2438   1.1  christos #undef FLD
   2439   1.1  christos }
   2440   1.1  christos 
   2441   1.1  christos static int
   2442   1.1  christos model_crisv32_sub_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   2443   1.1  christos {
   2444   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2445   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2446   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2447   1.1  christos   int cycles = 0;
   2448   1.1  christos   {
   2449   1.1  christos     int referenced = 0;
   2450   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2451   1.1  christos     INT in_Rs = -1;
   2452   1.1  christos     in_Rs = FLD (in_Rs);
   2453   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2454   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2455   1.1  christos   }
   2456   1.1  christos   {
   2457   1.1  christos     int referenced = 0;
   2458   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2459   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2460   1.1  christos   }
   2461   1.1  christos   {
   2462   1.1  christos     int referenced = 0;
   2463   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2464   1.1  christos     INT in_Rd = -1;
   2465   1.1  christos     INT in_Rs = -1;
   2466   1.1  christos     INT out_Rd = -1;
   2467   1.1  christos     in_Rd = FLD (in_Rd);
   2468   1.1  christos     in_Rs = FLD (in_Rs);
   2469   1.1  christos     referenced |= 1 << 0;
   2470   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2471   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2472   1.1  christos   }
   2473   1.1  christos   return cycles;
   2474   1.1  christos #undef FLD
   2475   1.1  christos }
   2476   1.1  christos 
   2477   1.1  christos static int
   2478   1.1  christos model_crisv32_sub_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   2479   1.1  christos {
   2480   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2481   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2482   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2483   1.1  christos   int cycles = 0;
   2484   1.1  christos   {
   2485   1.1  christos     int referenced = 0;
   2486   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2487   1.1  christos     INT in_Rs = -1;
   2488   1.1  christos     in_Rs = FLD (in_Rs);
   2489   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2490   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2491   1.1  christos   }
   2492   1.1  christos   {
   2493   1.1  christos     int referenced = 0;
   2494   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2495   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2496   1.1  christos   }
   2497   1.1  christos   {
   2498   1.1  christos     int referenced = 0;
   2499   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2500   1.1  christos     INT in_Rd = -1;
   2501   1.1  christos     INT in_Rs = -1;
   2502   1.1  christos     INT out_Rd = -1;
   2503   1.1  christos     in_Rd = FLD (in_Rd);
   2504   1.1  christos     in_Rs = FLD (in_Rs);
   2505   1.1  christos     referenced |= 1 << 0;
   2506   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2507   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2508   1.1  christos   }
   2509   1.1  christos   return cycles;
   2510   1.1  christos #undef FLD
   2511   1.1  christos }
   2512   1.1  christos 
   2513   1.1  christos static int
   2514   1.1  christos model_crisv32_subcbr (SIM_CPU *current_cpu, void *sem_arg)
   2515   1.1  christos {
   2516   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   2517   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2518   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2519   1.1  christos   int cycles = 0;
   2520   1.1  christos   {
   2521   1.1  christos     int referenced = 0;
   2522   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2523   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2524   1.1  christos   }
   2525   1.1  christos   {
   2526   1.1  christos     int referenced = 0;
   2527   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2528   1.1  christos     INT in_Rd = -1;
   2529   1.1  christos     INT in_Rs = -1;
   2530   1.1  christos     INT out_Rd = -1;
   2531   1.1  christos     in_Rd = FLD (in_Rd);
   2532   1.1  christos     referenced |= 1 << 0;
   2533   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2534   1.1  christos   }
   2535   1.1  christos   return cycles;
   2536   1.1  christos #undef FLD
   2537   1.1  christos }
   2538   1.1  christos 
   2539   1.1  christos static int
   2540   1.1  christos model_crisv32_subcwr (SIM_CPU *current_cpu, void *sem_arg)
   2541   1.1  christos {
   2542   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   2543   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2544   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2545   1.1  christos   int cycles = 0;
   2546   1.1  christos   {
   2547   1.1  christos     int referenced = 0;
   2548   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2549   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2550   1.1  christos   }
   2551   1.1  christos   {
   2552   1.1  christos     int referenced = 0;
   2553   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2554   1.1  christos     INT in_Rd = -1;
   2555   1.1  christos     INT in_Rs = -1;
   2556   1.1  christos     INT out_Rd = -1;
   2557   1.1  christos     in_Rd = FLD (in_Rd);
   2558   1.1  christos     referenced |= 1 << 0;
   2559   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2560   1.1  christos   }
   2561   1.1  christos   return cycles;
   2562   1.1  christos #undef FLD
   2563   1.1  christos }
   2564   1.1  christos 
   2565   1.1  christos static int
   2566   1.1  christos model_crisv32_subcdr (SIM_CPU *current_cpu, void *sem_arg)
   2567   1.1  christos {
   2568   1.1  christos #define FLD(f) abuf->fields.sfmt_addcdr.f
   2569   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2570   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2571   1.1  christos   int cycles = 0;
   2572   1.1  christos   {
   2573   1.1  christos     int referenced = 0;
   2574   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2575   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   2576   1.1  christos   }
   2577   1.1  christos   {
   2578   1.1  christos     int referenced = 0;
   2579   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2580   1.1  christos     INT in_Rd = -1;
   2581   1.1  christos     INT in_Rs = -1;
   2582   1.1  christos     INT out_Rd = -1;
   2583   1.1  christos     in_Rd = FLD (in_Rd);
   2584   1.1  christos     referenced |= 1 << 0;
   2585   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2586   1.1  christos   }
   2587   1.1  christos   return cycles;
   2588   1.1  christos #undef FLD
   2589   1.1  christos }
   2590   1.1  christos 
   2591   1.1  christos static int
   2592   1.1  christos model_crisv32_subs_b_r (SIM_CPU *current_cpu, void *sem_arg)
   2593   1.1  christos {
   2594   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2595   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2596   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2597   1.1  christos   int cycles = 0;
   2598   1.1  christos   {
   2599   1.1  christos     int referenced = 0;
   2600   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2601   1.1  christos     INT in_Rd = -1;
   2602   1.1  christos     INT in_Rs = -1;
   2603   1.1  christos     INT out_Rd = -1;
   2604   1.1  christos     in_Rd = FLD (in_Rd);
   2605   1.1  christos     in_Rs = FLD (in_Rs);
   2606   1.1  christos     referenced |= 1 << 0;
   2607   1.1  christos     referenced |= 1 << 1;
   2608   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2609   1.1  christos   }
   2610   1.1  christos   return cycles;
   2611   1.1  christos #undef FLD
   2612   1.1  christos }
   2613   1.1  christos 
   2614   1.1  christos static int
   2615   1.1  christos model_crisv32_subs_w_r (SIM_CPU *current_cpu, void *sem_arg)
   2616   1.1  christos {
   2617   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2618   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2619   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2620   1.1  christos   int cycles = 0;
   2621   1.1  christos   {
   2622   1.1  christos     int referenced = 0;
   2623   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2624   1.1  christos     INT in_Rd = -1;
   2625   1.1  christos     INT in_Rs = -1;
   2626   1.1  christos     INT out_Rd = -1;
   2627   1.1  christos     in_Rd = FLD (in_Rd);
   2628   1.1  christos     in_Rs = FLD (in_Rs);
   2629   1.1  christos     referenced |= 1 << 0;
   2630   1.1  christos     referenced |= 1 << 1;
   2631   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2632   1.1  christos   }
   2633   1.1  christos   return cycles;
   2634   1.1  christos #undef FLD
   2635   1.1  christos }
   2636   1.1  christos 
   2637   1.1  christos static int
   2638   1.1  christos model_crisv32_subs_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   2639   1.1  christos {
   2640   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2641   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2642   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2643   1.1  christos   int cycles = 0;
   2644   1.1  christos   {
   2645   1.1  christos     int referenced = 0;
   2646   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2647   1.1  christos     INT in_Rs = -1;
   2648   1.1  christos     in_Rs = FLD (in_Rs);
   2649   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2650   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2651   1.1  christos   }
   2652   1.1  christos   {
   2653   1.1  christos     int referenced = 0;
   2654   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2655   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2656   1.1  christos   }
   2657   1.1  christos   {
   2658   1.1  christos     int referenced = 0;
   2659   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2660   1.1  christos     INT in_Rd = -1;
   2661   1.1  christos     INT in_Rs = -1;
   2662   1.1  christos     INT out_Rd = -1;
   2663   1.1  christos     in_Rd = FLD (in_Rd);
   2664   1.1  christos     in_Rs = FLD (in_Rs);
   2665   1.1  christos     referenced |= 1 << 0;
   2666   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2667   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2668   1.1  christos   }
   2669   1.1  christos   return cycles;
   2670   1.1  christos #undef FLD
   2671   1.1  christos }
   2672   1.1  christos 
   2673   1.1  christos static int
   2674   1.1  christos model_crisv32_subs_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   2675   1.1  christos {
   2676   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2677   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2678   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2679   1.1  christos   int cycles = 0;
   2680   1.1  christos   {
   2681   1.1  christos     int referenced = 0;
   2682   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2683   1.1  christos     INT in_Rs = -1;
   2684   1.1  christos     in_Rs = FLD (in_Rs);
   2685   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2686   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2687   1.1  christos   }
   2688   1.1  christos   {
   2689   1.1  christos     int referenced = 0;
   2690   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2691   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2692   1.1  christos   }
   2693   1.1  christos   {
   2694   1.1  christos     int referenced = 0;
   2695   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2696   1.1  christos     INT in_Rd = -1;
   2697   1.1  christos     INT in_Rs = -1;
   2698   1.1  christos     INT out_Rd = -1;
   2699   1.1  christos     in_Rd = FLD (in_Rd);
   2700   1.1  christos     in_Rs = FLD (in_Rs);
   2701   1.1  christos     referenced |= 1 << 0;
   2702   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2703   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2704   1.1  christos   }
   2705   1.1  christos   return cycles;
   2706   1.1  christos #undef FLD
   2707   1.1  christos }
   2708   1.1  christos 
   2709   1.1  christos static int
   2710   1.1  christos model_crisv32_subscbr (SIM_CPU *current_cpu, void *sem_arg)
   2711   1.1  christos {
   2712   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   2713   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2714   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2715   1.1  christos   int cycles = 0;
   2716   1.1  christos   {
   2717   1.1  christos     int referenced = 0;
   2718   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2719   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2720   1.1  christos   }
   2721   1.1  christos   {
   2722   1.1  christos     int referenced = 0;
   2723   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2724   1.1  christos     INT in_Rd = -1;
   2725   1.1  christos     INT in_Rs = -1;
   2726   1.1  christos     INT out_Rd = -1;
   2727   1.1  christos     in_Rd = FLD (in_Rd);
   2728   1.1  christos     referenced |= 1 << 0;
   2729   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2730   1.1  christos   }
   2731   1.1  christos   return cycles;
   2732   1.1  christos #undef FLD
   2733   1.1  christos }
   2734   1.1  christos 
   2735   1.1  christos static int
   2736   1.1  christos model_crisv32_subscwr (SIM_CPU *current_cpu, void *sem_arg)
   2737   1.1  christos {
   2738   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   2739   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2740   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2741   1.1  christos   int cycles = 0;
   2742   1.1  christos   {
   2743   1.1  christos     int referenced = 0;
   2744   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2745   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2746   1.1  christos   }
   2747   1.1  christos   {
   2748   1.1  christos     int referenced = 0;
   2749   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2750   1.1  christos     INT in_Rd = -1;
   2751   1.1  christos     INT in_Rs = -1;
   2752   1.1  christos     INT out_Rd = -1;
   2753   1.1  christos     in_Rd = FLD (in_Rd);
   2754   1.1  christos     referenced |= 1 << 0;
   2755   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2756   1.1  christos   }
   2757   1.1  christos   return cycles;
   2758   1.1  christos #undef FLD
   2759   1.1  christos }
   2760   1.1  christos 
   2761   1.1  christos static int
   2762   1.1  christos model_crisv32_subu_b_r (SIM_CPU *current_cpu, void *sem_arg)
   2763   1.1  christos {
   2764   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2765   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2766   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2767   1.1  christos   int cycles = 0;
   2768   1.1  christos   {
   2769   1.1  christos     int referenced = 0;
   2770   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2771   1.1  christos     INT in_Rd = -1;
   2772   1.1  christos     INT in_Rs = -1;
   2773   1.1  christos     INT out_Rd = -1;
   2774   1.1  christos     in_Rd = FLD (in_Rd);
   2775   1.1  christos     in_Rs = FLD (in_Rs);
   2776   1.1  christos     referenced |= 1 << 0;
   2777   1.1  christos     referenced |= 1 << 1;
   2778   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2779   1.1  christos   }
   2780   1.1  christos   return cycles;
   2781   1.1  christos #undef FLD
   2782   1.1  christos }
   2783   1.1  christos 
   2784   1.1  christos static int
   2785   1.1  christos model_crisv32_subu_w_r (SIM_CPU *current_cpu, void *sem_arg)
   2786   1.1  christos {
   2787   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2788   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2789   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2790   1.1  christos   int cycles = 0;
   2791   1.1  christos   {
   2792   1.1  christos     int referenced = 0;
   2793   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2794   1.1  christos     INT in_Rd = -1;
   2795   1.1  christos     INT in_Rs = -1;
   2796   1.1  christos     INT out_Rd = -1;
   2797   1.1  christos     in_Rd = FLD (in_Rd);
   2798   1.1  christos     in_Rs = FLD (in_Rs);
   2799   1.1  christos     referenced |= 1 << 0;
   2800   1.1  christos     referenced |= 1 << 1;
   2801   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2802   1.1  christos   }
   2803   1.1  christos   return cycles;
   2804   1.1  christos #undef FLD
   2805   1.1  christos }
   2806   1.1  christos 
   2807   1.1  christos static int
   2808   1.1  christos model_crisv32_subu_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   2809   1.1  christos {
   2810   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2811   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2812   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2813   1.1  christos   int cycles = 0;
   2814   1.1  christos   {
   2815   1.1  christos     int referenced = 0;
   2816   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2817   1.1  christos     INT in_Rs = -1;
   2818   1.1  christos     in_Rs = FLD (in_Rs);
   2819   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2820   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2821   1.1  christos   }
   2822   1.1  christos   {
   2823   1.1  christos     int referenced = 0;
   2824   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2825   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2826   1.1  christos   }
   2827   1.1  christos   {
   2828   1.1  christos     int referenced = 0;
   2829   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2830   1.1  christos     INT in_Rd = -1;
   2831   1.1  christos     INT in_Rs = -1;
   2832   1.1  christos     INT out_Rd = -1;
   2833   1.1  christos     in_Rd = FLD (in_Rd);
   2834   1.1  christos     in_Rs = FLD (in_Rs);
   2835   1.1  christos     referenced |= 1 << 0;
   2836   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2837   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2838   1.1  christos   }
   2839   1.1  christos   return cycles;
   2840   1.1  christos #undef FLD
   2841   1.1  christos }
   2842   1.1  christos 
   2843   1.1  christos static int
   2844   1.1  christos model_crisv32_subu_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   2845   1.1  christos {
   2846   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   2847   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2848   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2849   1.1  christos   int cycles = 0;
   2850   1.1  christos   {
   2851   1.1  christos     int referenced = 0;
   2852   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2853   1.1  christos     INT in_Rs = -1;
   2854   1.1  christos     in_Rs = FLD (in_Rs);
   2855   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2856   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2857   1.1  christos   }
   2858   1.1  christos   {
   2859   1.1  christos     int referenced = 0;
   2860   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2861   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2862   1.1  christos   }
   2863   1.1  christos   {
   2864   1.1  christos     int referenced = 0;
   2865   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2866   1.1  christos     INT in_Rd = -1;
   2867   1.1  christos     INT in_Rs = -1;
   2868   1.1  christos     INT out_Rd = -1;
   2869   1.1  christos     in_Rd = FLD (in_Rd);
   2870   1.1  christos     in_Rs = FLD (in_Rs);
   2871   1.1  christos     referenced |= 1 << 0;
   2872   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2873   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2874   1.1  christos   }
   2875   1.1  christos   return cycles;
   2876   1.1  christos #undef FLD
   2877   1.1  christos }
   2878   1.1  christos 
   2879   1.1  christos static int
   2880   1.1  christos model_crisv32_subucbr (SIM_CPU *current_cpu, void *sem_arg)
   2881   1.1  christos {
   2882   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   2883   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2884   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2885   1.1  christos   int cycles = 0;
   2886   1.1  christos   {
   2887   1.1  christos     int referenced = 0;
   2888   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2889   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2890   1.1  christos   }
   2891   1.1  christos   {
   2892   1.1  christos     int referenced = 0;
   2893   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2894   1.1  christos     INT in_Rd = -1;
   2895   1.1  christos     INT in_Rs = -1;
   2896   1.1  christos     INT out_Rd = -1;
   2897   1.1  christos     in_Rd = FLD (in_Rd);
   2898   1.1  christos     referenced |= 1 << 0;
   2899   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2900   1.1  christos   }
   2901   1.1  christos   return cycles;
   2902   1.1  christos #undef FLD
   2903   1.1  christos }
   2904   1.1  christos 
   2905   1.1  christos static int
   2906   1.1  christos model_crisv32_subucwr (SIM_CPU *current_cpu, void *sem_arg)
   2907   1.1  christos {
   2908   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   2909   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2910   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2911   1.1  christos   int cycles = 0;
   2912   1.1  christos   {
   2913   1.1  christos     int referenced = 0;
   2914   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2915   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   2916   1.1  christos   }
   2917   1.1  christos   {
   2918   1.1  christos     int referenced = 0;
   2919   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2920   1.1  christos     INT in_Rd = -1;
   2921   1.1  christos     INT in_Rs = -1;
   2922   1.1  christos     INT out_Rd = -1;
   2923   1.1  christos     in_Rd = FLD (in_Rd);
   2924   1.1  christos     referenced |= 1 << 0;
   2925   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   2926   1.1  christos   }
   2927   1.1  christos   return cycles;
   2928   1.1  christos #undef FLD
   2929   1.1  christos }
   2930   1.1  christos 
   2931   1.1  christos static int
   2932   1.1  christos model_crisv32_addc_r (SIM_CPU *current_cpu, void *sem_arg)
   2933   1.1  christos {
   2934   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2935   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2936   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2937   1.1  christos   int cycles = 0;
   2938   1.1  christos   {
   2939   1.1  christos     int referenced = 0;
   2940   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2941   1.1  christos     INT in_Rd = -1;
   2942   1.1  christos     INT in_Rs = -1;
   2943   1.1  christos     INT out_Rd = -1;
   2944   1.1  christos     in_Rd = FLD (in_Rd);
   2945   1.1  christos     in_Rs = FLD (in_Rs);
   2946   1.1  christos     referenced |= 1 << 0;
   2947   1.1  christos     referenced |= 1 << 1;
   2948   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   2949   1.1  christos   }
   2950   1.1  christos   return cycles;
   2951   1.1  christos #undef FLD
   2952   1.1  christos }
   2953   1.1  christos 
   2954   1.1  christos static int
   2955   1.1  christos model_crisv32_addc_m (SIM_CPU *current_cpu, void *sem_arg)
   2956   1.1  christos {
   2957   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   2958   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2959   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2960   1.1  christos   int cycles = 0;
   2961   1.1  christos   {
   2962   1.1  christos     int referenced = 0;
   2963   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2964   1.1  christos     INT in_Rs = -1;
   2965   1.1  christos     in_Rs = FLD (in_Rs);
   2966   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   2967   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   2968   1.1  christos   }
   2969   1.1  christos   {
   2970   1.1  christos     int referenced = 0;
   2971   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2972   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   2973   1.1  christos   }
   2974   1.1  christos   {
   2975   1.1  christos     int referenced = 0;
   2976   1.1  christos     int UNUSED insn_referenced = abuf->written;
   2977   1.1  christos     INT in_Rd = -1;
   2978   1.1  christos     INT in_Rs = -1;
   2979   1.1  christos     INT out_Rd = -1;
   2980   1.1  christos     in_Rd = FLD (in_Rd);
   2981   1.1  christos     in_Rs = FLD (in_Rs);
   2982   1.1  christos     referenced |= 1 << 0;
   2983   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   2984   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   2985   1.1  christos   }
   2986   1.1  christos   return cycles;
   2987   1.1  christos #undef FLD
   2988   1.1  christos }
   2989   1.1  christos 
   2990   1.1  christos static int
   2991   1.1  christos model_crisv32_addc_c (SIM_CPU *current_cpu, void *sem_arg)
   2992   1.1  christos {
   2993   1.1  christos #define FLD(f) abuf->fields.sfmt_addcdr.f
   2994   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   2995   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   2996   1.1  christos   int cycles = 0;
   2997   1.1  christos   {
   2998   1.1  christos     int referenced = 0;
   2999   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3000   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   3001   1.1  christos   }
   3002   1.1  christos   {
   3003   1.1  christos     int referenced = 0;
   3004   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3005   1.1  christos     INT in_Rd = -1;
   3006   1.1  christos     INT in_Rs = -1;
   3007   1.1  christos     INT out_Rd = -1;
   3008   1.1  christos     in_Rd = FLD (in_Rd);
   3009   1.1  christos     referenced |= 1 << 0;
   3010   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3011   1.1  christos   }
   3012   1.1  christos   return cycles;
   3013   1.1  christos #undef FLD
   3014   1.1  christos }
   3015   1.1  christos 
   3016   1.1  christos static int
   3017   1.1  christos model_crisv32_lapc_d (SIM_CPU *current_cpu, void *sem_arg)
   3018   1.1  christos {
   3019   1.1  christos #define FLD(f) abuf->fields.sfmt_lapc_d.f
   3020   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3021   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3022   1.1  christos   int cycles = 0;
   3023   1.1  christos   {
   3024   1.1  christos     int referenced = 0;
   3025   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3026   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   3027   1.1  christos   }
   3028   1.1  christos   {
   3029   1.1  christos     int referenced = 0;
   3030   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3031   1.1  christos     INT in_Rd = -1;
   3032   1.1  christos     INT in_Rs = -1;
   3033   1.1  christos     INT out_Rd = -1;
   3034   1.1  christos     out_Rd = FLD (out_Rd);
   3035   1.1  christos     referenced |= 1 << 2;
   3036   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3037   1.1  christos   }
   3038   1.1  christos   return cycles;
   3039   1.1  christos #undef FLD
   3040   1.1  christos }
   3041   1.1  christos 
   3042   1.1  christos static int
   3043   1.1  christos model_crisv32_lapcq (SIM_CPU *current_cpu, void *sem_arg)
   3044   1.1  christos {
   3045   1.1  christos #define FLD(f) abuf->fields.sfmt_lapcq.f
   3046   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3047   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3048   1.1  christos   int cycles = 0;
   3049   1.1  christos   {
   3050   1.1  christos     int referenced = 0;
   3051   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3052   1.1  christos     INT in_Rd = -1;
   3053   1.1  christos     INT in_Rs = -1;
   3054   1.1  christos     INT out_Rd = -1;
   3055   1.1  christos     out_Rd = FLD (out_Rd);
   3056   1.1  christos     referenced |= 1 << 2;
   3057   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3058   1.1  christos   }
   3059   1.1  christos   return cycles;
   3060   1.1  christos #undef FLD
   3061   1.1  christos }
   3062   1.1  christos 
   3063   1.1  christos static int
   3064   1.1  christos model_crisv32_addi_b_r (SIM_CPU *current_cpu, void *sem_arg)
   3065   1.1  christos {
   3066   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3067   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3068   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3069   1.1  christos   int cycles = 0;
   3070   1.1  christos   {
   3071   1.1  christos     int referenced = 0;
   3072   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3073   1.1  christos     INT in_Rd = -1;
   3074   1.1  christos     INT in_Rs = -1;
   3075   1.1  christos     INT out_Rd = -1;
   3076   1.1  christos     in_Rd = FLD (in_Rd);
   3077   1.1  christos     in_Rs = FLD (in_Rs);
   3078   1.1  christos     referenced |= 1 << 0;
   3079   1.1  christos     referenced |= 1 << 1;
   3080   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3081   1.1  christos   }
   3082   1.1  christos   return cycles;
   3083   1.1  christos #undef FLD
   3084   1.1  christos }
   3085   1.1  christos 
   3086   1.1  christos static int
   3087   1.1  christos model_crisv32_addi_w_r (SIM_CPU *current_cpu, void *sem_arg)
   3088   1.1  christos {
   3089   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3090   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3091   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3092   1.1  christos   int cycles = 0;
   3093   1.1  christos   {
   3094   1.1  christos     int referenced = 0;
   3095   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3096   1.1  christos     INT in_Rd = -1;
   3097   1.1  christos     INT in_Rs = -1;
   3098   1.1  christos     INT out_Rd = -1;
   3099   1.1  christos     in_Rd = FLD (in_Rd);
   3100   1.1  christos     in_Rs = FLD (in_Rs);
   3101   1.1  christos     referenced |= 1 << 0;
   3102   1.1  christos     referenced |= 1 << 1;
   3103   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3104   1.1  christos   }
   3105   1.1  christos   return cycles;
   3106   1.1  christos #undef FLD
   3107   1.1  christos }
   3108   1.1  christos 
   3109   1.1  christos static int
   3110   1.1  christos model_crisv32_addi_d_r (SIM_CPU *current_cpu, void *sem_arg)
   3111   1.1  christos {
   3112   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3113   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3114   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3115   1.1  christos   int cycles = 0;
   3116   1.1  christos   {
   3117   1.1  christos     int referenced = 0;
   3118   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3119   1.1  christos     INT in_Rd = -1;
   3120   1.1  christos     INT in_Rs = -1;
   3121   1.1  christos     INT out_Rd = -1;
   3122   1.1  christos     in_Rd = FLD (in_Rd);
   3123   1.1  christos     in_Rs = FLD (in_Rs);
   3124   1.1  christos     referenced |= 1 << 0;
   3125   1.1  christos     referenced |= 1 << 1;
   3126   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3127   1.1  christos   }
   3128   1.1  christos   return cycles;
   3129   1.1  christos #undef FLD
   3130   1.1  christos }
   3131   1.1  christos 
   3132   1.1  christos static int
   3133   1.1  christos model_crisv32_neg_b_r (SIM_CPU *current_cpu, void *sem_arg)
   3134   1.1  christos {
   3135   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3136   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3137   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3138   1.1  christos   int cycles = 0;
   3139   1.1  christos   {
   3140   1.1  christos     int referenced = 0;
   3141   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3142   1.1  christos     INT in_Rd = -1;
   3143   1.1  christos     INT in_Rs = -1;
   3144   1.1  christos     INT out_Rd = -1;
   3145   1.1  christos     in_Rs = FLD (in_Rs);
   3146   1.1  christos     referenced |= 1 << 1;
   3147   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3148   1.1  christos   }
   3149   1.1  christos   return cycles;
   3150   1.1  christos #undef FLD
   3151   1.1  christos }
   3152   1.1  christos 
   3153   1.1  christos static int
   3154   1.1  christos model_crisv32_neg_w_r (SIM_CPU *current_cpu, void *sem_arg)
   3155   1.1  christos {
   3156   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3157   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3158   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3159   1.1  christos   int cycles = 0;
   3160   1.1  christos   {
   3161   1.1  christos     int referenced = 0;
   3162   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3163   1.1  christos     INT in_Rd = -1;
   3164   1.1  christos     INT in_Rs = -1;
   3165   1.1  christos     INT out_Rd = -1;
   3166   1.1  christos     in_Rs = FLD (in_Rs);
   3167   1.1  christos     referenced |= 1 << 1;
   3168   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3169   1.1  christos   }
   3170   1.1  christos   return cycles;
   3171   1.1  christos #undef FLD
   3172   1.1  christos }
   3173   1.1  christos 
   3174   1.1  christos static int
   3175   1.1  christos model_crisv32_neg_d_r (SIM_CPU *current_cpu, void *sem_arg)
   3176   1.1  christos {
   3177   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3178   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3179   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3180   1.1  christos   int cycles = 0;
   3181   1.1  christos   {
   3182   1.1  christos     int referenced = 0;
   3183   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3184   1.1  christos     INT in_Rd = -1;
   3185   1.1  christos     INT in_Rs = -1;
   3186   1.1  christos     INT out_Rd = -1;
   3187   1.1  christos     in_Rs = FLD (in_Rs);
   3188   1.1  christos     referenced |= 1 << 1;
   3189   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3190   1.1  christos   }
   3191   1.1  christos   return cycles;
   3192   1.1  christos #undef FLD
   3193   1.1  christos }
   3194   1.1  christos 
   3195   1.1  christos static int
   3196   1.1  christos model_crisv32_test_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   3197   1.1  christos {
   3198   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   3199   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3200   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3201   1.1  christos   int cycles = 0;
   3202   1.1  christos   {
   3203   1.1  christos     int referenced = 0;
   3204   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3205   1.1  christos     INT in_Rs = -1;
   3206   1.1  christos     in_Rs = FLD (in_Rs);
   3207   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   3208   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3209   1.1  christos   }
   3210   1.1  christos   {
   3211   1.1  christos     int referenced = 0;
   3212   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3213   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   3214   1.1  christos   }
   3215   1.1  christos   {
   3216   1.1  christos     int referenced = 0;
   3217   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3218   1.1  christos     INT in_Rd = -1;
   3219   1.1  christos     INT in_Rs = -1;
   3220   1.1  christos     INT out_Rd = -1;
   3221   1.1  christos     in_Rs = FLD (in_Rs);
   3222   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   3223   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   3224   1.1  christos   }
   3225   1.1  christos   return cycles;
   3226   1.1  christos #undef FLD
   3227   1.1  christos }
   3228   1.1  christos 
   3229   1.1  christos static int
   3230   1.1  christos model_crisv32_test_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   3231   1.1  christos {
   3232   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   3233   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3234   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3235   1.1  christos   int cycles = 0;
   3236   1.1  christos   {
   3237   1.1  christos     int referenced = 0;
   3238   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3239   1.1  christos     INT in_Rs = -1;
   3240   1.1  christos     in_Rs = FLD (in_Rs);
   3241   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   3242   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3243   1.1  christos   }
   3244   1.1  christos   {
   3245   1.1  christos     int referenced = 0;
   3246   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3247   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   3248   1.1  christos   }
   3249   1.1  christos   {
   3250   1.1  christos     int referenced = 0;
   3251   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3252   1.1  christos     INT in_Rd = -1;
   3253   1.1  christos     INT in_Rs = -1;
   3254   1.1  christos     INT out_Rd = -1;
   3255   1.1  christos     in_Rs = FLD (in_Rs);
   3256   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   3257   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   3258   1.1  christos   }
   3259   1.1  christos   return cycles;
   3260   1.1  christos #undef FLD
   3261   1.1  christos }
   3262   1.1  christos 
   3263   1.1  christos static int
   3264   1.1  christos model_crisv32_test_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   3265   1.1  christos {
   3266   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   3267   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3268   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3269   1.1  christos   int cycles = 0;
   3270   1.1  christos   {
   3271   1.1  christos     int referenced = 0;
   3272   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3273   1.1  christos     INT in_Rs = -1;
   3274   1.1  christos     in_Rs = FLD (in_Rs);
   3275   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   3276   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3277   1.1  christos   }
   3278   1.1  christos   {
   3279   1.1  christos     int referenced = 0;
   3280   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3281   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   3282   1.1  christos   }
   3283   1.1  christos   {
   3284   1.1  christos     int referenced = 0;
   3285   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3286   1.1  christos     INT in_Rd = -1;
   3287   1.1  christos     INT in_Rs = -1;
   3288   1.1  christos     INT out_Rd = -1;
   3289   1.1  christos     in_Rs = FLD (in_Rs);
   3290   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
   3291   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   3292   1.1  christos   }
   3293   1.1  christos   return cycles;
   3294   1.1  christos #undef FLD
   3295   1.1  christos }
   3296   1.1  christos 
   3297   1.1  christos static int
   3298   1.1  christos model_crisv32_move_r_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   3299   1.1  christos {
   3300   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3301   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3302   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3303   1.1  christos   int cycles = 0;
   3304   1.1  christos   {
   3305   1.1  christos     int referenced = 0;
   3306   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3307   1.1  christos     INT in_Rs = -1;
   3308   1.1  christos     in_Rs = FLD (in_Rs);
   3309   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   3310   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3311   1.1  christos   }
   3312   1.1  christos   {
   3313   1.1  christos     int referenced = 0;
   3314   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3315   1.1  christos     INT in_Rd = -1;
   3316   1.1  christos     INT in_Rs = -1;
   3317   1.1  christos     INT out_Rd = -1;
   3318   1.1  christos     in_Rd = FLD (in_Rd);
   3319   1.1  christos     in_Rs = FLD (in_Rs);
   3320   1.1  christos     referenced |= 1 << 0;
   3321   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   3322   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3323   1.1  christos   }
   3324   1.1  christos   {
   3325   1.1  christos     int referenced = 0;
   3326   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3327   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_w (current_cpu, idesc, 2, referenced);
   3328   1.1  christos   }
   3329   1.1  christos   return cycles;
   3330   1.1  christos #undef FLD
   3331   1.1  christos }
   3332   1.1  christos 
   3333   1.1  christos static int
   3334   1.1  christos model_crisv32_move_r_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   3335   1.1  christos {
   3336   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3337   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3338   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3339   1.1  christos   int cycles = 0;
   3340   1.1  christos   {
   3341   1.1  christos     int referenced = 0;
   3342   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3343   1.1  christos     INT in_Rs = -1;
   3344   1.1  christos     in_Rs = FLD (in_Rs);
   3345   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   3346   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3347   1.1  christos   }
   3348   1.1  christos   {
   3349   1.1  christos     int referenced = 0;
   3350   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3351   1.1  christos     INT in_Rd = -1;
   3352   1.1  christos     INT in_Rs = -1;
   3353   1.1  christos     INT out_Rd = -1;
   3354   1.1  christos     in_Rd = FLD (in_Rd);
   3355   1.1  christos     in_Rs = FLD (in_Rs);
   3356   1.1  christos     referenced |= 1 << 0;
   3357   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   3358   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3359   1.1  christos   }
   3360   1.1  christos   {
   3361   1.1  christos     int referenced = 0;
   3362   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3363   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_w (current_cpu, idesc, 2, referenced);
   3364   1.1  christos   }
   3365   1.1  christos   return cycles;
   3366   1.1  christos #undef FLD
   3367   1.1  christos }
   3368   1.1  christos 
   3369   1.1  christos static int
   3370   1.1  christos model_crisv32_move_r_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   3371   1.1  christos {
   3372   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3373   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3374   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3375   1.1  christos   int cycles = 0;
   3376   1.1  christos   {
   3377   1.1  christos     int referenced = 0;
   3378   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3379   1.1  christos     INT in_Rs = -1;
   3380   1.1  christos     in_Rs = FLD (in_Rs);
   3381   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   3382   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3383   1.1  christos   }
   3384   1.1  christos   {
   3385   1.1  christos     int referenced = 0;
   3386   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3387   1.1  christos     INT in_Rd = -1;
   3388   1.1  christos     INT in_Rs = -1;
   3389   1.1  christos     INT out_Rd = -1;
   3390   1.1  christos     in_Rd = FLD (in_Rd);
   3391   1.1  christos     in_Rs = FLD (in_Rs);
   3392   1.1  christos     referenced |= 1 << 0;
   3393   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   3394   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3395   1.1  christos   }
   3396   1.1  christos   {
   3397   1.1  christos     int referenced = 0;
   3398   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3399   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_w (current_cpu, idesc, 2, referenced);
   3400   1.1  christos   }
   3401   1.1  christos   return cycles;
   3402   1.1  christos #undef FLD
   3403   1.1  christos }
   3404   1.1  christos 
   3405   1.1  christos static int
   3406   1.1  christos model_crisv32_muls_b (SIM_CPU *current_cpu, void *sem_arg)
   3407   1.1  christos {
   3408   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3409   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3410   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3411   1.1  christos   int cycles = 0;
   3412   1.1  christos   {
   3413   1.1  christos     int referenced = 0;
   3414   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3415   1.1  christos     INT in_Rs = -1;
   3416   1.1  christos     INT in_Rd = -1;
   3417   1.1  christos     in_Rs = FLD (in_Rs);
   3418   1.1  christos     in_Rd = FLD (in_Rd);
   3419   1.1  christos     referenced |= 1 << 0;
   3420   1.1  christos     referenced |= 1 << 1;
   3421   1.1  christos     cycles += crisv32f_model_crisv32_u_multiply (current_cpu, idesc, 0, referenced, in_Rs, in_Rd);
   3422   1.1  christos   }
   3423   1.1  christos   {
   3424   1.1  christos     int referenced = 0;
   3425   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3426   1.1  christos     INT in_Rd = -1;
   3427   1.1  christos     INT in_Rs = -1;
   3428   1.1  christos     INT out_Rd = -1;
   3429   1.1  christos     in_Rd = FLD (in_Rd);
   3430   1.1  christos     in_Rs = FLD (in_Rs);
   3431   1.1  christos     out_Rd = FLD (out_Rd);
   3432   1.1  christos     referenced |= 1 << 0;
   3433   1.1  christos     referenced |= 1 << 1;
   3434   1.1  christos     referenced |= 1 << 2;
   3435   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3436   1.1  christos   }
   3437   1.1  christos   return cycles;
   3438   1.1  christos #undef FLD
   3439   1.1  christos }
   3440   1.1  christos 
   3441   1.1  christos static int
   3442   1.1  christos model_crisv32_muls_w (SIM_CPU *current_cpu, void *sem_arg)
   3443   1.1  christos {
   3444   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3445   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3446   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3447   1.1  christos   int cycles = 0;
   3448   1.1  christos   {
   3449   1.1  christos     int referenced = 0;
   3450   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3451   1.1  christos     INT in_Rs = -1;
   3452   1.1  christos     INT in_Rd = -1;
   3453   1.1  christos     in_Rs = FLD (in_Rs);
   3454   1.1  christos     in_Rd = FLD (in_Rd);
   3455   1.1  christos     referenced |= 1 << 0;
   3456   1.1  christos     referenced |= 1 << 1;
   3457   1.1  christos     cycles += crisv32f_model_crisv32_u_multiply (current_cpu, idesc, 0, referenced, in_Rs, in_Rd);
   3458   1.1  christos   }
   3459   1.1  christos   {
   3460   1.1  christos     int referenced = 0;
   3461   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3462   1.1  christos     INT in_Rd = -1;
   3463   1.1  christos     INT in_Rs = -1;
   3464   1.1  christos     INT out_Rd = -1;
   3465   1.1  christos     in_Rd = FLD (in_Rd);
   3466   1.1  christos     in_Rs = FLD (in_Rs);
   3467   1.1  christos     out_Rd = FLD (out_Rd);
   3468   1.1  christos     referenced |= 1 << 0;
   3469   1.1  christos     referenced |= 1 << 1;
   3470   1.1  christos     referenced |= 1 << 2;
   3471   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3472   1.1  christos   }
   3473   1.1  christos   return cycles;
   3474   1.1  christos #undef FLD
   3475   1.1  christos }
   3476   1.1  christos 
   3477   1.1  christos static int
   3478   1.1  christos model_crisv32_muls_d (SIM_CPU *current_cpu, void *sem_arg)
   3479   1.1  christos {
   3480   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3481   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3482   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3483   1.1  christos   int cycles = 0;
   3484   1.1  christos   {
   3485   1.1  christos     int referenced = 0;
   3486   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3487   1.1  christos     INT in_Rs = -1;
   3488   1.1  christos     INT in_Rd = -1;
   3489   1.1  christos     in_Rs = FLD (in_Rs);
   3490   1.1  christos     in_Rd = FLD (in_Rd);
   3491   1.1  christos     referenced |= 1 << 0;
   3492   1.1  christos     referenced |= 1 << 1;
   3493   1.1  christos     cycles += crisv32f_model_crisv32_u_multiply (current_cpu, idesc, 0, referenced, in_Rs, in_Rd);
   3494   1.1  christos   }
   3495   1.1  christos   {
   3496   1.1  christos     int referenced = 0;
   3497   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3498   1.1  christos     INT in_Rd = -1;
   3499   1.1  christos     INT in_Rs = -1;
   3500   1.1  christos     INT out_Rd = -1;
   3501   1.1  christos     in_Rd = FLD (in_Rd);
   3502   1.1  christos     in_Rs = FLD (in_Rs);
   3503   1.1  christos     out_Rd = FLD (out_Rd);
   3504   1.1  christos     referenced |= 1 << 0;
   3505   1.1  christos     referenced |= 1 << 1;
   3506   1.1  christos     referenced |= 1 << 2;
   3507   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3508   1.1  christos   }
   3509   1.1  christos   return cycles;
   3510   1.1  christos #undef FLD
   3511   1.1  christos }
   3512   1.1  christos 
   3513   1.1  christos static int
   3514   1.1  christos model_crisv32_mulu_b (SIM_CPU *current_cpu, void *sem_arg)
   3515   1.1  christos {
   3516   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3517   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3518   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3519   1.1  christos   int cycles = 0;
   3520   1.1  christos   {
   3521   1.1  christos     int referenced = 0;
   3522   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3523   1.1  christos     INT in_Rs = -1;
   3524   1.1  christos     INT in_Rd = -1;
   3525   1.1  christos     in_Rs = FLD (in_Rs);
   3526   1.1  christos     in_Rd = FLD (in_Rd);
   3527   1.1  christos     referenced |= 1 << 0;
   3528   1.1  christos     referenced |= 1 << 1;
   3529   1.1  christos     cycles += crisv32f_model_crisv32_u_multiply (current_cpu, idesc, 0, referenced, in_Rs, in_Rd);
   3530   1.1  christos   }
   3531   1.1  christos   {
   3532   1.1  christos     int referenced = 0;
   3533   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3534   1.1  christos     INT in_Rd = -1;
   3535   1.1  christos     INT in_Rs = -1;
   3536   1.1  christos     INT out_Rd = -1;
   3537   1.1  christos     in_Rd = FLD (in_Rd);
   3538   1.1  christos     in_Rs = FLD (in_Rs);
   3539   1.1  christos     out_Rd = FLD (out_Rd);
   3540   1.1  christos     referenced |= 1 << 0;
   3541   1.1  christos     referenced |= 1 << 1;
   3542   1.1  christos     referenced |= 1 << 2;
   3543   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3544   1.1  christos   }
   3545   1.1  christos   return cycles;
   3546   1.1  christos #undef FLD
   3547   1.1  christos }
   3548   1.1  christos 
   3549   1.1  christos static int
   3550   1.1  christos model_crisv32_mulu_w (SIM_CPU *current_cpu, void *sem_arg)
   3551   1.1  christos {
   3552   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3553   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3554   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3555   1.1  christos   int cycles = 0;
   3556   1.1  christos   {
   3557   1.1  christos     int referenced = 0;
   3558   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3559   1.1  christos     INT in_Rs = -1;
   3560   1.1  christos     INT in_Rd = -1;
   3561   1.1  christos     in_Rs = FLD (in_Rs);
   3562   1.1  christos     in_Rd = FLD (in_Rd);
   3563   1.1  christos     referenced |= 1 << 0;
   3564   1.1  christos     referenced |= 1 << 1;
   3565   1.1  christos     cycles += crisv32f_model_crisv32_u_multiply (current_cpu, idesc, 0, referenced, in_Rs, in_Rd);
   3566   1.1  christos   }
   3567   1.1  christos   {
   3568   1.1  christos     int referenced = 0;
   3569   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3570   1.1  christos     INT in_Rd = -1;
   3571   1.1  christos     INT in_Rs = -1;
   3572   1.1  christos     INT out_Rd = -1;
   3573   1.1  christos     in_Rd = FLD (in_Rd);
   3574   1.1  christos     in_Rs = FLD (in_Rs);
   3575   1.1  christos     out_Rd = FLD (out_Rd);
   3576   1.1  christos     referenced |= 1 << 0;
   3577   1.1  christos     referenced |= 1 << 1;
   3578   1.1  christos     referenced |= 1 << 2;
   3579   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3580   1.1  christos   }
   3581   1.1  christos   return cycles;
   3582   1.1  christos #undef FLD
   3583   1.1  christos }
   3584   1.1  christos 
   3585   1.1  christos static int
   3586   1.1  christos model_crisv32_mulu_d (SIM_CPU *current_cpu, void *sem_arg)
   3587   1.1  christos {
   3588   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3589   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3590   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3591   1.1  christos   int cycles = 0;
   3592   1.1  christos   {
   3593   1.1  christos     int referenced = 0;
   3594   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3595   1.1  christos     INT in_Rs = -1;
   3596   1.1  christos     INT in_Rd = -1;
   3597   1.1  christos     in_Rs = FLD (in_Rs);
   3598   1.1  christos     in_Rd = FLD (in_Rd);
   3599   1.1  christos     referenced |= 1 << 0;
   3600   1.1  christos     referenced |= 1 << 1;
   3601   1.1  christos     cycles += crisv32f_model_crisv32_u_multiply (current_cpu, idesc, 0, referenced, in_Rs, in_Rd);
   3602   1.1  christos   }
   3603   1.1  christos   {
   3604   1.1  christos     int referenced = 0;
   3605   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3606   1.1  christos     INT in_Rd = -1;
   3607   1.1  christos     INT in_Rs = -1;
   3608   1.1  christos     INT out_Rd = -1;
   3609   1.1  christos     in_Rd = FLD (in_Rd);
   3610   1.1  christos     in_Rs = FLD (in_Rs);
   3611   1.1  christos     out_Rd = FLD (out_Rd);
   3612   1.1  christos     referenced |= 1 << 0;
   3613   1.1  christos     referenced |= 1 << 1;
   3614   1.1  christos     referenced |= 1 << 2;
   3615   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3616   1.1  christos   }
   3617   1.1  christos   return cycles;
   3618   1.1  christos #undef FLD
   3619   1.1  christos }
   3620   1.1  christos 
   3621   1.1  christos static int
   3622   1.1  christos model_crisv32_mcp (SIM_CPU *current_cpu, void *sem_arg)
   3623   1.1  christos {
   3624   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   3625   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3626   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3627   1.1  christos   int cycles = 0;
   3628   1.1  christos   {
   3629   1.1  christos     int referenced = 0;
   3630   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3631   1.1  christos     INT in_Rd = -1;
   3632   1.1  christos     INT in_Rs = -1;
   3633   1.1  christos     INT out_Rd = -1;
   3634   1.1  christos     in_Rs = FLD (in_Rs);
   3635   1.1  christos     referenced |= 1 << 1;
   3636   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3637   1.1  christos   }
   3638   1.1  christos   return cycles;
   3639   1.1  christos #undef FLD
   3640   1.1  christos }
   3641   1.1  christos 
   3642   1.1  christos static int
   3643   1.1  christos model_crisv32_dstep (SIM_CPU *current_cpu, void *sem_arg)
   3644   1.1  christos {
   3645   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3646   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3647   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3648   1.1  christos   int cycles = 0;
   3649   1.1  christos   {
   3650   1.1  christos     int referenced = 0;
   3651   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3652   1.1  christos     INT in_Rd = -1;
   3653   1.1  christos     INT in_Rs = -1;
   3654   1.1  christos     INT out_Rd = -1;
   3655   1.1  christos     in_Rd = FLD (in_Rd);
   3656   1.1  christos     in_Rs = FLD (in_Rs);
   3657   1.1  christos     out_Rd = FLD (out_Rd);
   3658   1.1  christos     referenced |= 1 << 0;
   3659   1.1  christos     referenced |= 1 << 1;
   3660   1.1  christos     referenced |= 1 << 2;
   3661   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3662   1.1  christos   }
   3663   1.1  christos   return cycles;
   3664   1.1  christos #undef FLD
   3665   1.1  christos }
   3666   1.1  christos 
   3667   1.1  christos static int
   3668   1.1  christos model_crisv32_abs (SIM_CPU *current_cpu, void *sem_arg)
   3669   1.1  christos {
   3670   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   3671   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3672   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3673   1.1  christos   int cycles = 0;
   3674   1.1  christos   {
   3675   1.1  christos     int referenced = 0;
   3676   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3677   1.1  christos     INT in_Rd = -1;
   3678   1.1  christos     INT in_Rs = -1;
   3679   1.1  christos     INT out_Rd = -1;
   3680   1.1  christos     in_Rs = FLD (in_Rs);
   3681   1.1  christos     out_Rd = FLD (out_Rd);
   3682   1.1  christos     referenced |= 1 << 1;
   3683   1.1  christos     referenced |= 1 << 2;
   3684   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3685   1.1  christos   }
   3686   1.1  christos   return cycles;
   3687   1.1  christos #undef FLD
   3688   1.1  christos }
   3689   1.1  christos 
   3690   1.1  christos static int
   3691   1.1  christos model_crisv32_and_b_r (SIM_CPU *current_cpu, void *sem_arg)
   3692   1.1  christos {
   3693   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3694   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3695   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3696   1.1  christos   int cycles = 0;
   3697   1.1  christos   {
   3698   1.1  christos     int referenced = 0;
   3699   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3700   1.1  christos     INT in_Rd = -1;
   3701   1.1  christos     INT in_Rs = -1;
   3702   1.1  christos     INT out_Rd = -1;
   3703   1.1  christos     in_Rd = FLD (in_Rd);
   3704   1.1  christos     in_Rs = FLD (in_Rs);
   3705   1.1  christos     referenced |= 1 << 0;
   3706   1.1  christos     referenced |= 1 << 1;
   3707   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3708   1.1  christos   }
   3709   1.1  christos   return cycles;
   3710   1.1  christos #undef FLD
   3711   1.1  christos }
   3712   1.1  christos 
   3713   1.1  christos static int
   3714   1.1  christos model_crisv32_and_w_r (SIM_CPU *current_cpu, void *sem_arg)
   3715   1.1  christos {
   3716   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3717   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3718   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3719   1.1  christos   int cycles = 0;
   3720   1.1  christos   {
   3721   1.1  christos     int referenced = 0;
   3722   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3723   1.1  christos     INT in_Rd = -1;
   3724   1.1  christos     INT in_Rs = -1;
   3725   1.1  christos     INT out_Rd = -1;
   3726   1.1  christos     in_Rd = FLD (in_Rd);
   3727   1.1  christos     in_Rs = FLD (in_Rs);
   3728   1.1  christos     referenced |= 1 << 0;
   3729   1.1  christos     referenced |= 1 << 1;
   3730   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3731   1.1  christos   }
   3732   1.1  christos   return cycles;
   3733   1.1  christos #undef FLD
   3734   1.1  christos }
   3735   1.1  christos 
   3736   1.1  christos static int
   3737   1.1  christos model_crisv32_and_d_r (SIM_CPU *current_cpu, void *sem_arg)
   3738   1.1  christos {
   3739   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3740   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3741   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3742   1.1  christos   int cycles = 0;
   3743   1.1  christos   {
   3744   1.1  christos     int referenced = 0;
   3745   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3746   1.1  christos     INT in_Rd = -1;
   3747   1.1  christos     INT in_Rs = -1;
   3748   1.1  christos     INT out_Rd = -1;
   3749   1.1  christos     in_Rd = FLD (in_Rd);
   3750   1.1  christos     in_Rs = FLD (in_Rs);
   3751   1.1  christos     referenced |= 1 << 0;
   3752   1.1  christos     referenced |= 1 << 1;
   3753   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3754   1.1  christos   }
   3755   1.1  christos   return cycles;
   3756   1.1  christos #undef FLD
   3757   1.1  christos }
   3758   1.1  christos 
   3759   1.1  christos static int
   3760   1.1  christos model_crisv32_and_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   3761   1.1  christos {
   3762   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   3763   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3764   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3765   1.1  christos   int cycles = 0;
   3766   1.1  christos   {
   3767   1.1  christos     int referenced = 0;
   3768   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3769   1.1  christos     INT in_Rs = -1;
   3770   1.1  christos     in_Rs = FLD (in_Rs);
   3771   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   3772   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3773   1.1  christos   }
   3774   1.1  christos   {
   3775   1.1  christos     int referenced = 0;
   3776   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3777   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   3778   1.1  christos   }
   3779   1.1  christos   {
   3780   1.1  christos     int referenced = 0;
   3781   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3782   1.1  christos     INT in_Rd = -1;
   3783   1.1  christos     INT in_Rs = -1;
   3784   1.1  christos     INT out_Rd = -1;
   3785   1.1  christos     in_Rd = FLD (in_Rd);
   3786   1.1  christos     in_Rs = FLD (in_Rs);
   3787   1.1  christos     referenced |= 1 << 0;
   3788   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   3789   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   3790   1.1  christos   }
   3791   1.1  christos   return cycles;
   3792   1.1  christos #undef FLD
   3793   1.1  christos }
   3794   1.1  christos 
   3795   1.1  christos static int
   3796   1.1  christos model_crisv32_and_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   3797   1.1  christos {
   3798   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   3799   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3800   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3801   1.1  christos   int cycles = 0;
   3802   1.1  christos   {
   3803   1.1  christos     int referenced = 0;
   3804   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3805   1.1  christos     INT in_Rs = -1;
   3806   1.1  christos     in_Rs = FLD (in_Rs);
   3807   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   3808   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3809   1.1  christos   }
   3810   1.1  christos   {
   3811   1.1  christos     int referenced = 0;
   3812   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3813   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   3814   1.1  christos   }
   3815   1.1  christos   {
   3816   1.1  christos     int referenced = 0;
   3817   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3818   1.1  christos     INT in_Rd = -1;
   3819   1.1  christos     INT in_Rs = -1;
   3820   1.1  christos     INT out_Rd = -1;
   3821   1.1  christos     in_Rd = FLD (in_Rd);
   3822   1.1  christos     in_Rs = FLD (in_Rs);
   3823   1.1  christos     referenced |= 1 << 0;
   3824   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   3825   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   3826   1.1  christos   }
   3827   1.1  christos   return cycles;
   3828   1.1  christos #undef FLD
   3829   1.1  christos }
   3830   1.1  christos 
   3831   1.1  christos static int
   3832   1.1  christos model_crisv32_and_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   3833   1.1  christos {
   3834   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   3835   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3836   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3837   1.1  christos   int cycles = 0;
   3838   1.1  christos   {
   3839   1.1  christos     int referenced = 0;
   3840   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3841   1.1  christos     INT in_Rs = -1;
   3842   1.1  christos     in_Rs = FLD (in_Rs);
   3843   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   3844   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   3845   1.1  christos   }
   3846   1.1  christos   {
   3847   1.1  christos     int referenced = 0;
   3848   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3849   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   3850   1.1  christos   }
   3851   1.1  christos   {
   3852   1.1  christos     int referenced = 0;
   3853   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3854   1.1  christos     INT in_Rd = -1;
   3855   1.1  christos     INT in_Rs = -1;
   3856   1.1  christos     INT out_Rd = -1;
   3857   1.1  christos     in_Rd = FLD (in_Rd);
   3858   1.1  christos     in_Rs = FLD (in_Rs);
   3859   1.1  christos     referenced |= 1 << 0;
   3860   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   3861   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   3862   1.1  christos   }
   3863   1.1  christos   return cycles;
   3864   1.1  christos #undef FLD
   3865   1.1  christos }
   3866   1.1  christos 
   3867   1.1  christos static int
   3868   1.1  christos model_crisv32_andcbr (SIM_CPU *current_cpu, void *sem_arg)
   3869   1.1  christos {
   3870   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   3871   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3872   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3873   1.1  christos   int cycles = 0;
   3874   1.1  christos   {
   3875   1.1  christos     int referenced = 0;
   3876   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3877   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   3878   1.1  christos   }
   3879   1.1  christos   {
   3880   1.1  christos     int referenced = 0;
   3881   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3882   1.1  christos     INT in_Rd = -1;
   3883   1.1  christos     INT in_Rs = -1;
   3884   1.1  christos     INT out_Rd = -1;
   3885   1.1  christos     in_Rd = FLD (in_Rd);
   3886   1.1  christos     referenced |= 1 << 0;
   3887   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3888   1.1  christos   }
   3889   1.1  christos   return cycles;
   3890   1.1  christos #undef FLD
   3891   1.1  christos }
   3892   1.1  christos 
   3893   1.1  christos static int
   3894   1.1  christos model_crisv32_andcwr (SIM_CPU *current_cpu, void *sem_arg)
   3895   1.1  christos {
   3896   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   3897   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3898   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3899   1.1  christos   int cycles = 0;
   3900   1.1  christos   {
   3901   1.1  christos     int referenced = 0;
   3902   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3903   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   3904   1.1  christos   }
   3905   1.1  christos   {
   3906   1.1  christos     int referenced = 0;
   3907   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3908   1.1  christos     INT in_Rd = -1;
   3909   1.1  christos     INT in_Rs = -1;
   3910   1.1  christos     INT out_Rd = -1;
   3911   1.1  christos     in_Rd = FLD (in_Rd);
   3912   1.1  christos     referenced |= 1 << 0;
   3913   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3914   1.1  christos   }
   3915   1.1  christos   return cycles;
   3916   1.1  christos #undef FLD
   3917   1.1  christos }
   3918   1.1  christos 
   3919   1.1  christos static int
   3920   1.1  christos model_crisv32_andcdr (SIM_CPU *current_cpu, void *sem_arg)
   3921   1.1  christos {
   3922   1.1  christos #define FLD(f) abuf->fields.sfmt_addcdr.f
   3923   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3924   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3925   1.1  christos   int cycles = 0;
   3926   1.1  christos   {
   3927   1.1  christos     int referenced = 0;
   3928   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3929   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   3930   1.1  christos   }
   3931   1.1  christos   {
   3932   1.1  christos     int referenced = 0;
   3933   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3934   1.1  christos     INT in_Rd = -1;
   3935   1.1  christos     INT in_Rs = -1;
   3936   1.1  christos     INT out_Rd = -1;
   3937   1.1  christos     in_Rd = FLD (in_Rd);
   3938   1.1  christos     referenced |= 1 << 0;
   3939   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   3940   1.1  christos   }
   3941   1.1  christos   return cycles;
   3942   1.1  christos #undef FLD
   3943   1.1  christos }
   3944   1.1  christos 
   3945   1.1  christos static int
   3946   1.1  christos model_crisv32_andq (SIM_CPU *current_cpu, void *sem_arg)
   3947   1.1  christos {
   3948   1.1  christos #define FLD(f) abuf->fields.sfmt_andq.f
   3949   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3950   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3951   1.1  christos   int cycles = 0;
   3952   1.1  christos   {
   3953   1.1  christos     int referenced = 0;
   3954   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3955   1.1  christos     INT in_Rd = -1;
   3956   1.1  christos     INT in_Rs = -1;
   3957   1.1  christos     INT out_Rd = -1;
   3958   1.1  christos     in_Rd = FLD (in_Rd);
   3959   1.1  christos     referenced |= 1 << 0;
   3960   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3961   1.1  christos   }
   3962   1.1  christos   return cycles;
   3963   1.1  christos #undef FLD
   3964   1.1  christos }
   3965   1.1  christos 
   3966   1.1  christos static int
   3967   1.1  christos model_crisv32_orr_b_r (SIM_CPU *current_cpu, void *sem_arg)
   3968   1.1  christos {
   3969   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3970   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3971   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3972   1.1  christos   int cycles = 0;
   3973   1.1  christos   {
   3974   1.1  christos     int referenced = 0;
   3975   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3976   1.1  christos     INT in_Rd = -1;
   3977   1.1  christos     INT in_Rs = -1;
   3978   1.1  christos     INT out_Rd = -1;
   3979   1.1  christos     in_Rd = FLD (in_Rd);
   3980   1.1  christos     in_Rs = FLD (in_Rs);
   3981   1.1  christos     referenced |= 1 << 0;
   3982   1.1  christos     referenced |= 1 << 1;
   3983   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   3984   1.1  christos   }
   3985   1.1  christos   return cycles;
   3986   1.1  christos #undef FLD
   3987   1.1  christos }
   3988   1.1  christos 
   3989   1.1  christos static int
   3990   1.1  christos model_crisv32_orr_w_r (SIM_CPU *current_cpu, void *sem_arg)
   3991   1.1  christos {
   3992   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   3993   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   3994   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   3995   1.1  christos   int cycles = 0;
   3996   1.1  christos   {
   3997   1.1  christos     int referenced = 0;
   3998   1.1  christos     int UNUSED insn_referenced = abuf->written;
   3999   1.1  christos     INT in_Rd = -1;
   4000   1.1  christos     INT in_Rs = -1;
   4001   1.1  christos     INT out_Rd = -1;
   4002   1.1  christos     in_Rd = FLD (in_Rd);
   4003   1.1  christos     in_Rs = FLD (in_Rs);
   4004   1.1  christos     referenced |= 1 << 0;
   4005   1.1  christos     referenced |= 1 << 1;
   4006   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4007   1.1  christos   }
   4008   1.1  christos   return cycles;
   4009   1.1  christos #undef FLD
   4010   1.1  christos }
   4011   1.1  christos 
   4012   1.1  christos static int
   4013   1.1  christos model_crisv32_orr_d_r (SIM_CPU *current_cpu, void *sem_arg)
   4014   1.1  christos {
   4015   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4016   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4017   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4018   1.1  christos   int cycles = 0;
   4019   1.1  christos   {
   4020   1.1  christos     int referenced = 0;
   4021   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4022   1.1  christos     INT in_Rd = -1;
   4023   1.1  christos     INT in_Rs = -1;
   4024   1.1  christos     INT out_Rd = -1;
   4025   1.1  christos     in_Rd = FLD (in_Rd);
   4026   1.1  christos     in_Rs = FLD (in_Rs);
   4027   1.1  christos     referenced |= 1 << 0;
   4028   1.1  christos     referenced |= 1 << 1;
   4029   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4030   1.1  christos   }
   4031   1.1  christos   return cycles;
   4032   1.1  christos #undef FLD
   4033   1.1  christos }
   4034   1.1  christos 
   4035   1.1  christos static int
   4036   1.1  christos model_crisv32_or_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   4037   1.1  christos {
   4038   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   4039   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4040   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4041   1.1  christos   int cycles = 0;
   4042   1.1  christos   {
   4043   1.1  christos     int referenced = 0;
   4044   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4045   1.1  christos     INT in_Rs = -1;
   4046   1.1  christos     in_Rs = FLD (in_Rs);
   4047   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   4048   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   4049   1.1  christos   }
   4050   1.1  christos   {
   4051   1.1  christos     int referenced = 0;
   4052   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4053   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   4054   1.1  christos   }
   4055   1.1  christos   {
   4056   1.1  christos     int referenced = 0;
   4057   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4058   1.1  christos     INT in_Rd = -1;
   4059   1.1  christos     INT in_Rs = -1;
   4060   1.1  christos     INT out_Rd = -1;
   4061   1.1  christos     in_Rd = FLD (in_Rd);
   4062   1.1  christos     in_Rs = FLD (in_Rs);
   4063   1.1  christos     referenced |= 1 << 0;
   4064   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   4065   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4066   1.1  christos   }
   4067   1.1  christos   return cycles;
   4068   1.1  christos #undef FLD
   4069   1.1  christos }
   4070   1.1  christos 
   4071   1.1  christos static int
   4072   1.1  christos model_crisv32_or_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   4073   1.1  christos {
   4074   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   4075   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4076   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4077   1.1  christos   int cycles = 0;
   4078   1.1  christos   {
   4079   1.1  christos     int referenced = 0;
   4080   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4081   1.1  christos     INT in_Rs = -1;
   4082   1.1  christos     in_Rs = FLD (in_Rs);
   4083   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   4084   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   4085   1.1  christos   }
   4086   1.1  christos   {
   4087   1.1  christos     int referenced = 0;
   4088   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4089   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   4090   1.1  christos   }
   4091   1.1  christos   {
   4092   1.1  christos     int referenced = 0;
   4093   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4094   1.1  christos     INT in_Rd = -1;
   4095   1.1  christos     INT in_Rs = -1;
   4096   1.1  christos     INT out_Rd = -1;
   4097   1.1  christos     in_Rd = FLD (in_Rd);
   4098   1.1  christos     in_Rs = FLD (in_Rs);
   4099   1.1  christos     referenced |= 1 << 0;
   4100   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   4101   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4102   1.1  christos   }
   4103   1.1  christos   return cycles;
   4104   1.1  christos #undef FLD
   4105   1.1  christos }
   4106   1.1  christos 
   4107   1.1  christos static int
   4108   1.1  christos model_crisv32_or_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   4109   1.1  christos {
   4110   1.1  christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
   4111   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4112   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4113   1.1  christos   int cycles = 0;
   4114   1.1  christos   {
   4115   1.1  christos     int referenced = 0;
   4116   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4117   1.1  christos     INT in_Rs = -1;
   4118   1.1  christos     in_Rs = FLD (in_Rs);
   4119   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   4120   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   4121   1.1  christos   }
   4122   1.1  christos   {
   4123   1.1  christos     int referenced = 0;
   4124   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4125   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   4126   1.1  christos   }
   4127   1.1  christos   {
   4128   1.1  christos     int referenced = 0;
   4129   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4130   1.1  christos     INT in_Rd = -1;
   4131   1.1  christos     INT in_Rs = -1;
   4132   1.1  christos     INT out_Rd = -1;
   4133   1.1  christos     in_Rd = FLD (in_Rd);
   4134   1.1  christos     in_Rs = FLD (in_Rs);
   4135   1.1  christos     referenced |= 1 << 0;
   4136   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   4137   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4138   1.1  christos   }
   4139   1.1  christos   return cycles;
   4140   1.1  christos #undef FLD
   4141   1.1  christos }
   4142   1.1  christos 
   4143   1.1  christos static int
   4144   1.1  christos model_crisv32_orcbr (SIM_CPU *current_cpu, void *sem_arg)
   4145   1.1  christos {
   4146   1.1  christos #define FLD(f) abuf->fields.sfmt_addcbr.f
   4147   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4148   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4149   1.1  christos   int cycles = 0;
   4150   1.1  christos   {
   4151   1.1  christos     int referenced = 0;
   4152   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4153   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   4154   1.1  christos   }
   4155   1.1  christos   {
   4156   1.1  christos     int referenced = 0;
   4157   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4158   1.1  christos     INT in_Rd = -1;
   4159   1.1  christos     INT in_Rs = -1;
   4160   1.1  christos     INT out_Rd = -1;
   4161   1.1  christos     in_Rd = FLD (in_Rd);
   4162   1.1  christos     referenced |= 1 << 0;
   4163   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   4164   1.1  christos   }
   4165   1.1  christos   return cycles;
   4166   1.1  christos #undef FLD
   4167   1.1  christos }
   4168   1.1  christos 
   4169   1.1  christos static int
   4170   1.1  christos model_crisv32_orcwr (SIM_CPU *current_cpu, void *sem_arg)
   4171   1.1  christos {
   4172   1.1  christos #define FLD(f) abuf->fields.sfmt_addcwr.f
   4173   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4174   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4175   1.1  christos   int cycles = 0;
   4176   1.1  christos   {
   4177   1.1  christos     int referenced = 0;
   4178   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4179   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   4180   1.1  christos   }
   4181   1.1  christos   {
   4182   1.1  christos     int referenced = 0;
   4183   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4184   1.1  christos     INT in_Rd = -1;
   4185   1.1  christos     INT in_Rs = -1;
   4186   1.1  christos     INT out_Rd = -1;
   4187   1.1  christos     in_Rd = FLD (in_Rd);
   4188   1.1  christos     referenced |= 1 << 0;
   4189   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   4190   1.1  christos   }
   4191   1.1  christos   return cycles;
   4192   1.1  christos #undef FLD
   4193   1.1  christos }
   4194   1.1  christos 
   4195   1.1  christos static int
   4196   1.1  christos model_crisv32_orcdr (SIM_CPU *current_cpu, void *sem_arg)
   4197   1.1  christos {
   4198   1.1  christos #define FLD(f) abuf->fields.sfmt_addcdr.f
   4199   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4200   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4201   1.1  christos   int cycles = 0;
   4202   1.1  christos   {
   4203   1.1  christos     int referenced = 0;
   4204   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4205   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   4206   1.1  christos   }
   4207   1.1  christos   {
   4208   1.1  christos     int referenced = 0;
   4209   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4210   1.1  christos     INT in_Rd = -1;
   4211   1.1  christos     INT in_Rs = -1;
   4212   1.1  christos     INT out_Rd = -1;
   4213   1.1  christos     in_Rd = FLD (in_Rd);
   4214   1.1  christos     referenced |= 1 << 0;
   4215   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   4216   1.1  christos   }
   4217   1.1  christos   return cycles;
   4218   1.1  christos #undef FLD
   4219   1.1  christos }
   4220   1.1  christos 
   4221   1.1  christos static int
   4222   1.1  christos model_crisv32_orq (SIM_CPU *current_cpu, void *sem_arg)
   4223   1.1  christos {
   4224   1.1  christos #define FLD(f) abuf->fields.sfmt_andq.f
   4225   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4226   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4227   1.1  christos   int cycles = 0;
   4228   1.1  christos   {
   4229   1.1  christos     int referenced = 0;
   4230   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4231   1.1  christos     INT in_Rd = -1;
   4232   1.1  christos     INT in_Rs = -1;
   4233   1.1  christos     INT out_Rd = -1;
   4234   1.1  christos     in_Rd = FLD (in_Rd);
   4235   1.1  christos     referenced |= 1 << 0;
   4236   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4237   1.1  christos   }
   4238   1.1  christos   return cycles;
   4239   1.1  christos #undef FLD
   4240   1.1  christos }
   4241   1.1  christos 
   4242   1.1  christos static int
   4243   1.1  christos model_crisv32_xor (SIM_CPU *current_cpu, void *sem_arg)
   4244   1.1  christos {
   4245   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   4246   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4247   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4248   1.1  christos   int cycles = 0;
   4249   1.1  christos   {
   4250   1.1  christos     int referenced = 0;
   4251   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4252   1.1  christos     INT in_Rd = -1;
   4253   1.1  christos     INT in_Rs = -1;
   4254   1.1  christos     INT out_Rd = -1;
   4255   1.1  christos     in_Rd = FLD (in_Rd);
   4256   1.1  christos     in_Rs = FLD (in_Rs);
   4257   1.1  christos     out_Rd = FLD (out_Rd);
   4258   1.1  christos     referenced |= 1 << 0;
   4259   1.1  christos     referenced |= 1 << 1;
   4260   1.1  christos     referenced |= 1 << 2;
   4261   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4262   1.1  christos   }
   4263   1.1  christos   return cycles;
   4264   1.1  christos #undef FLD
   4265   1.1  christos }
   4266   1.1  christos 
   4267   1.1  christos static int
   4268   1.1  christos model_crisv32_swap (SIM_CPU *current_cpu, void *sem_arg)
   4269   1.1  christos {
   4270   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   4271   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4272   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4273   1.1  christos   int cycles = 0;
   4274   1.1  christos   {
   4275   1.1  christos     int referenced = 0;
   4276   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4277   1.1  christos     INT in_Rd = -1;
   4278   1.1  christos     INT in_Rs = -1;
   4279   1.1  christos     INT out_Rd = -1;
   4280   1.1  christos     in_Rs = FLD (in_Rs);
   4281   1.1  christos     referenced |= 1 << 1;
   4282   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4283   1.1  christos   }
   4284   1.1  christos   return cycles;
   4285   1.1  christos #undef FLD
   4286   1.1  christos }
   4287   1.1  christos 
   4288   1.1  christos static int
   4289   1.1  christos model_crisv32_asrr_b_r (SIM_CPU *current_cpu, void *sem_arg)
   4290   1.1  christos {
   4291   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4292   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4293   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4294   1.1  christos   int cycles = 0;
   4295   1.1  christos   {
   4296   1.1  christos     int referenced = 0;
   4297   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4298   1.1  christos     INT in_Rd = -1;
   4299   1.1  christos     INT in_Rs = -1;
   4300   1.1  christos     INT out_Rd = -1;
   4301   1.1  christos     in_Rd = FLD (in_Rd);
   4302   1.1  christos     in_Rs = FLD (in_Rs);
   4303   1.1  christos     referenced |= 1 << 0;
   4304   1.1  christos     referenced |= 1 << 1;
   4305   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4306   1.1  christos   }
   4307   1.1  christos   return cycles;
   4308   1.1  christos #undef FLD
   4309   1.1  christos }
   4310   1.1  christos 
   4311   1.1  christos static int
   4312   1.1  christos model_crisv32_asrr_w_r (SIM_CPU *current_cpu, void *sem_arg)
   4313   1.1  christos {
   4314   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4315   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4316   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4317   1.1  christos   int cycles = 0;
   4318   1.1  christos   {
   4319   1.1  christos     int referenced = 0;
   4320   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4321   1.1  christos     INT in_Rd = -1;
   4322   1.1  christos     INT in_Rs = -1;
   4323   1.1  christos     INT out_Rd = -1;
   4324   1.1  christos     in_Rd = FLD (in_Rd);
   4325   1.1  christos     in_Rs = FLD (in_Rs);
   4326   1.1  christos     referenced |= 1 << 0;
   4327   1.1  christos     referenced |= 1 << 1;
   4328   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4329   1.1  christos   }
   4330   1.1  christos   return cycles;
   4331   1.1  christos #undef FLD
   4332   1.1  christos }
   4333   1.1  christos 
   4334   1.1  christos static int
   4335   1.1  christos model_crisv32_asrr_d_r (SIM_CPU *current_cpu, void *sem_arg)
   4336   1.1  christos {
   4337   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4338   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4339   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4340   1.1  christos   int cycles = 0;
   4341   1.1  christos   {
   4342   1.1  christos     int referenced = 0;
   4343   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4344   1.1  christos     INT in_Rd = -1;
   4345   1.1  christos     INT in_Rs = -1;
   4346   1.1  christos     INT out_Rd = -1;
   4347   1.1  christos     in_Rd = FLD (in_Rd);
   4348   1.1  christos     in_Rs = FLD (in_Rs);
   4349   1.1  christos     referenced |= 1 << 0;
   4350   1.1  christos     referenced |= 1 << 1;
   4351   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4352   1.1  christos   }
   4353   1.1  christos   return cycles;
   4354   1.1  christos #undef FLD
   4355   1.1  christos }
   4356   1.1  christos 
   4357   1.1  christos static int
   4358   1.1  christos model_crisv32_asrq (SIM_CPU *current_cpu, void *sem_arg)
   4359   1.1  christos {
   4360   1.1  christos #define FLD(f) abuf->fields.sfmt_asrq.f
   4361   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4362   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4363   1.1  christos   int cycles = 0;
   4364   1.1  christos   {
   4365   1.1  christos     int referenced = 0;
   4366   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4367   1.1  christos     INT in_Rd = -1;
   4368   1.1  christos     INT in_Rs = -1;
   4369   1.1  christos     INT out_Rd = -1;
   4370   1.1  christos     in_Rd = FLD (in_Rd);
   4371   1.1  christos     out_Rd = FLD (out_Rd);
   4372   1.1  christos     referenced |= 1 << 0;
   4373   1.1  christos     referenced |= 1 << 2;
   4374   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4375   1.1  christos   }
   4376   1.1  christos   return cycles;
   4377   1.1  christos #undef FLD
   4378   1.1  christos }
   4379   1.1  christos 
   4380   1.1  christos static int
   4381   1.1  christos model_crisv32_lsrr_b_r (SIM_CPU *current_cpu, void *sem_arg)
   4382   1.1  christos {
   4383   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4384   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4385   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4386   1.1  christos   int cycles = 0;
   4387   1.1  christos   {
   4388   1.1  christos     int referenced = 0;
   4389   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4390   1.1  christos     INT in_Rd = -1;
   4391   1.1  christos     INT in_Rs = -1;
   4392   1.1  christos     INT out_Rd = -1;
   4393   1.1  christos     in_Rd = FLD (in_Rd);
   4394   1.1  christos     in_Rs = FLD (in_Rs);
   4395   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   4396   1.1  christos     referenced |= 1 << 1;
   4397   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4398   1.1  christos   }
   4399   1.1  christos   return cycles;
   4400   1.1  christos #undef FLD
   4401   1.1  christos }
   4402   1.1  christos 
   4403   1.1  christos static int
   4404   1.1  christos model_crisv32_lsrr_w_r (SIM_CPU *current_cpu, void *sem_arg)
   4405   1.1  christos {
   4406   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4407   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4408   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4409   1.1  christos   int cycles = 0;
   4410   1.1  christos   {
   4411   1.1  christos     int referenced = 0;
   4412   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4413   1.1  christos     INT in_Rd = -1;
   4414   1.1  christos     INT in_Rs = -1;
   4415   1.1  christos     INT out_Rd = -1;
   4416   1.1  christos     in_Rd = FLD (in_Rd);
   4417   1.1  christos     in_Rs = FLD (in_Rs);
   4418   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   4419   1.1  christos     referenced |= 1 << 1;
   4420   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4421   1.1  christos   }
   4422   1.1  christos   return cycles;
   4423   1.1  christos #undef FLD
   4424   1.1  christos }
   4425   1.1  christos 
   4426   1.1  christos static int
   4427   1.1  christos model_crisv32_lsrr_d_r (SIM_CPU *current_cpu, void *sem_arg)
   4428   1.1  christos {
   4429   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4430   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4431   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4432   1.1  christos   int cycles = 0;
   4433   1.1  christos   {
   4434   1.1  christos     int referenced = 0;
   4435   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4436   1.1  christos     INT in_Rd = -1;
   4437   1.1  christos     INT in_Rs = -1;
   4438   1.1  christos     INT out_Rd = -1;
   4439   1.1  christos     in_Rd = FLD (in_Rd);
   4440   1.1  christos     in_Rs = FLD (in_Rs);
   4441   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   4442   1.1  christos     referenced |= 1 << 1;
   4443   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4444   1.1  christos   }
   4445   1.1  christos   return cycles;
   4446   1.1  christos #undef FLD
   4447   1.1  christos }
   4448   1.1  christos 
   4449   1.1  christos static int
   4450   1.1  christos model_crisv32_lsrq (SIM_CPU *current_cpu, void *sem_arg)
   4451   1.1  christos {
   4452   1.1  christos #define FLD(f) abuf->fields.sfmt_asrq.f
   4453   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4454   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4455   1.1  christos   int cycles = 0;
   4456   1.1  christos   {
   4457   1.1  christos     int referenced = 0;
   4458   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4459   1.1  christos     INT in_Rd = -1;
   4460   1.1  christos     INT in_Rs = -1;
   4461   1.1  christos     INT out_Rd = -1;
   4462   1.1  christos     in_Rd = FLD (in_Rd);
   4463   1.1  christos     out_Rd = FLD (out_Rd);
   4464   1.1  christos     referenced |= 1 << 0;
   4465   1.1  christos     referenced |= 1 << 2;
   4466   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4467   1.1  christos   }
   4468   1.1  christos   return cycles;
   4469   1.1  christos #undef FLD
   4470   1.1  christos }
   4471   1.1  christos 
   4472   1.1  christos static int
   4473   1.1  christos model_crisv32_lslr_b_r (SIM_CPU *current_cpu, void *sem_arg)
   4474   1.1  christos {
   4475   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4476   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4477   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4478   1.1  christos   int cycles = 0;
   4479   1.1  christos   {
   4480   1.1  christos     int referenced = 0;
   4481   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4482   1.1  christos     INT in_Rd = -1;
   4483   1.1  christos     INT in_Rs = -1;
   4484   1.1  christos     INT out_Rd = -1;
   4485   1.1  christos     in_Rd = FLD (in_Rd);
   4486   1.1  christos     in_Rs = FLD (in_Rs);
   4487   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   4488   1.1  christos     referenced |= 1 << 1;
   4489   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4490   1.1  christos   }
   4491   1.1  christos   return cycles;
   4492   1.1  christos #undef FLD
   4493   1.1  christos }
   4494   1.1  christos 
   4495   1.1  christos static int
   4496   1.1  christos model_crisv32_lslr_w_r (SIM_CPU *current_cpu, void *sem_arg)
   4497   1.1  christos {
   4498   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4499   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4500   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4501   1.1  christos   int cycles = 0;
   4502   1.1  christos   {
   4503   1.1  christos     int referenced = 0;
   4504   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4505   1.1  christos     INT in_Rd = -1;
   4506   1.1  christos     INT in_Rs = -1;
   4507   1.1  christos     INT out_Rd = -1;
   4508   1.1  christos     in_Rd = FLD (in_Rd);
   4509   1.1  christos     in_Rs = FLD (in_Rs);
   4510   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   4511   1.1  christos     referenced |= 1 << 1;
   4512   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4513   1.1  christos   }
   4514   1.1  christos   return cycles;
   4515   1.1  christos #undef FLD
   4516   1.1  christos }
   4517   1.1  christos 
   4518   1.1  christos static int
   4519   1.1  christos model_crisv32_lslr_d_r (SIM_CPU *current_cpu, void *sem_arg)
   4520   1.1  christos {
   4521   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   4522   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4523   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4524   1.1  christos   int cycles = 0;
   4525   1.1  christos   {
   4526   1.1  christos     int referenced = 0;
   4527   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4528   1.1  christos     INT in_Rd = -1;
   4529   1.1  christos     INT in_Rs = -1;
   4530   1.1  christos     INT out_Rd = -1;
   4531   1.1  christos     in_Rd = FLD (in_Rd);
   4532   1.1  christos     in_Rs = FLD (in_Rs);
   4533   1.1  christos     if (insn_referenced & (1 << 0)) referenced |= 1 << 0;
   4534   1.1  christos     referenced |= 1 << 1;
   4535   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4536   1.1  christos   }
   4537   1.1  christos   return cycles;
   4538   1.1  christos #undef FLD
   4539   1.1  christos }
   4540   1.1  christos 
   4541   1.1  christos static int
   4542   1.1  christos model_crisv32_lslq (SIM_CPU *current_cpu, void *sem_arg)
   4543   1.1  christos {
   4544   1.1  christos #define FLD(f) abuf->fields.sfmt_asrq.f
   4545   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4546   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4547   1.1  christos   int cycles = 0;
   4548   1.1  christos   {
   4549   1.1  christos     int referenced = 0;
   4550   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4551   1.1  christos     INT in_Rd = -1;
   4552   1.1  christos     INT in_Rs = -1;
   4553   1.1  christos     INT out_Rd = -1;
   4554   1.1  christos     in_Rd = FLD (in_Rd);
   4555   1.1  christos     out_Rd = FLD (out_Rd);
   4556   1.1  christos     referenced |= 1 << 0;
   4557   1.1  christos     referenced |= 1 << 2;
   4558   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4559   1.1  christos   }
   4560   1.1  christos   return cycles;
   4561   1.1  christos #undef FLD
   4562   1.1  christos }
   4563   1.1  christos 
   4564   1.1  christos static int
   4565   1.1  christos model_crisv32_btst (SIM_CPU *current_cpu, void *sem_arg)
   4566   1.1  christos {
   4567   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   4568   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4569   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4570   1.1  christos   int cycles = 0;
   4571   1.1  christos   {
   4572   1.1  christos     int referenced = 0;
   4573   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4574   1.1  christos     INT in_Rd = -1;
   4575   1.1  christos     INT in_Rs = -1;
   4576   1.1  christos     INT out_Rd = -1;
   4577   1.1  christos     in_Rd = FLD (in_Rd);
   4578   1.1  christos     in_Rs = FLD (in_Rs);
   4579   1.1  christos     referenced |= 1 << 0;
   4580   1.1  christos     referenced |= 1 << 1;
   4581   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4582   1.1  christos   }
   4583   1.1  christos   return cycles;
   4584   1.1  christos #undef FLD
   4585   1.1  christos }
   4586   1.1  christos 
   4587   1.1  christos static int
   4588   1.1  christos model_crisv32_btstq (SIM_CPU *current_cpu, void *sem_arg)
   4589   1.1  christos {
   4590   1.1  christos #define FLD(f) abuf->fields.sfmt_asrq.f
   4591   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4592   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4593   1.1  christos   int cycles = 0;
   4594   1.1  christos   {
   4595   1.1  christos     int referenced = 0;
   4596   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4597   1.1  christos     INT in_Rd = -1;
   4598   1.1  christos     INT in_Rs = -1;
   4599   1.1  christos     INT out_Rd = -1;
   4600   1.1  christos     in_Rd = FLD (in_Rd);
   4601   1.1  christos     referenced |= 1 << 0;
   4602   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4603   1.1  christos   }
   4604   1.1  christos   return cycles;
   4605   1.1  christos #undef FLD
   4606   1.1  christos }
   4607   1.1  christos 
   4608   1.1  christos static int
   4609   1.1  christos model_crisv32_setf (SIM_CPU *current_cpu, void *sem_arg)
   4610   1.1  christos {
   4611   1.1  christos #define FLD(f) abuf->fields.sfmt_setf.f
   4612   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4613   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4614   1.1  christos   int cycles = 0;
   4615   1.1  christos   {
   4616   1.1  christos     int referenced = 0;
   4617   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4618   1.1  christos     INT in_Rd = -1;
   4619   1.1  christos     INT in_Rs = -1;
   4620   1.1  christos     INT out_Rd = -1;
   4621   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4622   1.1  christos   }
   4623   1.1  christos   return cycles;
   4624   1.1  christos #undef FLD
   4625   1.1  christos }
   4626   1.1  christos 
   4627   1.1  christos static int
   4628   1.1  christos model_crisv32_clearf (SIM_CPU *current_cpu, void *sem_arg)
   4629   1.1  christos {
   4630   1.1  christos #define FLD(f) abuf->fields.sfmt_setf.f
   4631   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4632   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4633   1.1  christos   int cycles = 0;
   4634   1.1  christos   {
   4635   1.1  christos     int referenced = 0;
   4636   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4637   1.1  christos     INT in_Rd = -1;
   4638   1.1  christos     INT in_Rs = -1;
   4639   1.1  christos     INT out_Rd = -1;
   4640   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4641   1.1  christos   }
   4642   1.1  christos   return cycles;
   4643   1.1  christos #undef FLD
   4644   1.1  christos }
   4645   1.1  christos 
   4646   1.1  christos static int
   4647   1.1  christos model_crisv32_rfe (SIM_CPU *current_cpu, void *sem_arg)
   4648   1.1  christos {
   4649   1.1  christos #define FLD(f) abuf->fields.sfmt_rfe.f
   4650   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4651   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4652   1.1  christos   int cycles = 0;
   4653   1.1  christos   {
   4654   1.1  christos     int referenced = 0;
   4655   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4656   1.1  christos     INT in_Rd = -1;
   4657   1.1  christos     INT in_Rs = -1;
   4658   1.1  christos     INT out_Rd = -1;
   4659   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4660   1.1  christos   }
   4661   1.1  christos   return cycles;
   4662   1.1  christos #undef FLD
   4663   1.1  christos }
   4664   1.1  christos 
   4665   1.1  christos static int
   4666   1.1  christos model_crisv32_sfe (SIM_CPU *current_cpu, void *sem_arg)
   4667   1.1  christos {
   4668   1.1  christos #define FLD(f) abuf->fields.sfmt_rfe.f
   4669   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4670   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4671   1.1  christos   int cycles = 0;
   4672   1.1  christos   {
   4673   1.1  christos     int referenced = 0;
   4674   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4675   1.1  christos     INT in_Rd = -1;
   4676   1.1  christos     INT in_Rs = -1;
   4677   1.1  christos     INT out_Rd = -1;
   4678   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4679   1.1  christos   }
   4680   1.1  christos   return cycles;
   4681   1.1  christos #undef FLD
   4682   1.1  christos }
   4683   1.1  christos 
   4684   1.1  christos static int
   4685   1.1  christos model_crisv32_rfg (SIM_CPU *current_cpu, void *sem_arg)
   4686   1.1  christos {
   4687   1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   4688   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4689   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4690   1.1  christos   int cycles = 0;
   4691   1.1  christos   {
   4692   1.1  christos     int referenced = 0;
   4693   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4694   1.1  christos     INT in_Rd = -1;
   4695   1.1  christos     INT in_Rs = -1;
   4696   1.1  christos     INT out_Rd = -1;
   4697   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4698   1.1  christos   }
   4699   1.1  christos   return cycles;
   4700   1.1  christos #undef FLD
   4701   1.1  christos }
   4702   1.1  christos 
   4703   1.1  christos static int
   4704   1.1  christos model_crisv32_rfn (SIM_CPU *current_cpu, void *sem_arg)
   4705   1.1  christos {
   4706   1.1  christos #define FLD(f) abuf->fields.sfmt_rfe.f
   4707   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4708   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4709   1.1  christos   int cycles = 0;
   4710   1.1  christos   {
   4711   1.1  christos     int referenced = 0;
   4712   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4713   1.1  christos     INT in_Rd = -1;
   4714   1.1  christos     INT in_Rs = -1;
   4715   1.1  christos     INT out_Rd = -1;
   4716   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4717   1.1  christos   }
   4718   1.1  christos   return cycles;
   4719   1.1  christos #undef FLD
   4720   1.1  christos }
   4721   1.1  christos 
   4722   1.1  christos static int
   4723   1.1  christos model_crisv32_halt (SIM_CPU *current_cpu, void *sem_arg)
   4724   1.1  christos {
   4725   1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   4726   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4727   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4728   1.1  christos   int cycles = 0;
   4729   1.1  christos   {
   4730   1.1  christos     int referenced = 0;
   4731   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4732   1.1  christos     INT in_Rd = -1;
   4733   1.1  christos     INT in_Rs = -1;
   4734   1.1  christos     INT out_Rd = -1;
   4735   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   4736   1.1  christos   }
   4737   1.1  christos   return cycles;
   4738   1.1  christos #undef FLD
   4739   1.1  christos }
   4740   1.1  christos 
   4741   1.1  christos static int
   4742   1.1  christos model_crisv32_bcc_b (SIM_CPU *current_cpu, void *sem_arg)
   4743   1.1  christos {
   4744   1.1  christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
   4745   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4746   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4747   1.1  christos   int cycles = 0;
   4748   1.1  christos   {
   4749   1.1  christos     int referenced = 0;
   4750   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4751   1.1  christos     cycles += crisv32f_model_crisv32_u_branch (current_cpu, idesc, 0, referenced);
   4752   1.1  christos   }
   4753   1.1  christos   {
   4754   1.1  christos     int referenced = 0;
   4755   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4756   1.1  christos     INT in_Rd = -1;
   4757   1.1  christos     INT in_Rs = -1;
   4758   1.1  christos     INT out_Rd = -1;
   4759   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   4760   1.1  christos   }
   4761   1.1  christos   return cycles;
   4762   1.1  christos #undef FLD
   4763   1.1  christos }
   4764   1.1  christos 
   4765   1.1  christos static int
   4766   1.1  christos model_crisv32_ba_b (SIM_CPU *current_cpu, void *sem_arg)
   4767   1.1  christos {
   4768   1.1  christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
   4769   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4770   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4771   1.1  christos   int cycles = 0;
   4772   1.1  christos   {
   4773   1.1  christos     int referenced = 0;
   4774   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4775   1.1  christos     INT out_Pd = -1;
   4776   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 0, referenced, out_Pd);
   4777   1.1  christos   }
   4778   1.1  christos   {
   4779   1.1  christos     int referenced = 0;
   4780   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4781   1.1  christos     INT in_Rd = -1;
   4782   1.1  christos     INT in_Rs = -1;
   4783   1.1  christos     INT out_Rd = -1;
   4784   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   4785   1.1  christos   }
   4786   1.1  christos   return cycles;
   4787   1.1  christos #undef FLD
   4788   1.1  christos }
   4789   1.1  christos 
   4790   1.1  christos static int
   4791   1.1  christos model_crisv32_bcc_w (SIM_CPU *current_cpu, void *sem_arg)
   4792   1.1  christos {
   4793   1.1  christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
   4794   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4795   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4796   1.1  christos   int cycles = 0;
   4797   1.1  christos   {
   4798   1.1  christos     int referenced = 0;
   4799   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4800   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   4801   1.1  christos   }
   4802   1.1  christos   {
   4803   1.1  christos     int referenced = 0;
   4804   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4805   1.1  christos     cycles += crisv32f_model_crisv32_u_branch (current_cpu, idesc, 1, referenced);
   4806   1.1  christos   }
   4807   1.1  christos   {
   4808   1.1  christos     int referenced = 0;
   4809   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4810   1.1  christos     INT in_Rd = -1;
   4811   1.1  christos     INT in_Rs = -1;
   4812   1.1  christos     INT out_Rd = -1;
   4813   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4814   1.1  christos   }
   4815   1.1  christos   return cycles;
   4816   1.1  christos #undef FLD
   4817   1.1  christos }
   4818   1.1  christos 
   4819   1.1  christos static int
   4820   1.1  christos model_crisv32_ba_w (SIM_CPU *current_cpu, void *sem_arg)
   4821   1.1  christos {
   4822   1.1  christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
   4823   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4824   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4825   1.1  christos   int cycles = 0;
   4826   1.1  christos   {
   4827   1.1  christos     int referenced = 0;
   4828   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4829   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   4830   1.1  christos   }
   4831   1.1  christos   {
   4832   1.1  christos     int referenced = 0;
   4833   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4834   1.1  christos     INT out_Pd = -1;
   4835   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 1, referenced, out_Pd);
   4836   1.1  christos   }
   4837   1.1  christos   {
   4838   1.1  christos     int referenced = 0;
   4839   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4840   1.1  christos     INT in_Rd = -1;
   4841   1.1  christos     INT in_Rs = -1;
   4842   1.1  christos     INT out_Rd = -1;
   4843   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4844   1.1  christos   }
   4845   1.1  christos   return cycles;
   4846   1.1  christos #undef FLD
   4847   1.1  christos }
   4848   1.1  christos 
   4849   1.1  christos static int
   4850   1.1  christos model_crisv32_jas_r (SIM_CPU *current_cpu, void *sem_arg)
   4851   1.1  christos {
   4852   1.1  christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
   4853   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4854   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4855   1.1  christos   int cycles = 0;
   4856   1.1  christos   {
   4857   1.1  christos     int referenced = 0;
   4858   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4859   1.1  christos     INT in_Rs = -1;
   4860   1.1  christos     in_Rs = FLD (in_Rs);
   4861   1.1  christos     referenced |= 1 << 0;
   4862   1.1  christos     cycles += crisv32f_model_crisv32_u_jump_r (current_cpu, idesc, 0, referenced, in_Rs);
   4863   1.1  christos   }
   4864   1.1  christos   {
   4865   1.1  christos     int referenced = 0;
   4866   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4867   1.1  christos     INT out_Pd = -1;
   4868   1.1  christos     out_Pd = FLD (out_Pd);
   4869   1.1  christos     referenced |= 1 << 0;
   4870   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 1, referenced, out_Pd);
   4871   1.1  christos   }
   4872   1.1  christos   {
   4873   1.1  christos     int referenced = 0;
   4874   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4875   1.1  christos     INT in_Rd = -1;
   4876   1.1  christos     INT in_Rs = -1;
   4877   1.1  christos     INT out_Rd = -1;
   4878   1.1  christos     in_Rs = FLD (in_Rs);
   4879   1.1  christos     referenced |= 1 << 1;
   4880   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4881   1.1  christos   }
   4882   1.1  christos   return cycles;
   4883   1.1  christos #undef FLD
   4884   1.1  christos }
   4885   1.1  christos 
   4886   1.1  christos static int
   4887   1.1  christos model_crisv32_jas_c (SIM_CPU *current_cpu, void *sem_arg)
   4888   1.1  christos {
   4889   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   4890   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4891   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4892   1.1  christos   int cycles = 0;
   4893   1.1  christos   {
   4894   1.1  christos     int referenced = 0;
   4895   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4896   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   4897   1.1  christos   }
   4898   1.1  christos   {
   4899   1.1  christos     int referenced = 0;
   4900   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4901   1.1  christos     INT out_Pd = -1;
   4902   1.1  christos     out_Pd = FLD (out_Pd);
   4903   1.1  christos     referenced |= 1 << 0;
   4904   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 1, referenced, out_Pd);
   4905   1.1  christos   }
   4906   1.1  christos   {
   4907   1.1  christos     int referenced = 0;
   4908   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4909   1.1  christos     INT in_Rd = -1;
   4910   1.1  christos     INT in_Rs = -1;
   4911   1.1  christos     INT out_Rd = -1;
   4912   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4913   1.1  christos   }
   4914   1.1  christos   return cycles;
   4915   1.1  christos #undef FLD
   4916   1.1  christos }
   4917   1.1  christos 
   4918   1.1  christos static int
   4919   1.1  christos model_crisv32_jump_p (SIM_CPU *current_cpu, void *sem_arg)
   4920   1.1  christos {
   4921   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   4922   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4923   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4924   1.1  christos   int cycles = 0;
   4925   1.1  christos   {
   4926   1.1  christos     int referenced = 0;
   4927   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4928   1.1  christos     INT in_Ps = -1;
   4929   1.1  christos     in_Ps = FLD (in_Ps);
   4930   1.1  christos     referenced |= 1 << 0;
   4931   1.1  christos     cycles += crisv32f_model_crisv32_u_jump_sr (current_cpu, idesc, 0, referenced, in_Ps);
   4932   1.1  christos   }
   4933   1.1  christos   {
   4934   1.1  christos     int referenced = 0;
   4935   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4936   1.1  christos     INT in_Rd = -1;
   4937   1.1  christos     INT in_Rs = -1;
   4938   1.1  christos     INT out_Rd = -1;
   4939   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   4940   1.1  christos   }
   4941   1.1  christos   return cycles;
   4942   1.1  christos #undef FLD
   4943   1.1  christos }
   4944   1.1  christos 
   4945   1.1  christos static int
   4946   1.1  christos model_crisv32_bas_c (SIM_CPU *current_cpu, void *sem_arg)
   4947   1.1  christos {
   4948   1.1  christos #define FLD(f) abuf->fields.sfmt_bas_c.f
   4949   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4950   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4951   1.1  christos   int cycles = 0;
   4952   1.1  christos   {
   4953   1.1  christos     int referenced = 0;
   4954   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4955   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   4956   1.1  christos   }
   4957   1.1  christos   {
   4958   1.1  christos     int referenced = 0;
   4959   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4960   1.1  christos     INT out_Pd = -1;
   4961   1.1  christos     out_Pd = FLD (out_Pd);
   4962   1.1  christos     referenced |= 1 << 0;
   4963   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 1, referenced, out_Pd);
   4964   1.1  christos   }
   4965   1.1  christos   {
   4966   1.1  christos     int referenced = 0;
   4967   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4968   1.1  christos     INT in_Rd = -1;
   4969   1.1  christos     INT in_Rs = -1;
   4970   1.1  christos     INT out_Rd = -1;
   4971   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   4972   1.1  christos   }
   4973   1.1  christos   return cycles;
   4974   1.1  christos #undef FLD
   4975   1.1  christos }
   4976   1.1  christos 
   4977   1.1  christos static int
   4978   1.1  christos model_crisv32_jasc_r (SIM_CPU *current_cpu, void *sem_arg)
   4979   1.1  christos {
   4980   1.1  christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
   4981   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   4982   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   4983   1.1  christos   int cycles = 0;
   4984   1.1  christos   {
   4985   1.1  christos     int referenced = 0;
   4986   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4987   1.1  christos     INT in_Rs = -1;
   4988   1.1  christos     in_Rs = FLD (in_Rs);
   4989   1.1  christos     referenced |= 1 << 0;
   4990   1.1  christos     cycles += crisv32f_model_crisv32_u_jump_r (current_cpu, idesc, 0, referenced, in_Rs);
   4991   1.1  christos   }
   4992   1.1  christos   {
   4993   1.1  christos     int referenced = 0;
   4994   1.1  christos     int UNUSED insn_referenced = abuf->written;
   4995   1.1  christos     cycles += crisv32f_model_crisv32_u_skip4 (current_cpu, idesc, 1, referenced);
   4996   1.1  christos   }
   4997   1.1  christos   {
   4998   1.1  christos     int referenced = 0;
   4999   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5000   1.1  christos     INT out_Pd = -1;
   5001   1.1  christos     out_Pd = FLD (out_Pd);
   5002   1.1  christos     referenced |= 1 << 0;
   5003   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 2, referenced, out_Pd);
   5004   1.1  christos   }
   5005   1.1  christos   {
   5006   1.1  christos     int referenced = 0;
   5007   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5008   1.1  christos     INT in_Rd = -1;
   5009   1.1  christos     INT in_Rs = -1;
   5010   1.1  christos     INT out_Rd = -1;
   5011   1.1  christos     in_Rs = FLD (in_Rs);
   5012   1.1  christos     referenced |= 1 << 1;
   5013   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 3, referenced, in_Rd, in_Rs, out_Rd);
   5014   1.1  christos   }
   5015   1.1  christos   return cycles;
   5016   1.1  christos #undef FLD
   5017   1.1  christos }
   5018   1.1  christos 
   5019   1.1  christos static int
   5020   1.1  christos model_crisv32_jasc_c (SIM_CPU *current_cpu, void *sem_arg)
   5021   1.1  christos {
   5022   1.1  christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
   5023   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5024   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5025   1.1  christos   int cycles = 0;
   5026   1.1  christos   {
   5027   1.1  christos     int referenced = 0;
   5028   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5029   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   5030   1.1  christos   }
   5031   1.1  christos   {
   5032   1.1  christos     int referenced = 0;
   5033   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5034   1.1  christos     cycles += crisv32f_model_crisv32_u_skip4 (current_cpu, idesc, 1, referenced);
   5035   1.1  christos   }
   5036   1.1  christos   {
   5037   1.1  christos     int referenced = 0;
   5038   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5039   1.1  christos     INT out_Pd = -1;
   5040   1.1  christos     out_Pd = FLD (out_Pd);
   5041   1.1  christos     referenced |= 1 << 0;
   5042   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 2, referenced, out_Pd);
   5043   1.1  christos   }
   5044   1.1  christos   {
   5045   1.1  christos     int referenced = 0;
   5046   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5047   1.1  christos     INT in_Rd = -1;
   5048   1.1  christos     INT in_Rs = -1;
   5049   1.1  christos     INT out_Rd = -1;
   5050   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 3, referenced, in_Rd, in_Rs, out_Rd);
   5051   1.1  christos   }
   5052   1.1  christos   return cycles;
   5053   1.1  christos #undef FLD
   5054   1.1  christos }
   5055   1.1  christos 
   5056   1.1  christos static int
   5057   1.1  christos model_crisv32_basc_c (SIM_CPU *current_cpu, void *sem_arg)
   5058   1.1  christos {
   5059   1.1  christos #define FLD(f) abuf->fields.sfmt_bas_c.f
   5060   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5061   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5062   1.1  christos   int cycles = 0;
   5063   1.1  christos   {
   5064   1.1  christos     int referenced = 0;
   5065   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5066   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   5067   1.1  christos   }
   5068   1.1  christos   {
   5069   1.1  christos     int referenced = 0;
   5070   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5071   1.1  christos     cycles += crisv32f_model_crisv32_u_skip4 (current_cpu, idesc, 1, referenced);
   5072   1.1  christos   }
   5073   1.1  christos   {
   5074   1.1  christos     int referenced = 0;
   5075   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5076   1.1  christos     INT out_Pd = -1;
   5077   1.1  christos     out_Pd = FLD (out_Pd);
   5078   1.1  christos     referenced |= 1 << 0;
   5079   1.1  christos     cycles += crisv32f_model_crisv32_u_jump (current_cpu, idesc, 2, referenced, out_Pd);
   5080   1.1  christos   }
   5081   1.1  christos   {
   5082   1.1  christos     int referenced = 0;
   5083   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5084   1.1  christos     INT in_Rd = -1;
   5085   1.1  christos     INT in_Rs = -1;
   5086   1.1  christos     INT out_Rd = -1;
   5087   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 3, referenced, in_Rd, in_Rs, out_Rd);
   5088   1.1  christos   }
   5089   1.1  christos   return cycles;
   5090   1.1  christos #undef FLD
   5091   1.1  christos }
   5092   1.1  christos 
   5093   1.1  christos static int
   5094   1.1  christos model_crisv32_break (SIM_CPU *current_cpu, void *sem_arg)
   5095   1.1  christos {
   5096   1.1  christos #define FLD(f) abuf->fields.sfmt_break.f
   5097   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5098   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5099   1.1  christos   int cycles = 0;
   5100   1.1  christos   {
   5101   1.1  christos     int referenced = 0;
   5102   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5103   1.1  christos     INT in_Rd = -1;
   5104   1.1  christos     INT in_Rs = -1;
   5105   1.1  christos     INT out_Rd = -1;
   5106   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5107   1.1  christos   }
   5108   1.1  christos   return cycles;
   5109   1.1  christos #undef FLD
   5110   1.1  christos }
   5111   1.1  christos 
   5112   1.1  christos static int
   5113   1.1  christos model_crisv32_bound_r_b_r (SIM_CPU *current_cpu, void *sem_arg)
   5114   1.1  christos {
   5115   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5116   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5117   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5118   1.1  christos   int cycles = 0;
   5119   1.1  christos   {
   5120   1.1  christos     int referenced = 0;
   5121   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5122   1.1  christos     INT in_Rd = -1;
   5123   1.1  christos     INT in_Rs = -1;
   5124   1.1  christos     INT out_Rd = -1;
   5125   1.1  christos     in_Rd = FLD (in_Rd);
   5126   1.1  christos     in_Rs = FLD (in_Rs);
   5127   1.1  christos     out_Rd = FLD (out_Rd);
   5128   1.1  christos     referenced |= 1 << 0;
   5129   1.1  christos     referenced |= 1 << 1;
   5130   1.1  christos     referenced |= 1 << 2;
   5131   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5132   1.1  christos   }
   5133   1.1  christos   return cycles;
   5134   1.1  christos #undef FLD
   5135   1.1  christos }
   5136   1.1  christos 
   5137   1.1  christos static int
   5138   1.1  christos model_crisv32_bound_r_w_r (SIM_CPU *current_cpu, void *sem_arg)
   5139   1.1  christos {
   5140   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5141   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5142   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5143   1.1  christos   int cycles = 0;
   5144   1.1  christos   {
   5145   1.1  christos     int referenced = 0;
   5146   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5147   1.1  christos     INT in_Rd = -1;
   5148   1.1  christos     INT in_Rs = -1;
   5149   1.1  christos     INT out_Rd = -1;
   5150   1.1  christos     in_Rd = FLD (in_Rd);
   5151   1.1  christos     in_Rs = FLD (in_Rs);
   5152   1.1  christos     out_Rd = FLD (out_Rd);
   5153   1.1  christos     referenced |= 1 << 0;
   5154   1.1  christos     referenced |= 1 << 1;
   5155   1.1  christos     referenced |= 1 << 2;
   5156   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5157   1.1  christos   }
   5158   1.1  christos   return cycles;
   5159   1.1  christos #undef FLD
   5160   1.1  christos }
   5161   1.1  christos 
   5162   1.1  christos static int
   5163   1.1  christos model_crisv32_bound_r_d_r (SIM_CPU *current_cpu, void *sem_arg)
   5164   1.1  christos {
   5165   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5166   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5167   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5168   1.1  christos   int cycles = 0;
   5169   1.1  christos   {
   5170   1.1  christos     int referenced = 0;
   5171   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5172   1.1  christos     INT in_Rd = -1;
   5173   1.1  christos     INT in_Rs = -1;
   5174   1.1  christos     INT out_Rd = -1;
   5175   1.1  christos     in_Rd = FLD (in_Rd);
   5176   1.1  christos     in_Rs = FLD (in_Rs);
   5177   1.1  christos     out_Rd = FLD (out_Rd);
   5178   1.1  christos     referenced |= 1 << 0;
   5179   1.1  christos     referenced |= 1 << 1;
   5180   1.1  christos     referenced |= 1 << 2;
   5181   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5182   1.1  christos   }
   5183   1.1  christos   return cycles;
   5184   1.1  christos #undef FLD
   5185   1.1  christos }
   5186   1.1  christos 
   5187   1.1  christos static int
   5188   1.1  christos model_crisv32_bound_cb (SIM_CPU *current_cpu, void *sem_arg)
   5189   1.1  christos {
   5190   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
   5191   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5192   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5193   1.1  christos   int cycles = 0;
   5194   1.1  christos   {
   5195   1.1  christos     int referenced = 0;
   5196   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5197   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   5198   1.1  christos   }
   5199   1.1  christos   {
   5200   1.1  christos     int referenced = 0;
   5201   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5202   1.1  christos     INT in_Rd = -1;
   5203   1.1  christos     INT in_Rs = -1;
   5204   1.1  christos     INT out_Rd = -1;
   5205   1.1  christos     in_Rd = FLD (in_Rd);
   5206   1.1  christos     out_Rd = FLD (out_Rd);
   5207   1.1  christos     referenced |= 1 << 0;
   5208   1.1  christos     referenced |= 1 << 2;
   5209   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   5210   1.1  christos   }
   5211   1.1  christos   return cycles;
   5212   1.1  christos #undef FLD
   5213   1.1  christos }
   5214   1.1  christos 
   5215   1.1  christos static int
   5216   1.1  christos model_crisv32_bound_cw (SIM_CPU *current_cpu, void *sem_arg)
   5217   1.1  christos {
   5218   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
   5219   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5220   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5221   1.1  christos   int cycles = 0;
   5222   1.1  christos   {
   5223   1.1  christos     int referenced = 0;
   5224   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5225   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   5226   1.1  christos   }
   5227   1.1  christos   {
   5228   1.1  christos     int referenced = 0;
   5229   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5230   1.1  christos     INT in_Rd = -1;
   5231   1.1  christos     INT in_Rs = -1;
   5232   1.1  christos     INT out_Rd = -1;
   5233   1.1  christos     in_Rd = FLD (in_Rd);
   5234   1.1  christos     out_Rd = FLD (out_Rd);
   5235   1.1  christos     referenced |= 1 << 0;
   5236   1.1  christos     referenced |= 1 << 2;
   5237   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   5238   1.1  christos   }
   5239   1.1  christos   return cycles;
   5240   1.1  christos #undef FLD
   5241   1.1  christos }
   5242   1.1  christos 
   5243   1.1  christos static int
   5244   1.1  christos model_crisv32_bound_cd (SIM_CPU *current_cpu, void *sem_arg)
   5245   1.1  christos {
   5246   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
   5247   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5248   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5249   1.1  christos   int cycles = 0;
   5250   1.1  christos   {
   5251   1.1  christos     int referenced = 0;
   5252   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5253   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   5254   1.1  christos   }
   5255   1.1  christos   {
   5256   1.1  christos     int referenced = 0;
   5257   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5258   1.1  christos     INT in_Rd = -1;
   5259   1.1  christos     INT in_Rs = -1;
   5260   1.1  christos     INT out_Rd = -1;
   5261   1.1  christos     in_Rd = FLD (in_Rd);
   5262   1.1  christos     out_Rd = FLD (out_Rd);
   5263   1.1  christos     referenced |= 1 << 0;
   5264   1.1  christos     referenced |= 1 << 2;
   5265   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   5266   1.1  christos   }
   5267   1.1  christos   return cycles;
   5268   1.1  christos #undef FLD
   5269   1.1  christos }
   5270   1.1  christos 
   5271   1.1  christos static int
   5272   1.1  christos model_crisv32_scc (SIM_CPU *current_cpu, void *sem_arg)
   5273   1.1  christos {
   5274   1.1  christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
   5275   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5276   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5277   1.1  christos   int cycles = 0;
   5278   1.1  christos   {
   5279   1.1  christos     int referenced = 0;
   5280   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5281   1.1  christos     INT in_Rd = -1;
   5282   1.1  christos     INT in_Rs = -1;
   5283   1.1  christos     INT out_Rd = -1;
   5284   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5285   1.1  christos   }
   5286   1.1  christos   return cycles;
   5287   1.1  christos #undef FLD
   5288   1.1  christos }
   5289   1.1  christos 
   5290   1.1  christos static int
   5291   1.1  christos model_crisv32_lz (SIM_CPU *current_cpu, void *sem_arg)
   5292   1.1  christos {
   5293   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5294   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5295   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5296   1.1  christos   int cycles = 0;
   5297   1.1  christos   {
   5298   1.1  christos     int referenced = 0;
   5299   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5300   1.1  christos     INT in_Rd = -1;
   5301   1.1  christos     INT in_Rs = -1;
   5302   1.1  christos     INT out_Rd = -1;
   5303   1.1  christos     in_Rs = FLD (in_Rs);
   5304   1.1  christos     out_Rd = FLD (out_Rd);
   5305   1.1  christos     referenced |= 1 << 1;
   5306   1.1  christos     referenced |= 1 << 2;
   5307   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5308   1.1  christos   }
   5309   1.1  christos   return cycles;
   5310   1.1  christos #undef FLD
   5311   1.1  christos }
   5312   1.1  christos 
   5313   1.1  christos static int
   5314   1.1  christos model_crisv32_addoq (SIM_CPU *current_cpu, void *sem_arg)
   5315   1.1  christos {
   5316   1.1  christos #define FLD(f) abuf->fields.sfmt_addoq.f
   5317   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5318   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5319   1.1  christos   int cycles = 0;
   5320   1.1  christos   {
   5321   1.1  christos     int referenced = 0;
   5322   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5323   1.1  christos     INT in_Rd = -1;
   5324   1.1  christos     INT in_Rs = -1;
   5325   1.1  christos     INT out_Rd = -1;
   5326   1.1  christos     in_Rd = FLD (in_Rd);
   5327   1.1  christos     referenced |= 1 << 0;
   5328   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5329   1.1  christos   }
   5330   1.1  christos   return cycles;
   5331   1.1  christos #undef FLD
   5332   1.1  christos }
   5333   1.1  christos 
   5334   1.1  christos static int
   5335   1.1  christos model_crisv32_addo_m_b_m (SIM_CPU *current_cpu, void *sem_arg)
   5336   1.1  christos {
   5337   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   5338   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5339   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5340   1.1  christos   int cycles = 0;
   5341   1.1  christos   {
   5342   1.1  christos     int referenced = 0;
   5343   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5344   1.1  christos     INT in_Rs = -1;
   5345   1.1  christos     in_Rs = FLD (in_Rs);
   5346   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   5347   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   5348   1.1  christos   }
   5349   1.1  christos   {
   5350   1.1  christos     int referenced = 0;
   5351   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5352   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   5353   1.1  christos   }
   5354   1.1  christos   {
   5355   1.1  christos     int referenced = 0;
   5356   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5357   1.1  christos     INT in_Rd = -1;
   5358   1.1  christos     INT in_Rs = -1;
   5359   1.1  christos     INT out_Rd = -1;
   5360   1.1  christos     in_Rd = FLD (in_Rd);
   5361   1.1  christos     in_Rs = FLD (in_Rs);
   5362   1.1  christos     referenced |= 1 << 0;
   5363   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   5364   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   5365   1.1  christos   }
   5366   1.1  christos   return cycles;
   5367   1.1  christos #undef FLD
   5368   1.1  christos }
   5369   1.1  christos 
   5370   1.1  christos static int
   5371   1.1  christos model_crisv32_addo_m_w_m (SIM_CPU *current_cpu, void *sem_arg)
   5372   1.1  christos {
   5373   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   5374   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5375   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5376   1.1  christos   int cycles = 0;
   5377   1.1  christos   {
   5378   1.1  christos     int referenced = 0;
   5379   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5380   1.1  christos     INT in_Rs = -1;
   5381   1.1  christos     in_Rs = FLD (in_Rs);
   5382   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   5383   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   5384   1.1  christos   }
   5385   1.1  christos   {
   5386   1.1  christos     int referenced = 0;
   5387   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5388   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   5389   1.1  christos   }
   5390   1.1  christos   {
   5391   1.1  christos     int referenced = 0;
   5392   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5393   1.1  christos     INT in_Rd = -1;
   5394   1.1  christos     INT in_Rs = -1;
   5395   1.1  christos     INT out_Rd = -1;
   5396   1.1  christos     in_Rd = FLD (in_Rd);
   5397   1.1  christos     in_Rs = FLD (in_Rs);
   5398   1.1  christos     referenced |= 1 << 0;
   5399   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   5400   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   5401   1.1  christos   }
   5402   1.1  christos   return cycles;
   5403   1.1  christos #undef FLD
   5404   1.1  christos }
   5405   1.1  christos 
   5406   1.1  christos static int
   5407   1.1  christos model_crisv32_addo_m_d_m (SIM_CPU *current_cpu, void *sem_arg)
   5408   1.1  christos {
   5409   1.1  christos #define FLD(f) abuf->fields.sfmt_addc_m.f
   5410   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5411   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5412   1.1  christos   int cycles = 0;
   5413   1.1  christos   {
   5414   1.1  christos     int referenced = 0;
   5415   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5416   1.1  christos     INT in_Rs = -1;
   5417   1.1  christos     in_Rs = FLD (in_Rs);
   5418   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
   5419   1.1  christos     cycles += crisv32f_model_crisv32_u_mem (current_cpu, idesc, 0, referenced, in_Rs);
   5420   1.1  christos   }
   5421   1.1  christos   {
   5422   1.1  christos     int referenced = 0;
   5423   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5424   1.1  christos     cycles += crisv32f_model_crisv32_u_mem_r (current_cpu, idesc, 1, referenced);
   5425   1.1  christos   }
   5426   1.1  christos   {
   5427   1.1  christos     int referenced = 0;
   5428   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5429   1.1  christos     INT in_Rd = -1;
   5430   1.1  christos     INT in_Rs = -1;
   5431   1.1  christos     INT out_Rd = -1;
   5432   1.1  christos     in_Rd = FLD (in_Rd);
   5433   1.1  christos     in_Rs = FLD (in_Rs);
   5434   1.1  christos     referenced |= 1 << 0;
   5435   1.1  christos     if (insn_referenced & (1 << 1)) referenced |= 1 << 1;
   5436   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 2, referenced, in_Rd, in_Rs, out_Rd);
   5437   1.1  christos   }
   5438   1.1  christos   return cycles;
   5439   1.1  christos #undef FLD
   5440   1.1  christos }
   5441   1.1  christos 
   5442   1.1  christos static int
   5443   1.1  christos model_crisv32_addo_cb (SIM_CPU *current_cpu, void *sem_arg)
   5444   1.1  christos {
   5445   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
   5446   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5447   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5448   1.1  christos   int cycles = 0;
   5449   1.1  christos   {
   5450   1.1  christos     int referenced = 0;
   5451   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5452   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   5453   1.1  christos   }
   5454   1.1  christos   {
   5455   1.1  christos     int referenced = 0;
   5456   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5457   1.1  christos     INT in_Rd = -1;
   5458   1.1  christos     INT in_Rs = -1;
   5459   1.1  christos     INT out_Rd = -1;
   5460   1.1  christos     in_Rd = FLD (in_Rd);
   5461   1.1  christos     referenced |= 1 << 0;
   5462   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   5463   1.1  christos   }
   5464   1.1  christos   return cycles;
   5465   1.1  christos #undef FLD
   5466   1.1  christos }
   5467   1.1  christos 
   5468   1.1  christos static int
   5469   1.1  christos model_crisv32_addo_cw (SIM_CPU *current_cpu, void *sem_arg)
   5470   1.1  christos {
   5471   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
   5472   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5473   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5474   1.1  christos   int cycles = 0;
   5475   1.1  christos   {
   5476   1.1  christos     int referenced = 0;
   5477   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5478   1.1  christos     cycles += crisv32f_model_crisv32_u_const16 (current_cpu, idesc, 0, referenced);
   5479   1.1  christos   }
   5480   1.1  christos   {
   5481   1.1  christos     int referenced = 0;
   5482   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5483   1.1  christos     INT in_Rd = -1;
   5484   1.1  christos     INT in_Rs = -1;
   5485   1.1  christos     INT out_Rd = -1;
   5486   1.1  christos     in_Rd = FLD (in_Rd);
   5487   1.1  christos     referenced |= 1 << 0;
   5488   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   5489   1.1  christos   }
   5490   1.1  christos   return cycles;
   5491   1.1  christos #undef FLD
   5492   1.1  christos }
   5493   1.1  christos 
   5494   1.1  christos static int
   5495   1.1  christos model_crisv32_addo_cd (SIM_CPU *current_cpu, void *sem_arg)
   5496   1.1  christos {
   5497   1.1  christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
   5498   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5499   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5500   1.1  christos   int cycles = 0;
   5501   1.1  christos   {
   5502   1.1  christos     int referenced = 0;
   5503   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5504   1.1  christos     cycles += crisv32f_model_crisv32_u_const32 (current_cpu, idesc, 0, referenced);
   5505   1.1  christos   }
   5506   1.1  christos   {
   5507   1.1  christos     int referenced = 0;
   5508   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5509   1.1  christos     INT in_Rd = -1;
   5510   1.1  christos     INT in_Rs = -1;
   5511   1.1  christos     INT out_Rd = -1;
   5512   1.1  christos     in_Rd = FLD (in_Rd);
   5513   1.1  christos     referenced |= 1 << 0;
   5514   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 1, referenced, in_Rd, in_Rs, out_Rd);
   5515   1.1  christos   }
   5516   1.1  christos   return cycles;
   5517   1.1  christos #undef FLD
   5518   1.1  christos }
   5519   1.1  christos 
   5520   1.1  christos static int
   5521   1.1  christos model_crisv32_addi_acr_b_r (SIM_CPU *current_cpu, void *sem_arg)
   5522   1.1  christos {
   5523   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5524   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5525   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5526   1.1  christos   int cycles = 0;
   5527   1.1  christos   {
   5528   1.1  christos     int referenced = 0;
   5529   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5530   1.1  christos     INT in_Rd = -1;
   5531   1.1  christos     INT in_Rs = -1;
   5532   1.1  christos     INT out_Rd = -1;
   5533   1.1  christos     in_Rd = FLD (in_Rd);
   5534   1.1  christos     in_Rs = FLD (in_Rs);
   5535   1.1  christos     referenced |= 1 << 0;
   5536   1.1  christos     referenced |= 1 << 1;
   5537   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5538   1.1  christos   }
   5539   1.1  christos   return cycles;
   5540   1.1  christos #undef FLD
   5541   1.1  christos }
   5542   1.1  christos 
   5543   1.1  christos static int
   5544   1.1  christos model_crisv32_addi_acr_w_r (SIM_CPU *current_cpu, void *sem_arg)
   5545   1.1  christos {
   5546   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5547   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5548   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5549   1.1  christos   int cycles = 0;
   5550   1.1  christos   {
   5551   1.1  christos     int referenced = 0;
   5552   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5553   1.1  christos     INT in_Rd = -1;
   5554   1.1  christos     INT in_Rs = -1;
   5555   1.1  christos     INT out_Rd = -1;
   5556   1.1  christos     in_Rd = FLD (in_Rd);
   5557   1.1  christos     in_Rs = FLD (in_Rs);
   5558   1.1  christos     referenced |= 1 << 0;
   5559   1.1  christos     referenced |= 1 << 1;
   5560   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5561   1.1  christos   }
   5562   1.1  christos   return cycles;
   5563   1.1  christos #undef FLD
   5564   1.1  christos }
   5565   1.1  christos 
   5566   1.1  christos static int
   5567   1.1  christos model_crisv32_addi_acr_d_r (SIM_CPU *current_cpu, void *sem_arg)
   5568   1.1  christos {
   5569   1.1  christos #define FLD(f) abuf->fields.sfmt_muls_b.f
   5570   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5571   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5572   1.1  christos   int cycles = 0;
   5573   1.1  christos   {
   5574   1.1  christos     int referenced = 0;
   5575   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5576   1.1  christos     INT in_Rd = -1;
   5577   1.1  christos     INT in_Rs = -1;
   5578   1.1  christos     INT out_Rd = -1;
   5579   1.1  christos     in_Rd = FLD (in_Rd);
   5580   1.1  christos     in_Rs = FLD (in_Rs);
   5581   1.1  christos     referenced |= 1 << 0;
   5582   1.1  christos     referenced |= 1 << 1;
   5583   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5584   1.1  christos   }
   5585   1.1  christos   return cycles;
   5586   1.1  christos #undef FLD
   5587   1.1  christos }
   5588   1.1  christos 
   5589   1.1  christos static int
   5590   1.1  christos model_crisv32_fidxi (SIM_CPU *current_cpu, void *sem_arg)
   5591   1.1  christos {
   5592   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   5593   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5594   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5595   1.1  christos   int cycles = 0;
   5596   1.1  christos   {
   5597   1.1  christos     int referenced = 0;
   5598   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5599   1.1  christos     INT in_Rd = -1;
   5600   1.1  christos     INT in_Rs = -1;
   5601   1.1  christos     INT out_Rd = -1;
   5602   1.1  christos     in_Rs = FLD (in_Rs);
   5603   1.1  christos     referenced |= 1 << 1;
   5604   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5605   1.1  christos   }
   5606   1.1  christos   return cycles;
   5607   1.1  christos #undef FLD
   5608   1.1  christos }
   5609   1.1  christos 
   5610   1.1  christos static int
   5611   1.1  christos model_crisv32_ftagi (SIM_CPU *current_cpu, void *sem_arg)
   5612   1.1  christos {
   5613   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   5614   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5615   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5616   1.1  christos   int cycles = 0;
   5617   1.1  christos   {
   5618   1.1  christos     int referenced = 0;
   5619   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5620   1.1  christos     INT in_Rd = -1;
   5621   1.1  christos     INT in_Rs = -1;
   5622   1.1  christos     INT out_Rd = -1;
   5623   1.1  christos     in_Rs = FLD (in_Rs);
   5624   1.1  christos     referenced |= 1 << 1;
   5625   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5626   1.1  christos   }
   5627   1.1  christos   return cycles;
   5628   1.1  christos #undef FLD
   5629   1.1  christos }
   5630   1.1  christos 
   5631   1.1  christos static int
   5632   1.1  christos model_crisv32_fidxd (SIM_CPU *current_cpu, void *sem_arg)
   5633   1.1  christos {
   5634   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   5635   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5636   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5637   1.1  christos   int cycles = 0;
   5638   1.1  christos   {
   5639   1.1  christos     int referenced = 0;
   5640   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5641   1.1  christos     INT in_Rd = -1;
   5642   1.1  christos     INT in_Rs = -1;
   5643   1.1  christos     INT out_Rd = -1;
   5644   1.1  christos     in_Rs = FLD (in_Rs);
   5645   1.1  christos     referenced |= 1 << 1;
   5646   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5647   1.1  christos   }
   5648   1.1  christos   return cycles;
   5649   1.1  christos #undef FLD
   5650   1.1  christos }
   5651   1.1  christos 
   5652   1.1  christos static int
   5653   1.1  christos model_crisv32_ftagd (SIM_CPU *current_cpu, void *sem_arg)
   5654   1.1  christos {
   5655   1.1  christos #define FLD(f) abuf->fields.sfmt_mcp.f
   5656   1.1  christos   const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
   5657   1.1  christos   const IDESC * UNUSED idesc = abuf->idesc;
   5658   1.1  christos   int cycles = 0;
   5659   1.1  christos   {
   5660   1.1  christos     int referenced = 0;
   5661   1.1  christos     int UNUSED insn_referenced = abuf->written;
   5662   1.1  christos     INT in_Rd = -1;
   5663   1.1  christos     INT in_Rs = -1;
   5664   1.1  christos     INT out_Rd = -1;
   5665   1.1  christos     in_Rs = FLD (in_Rs);
   5666   1.1  christos     referenced |= 1 << 1;
   5667   1.1  christos     cycles += crisv32f_model_crisv32_u_exec (current_cpu, idesc, 0, referenced, in_Rd, in_Rs, out_Rd);
   5668   1.1  christos   }
   5669   1.1  christos   return cycles;
   5670   1.1  christos #undef FLD
   5671   1.1  christos }
   5672   1.1  christos 
   5673   1.1  christos /* We assume UNIT_NONE == 0 because the tables don't always terminate
   5674   1.1  christos    entries with it.  */
   5675   1.1  christos 
   5676   1.1  christos /* Model timing data for `crisv32'.  */
   5677   1.1  christos 
   5678   1.1  christos static const INSN_TIMING crisv32_timing[] = {
   5679   1.1  christos   { CRISV32F_INSN_X_INVALID, 0, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5680   1.1  christos   { CRISV32F_INSN_X_AFTER, 0, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5681   1.1  christos   { CRISV32F_INSN_X_BEFORE, 0, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5682   1.1  christos   { CRISV32F_INSN_X_CTI_CHAIN, 0, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5683   1.1  christos   { CRISV32F_INSN_X_CHAIN, 0, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5684   1.1  christos   { CRISV32F_INSN_X_BEGIN, 0, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5685   1.1  christos   { CRISV32F_INSN_MOVE_B_R, model_crisv32_move_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5686   1.1  christos   { CRISV32F_INSN_MOVE_W_R, model_crisv32_move_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5687   1.1  christos   { CRISV32F_INSN_MOVE_D_R, model_crisv32_move_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5688   1.1  christos   { CRISV32F_INSN_MOVEQ, model_crisv32_moveq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5689   1.1  christos   { CRISV32F_INSN_MOVS_B_R, model_crisv32_movs_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5690   1.1  christos   { CRISV32F_INSN_MOVS_W_R, model_crisv32_movs_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5691   1.1  christos   { CRISV32F_INSN_MOVU_B_R, model_crisv32_movu_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5692   1.1  christos   { CRISV32F_INSN_MOVU_W_R, model_crisv32_movu_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5693   1.1  christos   { CRISV32F_INSN_MOVECBR, model_crisv32_movecbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5694   1.1  christos   { CRISV32F_INSN_MOVECWR, model_crisv32_movecwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5695   1.1  christos   { CRISV32F_INSN_MOVECDR, model_crisv32_movecdr, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5696   1.1  christos   { CRISV32F_INSN_MOVSCBR, model_crisv32_movscbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5697   1.1  christos   { CRISV32F_INSN_MOVSCWR, model_crisv32_movscwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5698   1.1  christos   { CRISV32F_INSN_MOVUCBR, model_crisv32_movucbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5699   1.1  christos   { CRISV32F_INSN_MOVUCWR, model_crisv32_movucwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5700   1.1  christos   { CRISV32F_INSN_ADDQ, model_crisv32_addq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5701   1.1  christos   { CRISV32F_INSN_SUBQ, model_crisv32_subq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5702   1.1  christos   { CRISV32F_INSN_CMP_R_B_R, model_crisv32_cmp_r_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5703   1.1  christos   { CRISV32F_INSN_CMP_R_W_R, model_crisv32_cmp_r_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5704   1.1  christos   { CRISV32F_INSN_CMP_R_D_R, model_crisv32_cmp_r_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5705   1.1  christos   { CRISV32F_INSN_CMP_M_B_M, model_crisv32_cmp_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5706   1.1  christos   { CRISV32F_INSN_CMP_M_W_M, model_crisv32_cmp_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5707   1.1  christos   { CRISV32F_INSN_CMP_M_D_M, model_crisv32_cmp_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5708   1.1  christos   { CRISV32F_INSN_CMPCBR, model_crisv32_cmpcbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5709   1.1  christos   { CRISV32F_INSN_CMPCWR, model_crisv32_cmpcwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5710   1.1  christos   { CRISV32F_INSN_CMPCDR, model_crisv32_cmpcdr, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5711   1.1  christos   { CRISV32F_INSN_CMPQ, model_crisv32_cmpq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5712   1.1  christos   { CRISV32F_INSN_CMPS_M_B_M, model_crisv32_cmps_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5713   1.1  christos   { CRISV32F_INSN_CMPS_M_W_M, model_crisv32_cmps_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5714   1.1  christos   { CRISV32F_INSN_CMPSCBR, model_crisv32_cmpscbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5715   1.1  christos   { CRISV32F_INSN_CMPSCWR, model_crisv32_cmpscwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5716   1.1  christos   { CRISV32F_INSN_CMPU_M_B_M, model_crisv32_cmpu_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5717   1.1  christos   { CRISV32F_INSN_CMPU_M_W_M, model_crisv32_cmpu_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5718   1.1  christos   { CRISV32F_INSN_CMPUCBR, model_crisv32_cmpucbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5719   1.1  christos   { CRISV32F_INSN_CMPUCWR, model_crisv32_cmpucwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5720   1.1  christos   { CRISV32F_INSN_MOVE_M_B_M, model_crisv32_move_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5721   1.1  christos   { CRISV32F_INSN_MOVE_M_W_M, model_crisv32_move_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5722   1.1  christos   { CRISV32F_INSN_MOVE_M_D_M, model_crisv32_move_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5723   1.1  christos   { CRISV32F_INSN_MOVS_M_B_M, model_crisv32_movs_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5724   1.1  christos   { CRISV32F_INSN_MOVS_M_W_M, model_crisv32_movs_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5725   1.1  christos   { CRISV32F_INSN_MOVU_M_B_M, model_crisv32_movu_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5726   1.1  christos   { CRISV32F_INSN_MOVU_M_W_M, model_crisv32_movu_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5727   1.1  christos   { CRISV32F_INSN_MOVE_R_SPRV32, model_crisv32_move_r_sprv32, { { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5728   1.1  christos   { CRISV32F_INSN_MOVE_SPR_RV32, model_crisv32_move_spr_rv32, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5729   1.1  christos   { CRISV32F_INSN_MOVE_M_SPRV32, model_crisv32_move_m_sprv32, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5730   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P2, model_crisv32_move_c_sprv32_p2, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5731   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P3, model_crisv32_move_c_sprv32_p3, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5732   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P5, model_crisv32_move_c_sprv32_p5, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5733   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P6, model_crisv32_move_c_sprv32_p6, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5734   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P7, model_crisv32_move_c_sprv32_p7, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5735   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P9, model_crisv32_move_c_sprv32_p9, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5736   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P10, model_crisv32_move_c_sprv32_p10, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5737   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P11, model_crisv32_move_c_sprv32_p11, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5738   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P12, model_crisv32_move_c_sprv32_p12, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5739   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P13, model_crisv32_move_c_sprv32_p13, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5740   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P14, model_crisv32_move_c_sprv32_p14, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5741   1.1  christos   { CRISV32F_INSN_MOVE_C_SPRV32_P15, model_crisv32_move_c_sprv32_p15, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_TO_SR, 1, 1 } } },
   5742   1.1  christos   { CRISV32F_INSN_MOVE_SPR_MV32, model_crisv32_move_spr_mv32, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_W, 1, 1 } } },
   5743   1.1  christos   { CRISV32F_INSN_MOVE_SS_R, model_crisv32_move_ss_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5744   1.1  christos   { CRISV32F_INSN_MOVE_R_SS, model_crisv32_move_r_ss, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5745   1.1  christos   { CRISV32F_INSN_MOVEM_R_M_V32, model_crisv32_movem_r_m_v32, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MOVEM_RTOM, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_MOVEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_W, 1, 1 } } },
   5746   1.1  christos   { CRISV32F_INSN_MOVEM_M_R_V32, model_crisv32_movem_m_r_v32, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_MOVEM_MTOR, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC_MOVEM, 1, 1 } } },
   5747   1.1  christos   { CRISV32F_INSN_ADD_B_R, model_crisv32_add_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5748   1.1  christos   { CRISV32F_INSN_ADD_W_R, model_crisv32_add_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5749   1.1  christos   { CRISV32F_INSN_ADD_D_R, model_crisv32_add_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5750   1.1  christos   { CRISV32F_INSN_ADD_M_B_M, model_crisv32_add_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5751   1.1  christos   { CRISV32F_INSN_ADD_M_W_M, model_crisv32_add_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5752   1.1  christos   { CRISV32F_INSN_ADD_M_D_M, model_crisv32_add_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5753   1.1  christos   { CRISV32F_INSN_ADDCBR, model_crisv32_addcbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5754   1.1  christos   { CRISV32F_INSN_ADDCWR, model_crisv32_addcwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5755   1.1  christos   { CRISV32F_INSN_ADDCDR, model_crisv32_addcdr, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5756   1.1  christos   { CRISV32F_INSN_ADDS_B_R, model_crisv32_adds_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5757   1.1  christos   { CRISV32F_INSN_ADDS_W_R, model_crisv32_adds_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5758   1.1  christos   { CRISV32F_INSN_ADDS_M_B_M, model_crisv32_adds_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5759   1.1  christos   { CRISV32F_INSN_ADDS_M_W_M, model_crisv32_adds_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5760   1.1  christos   { CRISV32F_INSN_ADDSCBR, model_crisv32_addscbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5761   1.1  christos   { CRISV32F_INSN_ADDSCWR, model_crisv32_addscwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5762   1.1  christos   { CRISV32F_INSN_ADDU_B_R, model_crisv32_addu_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5763   1.1  christos   { CRISV32F_INSN_ADDU_W_R, model_crisv32_addu_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5764   1.1  christos   { CRISV32F_INSN_ADDU_M_B_M, model_crisv32_addu_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5765   1.1  christos   { CRISV32F_INSN_ADDU_M_W_M, model_crisv32_addu_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5766   1.1  christos   { CRISV32F_INSN_ADDUCBR, model_crisv32_adducbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5767   1.1  christos   { CRISV32F_INSN_ADDUCWR, model_crisv32_adducwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5768   1.1  christos   { CRISV32F_INSN_SUB_B_R, model_crisv32_sub_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5769   1.1  christos   { CRISV32F_INSN_SUB_W_R, model_crisv32_sub_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5770   1.1  christos   { CRISV32F_INSN_SUB_D_R, model_crisv32_sub_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5771   1.1  christos   { CRISV32F_INSN_SUB_M_B_M, model_crisv32_sub_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5772   1.1  christos   { CRISV32F_INSN_SUB_M_W_M, model_crisv32_sub_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5773   1.1  christos   { CRISV32F_INSN_SUB_M_D_M, model_crisv32_sub_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5774   1.1  christos   { CRISV32F_INSN_SUBCBR, model_crisv32_subcbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5775   1.1  christos   { CRISV32F_INSN_SUBCWR, model_crisv32_subcwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5776   1.1  christos   { CRISV32F_INSN_SUBCDR, model_crisv32_subcdr, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5777   1.1  christos   { CRISV32F_INSN_SUBS_B_R, model_crisv32_subs_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5778   1.1  christos   { CRISV32F_INSN_SUBS_W_R, model_crisv32_subs_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5779   1.1  christos   { CRISV32F_INSN_SUBS_M_B_M, model_crisv32_subs_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5780   1.1  christos   { CRISV32F_INSN_SUBS_M_W_M, model_crisv32_subs_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5781   1.1  christos   { CRISV32F_INSN_SUBSCBR, model_crisv32_subscbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5782   1.1  christos   { CRISV32F_INSN_SUBSCWR, model_crisv32_subscwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5783   1.1  christos   { CRISV32F_INSN_SUBU_B_R, model_crisv32_subu_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5784   1.1  christos   { CRISV32F_INSN_SUBU_W_R, model_crisv32_subu_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5785   1.1  christos   { CRISV32F_INSN_SUBU_M_B_M, model_crisv32_subu_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5786   1.1  christos   { CRISV32F_INSN_SUBU_M_W_M, model_crisv32_subu_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5787   1.1  christos   { CRISV32F_INSN_SUBUCBR, model_crisv32_subucbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5788   1.1  christos   { CRISV32F_INSN_SUBUCWR, model_crisv32_subucwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5789   1.1  christos   { CRISV32F_INSN_ADDC_R, model_crisv32_addc_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5790   1.1  christos   { CRISV32F_INSN_ADDC_M, model_crisv32_addc_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5791   1.1  christos   { CRISV32F_INSN_ADDC_C, model_crisv32_addc_c, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5792   1.1  christos   { CRISV32F_INSN_LAPC_D, model_crisv32_lapc_d, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5793   1.1  christos   { CRISV32F_INSN_LAPCQ, model_crisv32_lapcq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5794   1.1  christos   { CRISV32F_INSN_ADDI_B_R, model_crisv32_addi_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5795   1.1  christos   { CRISV32F_INSN_ADDI_W_R, model_crisv32_addi_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5796   1.1  christos   { CRISV32F_INSN_ADDI_D_R, model_crisv32_addi_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5797   1.1  christos   { CRISV32F_INSN_NEG_B_R, model_crisv32_neg_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5798   1.1  christos   { CRISV32F_INSN_NEG_W_R, model_crisv32_neg_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5799   1.1  christos   { CRISV32F_INSN_NEG_D_R, model_crisv32_neg_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5800   1.1  christos   { CRISV32F_INSN_TEST_M_B_M, model_crisv32_test_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5801   1.1  christos   { CRISV32F_INSN_TEST_M_W_M, model_crisv32_test_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5802   1.1  christos   { CRISV32F_INSN_TEST_M_D_M, model_crisv32_test_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5803   1.1  christos   { CRISV32F_INSN_MOVE_R_M_B_M, model_crisv32_move_r_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_W, 1, 1 } } },
   5804   1.1  christos   { CRISV32F_INSN_MOVE_R_M_W_M, model_crisv32_move_r_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_W, 1, 1 } } },
   5805   1.1  christos   { CRISV32F_INSN_MOVE_R_M_D_M, model_crisv32_move_r_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_W, 1, 1 } } },
   5806   1.1  christos   { CRISV32F_INSN_MULS_B, model_crisv32_muls_b, { { (int) UNIT_CRISV32_U_MULTIPLY, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5807   1.1  christos   { CRISV32F_INSN_MULS_W, model_crisv32_muls_w, { { (int) UNIT_CRISV32_U_MULTIPLY, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5808   1.1  christos   { CRISV32F_INSN_MULS_D, model_crisv32_muls_d, { { (int) UNIT_CRISV32_U_MULTIPLY, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5809   1.1  christos   { CRISV32F_INSN_MULU_B, model_crisv32_mulu_b, { { (int) UNIT_CRISV32_U_MULTIPLY, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5810   1.1  christos   { CRISV32F_INSN_MULU_W, model_crisv32_mulu_w, { { (int) UNIT_CRISV32_U_MULTIPLY, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5811   1.1  christos   { CRISV32F_INSN_MULU_D, model_crisv32_mulu_d, { { (int) UNIT_CRISV32_U_MULTIPLY, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5812   1.1  christos   { CRISV32F_INSN_MCP, model_crisv32_mcp, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5813   1.1  christos   { CRISV32F_INSN_DSTEP, model_crisv32_dstep, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5814   1.1  christos   { CRISV32F_INSN_ABS, model_crisv32_abs, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5815   1.1  christos   { CRISV32F_INSN_AND_B_R, model_crisv32_and_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5816   1.1  christos   { CRISV32F_INSN_AND_W_R, model_crisv32_and_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5817   1.1  christos   { CRISV32F_INSN_AND_D_R, model_crisv32_and_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5818   1.1  christos   { CRISV32F_INSN_AND_M_B_M, model_crisv32_and_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5819   1.1  christos   { CRISV32F_INSN_AND_M_W_M, model_crisv32_and_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5820   1.1  christos   { CRISV32F_INSN_AND_M_D_M, model_crisv32_and_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5821   1.1  christos   { CRISV32F_INSN_ANDCBR, model_crisv32_andcbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5822   1.1  christos   { CRISV32F_INSN_ANDCWR, model_crisv32_andcwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5823   1.1  christos   { CRISV32F_INSN_ANDCDR, model_crisv32_andcdr, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5824   1.1  christos   { CRISV32F_INSN_ANDQ, model_crisv32_andq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5825   1.1  christos   { CRISV32F_INSN_ORR_B_R, model_crisv32_orr_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5826   1.1  christos   { CRISV32F_INSN_ORR_W_R, model_crisv32_orr_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5827   1.1  christos   { CRISV32F_INSN_ORR_D_R, model_crisv32_orr_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5828   1.1  christos   { CRISV32F_INSN_OR_M_B_M, model_crisv32_or_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5829   1.1  christos   { CRISV32F_INSN_OR_M_W_M, model_crisv32_or_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5830   1.1  christos   { CRISV32F_INSN_OR_M_D_M, model_crisv32_or_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5831   1.1  christos   { CRISV32F_INSN_ORCBR, model_crisv32_orcbr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5832   1.1  christos   { CRISV32F_INSN_ORCWR, model_crisv32_orcwr, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5833   1.1  christos   { CRISV32F_INSN_ORCDR, model_crisv32_orcdr, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5834   1.1  christos   { CRISV32F_INSN_ORQ, model_crisv32_orq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5835   1.1  christos   { CRISV32F_INSN_XOR, model_crisv32_xor, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5836   1.1  christos   { CRISV32F_INSN_SWAP, model_crisv32_swap, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5837   1.1  christos   { CRISV32F_INSN_ASRR_B_R, model_crisv32_asrr_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5838   1.1  christos   { CRISV32F_INSN_ASRR_W_R, model_crisv32_asrr_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5839   1.1  christos   { CRISV32F_INSN_ASRR_D_R, model_crisv32_asrr_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5840   1.1  christos   { CRISV32F_INSN_ASRQ, model_crisv32_asrq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5841   1.1  christos   { CRISV32F_INSN_LSRR_B_R, model_crisv32_lsrr_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5842   1.1  christos   { CRISV32F_INSN_LSRR_W_R, model_crisv32_lsrr_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5843   1.1  christos   { CRISV32F_INSN_LSRR_D_R, model_crisv32_lsrr_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5844   1.1  christos   { CRISV32F_INSN_LSRQ, model_crisv32_lsrq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5845   1.1  christos   { CRISV32F_INSN_LSLR_B_R, model_crisv32_lslr_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5846   1.1  christos   { CRISV32F_INSN_LSLR_W_R, model_crisv32_lslr_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5847   1.1  christos   { CRISV32F_INSN_LSLR_D_R, model_crisv32_lslr_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5848   1.1  christos   { CRISV32F_INSN_LSLQ, model_crisv32_lslq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5849   1.1  christos   { CRISV32F_INSN_BTST, model_crisv32_btst, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5850   1.1  christos   { CRISV32F_INSN_BTSTQ, model_crisv32_btstq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5851   1.1  christos   { CRISV32F_INSN_SETF, model_crisv32_setf, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5852   1.1  christos   { CRISV32F_INSN_CLEARF, model_crisv32_clearf, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5853   1.1  christos   { CRISV32F_INSN_RFE, model_crisv32_rfe, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5854   1.1  christos   { CRISV32F_INSN_SFE, model_crisv32_sfe, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5855   1.1  christos   { CRISV32F_INSN_RFG, model_crisv32_rfg, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5856   1.1  christos   { CRISV32F_INSN_RFN, model_crisv32_rfn, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5857   1.1  christos   { CRISV32F_INSN_HALT, model_crisv32_halt, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5858   1.1  christos   { CRISV32F_INSN_BCC_B, model_crisv32_bcc_b, { { (int) UNIT_CRISV32_U_BRANCH, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5859   1.1  christos   { CRISV32F_INSN_BA_B, model_crisv32_ba_b, { { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5860   1.1  christos   { CRISV32F_INSN_BCC_W, model_crisv32_bcc_w, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_BRANCH, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5861   1.1  christos   { CRISV32F_INSN_BA_W, model_crisv32_ba_w, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5862   1.1  christos   { CRISV32F_INSN_JAS_R, model_crisv32_jas_r, { { (int) UNIT_CRISV32_U_JUMP_R, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5863   1.1  christos   { CRISV32F_INSN_JAS_C, model_crisv32_jas_c, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5864   1.1  christos   { CRISV32F_INSN_JUMP_P, model_crisv32_jump_p, { { (int) UNIT_CRISV32_U_JUMP_SR, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5865   1.1  christos   { CRISV32F_INSN_BAS_C, model_crisv32_bas_c, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5866   1.1  christos   { CRISV32F_INSN_JASC_R, model_crisv32_jasc_r, { { (int) UNIT_CRISV32_U_JUMP_R, 1, 1 }, { (int) UNIT_CRISV32_U_SKIP4, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5867   1.1  christos   { CRISV32F_INSN_JASC_C, model_crisv32_jasc_c, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_SKIP4, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5868   1.1  christos   { CRISV32F_INSN_BASC_C, model_crisv32_basc_c, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_SKIP4, 1, 1 }, { (int) UNIT_CRISV32_U_JUMP, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5869   1.1  christos   { CRISV32F_INSN_BREAK, model_crisv32_break, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5870   1.1  christos   { CRISV32F_INSN_BOUND_R_B_R, model_crisv32_bound_r_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5871   1.1  christos   { CRISV32F_INSN_BOUND_R_W_R, model_crisv32_bound_r_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5872   1.1  christos   { CRISV32F_INSN_BOUND_R_D_R, model_crisv32_bound_r_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5873   1.1  christos   { CRISV32F_INSN_BOUND_CB, model_crisv32_bound_cb, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5874   1.1  christos   { CRISV32F_INSN_BOUND_CW, model_crisv32_bound_cw, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5875   1.1  christos   { CRISV32F_INSN_BOUND_CD, model_crisv32_bound_cd, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5876   1.1  christos   { CRISV32F_INSN_SCC, model_crisv32_scc, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5877   1.1  christos   { CRISV32F_INSN_LZ, model_crisv32_lz, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5878   1.1  christos   { CRISV32F_INSN_ADDOQ, model_crisv32_addoq, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5879   1.1  christos   { CRISV32F_INSN_ADDO_M_B_M, model_crisv32_addo_m_b_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5880   1.1  christos   { CRISV32F_INSN_ADDO_M_W_M, model_crisv32_addo_m_w_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5881   1.1  christos   { CRISV32F_INSN_ADDO_M_D_M, model_crisv32_addo_m_d_m, { { (int) UNIT_CRISV32_U_MEM, 1, 1 }, { (int) UNIT_CRISV32_U_MEM_R, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5882   1.1  christos   { CRISV32F_INSN_ADDO_CB, model_crisv32_addo_cb, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5883   1.1  christos   { CRISV32F_INSN_ADDO_CW, model_crisv32_addo_cw, { { (int) UNIT_CRISV32_U_CONST16, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5884   1.1  christos   { CRISV32F_INSN_ADDO_CD, model_crisv32_addo_cd, { { (int) UNIT_CRISV32_U_CONST32, 1, 1 }, { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5885   1.1  christos   { CRISV32F_INSN_ADDI_ACR_B_R, model_crisv32_addi_acr_b_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5886   1.1  christos   { CRISV32F_INSN_ADDI_ACR_W_R, model_crisv32_addi_acr_w_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5887   1.1  christos   { CRISV32F_INSN_ADDI_ACR_D_R, model_crisv32_addi_acr_d_r, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5888   1.1  christos   { CRISV32F_INSN_FIDXI, model_crisv32_fidxi, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5889   1.1  christos   { CRISV32F_INSN_FTAGI, model_crisv32_ftagi, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5890   1.1  christos   { CRISV32F_INSN_FIDXD, model_crisv32_fidxd, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5891   1.1  christos   { CRISV32F_INSN_FTAGD, model_crisv32_ftagd, { { (int) UNIT_CRISV32_U_EXEC, 1, 1 } } },
   5892   1.1  christos };
   5893   1.1  christos 
   5894   1.1  christos #endif /* WITH_PROFILE_MODEL_P */
   5895   1.1  christos 
   5896   1.1  christos static void
   5897   1.1  christos crisv32_model_init (SIM_CPU *cpu)
   5898   1.1  christos {
   5899   1.1  christos   CPU_MODEL_DATA (cpu) = (void *) zalloc (sizeof (MODEL_CRISV32_DATA));
   5900   1.1  christos }
   5901   1.1  christos 
   5902   1.1  christos #if WITH_PROFILE_MODEL_P
   5903   1.1  christos #define TIMING_DATA(td) td
   5904   1.1  christos #else
   5905   1.1  christos #define TIMING_DATA(td) 0
   5906   1.1  christos #endif
   5907   1.1  christos 
   5908   1.6  christos static const SIM_MODEL crisv32_models[] =
   5909   1.1  christos {
   5910   1.1  christos   { "crisv32", & crisv32_mach, MODEL_CRISV32, TIMING_DATA (& crisv32_timing[0]), crisv32_model_init },
   5911   1.1  christos   { 0 }
   5912   1.1  christos };
   5913   1.1  christos 
   5914   1.1  christos /* The properties of this cpu's implementation.  */
   5915   1.1  christos 
   5916   1.6  christos static const SIM_MACH_IMP_PROPERTIES crisv32f_imp_properties =
   5917   1.1  christos {
   5918   1.1  christos   sizeof (SIM_CPU),
   5919   1.1  christos #if WITH_SCACHE
   5920   1.1  christos   sizeof (SCACHE)
   5921   1.1  christos #else
   5922   1.1  christos   0
   5923   1.1  christos #endif
   5924   1.1  christos };
   5925   1.1  christos 
   5926   1.1  christos 
   5927   1.1  christos static void
   5928   1.1  christos crisv32f_prepare_run (SIM_CPU *cpu)
   5929   1.1  christos {
   5930   1.1  christos   if (CPU_IDESC (cpu) == NULL)
   5931   1.1  christos     crisv32f_init_idesc_table (cpu);
   5932   1.1  christos }
   5933   1.1  christos 
   5934   1.1  christos static const CGEN_INSN *
   5935   1.1  christos crisv32f_get_idata (SIM_CPU *cpu, int inum)
   5936   1.1  christos {
   5937   1.1  christos   return CPU_IDESC (cpu) [inum].idata;
   5938   1.1  christos }
   5939   1.1  christos 
   5940   1.1  christos static void
   5941   1.1  christos crisv32_init_cpu (SIM_CPU *cpu)
   5942   1.1  christos {
   5943   1.1  christos   CPU_REG_FETCH (cpu) = crisv32f_fetch_register;
   5944   1.1  christos   CPU_REG_STORE (cpu) = crisv32f_store_register;
   5945   1.1  christos   CPU_PC_FETCH (cpu) = crisv32f_h_pc_get;
   5946   1.1  christos   CPU_PC_STORE (cpu) = crisv32f_h_pc_set;
   5947   1.1  christos   CPU_GET_IDATA (cpu) = crisv32f_get_idata;
   5948   1.1  christos   CPU_MAX_INSNS (cpu) = CRISV32F_INSN__MAX;
   5949   1.1  christos   CPU_INSN_NAME (cpu) = cgen_insn_name;
   5950   1.1  christos   CPU_FULL_ENGINE_FN (cpu) = crisv32f_engine_run_full;
   5951   1.1  christos #if WITH_FAST
   5952   1.1  christos   CPU_FAST_ENGINE_FN (cpu) = crisv32f_engine_run_fast;
   5953   1.1  christos #else
   5954   1.1  christos   CPU_FAST_ENGINE_FN (cpu) = crisv32f_engine_run_full;
   5955   1.1  christos #endif
   5956   1.1  christos }
   5957   1.1  christos 
   5958   1.6  christos const SIM_MACH crisv32_mach =
   5959   1.1  christos {
   5960   1.1  christos   "crisv32", "crisv32", MACH_CRISV32,
   5961   1.1  christos   32, 32, & crisv32_models[0], & crisv32f_imp_properties,
   5962   1.1  christos   crisv32_init_cpu,
   5963   1.1  christos   crisv32f_prepare_run
   5964   1.1  christos };
   5965   1.1  christos 
   5966