Home | History | Annotate | Line # | Download | only in or1k
sem-switch.c revision 1.1
      1  1.1  christos /* Simulator instruction semantics for or1k32bf.
      2  1.1  christos 
      3  1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      4  1.1  christos 
      5  1.1  christos Copyright 1996-2019 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.1  christos    with this program; if not, write to the Free Software Foundation, Inc.,
     21  1.1  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 #ifdef DEFINE_LABELS
     26  1.1  christos 
     27  1.1  christos   /* The labels have the case they have because the enum of insn types
     28  1.1  christos      is all uppercase and in the non-stdc case the insn symbol is built
     29  1.1  christos      into the enum name.  */
     30  1.1  christos 
     31  1.1  christos   static struct {
     32  1.1  christos     int index;
     33  1.1  christos     void *label;
     34  1.1  christos   } labels[] = {
     35  1.1  christos     { OR1K32BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
     36  1.1  christos     { OR1K32BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
     37  1.1  christos     { OR1K32BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
     38  1.1  christos     { OR1K32BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
     39  1.1  christos     { OR1K32BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
     40  1.1  christos     { OR1K32BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
     41  1.1  christos     { OR1K32BF_INSN_L_J, && case_sem_INSN_L_J },
     42  1.1  christos     { OR1K32BF_INSN_L_ADRP, && case_sem_INSN_L_ADRP },
     43  1.1  christos     { OR1K32BF_INSN_L_JAL, && case_sem_INSN_L_JAL },
     44  1.1  christos     { OR1K32BF_INSN_L_JR, && case_sem_INSN_L_JR },
     45  1.1  christos     { OR1K32BF_INSN_L_JALR, && case_sem_INSN_L_JALR },
     46  1.1  christos     { OR1K32BF_INSN_L_BNF, && case_sem_INSN_L_BNF },
     47  1.1  christos     { OR1K32BF_INSN_L_BF, && case_sem_INSN_L_BF },
     48  1.1  christos     { OR1K32BF_INSN_L_TRAP, && case_sem_INSN_L_TRAP },
     49  1.1  christos     { OR1K32BF_INSN_L_SYS, && case_sem_INSN_L_SYS },
     50  1.1  christos     { OR1K32BF_INSN_L_MSYNC, && case_sem_INSN_L_MSYNC },
     51  1.1  christos     { OR1K32BF_INSN_L_PSYNC, && case_sem_INSN_L_PSYNC },
     52  1.1  christos     { OR1K32BF_INSN_L_CSYNC, && case_sem_INSN_L_CSYNC },
     53  1.1  christos     { OR1K32BF_INSN_L_RFE, && case_sem_INSN_L_RFE },
     54  1.1  christos     { OR1K32BF_INSN_L_NOP_IMM, && case_sem_INSN_L_NOP_IMM },
     55  1.1  christos     { OR1K32BF_INSN_L_MOVHI, && case_sem_INSN_L_MOVHI },
     56  1.1  christos     { OR1K32BF_INSN_L_MACRC, && case_sem_INSN_L_MACRC },
     57  1.1  christos     { OR1K32BF_INSN_L_MFSPR, && case_sem_INSN_L_MFSPR },
     58  1.1  christos     { OR1K32BF_INSN_L_MTSPR, && case_sem_INSN_L_MTSPR },
     59  1.1  christos     { OR1K32BF_INSN_L_LWZ, && case_sem_INSN_L_LWZ },
     60  1.1  christos     { OR1K32BF_INSN_L_LWS, && case_sem_INSN_L_LWS },
     61  1.1  christos     { OR1K32BF_INSN_L_LWA, && case_sem_INSN_L_LWA },
     62  1.1  christos     { OR1K32BF_INSN_L_LBZ, && case_sem_INSN_L_LBZ },
     63  1.1  christos     { OR1K32BF_INSN_L_LBS, && case_sem_INSN_L_LBS },
     64  1.1  christos     { OR1K32BF_INSN_L_LHZ, && case_sem_INSN_L_LHZ },
     65  1.1  christos     { OR1K32BF_INSN_L_LHS, && case_sem_INSN_L_LHS },
     66  1.1  christos     { OR1K32BF_INSN_L_SW, && case_sem_INSN_L_SW },
     67  1.1  christos     { OR1K32BF_INSN_L_SB, && case_sem_INSN_L_SB },
     68  1.1  christos     { OR1K32BF_INSN_L_SH, && case_sem_INSN_L_SH },
     69  1.1  christos     { OR1K32BF_INSN_L_SWA, && case_sem_INSN_L_SWA },
     70  1.1  christos     { OR1K32BF_INSN_L_SLL, && case_sem_INSN_L_SLL },
     71  1.1  christos     { OR1K32BF_INSN_L_SLLI, && case_sem_INSN_L_SLLI },
     72  1.1  christos     { OR1K32BF_INSN_L_SRL, && case_sem_INSN_L_SRL },
     73  1.1  christos     { OR1K32BF_INSN_L_SRLI, && case_sem_INSN_L_SRLI },
     74  1.1  christos     { OR1K32BF_INSN_L_SRA, && case_sem_INSN_L_SRA },
     75  1.1  christos     { OR1K32BF_INSN_L_SRAI, && case_sem_INSN_L_SRAI },
     76  1.1  christos     { OR1K32BF_INSN_L_ROR, && case_sem_INSN_L_ROR },
     77  1.1  christos     { OR1K32BF_INSN_L_RORI, && case_sem_INSN_L_RORI },
     78  1.1  christos     { OR1K32BF_INSN_L_AND, && case_sem_INSN_L_AND },
     79  1.1  christos     { OR1K32BF_INSN_L_OR, && case_sem_INSN_L_OR },
     80  1.1  christos     { OR1K32BF_INSN_L_XOR, && case_sem_INSN_L_XOR },
     81  1.1  christos     { OR1K32BF_INSN_L_ADD, && case_sem_INSN_L_ADD },
     82  1.1  christos     { OR1K32BF_INSN_L_SUB, && case_sem_INSN_L_SUB },
     83  1.1  christos     { OR1K32BF_INSN_L_ADDC, && case_sem_INSN_L_ADDC },
     84  1.1  christos     { OR1K32BF_INSN_L_MUL, && case_sem_INSN_L_MUL },
     85  1.1  christos     { OR1K32BF_INSN_L_MULD, && case_sem_INSN_L_MULD },
     86  1.1  christos     { OR1K32BF_INSN_L_MULU, && case_sem_INSN_L_MULU },
     87  1.1  christos     { OR1K32BF_INSN_L_MULDU, && case_sem_INSN_L_MULDU },
     88  1.1  christos     { OR1K32BF_INSN_L_DIV, && case_sem_INSN_L_DIV },
     89  1.1  christos     { OR1K32BF_INSN_L_DIVU, && case_sem_INSN_L_DIVU },
     90  1.1  christos     { OR1K32BF_INSN_L_FF1, && case_sem_INSN_L_FF1 },
     91  1.1  christos     { OR1K32BF_INSN_L_FL1, && case_sem_INSN_L_FL1 },
     92  1.1  christos     { OR1K32BF_INSN_L_ANDI, && case_sem_INSN_L_ANDI },
     93  1.1  christos     { OR1K32BF_INSN_L_ORI, && case_sem_INSN_L_ORI },
     94  1.1  christos     { OR1K32BF_INSN_L_XORI, && case_sem_INSN_L_XORI },
     95  1.1  christos     { OR1K32BF_INSN_L_ADDI, && case_sem_INSN_L_ADDI },
     96  1.1  christos     { OR1K32BF_INSN_L_ADDIC, && case_sem_INSN_L_ADDIC },
     97  1.1  christos     { OR1K32BF_INSN_L_MULI, && case_sem_INSN_L_MULI },
     98  1.1  christos     { OR1K32BF_INSN_L_EXTHS, && case_sem_INSN_L_EXTHS },
     99  1.1  christos     { OR1K32BF_INSN_L_EXTBS, && case_sem_INSN_L_EXTBS },
    100  1.1  christos     { OR1K32BF_INSN_L_EXTHZ, && case_sem_INSN_L_EXTHZ },
    101  1.1  christos     { OR1K32BF_INSN_L_EXTBZ, && case_sem_INSN_L_EXTBZ },
    102  1.1  christos     { OR1K32BF_INSN_L_EXTWS, && case_sem_INSN_L_EXTWS },
    103  1.1  christos     { OR1K32BF_INSN_L_EXTWZ, && case_sem_INSN_L_EXTWZ },
    104  1.1  christos     { OR1K32BF_INSN_L_CMOV, && case_sem_INSN_L_CMOV },
    105  1.1  christos     { OR1K32BF_INSN_L_SFGTS, && case_sem_INSN_L_SFGTS },
    106  1.1  christos     { OR1K32BF_INSN_L_SFGTSI, && case_sem_INSN_L_SFGTSI },
    107  1.1  christos     { OR1K32BF_INSN_L_SFGTU, && case_sem_INSN_L_SFGTU },
    108  1.1  christos     { OR1K32BF_INSN_L_SFGTUI, && case_sem_INSN_L_SFGTUI },
    109  1.1  christos     { OR1K32BF_INSN_L_SFGES, && case_sem_INSN_L_SFGES },
    110  1.1  christos     { OR1K32BF_INSN_L_SFGESI, && case_sem_INSN_L_SFGESI },
    111  1.1  christos     { OR1K32BF_INSN_L_SFGEU, && case_sem_INSN_L_SFGEU },
    112  1.1  christos     { OR1K32BF_INSN_L_SFGEUI, && case_sem_INSN_L_SFGEUI },
    113  1.1  christos     { OR1K32BF_INSN_L_SFLTS, && case_sem_INSN_L_SFLTS },
    114  1.1  christos     { OR1K32BF_INSN_L_SFLTSI, && case_sem_INSN_L_SFLTSI },
    115  1.1  christos     { OR1K32BF_INSN_L_SFLTU, && case_sem_INSN_L_SFLTU },
    116  1.1  christos     { OR1K32BF_INSN_L_SFLTUI, && case_sem_INSN_L_SFLTUI },
    117  1.1  christos     { OR1K32BF_INSN_L_SFLES, && case_sem_INSN_L_SFLES },
    118  1.1  christos     { OR1K32BF_INSN_L_SFLESI, && case_sem_INSN_L_SFLESI },
    119  1.1  christos     { OR1K32BF_INSN_L_SFLEU, && case_sem_INSN_L_SFLEU },
    120  1.1  christos     { OR1K32BF_INSN_L_SFLEUI, && case_sem_INSN_L_SFLEUI },
    121  1.1  christos     { OR1K32BF_INSN_L_SFEQ, && case_sem_INSN_L_SFEQ },
    122  1.1  christos     { OR1K32BF_INSN_L_SFEQI, && case_sem_INSN_L_SFEQI },
    123  1.1  christos     { OR1K32BF_INSN_L_SFNE, && case_sem_INSN_L_SFNE },
    124  1.1  christos     { OR1K32BF_INSN_L_SFNEI, && case_sem_INSN_L_SFNEI },
    125  1.1  christos     { OR1K32BF_INSN_L_MAC, && case_sem_INSN_L_MAC },
    126  1.1  christos     { OR1K32BF_INSN_L_MACI, && case_sem_INSN_L_MACI },
    127  1.1  christos     { OR1K32BF_INSN_L_MACU, && case_sem_INSN_L_MACU },
    128  1.1  christos     { OR1K32BF_INSN_L_MSB, && case_sem_INSN_L_MSB },
    129  1.1  christos     { OR1K32BF_INSN_L_MSBU, && case_sem_INSN_L_MSBU },
    130  1.1  christos     { OR1K32BF_INSN_L_CUST1, && case_sem_INSN_L_CUST1 },
    131  1.1  christos     { OR1K32BF_INSN_L_CUST2, && case_sem_INSN_L_CUST2 },
    132  1.1  christos     { OR1K32BF_INSN_L_CUST3, && case_sem_INSN_L_CUST3 },
    133  1.1  christos     { OR1K32BF_INSN_L_CUST4, && case_sem_INSN_L_CUST4 },
    134  1.1  christos     { OR1K32BF_INSN_L_CUST5, && case_sem_INSN_L_CUST5 },
    135  1.1  christos     { OR1K32BF_INSN_L_CUST6, && case_sem_INSN_L_CUST6 },
    136  1.1  christos     { OR1K32BF_INSN_L_CUST7, && case_sem_INSN_L_CUST7 },
    137  1.1  christos     { OR1K32BF_INSN_L_CUST8, && case_sem_INSN_L_CUST8 },
    138  1.1  christos     { OR1K32BF_INSN_LF_ADD_S, && case_sem_INSN_LF_ADD_S },
    139  1.1  christos     { OR1K32BF_INSN_LF_SUB_S, && case_sem_INSN_LF_SUB_S },
    140  1.1  christos     { OR1K32BF_INSN_LF_MUL_S, && case_sem_INSN_LF_MUL_S },
    141  1.1  christos     { OR1K32BF_INSN_LF_DIV_S, && case_sem_INSN_LF_DIV_S },
    142  1.1  christos     { OR1K32BF_INSN_LF_REM_S, && case_sem_INSN_LF_REM_S },
    143  1.1  christos     { OR1K32BF_INSN_LF_ITOF_S, && case_sem_INSN_LF_ITOF_S },
    144  1.1  christos     { OR1K32BF_INSN_LF_FTOI_S, && case_sem_INSN_LF_FTOI_S },
    145  1.1  christos     { OR1K32BF_INSN_LF_EQ_S, && case_sem_INSN_LF_EQ_S },
    146  1.1  christos     { OR1K32BF_INSN_LF_NE_S, && case_sem_INSN_LF_NE_S },
    147  1.1  christos     { OR1K32BF_INSN_LF_GE_S, && case_sem_INSN_LF_GE_S },
    148  1.1  christos     { OR1K32BF_INSN_LF_GT_S, && case_sem_INSN_LF_GT_S },
    149  1.1  christos     { OR1K32BF_INSN_LF_LT_S, && case_sem_INSN_LF_LT_S },
    150  1.1  christos     { OR1K32BF_INSN_LF_LE_S, && case_sem_INSN_LF_LE_S },
    151  1.1  christos     { OR1K32BF_INSN_LF_MADD_S, && case_sem_INSN_LF_MADD_S },
    152  1.1  christos     { OR1K32BF_INSN_LF_CUST1_S, && case_sem_INSN_LF_CUST1_S },
    153  1.1  christos     { 0, 0 }
    154  1.1  christos   };
    155  1.1  christos   int i;
    156  1.1  christos 
    157  1.1  christos   for (i = 0; labels[i].label != 0; ++i)
    158  1.1  christos     {
    159  1.1  christos #if FAST_P
    160  1.1  christos       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
    161  1.1  christos #else
    162  1.1  christos       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
    163  1.1  christos #endif
    164  1.1  christos     }
    165  1.1  christos 
    166  1.1  christos #undef DEFINE_LABELS
    167  1.1  christos #endif /* DEFINE_LABELS */
    168  1.1  christos 
    169  1.1  christos #ifdef DEFINE_SWITCH
    170  1.1  christos 
    171  1.1  christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
    172  1.1  christos    off frills like tracing and profiling.  */
    173  1.1  christos /* FIXME: A better way would be to have TRACE_RESULT check for something
    174  1.1  christos    that can cause it to be optimized out.  Another way would be to emit
    175  1.1  christos    special handlers into the instruction "stream".  */
    176  1.1  christos 
    177  1.1  christos #if FAST_P
    178  1.1  christos #undef CGEN_TRACE_RESULT
    179  1.1  christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
    180  1.1  christos #endif
    181  1.1  christos 
    182  1.1  christos #undef GET_ATTR
    183  1.1  christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
    184  1.1  christos 
    185  1.1  christos {
    186  1.1  christos 
    187  1.1  christos #if WITH_SCACHE_PBB
    188  1.1  christos 
    189  1.1  christos /* Branch to next handler without going around main loop.  */
    190  1.1  christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
    191  1.1  christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
    192  1.1  christos 
    193  1.1  christos #else /* ! WITH_SCACHE_PBB */
    194  1.1  christos 
    195  1.1  christos #define NEXT(vpc) BREAK (sem)
    196  1.1  christos #ifdef __GNUC__
    197  1.1  christos #if FAST_P
    198  1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
    199  1.1  christos #else
    200  1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
    201  1.1  christos #endif
    202  1.1  christos #else
    203  1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
    204  1.1  christos #endif
    205  1.1  christos 
    206  1.1  christos #endif /* ! WITH_SCACHE_PBB */
    207  1.1  christos 
    208  1.1  christos     {
    209  1.1  christos 
    210  1.1  christos   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
    211  1.1  christos {
    212  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    213  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    214  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    215  1.1  christos   int UNUSED written = 0;
    216  1.1  christos   IADDR UNUSED pc = abuf->addr;
    217  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    218  1.1  christos 
    219  1.1  christos   {
    220  1.1  christos     /* Update the recorded pc in the cpu state struct.
    221  1.1  christos        Only necessary for WITH_SCACHE case, but to avoid the
    222  1.1  christos        conditional compilation ....  */
    223  1.1  christos     SET_H_PC (pc);
    224  1.1  christos     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
    225  1.1  christos        using the default-insn-bitsize spec.  When executing insns in parallel
    226  1.1  christos        we may want to queue the fault and continue execution.  */
    227  1.1  christos     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    228  1.1  christos     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
    229  1.1  christos   }
    230  1.1  christos 
    231  1.1  christos #undef FLD
    232  1.1  christos }
    233  1.1  christos   NEXT (vpc);
    234  1.1  christos 
    235  1.1  christos   CASE (sem, INSN_X_AFTER) : /* --after-- */
    236  1.1  christos {
    237  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    238  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    239  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    240  1.1  christos   int UNUSED written = 0;
    241  1.1  christos   IADDR UNUSED pc = abuf->addr;
    242  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    243  1.1  christos 
    244  1.1  christos   {
    245  1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    246  1.1  christos     or1k32bf_pbb_after (current_cpu, sem_arg);
    247  1.1  christos #endif
    248  1.1  christos   }
    249  1.1  christos 
    250  1.1  christos #undef FLD
    251  1.1  christos }
    252  1.1  christos   NEXT (vpc);
    253  1.1  christos 
    254  1.1  christos   CASE (sem, INSN_X_BEFORE) : /* --before-- */
    255  1.1  christos {
    256  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    257  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    258  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    259  1.1  christos   int UNUSED written = 0;
    260  1.1  christos   IADDR UNUSED pc = abuf->addr;
    261  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    262  1.1  christos 
    263  1.1  christos   {
    264  1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    265  1.1  christos     or1k32bf_pbb_before (current_cpu, sem_arg);
    266  1.1  christos #endif
    267  1.1  christos   }
    268  1.1  christos 
    269  1.1  christos #undef FLD
    270  1.1  christos }
    271  1.1  christos   NEXT (vpc);
    272  1.1  christos 
    273  1.1  christos   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
    274  1.1  christos {
    275  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    276  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    277  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    278  1.1  christos   int UNUSED written = 0;
    279  1.1  christos   IADDR UNUSED pc = abuf->addr;
    280  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    281  1.1  christos 
    282  1.1  christos   {
    283  1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    284  1.1  christos #ifdef DEFINE_SWITCH
    285  1.1  christos     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
    286  1.1  christos 			       pbb_br_type, pbb_br_npc);
    287  1.1  christos     BREAK (sem);
    288  1.1  christos #else
    289  1.1  christos     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
    290  1.1  christos     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
    291  1.1  christos 			       CPU_PBB_BR_TYPE (current_cpu),
    292  1.1  christos 			       CPU_PBB_BR_NPC (current_cpu));
    293  1.1  christos #endif
    294  1.1  christos #endif
    295  1.1  christos   }
    296  1.1  christos 
    297  1.1  christos #undef FLD
    298  1.1  christos }
    299  1.1  christos   NEXT (vpc);
    300  1.1  christos 
    301  1.1  christos   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
    302  1.1  christos {
    303  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    304  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    305  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    306  1.1  christos   int UNUSED written = 0;
    307  1.1  christos   IADDR UNUSED pc = abuf->addr;
    308  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    309  1.1  christos 
    310  1.1  christos   {
    311  1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    312  1.1  christos     vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
    313  1.1  christos #ifdef DEFINE_SWITCH
    314  1.1  christos     BREAK (sem);
    315  1.1  christos #endif
    316  1.1  christos #endif
    317  1.1  christos   }
    318  1.1  christos 
    319  1.1  christos #undef FLD
    320  1.1  christos }
    321  1.1  christos   NEXT (vpc);
    322  1.1  christos 
    323  1.1  christos   CASE (sem, INSN_X_BEGIN) : /* --begin-- */
    324  1.1  christos {
    325  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    326  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    327  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    328  1.1  christos   int UNUSED written = 0;
    329  1.1  christos   IADDR UNUSED pc = abuf->addr;
    330  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    331  1.1  christos 
    332  1.1  christos   {
    333  1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    334  1.1  christos #if defined DEFINE_SWITCH || defined FAST_P
    335  1.1  christos     /* In the switch case FAST_P is a constant, allowing several optimizations
    336  1.1  christos        in any called inline functions.  */
    337  1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
    338  1.1  christos #else
    339  1.1  christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
    340  1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
    341  1.1  christos #else
    342  1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, 0);
    343  1.1  christos #endif
    344  1.1  christos #endif
    345  1.1  christos #endif
    346  1.1  christos   }
    347  1.1  christos 
    348  1.1  christos #undef FLD
    349  1.1  christos }
    350  1.1  christos   NEXT (vpc);
    351  1.1  christos 
    352  1.1  christos   CASE (sem, INSN_L_J) : /* l.j ${disp26} */
    353  1.1  christos {
    354  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    355  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    356  1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    357  1.1  christos   int UNUSED written = 0;
    358  1.1  christos   IADDR UNUSED pc = abuf->addr;
    359  1.1  christos   SEM_BRANCH_INIT
    360  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    361  1.1  christos 
    362  1.1  christos {
    363  1.1  christos {
    364  1.1  christos   {
    365  1.1  christos     USI opval = FLD (i_disp26);
    366  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    367  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    368  1.1  christos   }
    369  1.1  christos }
    370  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    371  1.1  christos if (1)
    372  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    373  1.1  christos }
    374  1.1  christos }
    375  1.1  christos 
    376  1.1  christos   SEM_BRANCH_FINI (vpc);
    377  1.1  christos #undef FLD
    378  1.1  christos }
    379  1.1  christos   NEXT (vpc);
    380  1.1  christos 
    381  1.1  christos   CASE (sem, INSN_L_ADRP) : /* l.adrp $rD,${disp21} */
    382  1.1  christos {
    383  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    384  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    385  1.1  christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
    386  1.1  christos   int UNUSED written = 0;
    387  1.1  christos   IADDR UNUSED pc = abuf->addr;
    388  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    389  1.1  christos 
    390  1.1  christos   {
    391  1.1  christos     USI opval = FLD (i_disp21);
    392  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    393  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    394  1.1  christos   }
    395  1.1  christos 
    396  1.1  christos #undef FLD
    397  1.1  christos }
    398  1.1  christos   NEXT (vpc);
    399  1.1  christos 
    400  1.1  christos   CASE (sem, INSN_L_JAL) : /* l.jal ${disp26} */
    401  1.1  christos {
    402  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    403  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    404  1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    405  1.1  christos   int UNUSED written = 0;
    406  1.1  christos   IADDR UNUSED pc = abuf->addr;
    407  1.1  christos   SEM_BRANCH_INIT
    408  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    409  1.1  christos 
    410  1.1  christos {
    411  1.1  christos   {
    412  1.1  christos     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
    413  1.1  christos     SET_H_GPR (((UINT) 9), opval);
    414  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    415  1.1  christos   }
    416  1.1  christos {
    417  1.1  christos {
    418  1.1  christos   {
    419  1.1  christos     USI opval = FLD (i_disp26);
    420  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    421  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    422  1.1  christos   }
    423  1.1  christos }
    424  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    425  1.1  christos if (1)
    426  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    427  1.1  christos }
    428  1.1  christos }
    429  1.1  christos }
    430  1.1  christos 
    431  1.1  christos   SEM_BRANCH_FINI (vpc);
    432  1.1  christos #undef FLD
    433  1.1  christos }
    434  1.1  christos   NEXT (vpc);
    435  1.1  christos 
    436  1.1  christos   CASE (sem, INSN_L_JR) : /* l.jr $rB */
    437  1.1  christos {
    438  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    439  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    440  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
    441  1.1  christos   int UNUSED written = 0;
    442  1.1  christos   IADDR UNUSED pc = abuf->addr;
    443  1.1  christos   SEM_BRANCH_INIT
    444  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    445  1.1  christos 
    446  1.1  christos {
    447  1.1  christos {
    448  1.1  christos   {
    449  1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
    450  1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    451  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    452  1.1  christos   }
    453  1.1  christos }
    454  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    455  1.1  christos if (1)
    456  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    457  1.1  christos }
    458  1.1  christos }
    459  1.1  christos 
    460  1.1  christos   SEM_BRANCH_FINI (vpc);
    461  1.1  christos #undef FLD
    462  1.1  christos }
    463  1.1  christos   NEXT (vpc);
    464  1.1  christos 
    465  1.1  christos   CASE (sem, INSN_L_JALR) : /* l.jalr $rB */
    466  1.1  christos {
    467  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    468  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    469  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
    470  1.1  christos   int UNUSED written = 0;
    471  1.1  christos   IADDR UNUSED pc = abuf->addr;
    472  1.1  christos   SEM_BRANCH_INIT
    473  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    474  1.1  christos 
    475  1.1  christos {
    476  1.1  christos   {
    477  1.1  christos     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
    478  1.1  christos     SET_H_GPR (((UINT) 9), opval);
    479  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    480  1.1  christos   }
    481  1.1  christos {
    482  1.1  christos {
    483  1.1  christos   {
    484  1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
    485  1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    486  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    487  1.1  christos   }
    488  1.1  christos }
    489  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    490  1.1  christos if (1)
    491  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    492  1.1  christos }
    493  1.1  christos }
    494  1.1  christos }
    495  1.1  christos 
    496  1.1  christos   SEM_BRANCH_FINI (vpc);
    497  1.1  christos #undef FLD
    498  1.1  christos }
    499  1.1  christos   NEXT (vpc);
    500  1.1  christos 
    501  1.1  christos   CASE (sem, INSN_L_BNF) : /* l.bnf ${disp26} */
    502  1.1  christos {
    503  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    504  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    505  1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    506  1.1  christos   int UNUSED written = 0;
    507  1.1  christos   IADDR UNUSED pc = abuf->addr;
    508  1.1  christos   SEM_BRANCH_INIT
    509  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    510  1.1  christos 
    511  1.1  christos {
    512  1.1  christos if (NOTSI (GET_H_SYS_SR_F ())) {
    513  1.1  christos {
    514  1.1  christos   {
    515  1.1  christos     USI opval = FLD (i_disp26);
    516  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    517  1.1  christos     written |= (1 << 4);
    518  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    519  1.1  christos   }
    520  1.1  christos }
    521  1.1  christos } else {
    522  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    523  1.1  christos {
    524  1.1  christos   {
    525  1.1  christos     USI opval = ADDSI (pc, 4);
    526  1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    527  1.1  christos     written |= (1 << 4);
    528  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    529  1.1  christos   }
    530  1.1  christos }
    531  1.1  christos }
    532  1.1  christos }
    533  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    534  1.1  christos if (1)
    535  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    536  1.1  christos }
    537  1.1  christos }
    538  1.1  christos 
    539  1.1  christos   abuf->written = written;
    540  1.1  christos   SEM_BRANCH_FINI (vpc);
    541  1.1  christos #undef FLD
    542  1.1  christos }
    543  1.1  christos   NEXT (vpc);
    544  1.1  christos 
    545  1.1  christos   CASE (sem, INSN_L_BF) : /* l.bf ${disp26} */
    546  1.1  christos {
    547  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    548  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    549  1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    550  1.1  christos   int UNUSED written = 0;
    551  1.1  christos   IADDR UNUSED pc = abuf->addr;
    552  1.1  christos   SEM_BRANCH_INIT
    553  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    554  1.1  christos 
    555  1.1  christos {
    556  1.1  christos if (GET_H_SYS_SR_F ()) {
    557  1.1  christos {
    558  1.1  christos   {
    559  1.1  christos     USI opval = FLD (i_disp26);
    560  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    561  1.1  christos     written |= (1 << 4);
    562  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    563  1.1  christos   }
    564  1.1  christos }
    565  1.1  christos } else {
    566  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    567  1.1  christos {
    568  1.1  christos   {
    569  1.1  christos     USI opval = ADDSI (pc, 4);
    570  1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    571  1.1  christos     written |= (1 << 4);
    572  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    573  1.1  christos   }
    574  1.1  christos }
    575  1.1  christos }
    576  1.1  christos }
    577  1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    578  1.1  christos if (1)
    579  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    580  1.1  christos }
    581  1.1  christos }
    582  1.1  christos 
    583  1.1  christos   abuf->written = written;
    584  1.1  christos   SEM_BRANCH_FINI (vpc);
    585  1.1  christos #undef FLD
    586  1.1  christos }
    587  1.1  christos   NEXT (vpc);
    588  1.1  christos 
    589  1.1  christos   CASE (sem, INSN_L_TRAP) : /* l.trap ${uimm16} */
    590  1.1  christos {
    591  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    592  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    593  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    594  1.1  christos   int UNUSED written = 0;
    595  1.1  christos   IADDR UNUSED pc = abuf->addr;
    596  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    597  1.1  christos 
    598  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
    599  1.1  christos 
    600  1.1  christos #undef FLD
    601  1.1  christos }
    602  1.1  christos   NEXT (vpc);
    603  1.1  christos 
    604  1.1  christos   CASE (sem, INSN_L_SYS) : /* l.sys ${uimm16} */
    605  1.1  christos {
    606  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    607  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    608  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    609  1.1  christos   int UNUSED written = 0;
    610  1.1  christos   IADDR UNUSED pc = abuf->addr;
    611  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    612  1.1  christos 
    613  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
    614  1.1  christos 
    615  1.1  christos #undef FLD
    616  1.1  christos }
    617  1.1  christos   NEXT (vpc);
    618  1.1  christos 
    619  1.1  christos   CASE (sem, INSN_L_MSYNC) : /* l.msync */
    620  1.1  christos {
    621  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    622  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    623  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    624  1.1  christos   int UNUSED written = 0;
    625  1.1  christos   IADDR UNUSED pc = abuf->addr;
    626  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    627  1.1  christos 
    628  1.1  christos ((void) 0); /*nop*/
    629  1.1  christos 
    630  1.1  christos #undef FLD
    631  1.1  christos }
    632  1.1  christos   NEXT (vpc);
    633  1.1  christos 
    634  1.1  christos   CASE (sem, INSN_L_PSYNC) : /* l.psync */
    635  1.1  christos {
    636  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    637  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    638  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    639  1.1  christos   int UNUSED written = 0;
    640  1.1  christos   IADDR UNUSED pc = abuf->addr;
    641  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    642  1.1  christos 
    643  1.1  christos ((void) 0); /*nop*/
    644  1.1  christos 
    645  1.1  christos #undef FLD
    646  1.1  christos }
    647  1.1  christos   NEXT (vpc);
    648  1.1  christos 
    649  1.1  christos   CASE (sem, INSN_L_CSYNC) : /* l.csync */
    650  1.1  christos {
    651  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    652  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    653  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    654  1.1  christos   int UNUSED written = 0;
    655  1.1  christos   IADDR UNUSED pc = abuf->addr;
    656  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    657  1.1  christos 
    658  1.1  christos ((void) 0); /*nop*/
    659  1.1  christos 
    660  1.1  christos #undef FLD
    661  1.1  christos }
    662  1.1  christos   NEXT (vpc);
    663  1.1  christos 
    664  1.1  christos   CASE (sem, INSN_L_RFE) : /* l.rfe */
    665  1.1  christos {
    666  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    667  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    668  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    669  1.1  christos   int UNUSED written = 0;
    670  1.1  christos   IADDR UNUSED pc = abuf->addr;
    671  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    672  1.1  christos 
    673  1.1  christos or1k32bf_rfe (current_cpu);
    674  1.1  christos 
    675  1.1  christos #undef FLD
    676  1.1  christos }
    677  1.1  christos   NEXT (vpc);
    678  1.1  christos 
    679  1.1  christos   CASE (sem, INSN_L_NOP_IMM) : /* l.nop ${uimm16} */
    680  1.1  christos {
    681  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    682  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    683  1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    684  1.1  christos   int UNUSED written = 0;
    685  1.1  christos   IADDR UNUSED pc = abuf->addr;
    686  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    687  1.1  christos 
    688  1.1  christos or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
    689  1.1  christos 
    690  1.1  christos #undef FLD
    691  1.1  christos }
    692  1.1  christos   NEXT (vpc);
    693  1.1  christos 
    694  1.1  christos   CASE (sem, INSN_L_MOVHI) : /* l.movhi $rD,$uimm16 */
    695  1.1  christos {
    696  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    697  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    698  1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    699  1.1  christos   int UNUSED written = 0;
    700  1.1  christos   IADDR UNUSED pc = abuf->addr;
    701  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    702  1.1  christos 
    703  1.1  christos   {
    704  1.1  christos     USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
    705  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    706  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    707  1.1  christos   }
    708  1.1  christos 
    709  1.1  christos #undef FLD
    710  1.1  christos }
    711  1.1  christos   NEXT (vpc);
    712  1.1  christos 
    713  1.1  christos   CASE (sem, INSN_L_MACRC) : /* l.macrc $rD */
    714  1.1  christos {
    715  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    716  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    717  1.1  christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
    718  1.1  christos   int UNUSED written = 0;
    719  1.1  christos   IADDR UNUSED pc = abuf->addr;
    720  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    721  1.1  christos 
    722  1.1  christos {
    723  1.1  christos   {
    724  1.1  christos     USI opval = GET_H_MAC_MACLO ();
    725  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    726  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    727  1.1  christos   }
    728  1.1  christos   {
    729  1.1  christos     USI opval = 0;
    730  1.1  christos     SET_H_MAC_MACLO (opval);
    731  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
    732  1.1  christos   }
    733  1.1  christos   {
    734  1.1  christos     USI opval = 0;
    735  1.1  christos     SET_H_MAC_MACHI (opval);
    736  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
    737  1.1  christos   }
    738  1.1  christos }
    739  1.1  christos 
    740  1.1  christos #undef FLD
    741  1.1  christos }
    742  1.1  christos   NEXT (vpc);
    743  1.1  christos 
    744  1.1  christos   CASE (sem, INSN_L_MFSPR) : /* l.mfspr $rD,$rA,${uimm16} */
    745  1.1  christos {
    746  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    747  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    748  1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    749  1.1  christos   int UNUSED written = 0;
    750  1.1  christos   IADDR UNUSED pc = abuf->addr;
    751  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    752  1.1  christos 
    753  1.1  christos   {
    754  1.1  christos     USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
    755  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    756  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    757  1.1  christos   }
    758  1.1  christos 
    759  1.1  christos #undef FLD
    760  1.1  christos }
    761  1.1  christos   NEXT (vpc);
    762  1.1  christos 
    763  1.1  christos   CASE (sem, INSN_L_MTSPR) : /* l.mtspr $rA,$rB,${uimm16-split} */
    764  1.1  christos {
    765  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    766  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    767  1.1  christos #define FLD(f) abuf->fields.sfmt_l_mtspr.f
    768  1.1  christos   int UNUSED written = 0;
    769  1.1  christos   IADDR UNUSED pc = abuf->addr;
    770  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    771  1.1  christos 
    772  1.1  christos or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
    773  1.1  christos 
    774  1.1  christos #undef FLD
    775  1.1  christos }
    776  1.1  christos   NEXT (vpc);
    777  1.1  christos 
    778  1.1  christos   CASE (sem, INSN_L_LWZ) : /* l.lwz $rD,${simm16}($rA) */
    779  1.1  christos {
    780  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    781  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    782  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    783  1.1  christos   int UNUSED written = 0;
    784  1.1  christos   IADDR UNUSED pc = abuf->addr;
    785  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    786  1.1  christos 
    787  1.1  christos   {
    788  1.1  christos     USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
    789  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    790  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    791  1.1  christos   }
    792  1.1  christos 
    793  1.1  christos #undef FLD
    794  1.1  christos }
    795  1.1  christos   NEXT (vpc);
    796  1.1  christos 
    797  1.1  christos   CASE (sem, INSN_L_LWS) : /* l.lws $rD,${simm16}($rA) */
    798  1.1  christos {
    799  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    800  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    801  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    802  1.1  christos   int UNUSED written = 0;
    803  1.1  christos   IADDR UNUSED pc = abuf->addr;
    804  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    805  1.1  christos 
    806  1.1  christos   {
    807  1.1  christos     SI opval = EXTSISI (GETMEMSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
    808  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    809  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    810  1.1  christos   }
    811  1.1  christos 
    812  1.1  christos #undef FLD
    813  1.1  christos }
    814  1.1  christos   NEXT (vpc);
    815  1.1  christos 
    816  1.1  christos   CASE (sem, INSN_L_LWA) : /* l.lwa $rD,${simm16}($rA) */
    817  1.1  christos {
    818  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    819  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    820  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    821  1.1  christos   int UNUSED written = 0;
    822  1.1  christos   IADDR UNUSED pc = abuf->addr;
    823  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    824  1.1  christos 
    825  1.1  christos {
    826  1.1  christos   {
    827  1.1  christos     USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
    828  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    829  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    830  1.1  christos   }
    831  1.1  christos   {
    832  1.1  christos     BI opval = 1;
    833  1.1  christos     CPU (h_atomic_reserve) = opval;
    834  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    835  1.1  christos   }
    836  1.1  christos   {
    837  1.1  christos     SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
    838  1.1  christos     CPU (h_atomic_address) = opval;
    839  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
    840  1.1  christos   }
    841  1.1  christos }
    842  1.1  christos 
    843  1.1  christos #undef FLD
    844  1.1  christos }
    845  1.1  christos   NEXT (vpc);
    846  1.1  christos 
    847  1.1  christos   CASE (sem, INSN_L_LBZ) : /* l.lbz $rD,${simm16}($rA) */
    848  1.1  christos {
    849  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    850  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    851  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    852  1.1  christos   int UNUSED written = 0;
    853  1.1  christos   IADDR UNUSED pc = abuf->addr;
    854  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    855  1.1  christos 
    856  1.1  christos   {
    857  1.1  christos     USI opval = ZEXTQISI (GETMEMUQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
    858  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    859  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    860  1.1  christos   }
    861  1.1  christos 
    862  1.1  christos #undef FLD
    863  1.1  christos }
    864  1.1  christos   NEXT (vpc);
    865  1.1  christos 
    866  1.1  christos   CASE (sem, INSN_L_LBS) : /* l.lbs $rD,${simm16}($rA) */
    867  1.1  christos {
    868  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    869  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    870  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    871  1.1  christos   int UNUSED written = 0;
    872  1.1  christos   IADDR UNUSED pc = abuf->addr;
    873  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    874  1.1  christos 
    875  1.1  christos   {
    876  1.1  christos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
    877  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    878  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    879  1.1  christos   }
    880  1.1  christos 
    881  1.1  christos #undef FLD
    882  1.1  christos }
    883  1.1  christos   NEXT (vpc);
    884  1.1  christos 
    885  1.1  christos   CASE (sem, INSN_L_LHZ) : /* l.lhz $rD,${simm16}($rA) */
    886  1.1  christos {
    887  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    888  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    889  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    890  1.1  christos   int UNUSED written = 0;
    891  1.1  christos   IADDR UNUSED pc = abuf->addr;
    892  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    893  1.1  christos 
    894  1.1  christos   {
    895  1.1  christos     USI opval = ZEXTHISI (GETMEMUHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
    896  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    897  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    898  1.1  christos   }
    899  1.1  christos 
    900  1.1  christos #undef FLD
    901  1.1  christos }
    902  1.1  christos   NEXT (vpc);
    903  1.1  christos 
    904  1.1  christos   CASE (sem, INSN_L_LHS) : /* l.lhs $rD,${simm16}($rA) */
    905  1.1  christos {
    906  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    907  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    908  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    909  1.1  christos   int UNUSED written = 0;
    910  1.1  christos   IADDR UNUSED pc = abuf->addr;
    911  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    912  1.1  christos 
    913  1.1  christos   {
    914  1.1  christos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
    915  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    916  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    917  1.1  christos   }
    918  1.1  christos 
    919  1.1  christos #undef FLD
    920  1.1  christos }
    921  1.1  christos   NEXT (vpc);
    922  1.1  christos 
    923  1.1  christos   CASE (sem, INSN_L_SW) : /* l.sw ${simm16-split}($rA),$rB */
    924  1.1  christos {
    925  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    926  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    927  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    928  1.1  christos   int UNUSED written = 0;
    929  1.1  christos   IADDR UNUSED pc = abuf->addr;
    930  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    931  1.1  christos 
    932  1.1  christos {
    933  1.1  christos   SI tmp_addr;
    934  1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
    935  1.1  christos   {
    936  1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
    937  1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
    938  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    939  1.1  christos   }
    940  1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
    941  1.1  christos   {
    942  1.1  christos     BI opval = 0;
    943  1.1  christos     CPU (h_atomic_reserve) = opval;
    944  1.1  christos     written |= (1 << 4);
    945  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    946  1.1  christos   }
    947  1.1  christos }
    948  1.1  christos }
    949  1.1  christos 
    950  1.1  christos   abuf->written = written;
    951  1.1  christos #undef FLD
    952  1.1  christos }
    953  1.1  christos   NEXT (vpc);
    954  1.1  christos 
    955  1.1  christos   CASE (sem, INSN_L_SB) : /* l.sb ${simm16-split}($rA),$rB */
    956  1.1  christos {
    957  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    958  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    959  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    960  1.1  christos   int UNUSED written = 0;
    961  1.1  christos   IADDR UNUSED pc = abuf->addr;
    962  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    963  1.1  christos 
    964  1.1  christos {
    965  1.1  christos   SI tmp_addr;
    966  1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
    967  1.1  christos   {
    968  1.1  christos     UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
    969  1.1  christos     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
    970  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    971  1.1  christos   }
    972  1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
    973  1.1  christos   {
    974  1.1  christos     BI opval = 0;
    975  1.1  christos     CPU (h_atomic_reserve) = opval;
    976  1.1  christos     written |= (1 << 4);
    977  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    978  1.1  christos   }
    979  1.1  christos }
    980  1.1  christos }
    981  1.1  christos 
    982  1.1  christos   abuf->written = written;
    983  1.1  christos #undef FLD
    984  1.1  christos }
    985  1.1  christos   NEXT (vpc);
    986  1.1  christos 
    987  1.1  christos   CASE (sem, INSN_L_SH) : /* l.sh ${simm16-split}($rA),$rB */
    988  1.1  christos {
    989  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    990  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    991  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    992  1.1  christos   int UNUSED written = 0;
    993  1.1  christos   IADDR UNUSED pc = abuf->addr;
    994  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    995  1.1  christos 
    996  1.1  christos {
    997  1.1  christos   SI tmp_addr;
    998  1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
    999  1.1  christos   {
   1000  1.1  christos     UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
   1001  1.1  christos     SETMEMUHI (current_cpu, pc, tmp_addr, opval);
   1002  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1003  1.1  christos   }
   1004  1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
   1005  1.1  christos   {
   1006  1.1  christos     BI opval = 0;
   1007  1.1  christos     CPU (h_atomic_reserve) = opval;
   1008  1.1  christos     written |= (1 << 4);
   1009  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
   1010  1.1  christos   }
   1011  1.1  christos }
   1012  1.1  christos }
   1013  1.1  christos 
   1014  1.1  christos   abuf->written = written;
   1015  1.1  christos #undef FLD
   1016  1.1  christos }
   1017  1.1  christos   NEXT (vpc);
   1018  1.1  christos 
   1019  1.1  christos   CASE (sem, INSN_L_SWA) : /* l.swa ${simm16-split}($rA),$rB */
   1020  1.1  christos {
   1021  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1022  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1023  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
   1024  1.1  christos   int UNUSED written = 0;
   1025  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1026  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1027  1.1  christos 
   1028  1.1  christos {
   1029  1.1  christos   SI tmp_addr;
   1030  1.1  christos   BI tmp_flag;
   1031  1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
   1032  1.1  christos   {
   1033  1.1  christos     USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
   1034  1.1  christos     SET_H_SYS_SR_F (opval);
   1035  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1036  1.1  christos   }
   1037  1.1  christos if (GET_H_SYS_SR_F ()) {
   1038  1.1  christos   {
   1039  1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
   1040  1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
   1041  1.1  christos     written |= (1 << 7);
   1042  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1043  1.1  christos   }
   1044  1.1  christos }
   1045  1.1  christos   {
   1046  1.1  christos     BI opval = 0;
   1047  1.1  christos     CPU (h_atomic_reserve) = opval;
   1048  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
   1049  1.1  christos   }
   1050  1.1  christos }
   1051  1.1  christos 
   1052  1.1  christos   abuf->written = written;
   1053  1.1  christos #undef FLD
   1054  1.1  christos }
   1055  1.1  christos   NEXT (vpc);
   1056  1.1  christos 
   1057  1.1  christos   CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
   1058  1.1  christos {
   1059  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1060  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1061  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1062  1.1  christos   int UNUSED written = 0;
   1063  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1064  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1065  1.1  christos 
   1066  1.1  christos   {
   1067  1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1068  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1069  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1070  1.1  christos   }
   1071  1.1  christos 
   1072  1.1  christos #undef FLD
   1073  1.1  christos }
   1074  1.1  christos   NEXT (vpc);
   1075  1.1  christos 
   1076  1.1  christos   CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
   1077  1.1  christos {
   1078  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1079  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1080  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1081  1.1  christos   int UNUSED written = 0;
   1082  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1083  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1084  1.1  christos 
   1085  1.1  christos   {
   1086  1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1087  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1088  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1089  1.1  christos   }
   1090  1.1  christos 
   1091  1.1  christos #undef FLD
   1092  1.1  christos }
   1093  1.1  christos   NEXT (vpc);
   1094  1.1  christos 
   1095  1.1  christos   CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
   1096  1.1  christos {
   1097  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1098  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1099  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1100  1.1  christos   int UNUSED written = 0;
   1101  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1102  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1103  1.1  christos 
   1104  1.1  christos   {
   1105  1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1106  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1107  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1108  1.1  christos   }
   1109  1.1  christos 
   1110  1.1  christos #undef FLD
   1111  1.1  christos }
   1112  1.1  christos   NEXT (vpc);
   1113  1.1  christos 
   1114  1.1  christos   CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
   1115  1.1  christos {
   1116  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1117  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1118  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1119  1.1  christos   int UNUSED written = 0;
   1120  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1121  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1122  1.1  christos 
   1123  1.1  christos   {
   1124  1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1125  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1126  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1127  1.1  christos   }
   1128  1.1  christos 
   1129  1.1  christos #undef FLD
   1130  1.1  christos }
   1131  1.1  christos   NEXT (vpc);
   1132  1.1  christos 
   1133  1.1  christos   CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
   1134  1.1  christos {
   1135  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1136  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1137  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1138  1.1  christos   int UNUSED written = 0;
   1139  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1140  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1141  1.1  christos 
   1142  1.1  christos   {
   1143  1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1144  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1145  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1146  1.1  christos   }
   1147  1.1  christos 
   1148  1.1  christos #undef FLD
   1149  1.1  christos }
   1150  1.1  christos   NEXT (vpc);
   1151  1.1  christos 
   1152  1.1  christos   CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
   1153  1.1  christos {
   1154  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1155  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1156  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1157  1.1  christos   int UNUSED written = 0;
   1158  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1159  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1160  1.1  christos 
   1161  1.1  christos   {
   1162  1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1163  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1164  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1165  1.1  christos   }
   1166  1.1  christos 
   1167  1.1  christos #undef FLD
   1168  1.1  christos }
   1169  1.1  christos   NEXT (vpc);
   1170  1.1  christos 
   1171  1.1  christos   CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
   1172  1.1  christos {
   1173  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1174  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1175  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1176  1.1  christos   int UNUSED written = 0;
   1177  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1178  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1179  1.1  christos 
   1180  1.1  christos   {
   1181  1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1182  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1183  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1184  1.1  christos   }
   1185  1.1  christos 
   1186  1.1  christos #undef FLD
   1187  1.1  christos }
   1188  1.1  christos   NEXT (vpc);
   1189  1.1  christos 
   1190  1.1  christos   CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
   1191  1.1  christos {
   1192  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1193  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1194  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1195  1.1  christos   int UNUSED written = 0;
   1196  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1197  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1198  1.1  christos 
   1199  1.1  christos   {
   1200  1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1201  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1202  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1203  1.1  christos   }
   1204  1.1  christos 
   1205  1.1  christos #undef FLD
   1206  1.1  christos }
   1207  1.1  christos   NEXT (vpc);
   1208  1.1  christos 
   1209  1.1  christos   CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
   1210  1.1  christos {
   1211  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1212  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1213  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1214  1.1  christos   int UNUSED written = 0;
   1215  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1216  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1217  1.1  christos 
   1218  1.1  christos   {
   1219  1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1220  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1221  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1222  1.1  christos   }
   1223  1.1  christos 
   1224  1.1  christos #undef FLD
   1225  1.1  christos }
   1226  1.1  christos   NEXT (vpc);
   1227  1.1  christos 
   1228  1.1  christos   CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
   1229  1.1  christos {
   1230  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1231  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1232  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1233  1.1  christos   int UNUSED written = 0;
   1234  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1235  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1236  1.1  christos 
   1237  1.1  christos   {
   1238  1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1239  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1240  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1241  1.1  christos   }
   1242  1.1  christos 
   1243  1.1  christos #undef FLD
   1244  1.1  christos }
   1245  1.1  christos   NEXT (vpc);
   1246  1.1  christos 
   1247  1.1  christos   CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
   1248  1.1  christos {
   1249  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1250  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1251  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1252  1.1  christos   int UNUSED written = 0;
   1253  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1254  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1255  1.1  christos 
   1256  1.1  christos   {
   1257  1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1258  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1259  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1260  1.1  christos   }
   1261  1.1  christos 
   1262  1.1  christos #undef FLD
   1263  1.1  christos }
   1264  1.1  christos   NEXT (vpc);
   1265  1.1  christos 
   1266  1.1  christos   CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
   1267  1.1  christos {
   1268  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1269  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1270  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1271  1.1  christos   int UNUSED written = 0;
   1272  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1273  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1274  1.1  christos 
   1275  1.1  christos {
   1276  1.1  christos {
   1277  1.1  christos   {
   1278  1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1279  1.1  christos     SET_H_SYS_SR_CY (opval);
   1280  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1281  1.1  christos   }
   1282  1.1  christos   {
   1283  1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1284  1.1  christos     SET_H_SYS_SR_OV (opval);
   1285  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1286  1.1  christos   }
   1287  1.1  christos   {
   1288  1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1289  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1290  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1291  1.1  christos   }
   1292  1.1  christos }
   1293  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1294  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1295  1.1  christos }
   1296  1.1  christos }
   1297  1.1  christos 
   1298  1.1  christos #undef FLD
   1299  1.1  christos }
   1300  1.1  christos   NEXT (vpc);
   1301  1.1  christos 
   1302  1.1  christos   CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
   1303  1.1  christos {
   1304  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1305  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1306  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1307  1.1  christos   int UNUSED written = 0;
   1308  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1309  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1310  1.1  christos 
   1311  1.1  christos {
   1312  1.1  christos {
   1313  1.1  christos   {
   1314  1.1  christos     BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1315  1.1  christos     SET_H_SYS_SR_CY (opval);
   1316  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1317  1.1  christos   }
   1318  1.1  christos   {
   1319  1.1  christos     BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1320  1.1  christos     SET_H_SYS_SR_OV (opval);
   1321  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1322  1.1  christos   }
   1323  1.1  christos   {
   1324  1.1  christos     USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1325  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1326  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1327  1.1  christos   }
   1328  1.1  christos }
   1329  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1330  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1331  1.1  christos }
   1332  1.1  christos }
   1333  1.1  christos 
   1334  1.1  christos #undef FLD
   1335  1.1  christos }
   1336  1.1  christos   NEXT (vpc);
   1337  1.1  christos 
   1338  1.1  christos   CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
   1339  1.1  christos {
   1340  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1341  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1342  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1343  1.1  christos   int UNUSED written = 0;
   1344  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1345  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1346  1.1  christos 
   1347  1.1  christos {
   1348  1.1  christos {
   1349  1.1  christos   BI tmp_tmp_sys_sr_cy;
   1350  1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1351  1.1  christos   {
   1352  1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1353  1.1  christos     SET_H_SYS_SR_CY (opval);
   1354  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1355  1.1  christos   }
   1356  1.1  christos   {
   1357  1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1358  1.1  christos     SET_H_SYS_SR_OV (opval);
   1359  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1360  1.1  christos   }
   1361  1.1  christos   {
   1362  1.1  christos     USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1363  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1364  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1365  1.1  christos   }
   1366  1.1  christos }
   1367  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1368  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1369  1.1  christos }
   1370  1.1  christos }
   1371  1.1  christos 
   1372  1.1  christos #undef FLD
   1373  1.1  christos }
   1374  1.1  christos   NEXT (vpc);
   1375  1.1  christos 
   1376  1.1  christos   CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
   1377  1.1  christos {
   1378  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1379  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1380  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1381  1.1  christos   int UNUSED written = 0;
   1382  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1383  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1384  1.1  christos 
   1385  1.1  christos {
   1386  1.1  christos {
   1387  1.1  christos   {
   1388  1.1  christos     BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1389  1.1  christos     SET_H_SYS_SR_OV (opval);
   1390  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1391  1.1  christos   }
   1392  1.1  christos   {
   1393  1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1394  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1395  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1396  1.1  christos   }
   1397  1.1  christos }
   1398  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1399  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1400  1.1  christos }
   1401  1.1  christos }
   1402  1.1  christos 
   1403  1.1  christos #undef FLD
   1404  1.1  christos }
   1405  1.1  christos   NEXT (vpc);
   1406  1.1  christos 
   1407  1.1  christos   CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
   1408  1.1  christos {
   1409  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1410  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1411  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1412  1.1  christos   int UNUSED written = 0;
   1413  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1414  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1415  1.1  christos 
   1416  1.1  christos {
   1417  1.1  christos   DI tmp_result;
   1418  1.1  christos   tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   1419  1.1  christos   {
   1420  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1421  1.1  christos     SET_H_MAC_MACHI (opval);
   1422  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1423  1.1  christos   }
   1424  1.1  christos   {
   1425  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1426  1.1  christos     SET_H_MAC_MACLO (opval);
   1427  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1428  1.1  christos   }
   1429  1.1  christos }
   1430  1.1  christos 
   1431  1.1  christos #undef FLD
   1432  1.1  christos }
   1433  1.1  christos   NEXT (vpc);
   1434  1.1  christos 
   1435  1.1  christos   CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
   1436  1.1  christos {
   1437  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1438  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1439  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1440  1.1  christos   int UNUSED written = 0;
   1441  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1442  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1443  1.1  christos 
   1444  1.1  christos {
   1445  1.1  christos {
   1446  1.1  christos   {
   1447  1.1  christos     BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1448  1.1  christos     SET_H_SYS_SR_CY (opval);
   1449  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1450  1.1  christos   }
   1451  1.1  christos   {
   1452  1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1453  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1454  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1455  1.1  christos   }
   1456  1.1  christos }
   1457  1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   1458  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1459  1.1  christos }
   1460  1.1  christos }
   1461  1.1  christos 
   1462  1.1  christos #undef FLD
   1463  1.1  christos }
   1464  1.1  christos   NEXT (vpc);
   1465  1.1  christos 
   1466  1.1  christos   CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
   1467  1.1  christos {
   1468  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1469  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1470  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1471  1.1  christos   int UNUSED written = 0;
   1472  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1473  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1474  1.1  christos 
   1475  1.1  christos {
   1476  1.1  christos   DI tmp_result;
   1477  1.1  christos   tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   1478  1.1  christos   {
   1479  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1480  1.1  christos     SET_H_MAC_MACHI (opval);
   1481  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1482  1.1  christos   }
   1483  1.1  christos   {
   1484  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1485  1.1  christos     SET_H_MAC_MACLO (opval);
   1486  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1487  1.1  christos   }
   1488  1.1  christos }
   1489  1.1  christos 
   1490  1.1  christos #undef FLD
   1491  1.1  christos }
   1492  1.1  christos   NEXT (vpc);
   1493  1.1  christos 
   1494  1.1  christos   CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
   1495  1.1  christos {
   1496  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1497  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1498  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1499  1.1  christos   int UNUSED written = 0;
   1500  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1501  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1502  1.1  christos 
   1503  1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1504  1.1  christos {
   1505  1.1  christos   {
   1506  1.1  christos     BI opval = 0;
   1507  1.1  christos     SET_H_SYS_SR_OV (opval);
   1508  1.1  christos     written |= (1 << 5);
   1509  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1510  1.1  christos   }
   1511  1.1  christos   {
   1512  1.1  christos     SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1513  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1514  1.1  christos     written |= (1 << 4);
   1515  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1516  1.1  christos   }
   1517  1.1  christos }
   1518  1.1  christos } else {
   1519  1.1  christos {
   1520  1.1  christos   {
   1521  1.1  christos     BI opval = 1;
   1522  1.1  christos     SET_H_SYS_SR_OV (opval);
   1523  1.1  christos     written |= (1 << 5);
   1524  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1525  1.1  christos   }
   1526  1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1527  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1528  1.1  christos }
   1529  1.1  christos }
   1530  1.1  christos }
   1531  1.1  christos 
   1532  1.1  christos   abuf->written = written;
   1533  1.1  christos #undef FLD
   1534  1.1  christos }
   1535  1.1  christos   NEXT (vpc);
   1536  1.1  christos 
   1537  1.1  christos   CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
   1538  1.1  christos {
   1539  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1540  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1541  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1542  1.1  christos   int UNUSED written = 0;
   1543  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1544  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1545  1.1  christos 
   1546  1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1547  1.1  christos {
   1548  1.1  christos   {
   1549  1.1  christos     BI opval = 0;
   1550  1.1  christos     SET_H_SYS_SR_CY (opval);
   1551  1.1  christos     written |= (1 << 5);
   1552  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1553  1.1  christos   }
   1554  1.1  christos   {
   1555  1.1  christos     USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1556  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1557  1.1  christos     written |= (1 << 4);
   1558  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1559  1.1  christos   }
   1560  1.1  christos }
   1561  1.1  christos } else {
   1562  1.1  christos {
   1563  1.1  christos   {
   1564  1.1  christos     BI opval = 1;
   1565  1.1  christos     SET_H_SYS_SR_CY (opval);
   1566  1.1  christos     written |= (1 << 5);
   1567  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1568  1.1  christos   }
   1569  1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1570  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1571  1.1  christos }
   1572  1.1  christos }
   1573  1.1  christos }
   1574  1.1  christos 
   1575  1.1  christos   abuf->written = written;
   1576  1.1  christos #undef FLD
   1577  1.1  christos }
   1578  1.1  christos   NEXT (vpc);
   1579  1.1  christos 
   1580  1.1  christos   CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
   1581  1.1  christos {
   1582  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1583  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1584  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1585  1.1  christos   int UNUSED written = 0;
   1586  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1587  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1588  1.1  christos 
   1589  1.1  christos   {
   1590  1.1  christos     USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1591  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1592  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1593  1.1  christos   }
   1594  1.1  christos 
   1595  1.1  christos #undef FLD
   1596  1.1  christos }
   1597  1.1  christos   NEXT (vpc);
   1598  1.1  christos 
   1599  1.1  christos   CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
   1600  1.1  christos {
   1601  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1602  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1603  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1604  1.1  christos   int UNUSED written = 0;
   1605  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1606  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1607  1.1  christos 
   1608  1.1  christos   {
   1609  1.1  christos     USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1610  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1611  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1612  1.1  christos   }
   1613  1.1  christos 
   1614  1.1  christos #undef FLD
   1615  1.1  christos }
   1616  1.1  christos   NEXT (vpc);
   1617  1.1  christos 
   1618  1.1  christos   CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
   1619  1.1  christos {
   1620  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1621  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1622  1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1623  1.1  christos   int UNUSED written = 0;
   1624  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1625  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1626  1.1  christos 
   1627  1.1  christos   {
   1628  1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1629  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1630  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1631  1.1  christos   }
   1632  1.1  christos 
   1633  1.1  christos #undef FLD
   1634  1.1  christos }
   1635  1.1  christos   NEXT (vpc);
   1636  1.1  christos 
   1637  1.1  christos   CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
   1638  1.1  christos {
   1639  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1640  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1641  1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1642  1.1  christos   int UNUSED written = 0;
   1643  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1644  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1645  1.1  christos 
   1646  1.1  christos   {
   1647  1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1648  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1649  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1650  1.1  christos   }
   1651  1.1  christos 
   1652  1.1  christos #undef FLD
   1653  1.1  christos }
   1654  1.1  christos   NEXT (vpc);
   1655  1.1  christos 
   1656  1.1  christos   CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
   1657  1.1  christos {
   1658  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1659  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1660  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1661  1.1  christos   int UNUSED written = 0;
   1662  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1663  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1664  1.1  christos 
   1665  1.1  christos   {
   1666  1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1667  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1668  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1669  1.1  christos   }
   1670  1.1  christos 
   1671  1.1  christos #undef FLD
   1672  1.1  christos }
   1673  1.1  christos   NEXT (vpc);
   1674  1.1  christos 
   1675  1.1  christos   CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
   1676  1.1  christos {
   1677  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1678  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1679  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1680  1.1  christos   int UNUSED written = 0;
   1681  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1682  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1683  1.1  christos 
   1684  1.1  christos {
   1685  1.1  christos {
   1686  1.1  christos   {
   1687  1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1688  1.1  christos     SET_H_SYS_SR_CY (opval);
   1689  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1690  1.1  christos   }
   1691  1.1  christos   {
   1692  1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1693  1.1  christos     SET_H_SYS_SR_OV (opval);
   1694  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1695  1.1  christos   }
   1696  1.1  christos   {
   1697  1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1698  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1699  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1700  1.1  christos   }
   1701  1.1  christos }
   1702  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1703  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1704  1.1  christos }
   1705  1.1  christos }
   1706  1.1  christos 
   1707  1.1  christos #undef FLD
   1708  1.1  christos }
   1709  1.1  christos   NEXT (vpc);
   1710  1.1  christos 
   1711  1.1  christos   CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
   1712  1.1  christos {
   1713  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1714  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1715  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1716  1.1  christos   int UNUSED written = 0;
   1717  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1718  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1719  1.1  christos 
   1720  1.1  christos {
   1721  1.1  christos {
   1722  1.1  christos   BI tmp_tmp_sys_sr_cy;
   1723  1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1724  1.1  christos   {
   1725  1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1726  1.1  christos     SET_H_SYS_SR_CY (opval);
   1727  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1728  1.1  christos   }
   1729  1.1  christos   {
   1730  1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1731  1.1  christos     SET_H_SYS_SR_OV (opval);
   1732  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1733  1.1  christos   }
   1734  1.1  christos   {
   1735  1.1  christos     SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1736  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1737  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1738  1.1  christos   }
   1739  1.1  christos }
   1740  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1741  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1742  1.1  christos }
   1743  1.1  christos }
   1744  1.1  christos 
   1745  1.1  christos #undef FLD
   1746  1.1  christos }
   1747  1.1  christos   NEXT (vpc);
   1748  1.1  christos 
   1749  1.1  christos   CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
   1750  1.1  christos {
   1751  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1752  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1753  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1754  1.1  christos   int UNUSED written = 0;
   1755  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1756  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1757  1.1  christos 
   1758  1.1  christos {
   1759  1.1  christos {
   1760  1.1  christos   {
   1761  1.1  christos     USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1762  1.1  christos     SET_H_SYS_SR_OV (opval);
   1763  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1764  1.1  christos   }
   1765  1.1  christos   {
   1766  1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1767  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1768  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1769  1.1  christos   }
   1770  1.1  christos }
   1771  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1772  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1773  1.1  christos }
   1774  1.1  christos }
   1775  1.1  christos 
   1776  1.1  christos #undef FLD
   1777  1.1  christos }
   1778  1.1  christos   NEXT (vpc);
   1779  1.1  christos 
   1780  1.1  christos   CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
   1781  1.1  christos {
   1782  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1783  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1784  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1785  1.1  christos   int UNUSED written = 0;
   1786  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1787  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1788  1.1  christos 
   1789  1.1  christos   {
   1790  1.1  christos     USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1791  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1792  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1793  1.1  christos   }
   1794  1.1  christos 
   1795  1.1  christos #undef FLD
   1796  1.1  christos }
   1797  1.1  christos   NEXT (vpc);
   1798  1.1  christos 
   1799  1.1  christos   CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
   1800  1.1  christos {
   1801  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1802  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1803  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1804  1.1  christos   int UNUSED written = 0;
   1805  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1806  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1807  1.1  christos 
   1808  1.1  christos   {
   1809  1.1  christos     USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1810  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1811  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1812  1.1  christos   }
   1813  1.1  christos 
   1814  1.1  christos #undef FLD
   1815  1.1  christos }
   1816  1.1  christos   NEXT (vpc);
   1817  1.1  christos 
   1818  1.1  christos   CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
   1819  1.1  christos {
   1820  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1821  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1822  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1823  1.1  christos   int UNUSED written = 0;
   1824  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1825  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1826  1.1  christos 
   1827  1.1  christos   {
   1828  1.1  christos     USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1829  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1830  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1831  1.1  christos   }
   1832  1.1  christos 
   1833  1.1  christos #undef FLD
   1834  1.1  christos }
   1835  1.1  christos   NEXT (vpc);
   1836  1.1  christos 
   1837  1.1  christos   CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
   1838  1.1  christos {
   1839  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1840  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1841  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1842  1.1  christos   int UNUSED written = 0;
   1843  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1844  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1845  1.1  christos 
   1846  1.1  christos   {
   1847  1.1  christos     USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1848  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1849  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1850  1.1  christos   }
   1851  1.1  christos 
   1852  1.1  christos #undef FLD
   1853  1.1  christos }
   1854  1.1  christos   NEXT (vpc);
   1855  1.1  christos 
   1856  1.1  christos   CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
   1857  1.1  christos {
   1858  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1859  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1860  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1861  1.1  christos   int UNUSED written = 0;
   1862  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1863  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1864  1.1  christos 
   1865  1.1  christos   {
   1866  1.1  christos     USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1867  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1868  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1869  1.1  christos   }
   1870  1.1  christos 
   1871  1.1  christos #undef FLD
   1872  1.1  christos }
   1873  1.1  christos   NEXT (vpc);
   1874  1.1  christos 
   1875  1.1  christos   CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
   1876  1.1  christos {
   1877  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1878  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1879  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1880  1.1  christos   int UNUSED written = 0;
   1881  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1882  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1883  1.1  christos 
   1884  1.1  christos   {
   1885  1.1  christos     USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1886  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1887  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1888  1.1  christos   }
   1889  1.1  christos 
   1890  1.1  christos #undef FLD
   1891  1.1  christos }
   1892  1.1  christos   NEXT (vpc);
   1893  1.1  christos 
   1894  1.1  christos   CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
   1895  1.1  christos {
   1896  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1897  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1898  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1899  1.1  christos   int UNUSED written = 0;
   1900  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1901  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1902  1.1  christos 
   1903  1.1  christos if (GET_H_SYS_SR_F ()) {
   1904  1.1  christos   {
   1905  1.1  christos     USI opval = GET_H_GPR (FLD (f_r2));
   1906  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1907  1.1  christos     written |= (1 << 3);
   1908  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1909  1.1  christos   }
   1910  1.1  christos } else {
   1911  1.1  christos   {
   1912  1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
   1913  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1914  1.1  christos     written |= (1 << 3);
   1915  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1916  1.1  christos   }
   1917  1.1  christos }
   1918  1.1  christos 
   1919  1.1  christos   abuf->written = written;
   1920  1.1  christos #undef FLD
   1921  1.1  christos }
   1922  1.1  christos   NEXT (vpc);
   1923  1.1  christos 
   1924  1.1  christos   CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
   1925  1.1  christos {
   1926  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1927  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1928  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1929  1.1  christos   int UNUSED written = 0;
   1930  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1931  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1932  1.1  christos 
   1933  1.1  christos   {
   1934  1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1935  1.1  christos     SET_H_SYS_SR_F (opval);
   1936  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1937  1.1  christos   }
   1938  1.1  christos 
   1939  1.1  christos #undef FLD
   1940  1.1  christos }
   1941  1.1  christos   NEXT (vpc);
   1942  1.1  christos 
   1943  1.1  christos   CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
   1944  1.1  christos {
   1945  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1946  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1947  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1948  1.1  christos   int UNUSED written = 0;
   1949  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1950  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1951  1.1  christos 
   1952  1.1  christos   {
   1953  1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1954  1.1  christos     SET_H_SYS_SR_F (opval);
   1955  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1956  1.1  christos   }
   1957  1.1  christos 
   1958  1.1  christos #undef FLD
   1959  1.1  christos }
   1960  1.1  christos   NEXT (vpc);
   1961  1.1  christos 
   1962  1.1  christos   CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
   1963  1.1  christos {
   1964  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1965  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1966  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1967  1.1  christos   int UNUSED written = 0;
   1968  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1969  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1970  1.1  christos 
   1971  1.1  christos   {
   1972  1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1973  1.1  christos     SET_H_SYS_SR_F (opval);
   1974  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1975  1.1  christos   }
   1976  1.1  christos 
   1977  1.1  christos #undef FLD
   1978  1.1  christos }
   1979  1.1  christos   NEXT (vpc);
   1980  1.1  christos 
   1981  1.1  christos   CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
   1982  1.1  christos {
   1983  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1984  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1985  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1986  1.1  christos   int UNUSED written = 0;
   1987  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1988  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1989  1.1  christos 
   1990  1.1  christos   {
   1991  1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1992  1.1  christos     SET_H_SYS_SR_F (opval);
   1993  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1994  1.1  christos   }
   1995  1.1  christos 
   1996  1.1  christos #undef FLD
   1997  1.1  christos }
   1998  1.1  christos   NEXT (vpc);
   1999  1.1  christos 
   2000  1.1  christos   CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
   2001  1.1  christos {
   2002  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2003  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2004  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2005  1.1  christos   int UNUSED written = 0;
   2006  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2007  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2008  1.1  christos 
   2009  1.1  christos   {
   2010  1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2011  1.1  christos     SET_H_SYS_SR_F (opval);
   2012  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2013  1.1  christos   }
   2014  1.1  christos 
   2015  1.1  christos #undef FLD
   2016  1.1  christos }
   2017  1.1  christos   NEXT (vpc);
   2018  1.1  christos 
   2019  1.1  christos   CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
   2020  1.1  christos {
   2021  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2022  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2023  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2024  1.1  christos   int UNUSED written = 0;
   2025  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2026  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2027  1.1  christos 
   2028  1.1  christos   {
   2029  1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2030  1.1  christos     SET_H_SYS_SR_F (opval);
   2031  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2032  1.1  christos   }
   2033  1.1  christos 
   2034  1.1  christos #undef FLD
   2035  1.1  christos }
   2036  1.1  christos   NEXT (vpc);
   2037  1.1  christos 
   2038  1.1  christos   CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
   2039  1.1  christos {
   2040  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2041  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2042  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2043  1.1  christos   int UNUSED written = 0;
   2044  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2045  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2046  1.1  christos 
   2047  1.1  christos   {
   2048  1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2049  1.1  christos     SET_H_SYS_SR_F (opval);
   2050  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2051  1.1  christos   }
   2052  1.1  christos 
   2053  1.1  christos #undef FLD
   2054  1.1  christos }
   2055  1.1  christos   NEXT (vpc);
   2056  1.1  christos 
   2057  1.1  christos   CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
   2058  1.1  christos {
   2059  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2060  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2061  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2062  1.1  christos   int UNUSED written = 0;
   2063  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2064  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2065  1.1  christos 
   2066  1.1  christos   {
   2067  1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2068  1.1  christos     SET_H_SYS_SR_F (opval);
   2069  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2070  1.1  christos   }
   2071  1.1  christos 
   2072  1.1  christos #undef FLD
   2073  1.1  christos }
   2074  1.1  christos   NEXT (vpc);
   2075  1.1  christos 
   2076  1.1  christos   CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
   2077  1.1  christos {
   2078  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2079  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2080  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2081  1.1  christos   int UNUSED written = 0;
   2082  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2083  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2084  1.1  christos 
   2085  1.1  christos   {
   2086  1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2087  1.1  christos     SET_H_SYS_SR_F (opval);
   2088  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2089  1.1  christos   }
   2090  1.1  christos 
   2091  1.1  christos #undef FLD
   2092  1.1  christos }
   2093  1.1  christos   NEXT (vpc);
   2094  1.1  christos 
   2095  1.1  christos   CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
   2096  1.1  christos {
   2097  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2098  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2099  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2100  1.1  christos   int UNUSED written = 0;
   2101  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2102  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2103  1.1  christos 
   2104  1.1  christos   {
   2105  1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2106  1.1  christos     SET_H_SYS_SR_F (opval);
   2107  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2108  1.1  christos   }
   2109  1.1  christos 
   2110  1.1  christos #undef FLD
   2111  1.1  christos }
   2112  1.1  christos   NEXT (vpc);
   2113  1.1  christos 
   2114  1.1  christos   CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
   2115  1.1  christos {
   2116  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2117  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2118  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2119  1.1  christos   int UNUSED written = 0;
   2120  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2121  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2122  1.1  christos 
   2123  1.1  christos   {
   2124  1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2125  1.1  christos     SET_H_SYS_SR_F (opval);
   2126  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2127  1.1  christos   }
   2128  1.1  christos 
   2129  1.1  christos #undef FLD
   2130  1.1  christos }
   2131  1.1  christos   NEXT (vpc);
   2132  1.1  christos 
   2133  1.1  christos   CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
   2134  1.1  christos {
   2135  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2136  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2137  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2138  1.1  christos   int UNUSED written = 0;
   2139  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2140  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2141  1.1  christos 
   2142  1.1  christos   {
   2143  1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2144  1.1  christos     SET_H_SYS_SR_F (opval);
   2145  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2146  1.1  christos   }
   2147  1.1  christos 
   2148  1.1  christos #undef FLD
   2149  1.1  christos }
   2150  1.1  christos   NEXT (vpc);
   2151  1.1  christos 
   2152  1.1  christos   CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
   2153  1.1  christos {
   2154  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2155  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2156  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2157  1.1  christos   int UNUSED written = 0;
   2158  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2159  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2160  1.1  christos 
   2161  1.1  christos   {
   2162  1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2163  1.1  christos     SET_H_SYS_SR_F (opval);
   2164  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2165  1.1  christos   }
   2166  1.1  christos 
   2167  1.1  christos #undef FLD
   2168  1.1  christos }
   2169  1.1  christos   NEXT (vpc);
   2170  1.1  christos 
   2171  1.1  christos   CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
   2172  1.1  christos {
   2173  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2174  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2175  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2176  1.1  christos   int UNUSED written = 0;
   2177  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2178  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2179  1.1  christos 
   2180  1.1  christos   {
   2181  1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2182  1.1  christos     SET_H_SYS_SR_F (opval);
   2183  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2184  1.1  christos   }
   2185  1.1  christos 
   2186  1.1  christos #undef FLD
   2187  1.1  christos }
   2188  1.1  christos   NEXT (vpc);
   2189  1.1  christos 
   2190  1.1  christos   CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
   2191  1.1  christos {
   2192  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2193  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2194  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2195  1.1  christos   int UNUSED written = 0;
   2196  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2197  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2198  1.1  christos 
   2199  1.1  christos   {
   2200  1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2201  1.1  christos     SET_H_SYS_SR_F (opval);
   2202  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2203  1.1  christos   }
   2204  1.1  christos 
   2205  1.1  christos #undef FLD
   2206  1.1  christos }
   2207  1.1  christos   NEXT (vpc);
   2208  1.1  christos 
   2209  1.1  christos   CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
   2210  1.1  christos {
   2211  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2212  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2213  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2214  1.1  christos   int UNUSED written = 0;
   2215  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2216  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2217  1.1  christos 
   2218  1.1  christos   {
   2219  1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2220  1.1  christos     SET_H_SYS_SR_F (opval);
   2221  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2222  1.1  christos   }
   2223  1.1  christos 
   2224  1.1  christos #undef FLD
   2225  1.1  christos }
   2226  1.1  christos   NEXT (vpc);
   2227  1.1  christos 
   2228  1.1  christos   CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
   2229  1.1  christos {
   2230  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2231  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2232  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2233  1.1  christos   int UNUSED written = 0;
   2234  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2235  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2236  1.1  christos 
   2237  1.1  christos   {
   2238  1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2239  1.1  christos     SET_H_SYS_SR_F (opval);
   2240  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2241  1.1  christos   }
   2242  1.1  christos 
   2243  1.1  christos #undef FLD
   2244  1.1  christos }
   2245  1.1  christos   NEXT (vpc);
   2246  1.1  christos 
   2247  1.1  christos   CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
   2248  1.1  christos {
   2249  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2250  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2251  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2252  1.1  christos   int UNUSED written = 0;
   2253  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2254  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2255  1.1  christos 
   2256  1.1  christos   {
   2257  1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2258  1.1  christos     SET_H_SYS_SR_F (opval);
   2259  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2260  1.1  christos   }
   2261  1.1  christos 
   2262  1.1  christos #undef FLD
   2263  1.1  christos }
   2264  1.1  christos   NEXT (vpc);
   2265  1.1  christos 
   2266  1.1  christos   CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
   2267  1.1  christos {
   2268  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2269  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2270  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2271  1.1  christos   int UNUSED written = 0;
   2272  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2273  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2274  1.1  christos 
   2275  1.1  christos   {
   2276  1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2277  1.1  christos     SET_H_SYS_SR_F (opval);
   2278  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2279  1.1  christos   }
   2280  1.1  christos 
   2281  1.1  christos #undef FLD
   2282  1.1  christos }
   2283  1.1  christos   NEXT (vpc);
   2284  1.1  christos 
   2285  1.1  christos   CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
   2286  1.1  christos {
   2287  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2288  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2289  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2290  1.1  christos   int UNUSED written = 0;
   2291  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2292  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2293  1.1  christos 
   2294  1.1  christos   {
   2295  1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2296  1.1  christos     SET_H_SYS_SR_F (opval);
   2297  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2298  1.1  christos   }
   2299  1.1  christos 
   2300  1.1  christos #undef FLD
   2301  1.1  christos }
   2302  1.1  christos   NEXT (vpc);
   2303  1.1  christos 
   2304  1.1  christos   CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
   2305  1.1  christos {
   2306  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2307  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2308  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2309  1.1  christos   int UNUSED written = 0;
   2310  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2311  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2312  1.1  christos 
   2313  1.1  christos {
   2314  1.1  christos {
   2315  1.1  christos   DI tmp_prod;
   2316  1.1  christos   DI tmp_mac;
   2317  1.1  christos   DI tmp_result;
   2318  1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2319  1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2320  1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2321  1.1  christos   {
   2322  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2323  1.1  christos     SET_H_MAC_MACHI (opval);
   2324  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2325  1.1  christos   }
   2326  1.1  christos   {
   2327  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2328  1.1  christos     SET_H_MAC_MACLO (opval);
   2329  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2330  1.1  christos   }
   2331  1.1  christos   {
   2332  1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2333  1.1  christos     SET_H_SYS_SR_OV (opval);
   2334  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2335  1.1  christos   }
   2336  1.1  christos }
   2337  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2338  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2339  1.1  christos }
   2340  1.1  christos }
   2341  1.1  christos 
   2342  1.1  christos #undef FLD
   2343  1.1  christos }
   2344  1.1  christos   NEXT (vpc);
   2345  1.1  christos 
   2346  1.1  christos   CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
   2347  1.1  christos {
   2348  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2349  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2350  1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2351  1.1  christos   int UNUSED written = 0;
   2352  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2353  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2354  1.1  christos 
   2355  1.1  christos {
   2356  1.1  christos {
   2357  1.1  christos   DI tmp_prod;
   2358  1.1  christos   DI tmp_mac;
   2359  1.1  christos   DI tmp_result;
   2360  1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
   2361  1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2362  1.1  christos   tmp_result = ADDDI (tmp_mac, tmp_prod);
   2363  1.1  christos   {
   2364  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2365  1.1  christos     SET_H_MAC_MACHI (opval);
   2366  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2367  1.1  christos   }
   2368  1.1  christos   {
   2369  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2370  1.1  christos     SET_H_MAC_MACLO (opval);
   2371  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2372  1.1  christos   }
   2373  1.1  christos   {
   2374  1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2375  1.1  christos     SET_H_SYS_SR_OV (opval);
   2376  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2377  1.1  christos   }
   2378  1.1  christos }
   2379  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2380  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2381  1.1  christos }
   2382  1.1  christos }
   2383  1.1  christos 
   2384  1.1  christos #undef FLD
   2385  1.1  christos }
   2386  1.1  christos   NEXT (vpc);
   2387  1.1  christos 
   2388  1.1  christos   CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
   2389  1.1  christos {
   2390  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2391  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2392  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2393  1.1  christos   int UNUSED written = 0;
   2394  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2395  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2396  1.1  christos 
   2397  1.1  christos {
   2398  1.1  christos {
   2399  1.1  christos   DI tmp_prod;
   2400  1.1  christos   DI tmp_mac;
   2401  1.1  christos   DI tmp_result;
   2402  1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2403  1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2404  1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2405  1.1  christos   {
   2406  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2407  1.1  christos     SET_H_MAC_MACHI (opval);
   2408  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2409  1.1  christos   }
   2410  1.1  christos   {
   2411  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2412  1.1  christos     SET_H_MAC_MACLO (opval);
   2413  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2414  1.1  christos   }
   2415  1.1  christos   {
   2416  1.1  christos     BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
   2417  1.1  christos     SET_H_SYS_SR_CY (opval);
   2418  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2419  1.1  christos   }
   2420  1.1  christos }
   2421  1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2422  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2423  1.1  christos }
   2424  1.1  christos }
   2425  1.1  christos 
   2426  1.1  christos #undef FLD
   2427  1.1  christos }
   2428  1.1  christos   NEXT (vpc);
   2429  1.1  christos 
   2430  1.1  christos   CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
   2431  1.1  christos {
   2432  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2433  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2434  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2435  1.1  christos   int UNUSED written = 0;
   2436  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2437  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2438  1.1  christos 
   2439  1.1  christos {
   2440  1.1  christos {
   2441  1.1  christos   DI tmp_prod;
   2442  1.1  christos   DI tmp_mac;
   2443  1.1  christos   DI tmp_result;
   2444  1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2445  1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2446  1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2447  1.1  christos   {
   2448  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2449  1.1  christos     SET_H_MAC_MACHI (opval);
   2450  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2451  1.1  christos   }
   2452  1.1  christos   {
   2453  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2454  1.1  christos     SET_H_MAC_MACLO (opval);
   2455  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2456  1.1  christos   }
   2457  1.1  christos   {
   2458  1.1  christos     BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
   2459  1.1  christos     SET_H_SYS_SR_OV (opval);
   2460  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2461  1.1  christos   }
   2462  1.1  christos }
   2463  1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2464  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2465  1.1  christos }
   2466  1.1  christos }
   2467  1.1  christos 
   2468  1.1  christos #undef FLD
   2469  1.1  christos }
   2470  1.1  christos   NEXT (vpc);
   2471  1.1  christos 
   2472  1.1  christos   CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
   2473  1.1  christos {
   2474  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2475  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2476  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2477  1.1  christos   int UNUSED written = 0;
   2478  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2479  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2480  1.1  christos 
   2481  1.1  christos {
   2482  1.1  christos {
   2483  1.1  christos   DI tmp_prod;
   2484  1.1  christos   DI tmp_mac;
   2485  1.1  christos   DI tmp_result;
   2486  1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2487  1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2488  1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2489  1.1  christos   {
   2490  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2491  1.1  christos     SET_H_MAC_MACHI (opval);
   2492  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2493  1.1  christos   }
   2494  1.1  christos   {
   2495  1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2496  1.1  christos     SET_H_MAC_MACLO (opval);
   2497  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2498  1.1  christos   }
   2499  1.1  christos   {
   2500  1.1  christos     BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
   2501  1.1  christos     SET_H_SYS_SR_CY (opval);
   2502  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2503  1.1  christos   }
   2504  1.1  christos }
   2505  1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2506  1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2507  1.1  christos }
   2508  1.1  christos }
   2509  1.1  christos 
   2510  1.1  christos #undef FLD
   2511  1.1  christos }
   2512  1.1  christos   NEXT (vpc);
   2513  1.1  christos 
   2514  1.1  christos   CASE (sem, INSN_L_CUST1) : /* l.cust1 */
   2515  1.1  christos {
   2516  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2517  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2518  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2519  1.1  christos   int UNUSED written = 0;
   2520  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2521  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2522  1.1  christos 
   2523  1.1  christos ((void) 0); /*nop*/
   2524  1.1  christos 
   2525  1.1  christos #undef FLD
   2526  1.1  christos }
   2527  1.1  christos   NEXT (vpc);
   2528  1.1  christos 
   2529  1.1  christos   CASE (sem, INSN_L_CUST2) : /* l.cust2 */
   2530  1.1  christos {
   2531  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2532  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2533  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2534  1.1  christos   int UNUSED written = 0;
   2535  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2536  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2537  1.1  christos 
   2538  1.1  christos ((void) 0); /*nop*/
   2539  1.1  christos 
   2540  1.1  christos #undef FLD
   2541  1.1  christos }
   2542  1.1  christos   NEXT (vpc);
   2543  1.1  christos 
   2544  1.1  christos   CASE (sem, INSN_L_CUST3) : /* l.cust3 */
   2545  1.1  christos {
   2546  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2547  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2548  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2549  1.1  christos   int UNUSED written = 0;
   2550  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2551  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2552  1.1  christos 
   2553  1.1  christos ((void) 0); /*nop*/
   2554  1.1  christos 
   2555  1.1  christos #undef FLD
   2556  1.1  christos }
   2557  1.1  christos   NEXT (vpc);
   2558  1.1  christos 
   2559  1.1  christos   CASE (sem, INSN_L_CUST4) : /* l.cust4 */
   2560  1.1  christos {
   2561  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2562  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2563  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2564  1.1  christos   int UNUSED written = 0;
   2565  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2566  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2567  1.1  christos 
   2568  1.1  christos ((void) 0); /*nop*/
   2569  1.1  christos 
   2570  1.1  christos #undef FLD
   2571  1.1  christos }
   2572  1.1  christos   NEXT (vpc);
   2573  1.1  christos 
   2574  1.1  christos   CASE (sem, INSN_L_CUST5) : /* l.cust5 */
   2575  1.1  christos {
   2576  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2577  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2578  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2579  1.1  christos   int UNUSED written = 0;
   2580  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2581  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2582  1.1  christos 
   2583  1.1  christos ((void) 0); /*nop*/
   2584  1.1  christos 
   2585  1.1  christos #undef FLD
   2586  1.1  christos }
   2587  1.1  christos   NEXT (vpc);
   2588  1.1  christos 
   2589  1.1  christos   CASE (sem, INSN_L_CUST6) : /* l.cust6 */
   2590  1.1  christos {
   2591  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2592  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2593  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2594  1.1  christos   int UNUSED written = 0;
   2595  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2596  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2597  1.1  christos 
   2598  1.1  christos ((void) 0); /*nop*/
   2599  1.1  christos 
   2600  1.1  christos #undef FLD
   2601  1.1  christos }
   2602  1.1  christos   NEXT (vpc);
   2603  1.1  christos 
   2604  1.1  christos   CASE (sem, INSN_L_CUST7) : /* l.cust7 */
   2605  1.1  christos {
   2606  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2607  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2608  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2609  1.1  christos   int UNUSED written = 0;
   2610  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2611  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2612  1.1  christos 
   2613  1.1  christos ((void) 0); /*nop*/
   2614  1.1  christos 
   2615  1.1  christos #undef FLD
   2616  1.1  christos }
   2617  1.1  christos   NEXT (vpc);
   2618  1.1  christos 
   2619  1.1  christos   CASE (sem, INSN_L_CUST8) : /* l.cust8 */
   2620  1.1  christos {
   2621  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2622  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2623  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2624  1.1  christos   int UNUSED written = 0;
   2625  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2626  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2627  1.1  christos 
   2628  1.1  christos ((void) 0); /*nop*/
   2629  1.1  christos 
   2630  1.1  christos #undef FLD
   2631  1.1  christos }
   2632  1.1  christos   NEXT (vpc);
   2633  1.1  christos 
   2634  1.1  christos   CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
   2635  1.1  christos {
   2636  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2637  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2638  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2639  1.1  christos   int UNUSED written = 0;
   2640  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2641  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2642  1.1  christos 
   2643  1.1  christos   {
   2644  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2645  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2646  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2647  1.1  christos   }
   2648  1.1  christos 
   2649  1.1  christos #undef FLD
   2650  1.1  christos }
   2651  1.1  christos   NEXT (vpc);
   2652  1.1  christos 
   2653  1.1  christos   CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
   2654  1.1  christos {
   2655  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2656  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2657  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2658  1.1  christos   int UNUSED written = 0;
   2659  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2660  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2661  1.1  christos 
   2662  1.1  christos   {
   2663  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2664  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2665  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2666  1.1  christos   }
   2667  1.1  christos 
   2668  1.1  christos #undef FLD
   2669  1.1  christos }
   2670  1.1  christos   NEXT (vpc);
   2671  1.1  christos 
   2672  1.1  christos   CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
   2673  1.1  christos {
   2674  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2675  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2676  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2677  1.1  christos   int UNUSED written = 0;
   2678  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2679  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2680  1.1  christos 
   2681  1.1  christos   {
   2682  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2683  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2684  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2685  1.1  christos   }
   2686  1.1  christos 
   2687  1.1  christos #undef FLD
   2688  1.1  christos }
   2689  1.1  christos   NEXT (vpc);
   2690  1.1  christos 
   2691  1.1  christos   CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
   2692  1.1  christos {
   2693  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2694  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2695  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2696  1.1  christos   int UNUSED written = 0;
   2697  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2698  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2699  1.1  christos 
   2700  1.1  christos   {
   2701  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2702  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2703  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2704  1.1  christos   }
   2705  1.1  christos 
   2706  1.1  christos #undef FLD
   2707  1.1  christos }
   2708  1.1  christos   NEXT (vpc);
   2709  1.1  christos 
   2710  1.1  christos   CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
   2711  1.1  christos {
   2712  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2713  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2714  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2715  1.1  christos   int UNUSED written = 0;
   2716  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2717  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2718  1.1  christos 
   2719  1.1  christos   {
   2720  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->remsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2721  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2722  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2723  1.1  christos   }
   2724  1.1  christos 
   2725  1.1  christos #undef FLD
   2726  1.1  christos }
   2727  1.1  christos   NEXT (vpc);
   2728  1.1  christos 
   2729  1.1  christos   CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
   2730  1.1  christos {
   2731  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2732  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2733  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2734  1.1  christos   int UNUSED written = 0;
   2735  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2736  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2737  1.1  christos 
   2738  1.1  christos   {
   2739  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   2740  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2741  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2742  1.1  christos   }
   2743  1.1  christos 
   2744  1.1  christos #undef FLD
   2745  1.1  christos }
   2746  1.1  christos   NEXT (vpc);
   2747  1.1  christos 
   2748  1.1  christos   CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
   2749  1.1  christos {
   2750  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2751  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2752  1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2753  1.1  christos   int UNUSED written = 0;
   2754  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2755  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2756  1.1  christos 
   2757  1.1  christos   {
   2758  1.1  christos     SI opval = EXTSISI (CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2))));
   2759  1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   2760  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   2761  1.1  christos   }
   2762  1.1  christos 
   2763  1.1  christos #undef FLD
   2764  1.1  christos }
   2765  1.1  christos   NEXT (vpc);
   2766  1.1  christos 
   2767  1.1  christos   CASE (sem, INSN_LF_EQ_S) : /* lf.sfeq.s $rASF,$rBSF */
   2768  1.1  christos {
   2769  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2770  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2771  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2772  1.1  christos   int UNUSED written = 0;
   2773  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2774  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2775  1.1  christos 
   2776  1.1  christos   {
   2777  1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2778  1.1  christos     SET_H_SYS_SR_F (opval);
   2779  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2780  1.1  christos   }
   2781  1.1  christos 
   2782  1.1  christos #undef FLD
   2783  1.1  christos }
   2784  1.1  christos   NEXT (vpc);
   2785  1.1  christos 
   2786  1.1  christos   CASE (sem, INSN_LF_NE_S) : /* lf.sfne.s $rASF,$rBSF */
   2787  1.1  christos {
   2788  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2789  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2790  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2791  1.1  christos   int UNUSED written = 0;
   2792  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2793  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2794  1.1  christos 
   2795  1.1  christos   {
   2796  1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2797  1.1  christos     SET_H_SYS_SR_F (opval);
   2798  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2799  1.1  christos   }
   2800  1.1  christos 
   2801  1.1  christos #undef FLD
   2802  1.1  christos }
   2803  1.1  christos   NEXT (vpc);
   2804  1.1  christos 
   2805  1.1  christos   CASE (sem, INSN_LF_GE_S) : /* lf.sfge.s $rASF,$rBSF */
   2806  1.1  christos {
   2807  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2808  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2809  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2810  1.1  christos   int UNUSED written = 0;
   2811  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2812  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2813  1.1  christos 
   2814  1.1  christos   {
   2815  1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2816  1.1  christos     SET_H_SYS_SR_F (opval);
   2817  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2818  1.1  christos   }
   2819  1.1  christos 
   2820  1.1  christos #undef FLD
   2821  1.1  christos }
   2822  1.1  christos   NEXT (vpc);
   2823  1.1  christos 
   2824  1.1  christos   CASE (sem, INSN_LF_GT_S) : /* lf.sfgt.s $rASF,$rBSF */
   2825  1.1  christos {
   2826  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2827  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2828  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2829  1.1  christos   int UNUSED written = 0;
   2830  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2831  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2832  1.1  christos 
   2833  1.1  christos   {
   2834  1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2835  1.1  christos     SET_H_SYS_SR_F (opval);
   2836  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2837  1.1  christos   }
   2838  1.1  christos 
   2839  1.1  christos #undef FLD
   2840  1.1  christos }
   2841  1.1  christos   NEXT (vpc);
   2842  1.1  christos 
   2843  1.1  christos   CASE (sem, INSN_LF_LT_S) : /* lf.sflt.s $rASF,$rBSF */
   2844  1.1  christos {
   2845  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2846  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2847  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2848  1.1  christos   int UNUSED written = 0;
   2849  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2850  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2851  1.1  christos 
   2852  1.1  christos   {
   2853  1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2854  1.1  christos     SET_H_SYS_SR_F (opval);
   2855  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2856  1.1  christos   }
   2857  1.1  christos 
   2858  1.1  christos #undef FLD
   2859  1.1  christos }
   2860  1.1  christos   NEXT (vpc);
   2861  1.1  christos 
   2862  1.1  christos   CASE (sem, INSN_LF_LE_S) : /* lf.sfle.s $rASF,$rBSF */
   2863  1.1  christos {
   2864  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2865  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2866  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2867  1.1  christos   int UNUSED written = 0;
   2868  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2869  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2870  1.1  christos 
   2871  1.1  christos   {
   2872  1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2873  1.1  christos     SET_H_SYS_SR_F (opval);
   2874  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2875  1.1  christos   }
   2876  1.1  christos 
   2877  1.1  christos #undef FLD
   2878  1.1  christos }
   2879  1.1  christos   NEXT (vpc);
   2880  1.1  christos 
   2881  1.1  christos   CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
   2882  1.1  christos {
   2883  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2884  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2885  1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2886  1.1  christos   int UNUSED written = 0;
   2887  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2888  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2889  1.1  christos 
   2890  1.1  christos   {
   2891  1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), GET_H_FSR (FLD (f_r1)));
   2892  1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2893  1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2894  1.1  christos   }
   2895  1.1  christos 
   2896  1.1  christos #undef FLD
   2897  1.1  christos }
   2898  1.1  christos   NEXT (vpc);
   2899  1.1  christos 
   2900  1.1  christos   CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
   2901  1.1  christos {
   2902  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2903  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2904  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2905  1.1  christos   int UNUSED written = 0;
   2906  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2907  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2908  1.1  christos 
   2909  1.1  christos ((void) 0); /*nop*/
   2910  1.1  christos 
   2911  1.1  christos #undef FLD
   2912  1.1  christos }
   2913  1.1  christos   NEXT (vpc);
   2914  1.1  christos 
   2915  1.1  christos 
   2916  1.1  christos     }
   2917  1.1  christos   ENDSWITCH (sem) /* End of semantic switch.  */
   2918  1.1  christos 
   2919  1.1  christos   /* At this point `vpc' contains the next insn to execute.  */
   2920  1.1  christos }
   2921  1.1  christos 
   2922  1.1  christos #undef DEFINE_SWITCH
   2923  1.1  christos #endif /* DEFINE_SWITCH */
   2924