Home | History | Annotate | Line # | Download | only in or1k
sem-switch.c revision 1.1.1.2
      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.1.2  christos Copyright (C) 1996-2020 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.1.2  christos     { OR1K32BF_INSN_LF_ADD_D32, && case_sem_INSN_LF_ADD_D32 },
    140      1.1  christos     { OR1K32BF_INSN_LF_SUB_S, && case_sem_INSN_LF_SUB_S },
    141  1.1.1.2  christos     { OR1K32BF_INSN_LF_SUB_D32, && case_sem_INSN_LF_SUB_D32 },
    142      1.1  christos     { OR1K32BF_INSN_LF_MUL_S, && case_sem_INSN_LF_MUL_S },
    143  1.1.1.2  christos     { OR1K32BF_INSN_LF_MUL_D32, && case_sem_INSN_LF_MUL_D32 },
    144      1.1  christos     { OR1K32BF_INSN_LF_DIV_S, && case_sem_INSN_LF_DIV_S },
    145  1.1.1.2  christos     { OR1K32BF_INSN_LF_DIV_D32, && case_sem_INSN_LF_DIV_D32 },
    146      1.1  christos     { OR1K32BF_INSN_LF_REM_S, && case_sem_INSN_LF_REM_S },
    147  1.1.1.2  christos     { OR1K32BF_INSN_LF_REM_D32, && case_sem_INSN_LF_REM_D32 },
    148      1.1  christos     { OR1K32BF_INSN_LF_ITOF_S, && case_sem_INSN_LF_ITOF_S },
    149  1.1.1.2  christos     { OR1K32BF_INSN_LF_ITOF_D32, && case_sem_INSN_LF_ITOF_D32 },
    150      1.1  christos     { OR1K32BF_INSN_LF_FTOI_S, && case_sem_INSN_LF_FTOI_S },
    151  1.1.1.2  christos     { OR1K32BF_INSN_LF_FTOI_D32, && case_sem_INSN_LF_FTOI_D32 },
    152  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFEQ_S, && case_sem_INSN_LF_SFEQ_S },
    153  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFEQ_D32, && case_sem_INSN_LF_SFEQ_D32 },
    154  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFNE_S, && case_sem_INSN_LF_SFNE_S },
    155  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFNE_D32, && case_sem_INSN_LF_SFNE_D32 },
    156  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFGE_S, && case_sem_INSN_LF_SFGE_S },
    157  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFGE_D32, && case_sem_INSN_LF_SFGE_D32 },
    158  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFGT_S, && case_sem_INSN_LF_SFGT_S },
    159  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFGT_D32, && case_sem_INSN_LF_SFGT_D32 },
    160  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFLT_S, && case_sem_INSN_LF_SFLT_S },
    161  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFLT_D32, && case_sem_INSN_LF_SFLT_D32 },
    162  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFLE_S, && case_sem_INSN_LF_SFLE_S },
    163  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFLE_D32, && case_sem_INSN_LF_SFLE_D32 },
    164  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUEQ_S, && case_sem_INSN_LF_SFUEQ_S },
    165  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUEQ_D32, && case_sem_INSN_LF_SFUEQ_D32 },
    166  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUNE_S, && case_sem_INSN_LF_SFUNE_S },
    167  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUNE_D32, && case_sem_INSN_LF_SFUNE_D32 },
    168  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUGT_S, && case_sem_INSN_LF_SFUGT_S },
    169  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUGT_D32, && case_sem_INSN_LF_SFUGT_D32 },
    170  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUGE_S, && case_sem_INSN_LF_SFUGE_S },
    171  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUGE_D32, && case_sem_INSN_LF_SFUGE_D32 },
    172  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFULT_S, && case_sem_INSN_LF_SFULT_S },
    173  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFULT_D32, && case_sem_INSN_LF_SFULT_D32 },
    174  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFULE_S, && case_sem_INSN_LF_SFULE_S },
    175  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFULE_D32, && case_sem_INSN_LF_SFULE_D32 },
    176  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUN_S, && case_sem_INSN_LF_SFUN_S },
    177  1.1.1.2  christos     { OR1K32BF_INSN_LF_SFUN_D32, && case_sem_INSN_LF_SFUN_D32 },
    178      1.1  christos     { OR1K32BF_INSN_LF_MADD_S, && case_sem_INSN_LF_MADD_S },
    179  1.1.1.2  christos     { OR1K32BF_INSN_LF_MADD_D32, && case_sem_INSN_LF_MADD_D32 },
    180      1.1  christos     { OR1K32BF_INSN_LF_CUST1_S, && case_sem_INSN_LF_CUST1_S },
    181  1.1.1.2  christos     { OR1K32BF_INSN_LF_CUST1_D32, && case_sem_INSN_LF_CUST1_D32 },
    182      1.1  christos     { 0, 0 }
    183      1.1  christos   };
    184      1.1  christos   int i;
    185      1.1  christos 
    186      1.1  christos   for (i = 0; labels[i].label != 0; ++i)
    187      1.1  christos     {
    188      1.1  christos #if FAST_P
    189      1.1  christos       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
    190      1.1  christos #else
    191      1.1  christos       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
    192      1.1  christos #endif
    193      1.1  christos     }
    194      1.1  christos 
    195      1.1  christos #undef DEFINE_LABELS
    196      1.1  christos #endif /* DEFINE_LABELS */
    197      1.1  christos 
    198      1.1  christos #ifdef DEFINE_SWITCH
    199      1.1  christos 
    200      1.1  christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
    201      1.1  christos    off frills like tracing and profiling.  */
    202      1.1  christos /* FIXME: A better way would be to have TRACE_RESULT check for something
    203      1.1  christos    that can cause it to be optimized out.  Another way would be to emit
    204      1.1  christos    special handlers into the instruction "stream".  */
    205      1.1  christos 
    206      1.1  christos #if FAST_P
    207      1.1  christos #undef CGEN_TRACE_RESULT
    208      1.1  christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
    209      1.1  christos #endif
    210      1.1  christos 
    211      1.1  christos #undef GET_ATTR
    212      1.1  christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
    213      1.1  christos 
    214      1.1  christos {
    215      1.1  christos 
    216      1.1  christos #if WITH_SCACHE_PBB
    217      1.1  christos 
    218      1.1  christos /* Branch to next handler without going around main loop.  */
    219      1.1  christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
    220      1.1  christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
    221      1.1  christos 
    222      1.1  christos #else /* ! WITH_SCACHE_PBB */
    223      1.1  christos 
    224      1.1  christos #define NEXT(vpc) BREAK (sem)
    225      1.1  christos #ifdef __GNUC__
    226      1.1  christos #if FAST_P
    227      1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
    228      1.1  christos #else
    229      1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
    230      1.1  christos #endif
    231      1.1  christos #else
    232      1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
    233      1.1  christos #endif
    234      1.1  christos 
    235      1.1  christos #endif /* ! WITH_SCACHE_PBB */
    236      1.1  christos 
    237      1.1  christos     {
    238      1.1  christos 
    239      1.1  christos   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
    240      1.1  christos {
    241      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    242      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    243      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    244      1.1  christos   int UNUSED written = 0;
    245      1.1  christos   IADDR UNUSED pc = abuf->addr;
    246      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    247      1.1  christos 
    248      1.1  christos   {
    249      1.1  christos     /* Update the recorded pc in the cpu state struct.
    250      1.1  christos        Only necessary for WITH_SCACHE case, but to avoid the
    251      1.1  christos        conditional compilation ....  */
    252      1.1  christos     SET_H_PC (pc);
    253      1.1  christos     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
    254      1.1  christos        using the default-insn-bitsize spec.  When executing insns in parallel
    255      1.1  christos        we may want to queue the fault and continue execution.  */
    256      1.1  christos     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    257      1.1  christos     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
    258      1.1  christos   }
    259      1.1  christos 
    260      1.1  christos #undef FLD
    261      1.1  christos }
    262      1.1  christos   NEXT (vpc);
    263      1.1  christos 
    264      1.1  christos   CASE (sem, INSN_X_AFTER) : /* --after-- */
    265      1.1  christos {
    266      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    267      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    268      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    269      1.1  christos   int UNUSED written = 0;
    270      1.1  christos   IADDR UNUSED pc = abuf->addr;
    271      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    272      1.1  christos 
    273      1.1  christos   {
    274      1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    275      1.1  christos     or1k32bf_pbb_after (current_cpu, sem_arg);
    276      1.1  christos #endif
    277      1.1  christos   }
    278      1.1  christos 
    279      1.1  christos #undef FLD
    280      1.1  christos }
    281      1.1  christos   NEXT (vpc);
    282      1.1  christos 
    283      1.1  christos   CASE (sem, INSN_X_BEFORE) : /* --before-- */
    284      1.1  christos {
    285      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    286      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    287      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    288      1.1  christos   int UNUSED written = 0;
    289      1.1  christos   IADDR UNUSED pc = abuf->addr;
    290      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    291      1.1  christos 
    292      1.1  christos   {
    293      1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    294      1.1  christos     or1k32bf_pbb_before (current_cpu, sem_arg);
    295      1.1  christos #endif
    296      1.1  christos   }
    297      1.1  christos 
    298      1.1  christos #undef FLD
    299      1.1  christos }
    300      1.1  christos   NEXT (vpc);
    301      1.1  christos 
    302      1.1  christos   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
    303      1.1  christos {
    304      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    305      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    306      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    307      1.1  christos   int UNUSED written = 0;
    308      1.1  christos   IADDR UNUSED pc = abuf->addr;
    309      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    310      1.1  christos 
    311      1.1  christos   {
    312      1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    313      1.1  christos #ifdef DEFINE_SWITCH
    314      1.1  christos     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
    315      1.1  christos 			       pbb_br_type, pbb_br_npc);
    316      1.1  christos     BREAK (sem);
    317      1.1  christos #else
    318      1.1  christos     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
    319      1.1  christos     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
    320      1.1  christos 			       CPU_PBB_BR_TYPE (current_cpu),
    321      1.1  christos 			       CPU_PBB_BR_NPC (current_cpu));
    322      1.1  christos #endif
    323      1.1  christos #endif
    324      1.1  christos   }
    325      1.1  christos 
    326      1.1  christos #undef FLD
    327      1.1  christos }
    328      1.1  christos   NEXT (vpc);
    329      1.1  christos 
    330      1.1  christos   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
    331      1.1  christos {
    332      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    333      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    334      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    335      1.1  christos   int UNUSED written = 0;
    336      1.1  christos   IADDR UNUSED pc = abuf->addr;
    337      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    338      1.1  christos 
    339      1.1  christos   {
    340      1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    341      1.1  christos     vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
    342      1.1  christos #ifdef DEFINE_SWITCH
    343      1.1  christos     BREAK (sem);
    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_X_BEGIN) : /* --begin-- */
    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_empty.f
    357      1.1  christos   int UNUSED written = 0;
    358      1.1  christos   IADDR UNUSED pc = abuf->addr;
    359      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    360      1.1  christos 
    361      1.1  christos   {
    362      1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    363      1.1  christos #if defined DEFINE_SWITCH || defined FAST_P
    364      1.1  christos     /* In the switch case FAST_P is a constant, allowing several optimizations
    365      1.1  christos        in any called inline functions.  */
    366      1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
    367      1.1  christos #else
    368      1.1  christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
    369      1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
    370      1.1  christos #else
    371      1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, 0);
    372      1.1  christos #endif
    373      1.1  christos #endif
    374      1.1  christos #endif
    375      1.1  christos   }
    376      1.1  christos 
    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_J) : /* l.j ${disp26} */
    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_j.f
    386      1.1  christos   int UNUSED written = 0;
    387      1.1  christos   IADDR UNUSED pc = abuf->addr;
    388      1.1  christos   SEM_BRANCH_INIT
    389      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    390      1.1  christos 
    391      1.1  christos {
    392      1.1  christos {
    393      1.1  christos   {
    394      1.1  christos     USI opval = FLD (i_disp26);
    395      1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    396      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    397      1.1  christos   }
    398      1.1  christos }
    399      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    400      1.1  christos if (1)
    401      1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    402      1.1  christos }
    403      1.1  christos }
    404      1.1  christos 
    405      1.1  christos   SEM_BRANCH_FINI (vpc);
    406      1.1  christos #undef FLD
    407      1.1  christos }
    408      1.1  christos   NEXT (vpc);
    409      1.1  christos 
    410      1.1  christos   CASE (sem, INSN_L_ADRP) : /* l.adrp $rD,${disp21} */
    411      1.1  christos {
    412      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    413      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    414      1.1  christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
    415      1.1  christos   int UNUSED written = 0;
    416      1.1  christos   IADDR UNUSED pc = abuf->addr;
    417      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    418      1.1  christos 
    419      1.1  christos   {
    420      1.1  christos     USI opval = FLD (i_disp21);
    421      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    422      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    423      1.1  christos   }
    424      1.1  christos 
    425      1.1  christos #undef FLD
    426      1.1  christos }
    427      1.1  christos   NEXT (vpc);
    428      1.1  christos 
    429      1.1  christos   CASE (sem, INSN_L_JAL) : /* l.jal ${disp26} */
    430      1.1  christos {
    431      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    432      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    433      1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    434      1.1  christos   int UNUSED written = 0;
    435      1.1  christos   IADDR UNUSED pc = abuf->addr;
    436      1.1  christos   SEM_BRANCH_INIT
    437      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    438      1.1  christos 
    439      1.1  christos {
    440      1.1  christos   {
    441      1.1  christos     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
    442      1.1  christos     SET_H_GPR (((UINT) 9), opval);
    443      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    444      1.1  christos   }
    445      1.1  christos {
    446      1.1  christos {
    447      1.1  christos   {
    448      1.1  christos     USI opval = FLD (i_disp26);
    449      1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    450      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    451      1.1  christos   }
    452      1.1  christos }
    453      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    454      1.1  christos if (1)
    455      1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    456      1.1  christos }
    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_JR) : /* l.jr $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   {
    478      1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
    479      1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    480      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    481      1.1  christos   }
    482      1.1  christos }
    483      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    484      1.1  christos if (1)
    485      1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    486      1.1  christos }
    487      1.1  christos }
    488      1.1  christos 
    489      1.1  christos   SEM_BRANCH_FINI (vpc);
    490      1.1  christos #undef FLD
    491      1.1  christos }
    492      1.1  christos   NEXT (vpc);
    493      1.1  christos 
    494      1.1  christos   CASE (sem, INSN_L_JALR) : /* l.jalr $rB */
    495      1.1  christos {
    496      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    497      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    498      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
    499      1.1  christos   int UNUSED written = 0;
    500      1.1  christos   IADDR UNUSED pc = abuf->addr;
    501      1.1  christos   SEM_BRANCH_INIT
    502      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    503      1.1  christos 
    504      1.1  christos {
    505      1.1  christos   {
    506      1.1  christos     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
    507      1.1  christos     SET_H_GPR (((UINT) 9), opval);
    508      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    509      1.1  christos   }
    510      1.1  christos {
    511      1.1  christos {
    512      1.1  christos   {
    513      1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
    514      1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    515      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    516      1.1  christos   }
    517      1.1  christos }
    518      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    519      1.1  christos if (1)
    520      1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    521      1.1  christos }
    522      1.1  christos }
    523      1.1  christos }
    524      1.1  christos 
    525      1.1  christos   SEM_BRANCH_FINI (vpc);
    526      1.1  christos #undef FLD
    527      1.1  christos }
    528      1.1  christos   NEXT (vpc);
    529      1.1  christos 
    530      1.1  christos   CASE (sem, INSN_L_BNF) : /* l.bnf ${disp26} */
    531      1.1  christos {
    532      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    533      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    534      1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    535      1.1  christos   int UNUSED written = 0;
    536      1.1  christos   IADDR UNUSED pc = abuf->addr;
    537      1.1  christos   SEM_BRANCH_INIT
    538      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    539      1.1  christos 
    540      1.1  christos {
    541      1.1  christos if (NOTSI (GET_H_SYS_SR_F ())) {
    542      1.1  christos {
    543      1.1  christos   {
    544      1.1  christos     USI opval = FLD (i_disp26);
    545      1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    546      1.1  christos     written |= (1 << 4);
    547      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    548      1.1  christos   }
    549      1.1  christos }
    550      1.1  christos } else {
    551      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    552      1.1  christos {
    553      1.1  christos   {
    554      1.1  christos     USI opval = ADDSI (pc, 4);
    555      1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    556      1.1  christos     written |= (1 << 4);
    557      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    558      1.1  christos   }
    559      1.1  christos }
    560      1.1  christos }
    561      1.1  christos }
    562      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    563      1.1  christos if (1)
    564      1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    565      1.1  christos }
    566      1.1  christos }
    567      1.1  christos 
    568      1.1  christos   abuf->written = written;
    569      1.1  christos   SEM_BRANCH_FINI (vpc);
    570      1.1  christos #undef FLD
    571      1.1  christos }
    572      1.1  christos   NEXT (vpc);
    573      1.1  christos 
    574      1.1  christos   CASE (sem, INSN_L_BF) : /* l.bf ${disp26} */
    575      1.1  christos {
    576      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    577      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    578      1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    579      1.1  christos   int UNUSED written = 0;
    580      1.1  christos   IADDR UNUSED pc = abuf->addr;
    581      1.1  christos   SEM_BRANCH_INIT
    582      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    583      1.1  christos 
    584      1.1  christos {
    585      1.1  christos if (GET_H_SYS_SR_F ()) {
    586      1.1  christos {
    587      1.1  christos   {
    588      1.1  christos     USI opval = FLD (i_disp26);
    589      1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    590      1.1  christos     written |= (1 << 4);
    591      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    592      1.1  christos   }
    593      1.1  christos }
    594      1.1  christos } else {
    595      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    596      1.1  christos {
    597      1.1  christos   {
    598      1.1  christos     USI opval = ADDSI (pc, 4);
    599      1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    600      1.1  christos     written |= (1 << 4);
    601      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    602      1.1  christos   }
    603      1.1  christos }
    604      1.1  christos }
    605      1.1  christos }
    606      1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    607      1.1  christos if (1)
    608      1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    609      1.1  christos }
    610      1.1  christos }
    611      1.1  christos 
    612      1.1  christos   abuf->written = written;
    613      1.1  christos   SEM_BRANCH_FINI (vpc);
    614      1.1  christos #undef FLD
    615      1.1  christos }
    616      1.1  christos   NEXT (vpc);
    617      1.1  christos 
    618      1.1  christos   CASE (sem, INSN_L_TRAP) : /* l.trap ${uimm16} */
    619      1.1  christos {
    620      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    621      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    622      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    623      1.1  christos   int UNUSED written = 0;
    624      1.1  christos   IADDR UNUSED pc = abuf->addr;
    625      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    626      1.1  christos 
    627      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
    628      1.1  christos 
    629      1.1  christos #undef FLD
    630      1.1  christos }
    631      1.1  christos   NEXT (vpc);
    632      1.1  christos 
    633      1.1  christos   CASE (sem, INSN_L_SYS) : /* l.sys ${uimm16} */
    634      1.1  christos {
    635      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    636      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    637      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    638      1.1  christos   int UNUSED written = 0;
    639      1.1  christos   IADDR UNUSED pc = abuf->addr;
    640      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    641      1.1  christos 
    642      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
    643      1.1  christos 
    644      1.1  christos #undef FLD
    645      1.1  christos }
    646      1.1  christos   NEXT (vpc);
    647      1.1  christos 
    648      1.1  christos   CASE (sem, INSN_L_MSYNC) : /* l.msync */
    649      1.1  christos {
    650      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    651      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    652      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    653      1.1  christos   int UNUSED written = 0;
    654      1.1  christos   IADDR UNUSED pc = abuf->addr;
    655      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    656      1.1  christos 
    657      1.1  christos ((void) 0); /*nop*/
    658      1.1  christos 
    659      1.1  christos #undef FLD
    660      1.1  christos }
    661      1.1  christos   NEXT (vpc);
    662      1.1  christos 
    663      1.1  christos   CASE (sem, INSN_L_PSYNC) : /* l.psync */
    664      1.1  christos {
    665      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    666      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    667      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    668      1.1  christos   int UNUSED written = 0;
    669      1.1  christos   IADDR UNUSED pc = abuf->addr;
    670      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    671      1.1  christos 
    672      1.1  christos ((void) 0); /*nop*/
    673      1.1  christos 
    674      1.1  christos #undef FLD
    675      1.1  christos }
    676      1.1  christos   NEXT (vpc);
    677      1.1  christos 
    678      1.1  christos   CASE (sem, INSN_L_CSYNC) : /* l.csync */
    679      1.1  christos {
    680      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    681      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    682      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    683      1.1  christos   int UNUSED written = 0;
    684      1.1  christos   IADDR UNUSED pc = abuf->addr;
    685      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    686      1.1  christos 
    687      1.1  christos ((void) 0); /*nop*/
    688      1.1  christos 
    689      1.1  christos #undef FLD
    690      1.1  christos }
    691      1.1  christos   NEXT (vpc);
    692      1.1  christos 
    693      1.1  christos   CASE (sem, INSN_L_RFE) : /* l.rfe */
    694      1.1  christos {
    695      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    696      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    697      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    698      1.1  christos   int UNUSED written = 0;
    699      1.1  christos   IADDR UNUSED pc = abuf->addr;
    700      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    701      1.1  christos 
    702      1.1  christos or1k32bf_rfe (current_cpu);
    703      1.1  christos 
    704      1.1  christos #undef FLD
    705      1.1  christos }
    706      1.1  christos   NEXT (vpc);
    707      1.1  christos 
    708      1.1  christos   CASE (sem, INSN_L_NOP_IMM) : /* l.nop ${uimm16} */
    709      1.1  christos {
    710      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    711      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    712      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    713      1.1  christos   int UNUSED written = 0;
    714      1.1  christos   IADDR UNUSED pc = abuf->addr;
    715      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    716      1.1  christos 
    717      1.1  christos or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
    718      1.1  christos 
    719      1.1  christos #undef FLD
    720      1.1  christos }
    721      1.1  christos   NEXT (vpc);
    722      1.1  christos 
    723      1.1  christos   CASE (sem, INSN_L_MOVHI) : /* l.movhi $rD,$uimm16 */
    724      1.1  christos {
    725      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    726      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    727      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    728      1.1  christos   int UNUSED written = 0;
    729      1.1  christos   IADDR UNUSED pc = abuf->addr;
    730      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    731      1.1  christos 
    732      1.1  christos   {
    733      1.1  christos     USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
    734      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    735      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    736      1.1  christos   }
    737      1.1  christos 
    738      1.1  christos #undef FLD
    739      1.1  christos }
    740      1.1  christos   NEXT (vpc);
    741      1.1  christos 
    742      1.1  christos   CASE (sem, INSN_L_MACRC) : /* l.macrc $rD */
    743      1.1  christos {
    744      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    745      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    746      1.1  christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
    747      1.1  christos   int UNUSED written = 0;
    748      1.1  christos   IADDR UNUSED pc = abuf->addr;
    749      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    750      1.1  christos 
    751      1.1  christos {
    752      1.1  christos   {
    753      1.1  christos     USI opval = GET_H_MAC_MACLO ();
    754      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    755      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    756      1.1  christos   }
    757      1.1  christos   {
    758      1.1  christos     USI opval = 0;
    759      1.1  christos     SET_H_MAC_MACLO (opval);
    760      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
    761      1.1  christos   }
    762      1.1  christos   {
    763      1.1  christos     USI opval = 0;
    764      1.1  christos     SET_H_MAC_MACHI (opval);
    765      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
    766      1.1  christos   }
    767      1.1  christos }
    768      1.1  christos 
    769      1.1  christos #undef FLD
    770      1.1  christos }
    771      1.1  christos   NEXT (vpc);
    772      1.1  christos 
    773      1.1  christos   CASE (sem, INSN_L_MFSPR) : /* l.mfspr $rD,$rA,${uimm16} */
    774      1.1  christos {
    775      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    776      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    777      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    778      1.1  christos   int UNUSED written = 0;
    779      1.1  christos   IADDR UNUSED pc = abuf->addr;
    780      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    781      1.1  christos 
    782      1.1  christos   {
    783      1.1  christos     USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
    784      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    785      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    786      1.1  christos   }
    787      1.1  christos 
    788      1.1  christos #undef FLD
    789      1.1  christos }
    790      1.1  christos   NEXT (vpc);
    791      1.1  christos 
    792      1.1  christos   CASE (sem, INSN_L_MTSPR) : /* l.mtspr $rA,$rB,${uimm16-split} */
    793      1.1  christos {
    794      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    795      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    796      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mtspr.f
    797      1.1  christos   int UNUSED written = 0;
    798      1.1  christos   IADDR UNUSED pc = abuf->addr;
    799      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    800      1.1  christos 
    801      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)));
    802      1.1  christos 
    803      1.1  christos #undef FLD
    804      1.1  christos }
    805      1.1  christos   NEXT (vpc);
    806      1.1  christos 
    807      1.1  christos   CASE (sem, INSN_L_LWZ) : /* l.lwz $rD,${simm16}($rA) */
    808      1.1  christos {
    809      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    810      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    811      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    812      1.1  christos   int UNUSED written = 0;
    813      1.1  christos   IADDR UNUSED pc = abuf->addr;
    814      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    815      1.1  christos 
    816      1.1  christos   {
    817      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)));
    818      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    819      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    820      1.1  christos   }
    821      1.1  christos 
    822      1.1  christos #undef FLD
    823      1.1  christos }
    824      1.1  christos   NEXT (vpc);
    825      1.1  christos 
    826      1.1  christos   CASE (sem, INSN_L_LWS) : /* l.lws $rD,${simm16}($rA) */
    827      1.1  christos {
    828      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    829      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    830      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    831      1.1  christos   int UNUSED written = 0;
    832      1.1  christos   IADDR UNUSED pc = abuf->addr;
    833      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    834      1.1  christos 
    835      1.1  christos   {
    836      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)));
    837      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    838      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    839      1.1  christos   }
    840      1.1  christos 
    841      1.1  christos #undef FLD
    842      1.1  christos }
    843      1.1  christos   NEXT (vpc);
    844      1.1  christos 
    845      1.1  christos   CASE (sem, INSN_L_LWA) : /* l.lwa $rD,${simm16}($rA) */
    846      1.1  christos {
    847      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    848      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    849      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    850      1.1  christos   int UNUSED written = 0;
    851      1.1  christos   IADDR UNUSED pc = abuf->addr;
    852      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    853      1.1  christos 
    854      1.1  christos {
    855      1.1  christos   {
    856      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)));
    857      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    858      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    859      1.1  christos   }
    860      1.1  christos   {
    861      1.1  christos     BI opval = 1;
    862      1.1  christos     CPU (h_atomic_reserve) = opval;
    863      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    864      1.1  christos   }
    865      1.1  christos   {
    866      1.1  christos     SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
    867      1.1  christos     CPU (h_atomic_address) = opval;
    868      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
    869      1.1  christos   }
    870      1.1  christos }
    871      1.1  christos 
    872      1.1  christos #undef FLD
    873      1.1  christos }
    874      1.1  christos   NEXT (vpc);
    875      1.1  christos 
    876      1.1  christos   CASE (sem, INSN_L_LBZ) : /* l.lbz $rD,${simm16}($rA) */
    877      1.1  christos {
    878      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    879      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    880      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    881      1.1  christos   int UNUSED written = 0;
    882      1.1  christos   IADDR UNUSED pc = abuf->addr;
    883      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    884      1.1  christos 
    885      1.1  christos   {
    886      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)));
    887      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    888      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    889      1.1  christos   }
    890      1.1  christos 
    891      1.1  christos #undef FLD
    892      1.1  christos }
    893      1.1  christos   NEXT (vpc);
    894      1.1  christos 
    895      1.1  christos   CASE (sem, INSN_L_LBS) : /* l.lbs $rD,${simm16}($rA) */
    896      1.1  christos {
    897      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    898      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    899      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    900      1.1  christos   int UNUSED written = 0;
    901      1.1  christos   IADDR UNUSED pc = abuf->addr;
    902      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    903      1.1  christos 
    904      1.1  christos   {
    905      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)));
    906      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    907      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    908      1.1  christos   }
    909      1.1  christos 
    910      1.1  christos #undef FLD
    911      1.1  christos }
    912      1.1  christos   NEXT (vpc);
    913      1.1  christos 
    914      1.1  christos   CASE (sem, INSN_L_LHZ) : /* l.lhz $rD,${simm16}($rA) */
    915      1.1  christos {
    916      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    917      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    918      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    919      1.1  christos   int UNUSED written = 0;
    920      1.1  christos   IADDR UNUSED pc = abuf->addr;
    921      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    922      1.1  christos 
    923      1.1  christos   {
    924      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)));
    925      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    926      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    927      1.1  christos   }
    928      1.1  christos 
    929      1.1  christos #undef FLD
    930      1.1  christos }
    931      1.1  christos   NEXT (vpc);
    932      1.1  christos 
    933      1.1  christos   CASE (sem, INSN_L_LHS) : /* l.lhs $rD,${simm16}($rA) */
    934      1.1  christos {
    935      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    936      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    937      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    938      1.1  christos   int UNUSED written = 0;
    939      1.1  christos   IADDR UNUSED pc = abuf->addr;
    940      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    941      1.1  christos 
    942      1.1  christos   {
    943      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)));
    944      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    945      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    946      1.1  christos   }
    947      1.1  christos 
    948      1.1  christos #undef FLD
    949      1.1  christos }
    950      1.1  christos   NEXT (vpc);
    951      1.1  christos 
    952      1.1  christos   CASE (sem, INSN_L_SW) : /* l.sw ${simm16-split}($rA),$rB */
    953      1.1  christos {
    954      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    955      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    956      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    957      1.1  christos   int UNUSED written = 0;
    958      1.1  christos   IADDR UNUSED pc = abuf->addr;
    959      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    960      1.1  christos 
    961      1.1  christos {
    962      1.1  christos   SI tmp_addr;
    963      1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
    964      1.1  christos   {
    965      1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
    966      1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
    967      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    968      1.1  christos   }
    969      1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
    970      1.1  christos   {
    971      1.1  christos     BI opval = 0;
    972      1.1  christos     CPU (h_atomic_reserve) = opval;
    973      1.1  christos     written |= (1 << 4);
    974      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    975      1.1  christos   }
    976      1.1  christos }
    977      1.1  christos }
    978      1.1  christos 
    979      1.1  christos   abuf->written = written;
    980      1.1  christos #undef FLD
    981      1.1  christos }
    982      1.1  christos   NEXT (vpc);
    983      1.1  christos 
    984      1.1  christos   CASE (sem, INSN_L_SB) : /* l.sb ${simm16-split}($rA),$rB */
    985      1.1  christos {
    986      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    987      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    988      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    989      1.1  christos   int UNUSED written = 0;
    990      1.1  christos   IADDR UNUSED pc = abuf->addr;
    991      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    992      1.1  christos 
    993      1.1  christos {
    994      1.1  christos   SI tmp_addr;
    995      1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
    996      1.1  christos   {
    997      1.1  christos     UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
    998      1.1  christos     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
    999      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1000      1.1  christos   }
   1001      1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
   1002      1.1  christos   {
   1003      1.1  christos     BI opval = 0;
   1004      1.1  christos     CPU (h_atomic_reserve) = opval;
   1005      1.1  christos     written |= (1 << 4);
   1006      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
   1007      1.1  christos   }
   1008      1.1  christos }
   1009      1.1  christos }
   1010      1.1  christos 
   1011      1.1  christos   abuf->written = written;
   1012      1.1  christos #undef FLD
   1013      1.1  christos }
   1014      1.1  christos   NEXT (vpc);
   1015      1.1  christos 
   1016      1.1  christos   CASE (sem, INSN_L_SH) : /* l.sh ${simm16-split}($rA),$rB */
   1017      1.1  christos {
   1018      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1019      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1020      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
   1021      1.1  christos   int UNUSED written = 0;
   1022      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1023      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1024      1.1  christos 
   1025      1.1  christos {
   1026      1.1  christos   SI tmp_addr;
   1027      1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
   1028      1.1  christos   {
   1029      1.1  christos     UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
   1030      1.1  christos     SETMEMUHI (current_cpu, pc, tmp_addr, opval);
   1031      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1032      1.1  christos   }
   1033      1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
   1034      1.1  christos   {
   1035      1.1  christos     BI opval = 0;
   1036      1.1  christos     CPU (h_atomic_reserve) = opval;
   1037      1.1  christos     written |= (1 << 4);
   1038      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
   1039      1.1  christos   }
   1040      1.1  christos }
   1041      1.1  christos }
   1042      1.1  christos 
   1043      1.1  christos   abuf->written = written;
   1044      1.1  christos #undef FLD
   1045      1.1  christos }
   1046      1.1  christos   NEXT (vpc);
   1047      1.1  christos 
   1048      1.1  christos   CASE (sem, INSN_L_SWA) : /* l.swa ${simm16-split}($rA),$rB */
   1049      1.1  christos {
   1050      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1051      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1052      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
   1053      1.1  christos   int UNUSED written = 0;
   1054      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1055      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1056      1.1  christos 
   1057      1.1  christos {
   1058      1.1  christos   SI tmp_addr;
   1059      1.1  christos   BI tmp_flag;
   1060      1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
   1061      1.1  christos   {
   1062      1.1  christos     USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
   1063      1.1  christos     SET_H_SYS_SR_F (opval);
   1064      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1065      1.1  christos   }
   1066      1.1  christos if (GET_H_SYS_SR_F ()) {
   1067      1.1  christos   {
   1068      1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
   1069      1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
   1070      1.1  christos     written |= (1 << 7);
   1071      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1072      1.1  christos   }
   1073      1.1  christos }
   1074      1.1  christos   {
   1075      1.1  christos     BI opval = 0;
   1076      1.1  christos     CPU (h_atomic_reserve) = opval;
   1077      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
   1078      1.1  christos   }
   1079      1.1  christos }
   1080      1.1  christos 
   1081      1.1  christos   abuf->written = written;
   1082      1.1  christos #undef FLD
   1083      1.1  christos }
   1084      1.1  christos   NEXT (vpc);
   1085      1.1  christos 
   1086      1.1  christos   CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
   1087      1.1  christos {
   1088      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1089      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1090      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1091      1.1  christos   int UNUSED written = 0;
   1092      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1093      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1094      1.1  christos 
   1095      1.1  christos   {
   1096      1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1097      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1098      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1099      1.1  christos   }
   1100      1.1  christos 
   1101      1.1  christos #undef FLD
   1102      1.1  christos }
   1103      1.1  christos   NEXT (vpc);
   1104      1.1  christos 
   1105      1.1  christos   CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
   1106      1.1  christos {
   1107      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1108      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1109      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1110      1.1  christos   int UNUSED written = 0;
   1111      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1112      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1113      1.1  christos 
   1114      1.1  christos   {
   1115      1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1116      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1117      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1118      1.1  christos   }
   1119      1.1  christos 
   1120      1.1  christos #undef FLD
   1121      1.1  christos }
   1122      1.1  christos   NEXT (vpc);
   1123      1.1  christos 
   1124      1.1  christos   CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
   1125      1.1  christos {
   1126      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1127      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1128      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1129      1.1  christos   int UNUSED written = 0;
   1130      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1131      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1132      1.1  christos 
   1133      1.1  christos   {
   1134      1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1135      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1136      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1137      1.1  christos   }
   1138      1.1  christos 
   1139      1.1  christos #undef FLD
   1140      1.1  christos }
   1141      1.1  christos   NEXT (vpc);
   1142      1.1  christos 
   1143      1.1  christos   CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
   1144      1.1  christos {
   1145      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1146      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1147      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1148      1.1  christos   int UNUSED written = 0;
   1149      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1150      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1151      1.1  christos 
   1152      1.1  christos   {
   1153      1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1154      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1155      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1156      1.1  christos   }
   1157      1.1  christos 
   1158      1.1  christos #undef FLD
   1159      1.1  christos }
   1160      1.1  christos   NEXT (vpc);
   1161      1.1  christos 
   1162      1.1  christos   CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
   1163      1.1  christos {
   1164      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1165      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1166      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1167      1.1  christos   int UNUSED written = 0;
   1168      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1169      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1170      1.1  christos 
   1171      1.1  christos   {
   1172      1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1173      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1174      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1175      1.1  christos   }
   1176      1.1  christos 
   1177      1.1  christos #undef FLD
   1178      1.1  christos }
   1179      1.1  christos   NEXT (vpc);
   1180      1.1  christos 
   1181      1.1  christos   CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
   1182      1.1  christos {
   1183      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1184      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1185      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1186      1.1  christos   int UNUSED written = 0;
   1187      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1188      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1189      1.1  christos 
   1190      1.1  christos   {
   1191      1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1192      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1193      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1194      1.1  christos   }
   1195      1.1  christos 
   1196      1.1  christos #undef FLD
   1197      1.1  christos }
   1198      1.1  christos   NEXT (vpc);
   1199      1.1  christos 
   1200      1.1  christos   CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
   1201      1.1  christos {
   1202      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1203      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1204      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1205      1.1  christos   int UNUSED written = 0;
   1206      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1207      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1208      1.1  christos 
   1209      1.1  christos   {
   1210      1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1211      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1212      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1213      1.1  christos   }
   1214      1.1  christos 
   1215      1.1  christos #undef FLD
   1216      1.1  christos }
   1217      1.1  christos   NEXT (vpc);
   1218      1.1  christos 
   1219      1.1  christos   CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
   1220      1.1  christos {
   1221      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1222      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1223      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1224      1.1  christos   int UNUSED written = 0;
   1225      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1226      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1227      1.1  christos 
   1228      1.1  christos   {
   1229      1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1230      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1231      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1232      1.1  christos   }
   1233      1.1  christos 
   1234      1.1  christos #undef FLD
   1235      1.1  christos }
   1236      1.1  christos   NEXT (vpc);
   1237      1.1  christos 
   1238      1.1  christos   CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
   1239      1.1  christos {
   1240      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1241      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1242      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1243      1.1  christos   int UNUSED written = 0;
   1244      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1245      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1246      1.1  christos 
   1247      1.1  christos   {
   1248      1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1249      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1250      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1251      1.1  christos   }
   1252      1.1  christos 
   1253      1.1  christos #undef FLD
   1254      1.1  christos }
   1255      1.1  christos   NEXT (vpc);
   1256      1.1  christos 
   1257      1.1  christos   CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
   1258      1.1  christos {
   1259      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1260      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1261      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1262      1.1  christos   int UNUSED written = 0;
   1263      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1264      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1265      1.1  christos 
   1266      1.1  christos   {
   1267      1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1268      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1269      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1270      1.1  christos   }
   1271      1.1  christos 
   1272      1.1  christos #undef FLD
   1273      1.1  christos }
   1274      1.1  christos   NEXT (vpc);
   1275      1.1  christos 
   1276      1.1  christos   CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
   1277      1.1  christos {
   1278      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1279      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1280      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1281      1.1  christos   int UNUSED written = 0;
   1282      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1283      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1284      1.1  christos 
   1285      1.1  christos   {
   1286      1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1287      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1288      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1289      1.1  christos   }
   1290      1.1  christos 
   1291      1.1  christos #undef FLD
   1292      1.1  christos }
   1293      1.1  christos   NEXT (vpc);
   1294      1.1  christos 
   1295      1.1  christos   CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
   1296      1.1  christos {
   1297      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1298      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1299      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1300      1.1  christos   int UNUSED written = 0;
   1301      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1302      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1303      1.1  christos 
   1304      1.1  christos {
   1305      1.1  christos {
   1306      1.1  christos   {
   1307      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1308      1.1  christos     SET_H_SYS_SR_CY (opval);
   1309      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1310      1.1  christos   }
   1311      1.1  christos   {
   1312      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1313      1.1  christos     SET_H_SYS_SR_OV (opval);
   1314      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1315      1.1  christos   }
   1316      1.1  christos   {
   1317      1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1318      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1319      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1320      1.1  christos   }
   1321      1.1  christos }
   1322      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1323      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1324      1.1  christos }
   1325      1.1  christos }
   1326      1.1  christos 
   1327      1.1  christos #undef FLD
   1328      1.1  christos }
   1329      1.1  christos   NEXT (vpc);
   1330      1.1  christos 
   1331      1.1  christos   CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
   1332      1.1  christos {
   1333      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1334      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1335      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1336      1.1  christos   int UNUSED written = 0;
   1337      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1338      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1339      1.1  christos 
   1340      1.1  christos {
   1341      1.1  christos {
   1342      1.1  christos   {
   1343      1.1  christos     BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1344      1.1  christos     SET_H_SYS_SR_CY (opval);
   1345      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1346      1.1  christos   }
   1347      1.1  christos   {
   1348      1.1  christos     BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1349      1.1  christos     SET_H_SYS_SR_OV (opval);
   1350      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1351      1.1  christos   }
   1352      1.1  christos   {
   1353      1.1  christos     USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1354      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1355      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1356      1.1  christos   }
   1357      1.1  christos }
   1358      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1359      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1360      1.1  christos }
   1361      1.1  christos }
   1362      1.1  christos 
   1363      1.1  christos #undef FLD
   1364      1.1  christos }
   1365      1.1  christos   NEXT (vpc);
   1366      1.1  christos 
   1367      1.1  christos   CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
   1368      1.1  christos {
   1369      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1370      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1371      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1372      1.1  christos   int UNUSED written = 0;
   1373      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1374      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1375      1.1  christos 
   1376      1.1  christos {
   1377      1.1  christos {
   1378      1.1  christos   BI tmp_tmp_sys_sr_cy;
   1379      1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1380      1.1  christos   {
   1381      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1382      1.1  christos     SET_H_SYS_SR_CY (opval);
   1383      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1384      1.1  christos   }
   1385      1.1  christos   {
   1386      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1387      1.1  christos     SET_H_SYS_SR_OV (opval);
   1388      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1389      1.1  christos   }
   1390      1.1  christos   {
   1391      1.1  christos     USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1392      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1393      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1394      1.1  christos   }
   1395      1.1  christos }
   1396      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1397      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1398      1.1  christos }
   1399      1.1  christos }
   1400      1.1  christos 
   1401      1.1  christos #undef FLD
   1402      1.1  christos }
   1403      1.1  christos   NEXT (vpc);
   1404      1.1  christos 
   1405      1.1  christos   CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
   1406      1.1  christos {
   1407      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1408      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1409      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1410      1.1  christos   int UNUSED written = 0;
   1411      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1412      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1413      1.1  christos 
   1414      1.1  christos {
   1415      1.1  christos {
   1416      1.1  christos   {
   1417      1.1  christos     BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1418      1.1  christos     SET_H_SYS_SR_OV (opval);
   1419      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1420      1.1  christos   }
   1421      1.1  christos   {
   1422      1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1423      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1424      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1425      1.1  christos   }
   1426      1.1  christos }
   1427      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1428      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1429      1.1  christos }
   1430      1.1  christos }
   1431      1.1  christos 
   1432      1.1  christos #undef FLD
   1433      1.1  christos }
   1434      1.1  christos   NEXT (vpc);
   1435      1.1  christos 
   1436      1.1  christos   CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
   1437      1.1  christos {
   1438      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1439      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1440      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1441      1.1  christos   int UNUSED written = 0;
   1442      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1443      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1444      1.1  christos 
   1445      1.1  christos {
   1446      1.1  christos   DI tmp_result;
   1447      1.1  christos   tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   1448      1.1  christos   {
   1449      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1450      1.1  christos     SET_H_MAC_MACHI (opval);
   1451      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1452      1.1  christos   }
   1453      1.1  christos   {
   1454      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1455      1.1  christos     SET_H_MAC_MACLO (opval);
   1456      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1457      1.1  christos   }
   1458      1.1  christos }
   1459      1.1  christos 
   1460      1.1  christos #undef FLD
   1461      1.1  christos }
   1462      1.1  christos   NEXT (vpc);
   1463      1.1  christos 
   1464      1.1  christos   CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
   1465      1.1  christos {
   1466      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1467      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1468      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1469      1.1  christos   int UNUSED written = 0;
   1470      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1471      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1472      1.1  christos 
   1473      1.1  christos {
   1474      1.1  christos {
   1475      1.1  christos   {
   1476      1.1  christos     BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1477      1.1  christos     SET_H_SYS_SR_CY (opval);
   1478      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1479      1.1  christos   }
   1480      1.1  christos   {
   1481      1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1482      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1483      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1484      1.1  christos   }
   1485      1.1  christos }
   1486      1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   1487      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1488      1.1  christos }
   1489      1.1  christos }
   1490      1.1  christos 
   1491      1.1  christos #undef FLD
   1492      1.1  christos }
   1493      1.1  christos   NEXT (vpc);
   1494      1.1  christos 
   1495      1.1  christos   CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
   1496      1.1  christos {
   1497      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1498      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1499      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1500      1.1  christos   int UNUSED written = 0;
   1501      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1502      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1503      1.1  christos 
   1504      1.1  christos {
   1505      1.1  christos   DI tmp_result;
   1506      1.1  christos   tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   1507      1.1  christos   {
   1508      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1509      1.1  christos     SET_H_MAC_MACHI (opval);
   1510      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1511      1.1  christos   }
   1512      1.1  christos   {
   1513      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1514      1.1  christos     SET_H_MAC_MACLO (opval);
   1515      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1516      1.1  christos   }
   1517      1.1  christos }
   1518      1.1  christos 
   1519      1.1  christos #undef FLD
   1520      1.1  christos }
   1521      1.1  christos   NEXT (vpc);
   1522      1.1  christos 
   1523      1.1  christos   CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
   1524      1.1  christos {
   1525      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1526      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1527      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1528      1.1  christos   int UNUSED written = 0;
   1529      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1530      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1531      1.1  christos 
   1532      1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1533      1.1  christos {
   1534      1.1  christos   {
   1535      1.1  christos     BI opval = 0;
   1536      1.1  christos     SET_H_SYS_SR_OV (opval);
   1537      1.1  christos     written |= (1 << 5);
   1538      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1539      1.1  christos   }
   1540      1.1  christos   {
   1541      1.1  christos     SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1542      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1543      1.1  christos     written |= (1 << 4);
   1544      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1545      1.1  christos   }
   1546      1.1  christos }
   1547      1.1  christos } else {
   1548      1.1  christos {
   1549      1.1  christos   {
   1550      1.1  christos     BI opval = 1;
   1551      1.1  christos     SET_H_SYS_SR_OV (opval);
   1552      1.1  christos     written |= (1 << 5);
   1553      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1554      1.1  christos   }
   1555      1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1556      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1557      1.1  christos }
   1558      1.1  christos }
   1559      1.1  christos }
   1560      1.1  christos 
   1561      1.1  christos   abuf->written = written;
   1562      1.1  christos #undef FLD
   1563      1.1  christos }
   1564      1.1  christos   NEXT (vpc);
   1565      1.1  christos 
   1566      1.1  christos   CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
   1567      1.1  christos {
   1568      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1569      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1570      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1571      1.1  christos   int UNUSED written = 0;
   1572      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1573      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1574      1.1  christos 
   1575      1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1576      1.1  christos {
   1577      1.1  christos   {
   1578      1.1  christos     BI opval = 0;
   1579      1.1  christos     SET_H_SYS_SR_CY (opval);
   1580      1.1  christos     written |= (1 << 5);
   1581      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1582      1.1  christos   }
   1583      1.1  christos   {
   1584      1.1  christos     USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1585      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1586      1.1  christos     written |= (1 << 4);
   1587      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1588      1.1  christos   }
   1589      1.1  christos }
   1590      1.1  christos } else {
   1591      1.1  christos {
   1592      1.1  christos   {
   1593      1.1  christos     BI opval = 1;
   1594      1.1  christos     SET_H_SYS_SR_CY (opval);
   1595      1.1  christos     written |= (1 << 5);
   1596      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1597      1.1  christos   }
   1598      1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1599      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1600      1.1  christos }
   1601      1.1  christos }
   1602      1.1  christos }
   1603      1.1  christos 
   1604      1.1  christos   abuf->written = written;
   1605      1.1  christos #undef FLD
   1606      1.1  christos }
   1607      1.1  christos   NEXT (vpc);
   1608      1.1  christos 
   1609      1.1  christos   CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
   1610      1.1  christos {
   1611      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1612      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1613      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1614      1.1  christos   int UNUSED written = 0;
   1615      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1616      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1617      1.1  christos 
   1618      1.1  christos   {
   1619      1.1  christos     USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1620      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1621      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1622      1.1  christos   }
   1623      1.1  christos 
   1624      1.1  christos #undef FLD
   1625      1.1  christos }
   1626      1.1  christos   NEXT (vpc);
   1627      1.1  christos 
   1628      1.1  christos   CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
   1629      1.1  christos {
   1630      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1631      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1632      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1633      1.1  christos   int UNUSED written = 0;
   1634      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1635      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1636      1.1  christos 
   1637      1.1  christos   {
   1638      1.1  christos     USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1639      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1640      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1641      1.1  christos   }
   1642      1.1  christos 
   1643      1.1  christos #undef FLD
   1644      1.1  christos }
   1645      1.1  christos   NEXT (vpc);
   1646      1.1  christos 
   1647      1.1  christos   CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
   1648      1.1  christos {
   1649      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1650      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1651      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1652      1.1  christos   int UNUSED written = 0;
   1653      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1654      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1655      1.1  christos 
   1656      1.1  christos   {
   1657      1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1658      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1659      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1660      1.1  christos   }
   1661      1.1  christos 
   1662      1.1  christos #undef FLD
   1663      1.1  christos }
   1664      1.1  christos   NEXT (vpc);
   1665      1.1  christos 
   1666      1.1  christos   CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
   1667      1.1  christos {
   1668      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1669      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1670      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1671      1.1  christos   int UNUSED written = 0;
   1672      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1673      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1674      1.1  christos 
   1675      1.1  christos   {
   1676      1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1677      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1678      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1679      1.1  christos   }
   1680      1.1  christos 
   1681      1.1  christos #undef FLD
   1682      1.1  christos }
   1683      1.1  christos   NEXT (vpc);
   1684      1.1  christos 
   1685      1.1  christos   CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
   1686      1.1  christos {
   1687      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1688      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1689      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1690      1.1  christos   int UNUSED written = 0;
   1691      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1692      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1693      1.1  christos 
   1694      1.1  christos   {
   1695      1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1696      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1697      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1698      1.1  christos   }
   1699      1.1  christos 
   1700      1.1  christos #undef FLD
   1701      1.1  christos }
   1702      1.1  christos   NEXT (vpc);
   1703      1.1  christos 
   1704      1.1  christos   CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
   1705      1.1  christos {
   1706      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1707      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1708      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1709      1.1  christos   int UNUSED written = 0;
   1710      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1711      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1712      1.1  christos 
   1713      1.1  christos {
   1714      1.1  christos {
   1715      1.1  christos   {
   1716      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1717      1.1  christos     SET_H_SYS_SR_CY (opval);
   1718      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1719      1.1  christos   }
   1720      1.1  christos   {
   1721      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1722      1.1  christos     SET_H_SYS_SR_OV (opval);
   1723      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1724      1.1  christos   }
   1725      1.1  christos   {
   1726      1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1727      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1728      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1729      1.1  christos   }
   1730      1.1  christos }
   1731      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1732      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1733      1.1  christos }
   1734      1.1  christos }
   1735      1.1  christos 
   1736      1.1  christos #undef FLD
   1737      1.1  christos }
   1738      1.1  christos   NEXT (vpc);
   1739      1.1  christos 
   1740      1.1  christos   CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
   1741      1.1  christos {
   1742      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1743      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1744      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1745      1.1  christos   int UNUSED written = 0;
   1746      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1747      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1748      1.1  christos 
   1749      1.1  christos {
   1750      1.1  christos {
   1751      1.1  christos   BI tmp_tmp_sys_sr_cy;
   1752      1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1753      1.1  christos   {
   1754      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1755      1.1  christos     SET_H_SYS_SR_CY (opval);
   1756      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1757      1.1  christos   }
   1758      1.1  christos   {
   1759      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1760      1.1  christos     SET_H_SYS_SR_OV (opval);
   1761      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1762      1.1  christos   }
   1763      1.1  christos   {
   1764      1.1  christos     SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1765      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1766      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1767      1.1  christos   }
   1768      1.1  christos }
   1769      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1770      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1771      1.1  christos }
   1772      1.1  christos }
   1773      1.1  christos 
   1774      1.1  christos #undef FLD
   1775      1.1  christos }
   1776      1.1  christos   NEXT (vpc);
   1777      1.1  christos 
   1778      1.1  christos   CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
   1779      1.1  christos {
   1780      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1781      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1782      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1783      1.1  christos   int UNUSED written = 0;
   1784      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1785      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1786      1.1  christos 
   1787      1.1  christos {
   1788      1.1  christos {
   1789      1.1  christos   {
   1790      1.1  christos     USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1791      1.1  christos     SET_H_SYS_SR_OV (opval);
   1792      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1793      1.1  christos   }
   1794      1.1  christos   {
   1795      1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1796      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1797      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1798      1.1  christos   }
   1799      1.1  christos }
   1800      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1801      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1802      1.1  christos }
   1803      1.1  christos }
   1804      1.1  christos 
   1805      1.1  christos #undef FLD
   1806      1.1  christos }
   1807      1.1  christos   NEXT (vpc);
   1808      1.1  christos 
   1809      1.1  christos   CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
   1810      1.1  christos {
   1811      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1812      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1813      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1814      1.1  christos   int UNUSED written = 0;
   1815      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1816      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1817      1.1  christos 
   1818      1.1  christos   {
   1819      1.1  christos     USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1820      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1821      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1822      1.1  christos   }
   1823      1.1  christos 
   1824      1.1  christos #undef FLD
   1825      1.1  christos }
   1826      1.1  christos   NEXT (vpc);
   1827      1.1  christos 
   1828      1.1  christos   CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
   1829      1.1  christos {
   1830      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1831      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1832      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1833      1.1  christos   int UNUSED written = 0;
   1834      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1835      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1836      1.1  christos 
   1837      1.1  christos   {
   1838      1.1  christos     USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1839      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1840      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1841      1.1  christos   }
   1842      1.1  christos 
   1843      1.1  christos #undef FLD
   1844      1.1  christos }
   1845      1.1  christos   NEXT (vpc);
   1846      1.1  christos 
   1847      1.1  christos   CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
   1848      1.1  christos {
   1849      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1850      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1851      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1852      1.1  christos   int UNUSED written = 0;
   1853      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1854      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1855      1.1  christos 
   1856      1.1  christos   {
   1857      1.1  christos     USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1858      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1859      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1860      1.1  christos   }
   1861      1.1  christos 
   1862      1.1  christos #undef FLD
   1863      1.1  christos }
   1864      1.1  christos   NEXT (vpc);
   1865      1.1  christos 
   1866      1.1  christos   CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
   1867      1.1  christos {
   1868      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1869      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1870      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1871      1.1  christos   int UNUSED written = 0;
   1872      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1873      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1874      1.1  christos 
   1875      1.1  christos   {
   1876      1.1  christos     USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1877      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1878      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1879      1.1  christos   }
   1880      1.1  christos 
   1881      1.1  christos #undef FLD
   1882      1.1  christos }
   1883      1.1  christos   NEXT (vpc);
   1884      1.1  christos 
   1885      1.1  christos   CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
   1886      1.1  christos {
   1887      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1888      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1889      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1890      1.1  christos   int UNUSED written = 0;
   1891      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1892      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1893      1.1  christos 
   1894      1.1  christos   {
   1895      1.1  christos     USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1896      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1897      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1898      1.1  christos   }
   1899      1.1  christos 
   1900      1.1  christos #undef FLD
   1901      1.1  christos }
   1902      1.1  christos   NEXT (vpc);
   1903      1.1  christos 
   1904      1.1  christos   CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
   1905      1.1  christos {
   1906      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1907      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1908      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1909      1.1  christos   int UNUSED written = 0;
   1910      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1911      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1912      1.1  christos 
   1913      1.1  christos   {
   1914      1.1  christos     USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1915      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1916      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1917      1.1  christos   }
   1918      1.1  christos 
   1919      1.1  christos #undef FLD
   1920      1.1  christos }
   1921      1.1  christos   NEXT (vpc);
   1922      1.1  christos 
   1923      1.1  christos   CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
   1924      1.1  christos {
   1925      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1926      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1927      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1928      1.1  christos   int UNUSED written = 0;
   1929      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1930      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1931      1.1  christos 
   1932      1.1  christos if (GET_H_SYS_SR_F ()) {
   1933      1.1  christos   {
   1934      1.1  christos     USI opval = GET_H_GPR (FLD (f_r2));
   1935      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1936      1.1  christos     written |= (1 << 3);
   1937      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1938      1.1  christos   }
   1939      1.1  christos } else {
   1940      1.1  christos   {
   1941      1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
   1942      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1943      1.1  christos     written |= (1 << 3);
   1944      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1945      1.1  christos   }
   1946      1.1  christos }
   1947      1.1  christos 
   1948      1.1  christos   abuf->written = written;
   1949      1.1  christos #undef FLD
   1950      1.1  christos }
   1951      1.1  christos   NEXT (vpc);
   1952      1.1  christos 
   1953      1.1  christos   CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
   1954      1.1  christos {
   1955      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1956      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1957      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1958      1.1  christos   int UNUSED written = 0;
   1959      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1960      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1961      1.1  christos 
   1962      1.1  christos   {
   1963      1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1964      1.1  christos     SET_H_SYS_SR_F (opval);
   1965      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1966      1.1  christos   }
   1967      1.1  christos 
   1968      1.1  christos #undef FLD
   1969      1.1  christos }
   1970      1.1  christos   NEXT (vpc);
   1971      1.1  christos 
   1972      1.1  christos   CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
   1973      1.1  christos {
   1974      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1975      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1976      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1977      1.1  christos   int UNUSED written = 0;
   1978      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1979      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1980      1.1  christos 
   1981      1.1  christos   {
   1982      1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1983      1.1  christos     SET_H_SYS_SR_F (opval);
   1984      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1985      1.1  christos   }
   1986      1.1  christos 
   1987      1.1  christos #undef FLD
   1988      1.1  christos }
   1989      1.1  christos   NEXT (vpc);
   1990      1.1  christos 
   1991      1.1  christos   CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
   1992      1.1  christos {
   1993      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1994      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1995      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1996      1.1  christos   int UNUSED written = 0;
   1997      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1998      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1999      1.1  christos 
   2000      1.1  christos   {
   2001      1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2002      1.1  christos     SET_H_SYS_SR_F (opval);
   2003      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2004      1.1  christos   }
   2005      1.1  christos 
   2006      1.1  christos #undef FLD
   2007      1.1  christos }
   2008      1.1  christos   NEXT (vpc);
   2009      1.1  christos 
   2010      1.1  christos   CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
   2011      1.1  christos {
   2012      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2013      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2014      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2015      1.1  christos   int UNUSED written = 0;
   2016      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2017      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2018      1.1  christos 
   2019      1.1  christos   {
   2020      1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2021      1.1  christos     SET_H_SYS_SR_F (opval);
   2022      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2023      1.1  christos   }
   2024      1.1  christos 
   2025      1.1  christos #undef FLD
   2026      1.1  christos }
   2027      1.1  christos   NEXT (vpc);
   2028      1.1  christos 
   2029      1.1  christos   CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
   2030      1.1  christos {
   2031      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2032      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2033      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2034      1.1  christos   int UNUSED written = 0;
   2035      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2036      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2037      1.1  christos 
   2038      1.1  christos   {
   2039      1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2040      1.1  christos     SET_H_SYS_SR_F (opval);
   2041      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2042      1.1  christos   }
   2043      1.1  christos 
   2044      1.1  christos #undef FLD
   2045      1.1  christos }
   2046      1.1  christos   NEXT (vpc);
   2047      1.1  christos 
   2048      1.1  christos   CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
   2049      1.1  christos {
   2050      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2051      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2052      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2053      1.1  christos   int UNUSED written = 0;
   2054      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2055      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2056      1.1  christos 
   2057      1.1  christos   {
   2058      1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2059      1.1  christos     SET_H_SYS_SR_F (opval);
   2060      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2061      1.1  christos   }
   2062      1.1  christos 
   2063      1.1  christos #undef FLD
   2064      1.1  christos }
   2065      1.1  christos   NEXT (vpc);
   2066      1.1  christos 
   2067      1.1  christos   CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
   2068      1.1  christos {
   2069      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2070      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2071      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2072      1.1  christos   int UNUSED written = 0;
   2073      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2074      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2075      1.1  christos 
   2076      1.1  christos   {
   2077      1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2078      1.1  christos     SET_H_SYS_SR_F (opval);
   2079      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2080      1.1  christos   }
   2081      1.1  christos 
   2082      1.1  christos #undef FLD
   2083      1.1  christos }
   2084      1.1  christos   NEXT (vpc);
   2085      1.1  christos 
   2086      1.1  christos   CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
   2087      1.1  christos {
   2088      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2089      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2090      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2091      1.1  christos   int UNUSED written = 0;
   2092      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2093      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2094      1.1  christos 
   2095      1.1  christos   {
   2096      1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2097      1.1  christos     SET_H_SYS_SR_F (opval);
   2098      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2099      1.1  christos   }
   2100      1.1  christos 
   2101      1.1  christos #undef FLD
   2102      1.1  christos }
   2103      1.1  christos   NEXT (vpc);
   2104      1.1  christos 
   2105      1.1  christos   CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
   2106      1.1  christos {
   2107      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2108      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2109      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2110      1.1  christos   int UNUSED written = 0;
   2111      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2112      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2113      1.1  christos 
   2114      1.1  christos   {
   2115      1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2116      1.1  christos     SET_H_SYS_SR_F (opval);
   2117      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2118      1.1  christos   }
   2119      1.1  christos 
   2120      1.1  christos #undef FLD
   2121      1.1  christos }
   2122      1.1  christos   NEXT (vpc);
   2123      1.1  christos 
   2124      1.1  christos   CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
   2125      1.1  christos {
   2126      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2127      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2128      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2129      1.1  christos   int UNUSED written = 0;
   2130      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2131      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2132      1.1  christos 
   2133      1.1  christos   {
   2134      1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2135      1.1  christos     SET_H_SYS_SR_F (opval);
   2136      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2137      1.1  christos   }
   2138      1.1  christos 
   2139      1.1  christos #undef FLD
   2140      1.1  christos }
   2141      1.1  christos   NEXT (vpc);
   2142      1.1  christos 
   2143      1.1  christos   CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
   2144      1.1  christos {
   2145      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2146      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2147      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2148      1.1  christos   int UNUSED written = 0;
   2149      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2150      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2151      1.1  christos 
   2152      1.1  christos   {
   2153      1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2154      1.1  christos     SET_H_SYS_SR_F (opval);
   2155      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2156      1.1  christos   }
   2157      1.1  christos 
   2158      1.1  christos #undef FLD
   2159      1.1  christos }
   2160      1.1  christos   NEXT (vpc);
   2161      1.1  christos 
   2162      1.1  christos   CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
   2163      1.1  christos {
   2164      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2165      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2166      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2167      1.1  christos   int UNUSED written = 0;
   2168      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2169      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2170      1.1  christos 
   2171      1.1  christos   {
   2172      1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2173      1.1  christos     SET_H_SYS_SR_F (opval);
   2174      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2175      1.1  christos   }
   2176      1.1  christos 
   2177      1.1  christos #undef FLD
   2178      1.1  christos }
   2179      1.1  christos   NEXT (vpc);
   2180      1.1  christos 
   2181      1.1  christos   CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
   2182      1.1  christos {
   2183      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2184      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2185      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2186      1.1  christos   int UNUSED written = 0;
   2187      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2188      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2189      1.1  christos 
   2190      1.1  christos   {
   2191      1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2192      1.1  christos     SET_H_SYS_SR_F (opval);
   2193      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2194      1.1  christos   }
   2195      1.1  christos 
   2196      1.1  christos #undef FLD
   2197      1.1  christos }
   2198      1.1  christos   NEXT (vpc);
   2199      1.1  christos 
   2200      1.1  christos   CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
   2201      1.1  christos {
   2202      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2203      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2204      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2205      1.1  christos   int UNUSED written = 0;
   2206      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2207      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2208      1.1  christos 
   2209      1.1  christos   {
   2210      1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2211      1.1  christos     SET_H_SYS_SR_F (opval);
   2212      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2213      1.1  christos   }
   2214      1.1  christos 
   2215      1.1  christos #undef FLD
   2216      1.1  christos }
   2217      1.1  christos   NEXT (vpc);
   2218      1.1  christos 
   2219      1.1  christos   CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
   2220      1.1  christos {
   2221      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2222      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2223      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2224      1.1  christos   int UNUSED written = 0;
   2225      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2226      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2227      1.1  christos 
   2228      1.1  christos   {
   2229      1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2230      1.1  christos     SET_H_SYS_SR_F (opval);
   2231      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2232      1.1  christos   }
   2233      1.1  christos 
   2234      1.1  christos #undef FLD
   2235      1.1  christos }
   2236      1.1  christos   NEXT (vpc);
   2237      1.1  christos 
   2238      1.1  christos   CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
   2239      1.1  christos {
   2240      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2241      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2242      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2243      1.1  christos   int UNUSED written = 0;
   2244      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2245      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2246      1.1  christos 
   2247      1.1  christos   {
   2248      1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2249      1.1  christos     SET_H_SYS_SR_F (opval);
   2250      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2251      1.1  christos   }
   2252      1.1  christos 
   2253      1.1  christos #undef FLD
   2254      1.1  christos }
   2255      1.1  christos   NEXT (vpc);
   2256      1.1  christos 
   2257      1.1  christos   CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
   2258      1.1  christos {
   2259      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2260      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2261      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2262      1.1  christos   int UNUSED written = 0;
   2263      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2264      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2265      1.1  christos 
   2266      1.1  christos   {
   2267      1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2268      1.1  christos     SET_H_SYS_SR_F (opval);
   2269      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2270      1.1  christos   }
   2271      1.1  christos 
   2272      1.1  christos #undef FLD
   2273      1.1  christos }
   2274      1.1  christos   NEXT (vpc);
   2275      1.1  christos 
   2276      1.1  christos   CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
   2277      1.1  christos {
   2278      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2279      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2280      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2281      1.1  christos   int UNUSED written = 0;
   2282      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2283      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2284      1.1  christos 
   2285      1.1  christos   {
   2286      1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2287      1.1  christos     SET_H_SYS_SR_F (opval);
   2288      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2289      1.1  christos   }
   2290      1.1  christos 
   2291      1.1  christos #undef FLD
   2292      1.1  christos }
   2293      1.1  christos   NEXT (vpc);
   2294      1.1  christos 
   2295      1.1  christos   CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
   2296      1.1  christos {
   2297      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2298      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2299      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2300      1.1  christos   int UNUSED written = 0;
   2301      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2302      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2303      1.1  christos 
   2304      1.1  christos   {
   2305      1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2306      1.1  christos     SET_H_SYS_SR_F (opval);
   2307      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2308      1.1  christos   }
   2309      1.1  christos 
   2310      1.1  christos #undef FLD
   2311      1.1  christos }
   2312      1.1  christos   NEXT (vpc);
   2313      1.1  christos 
   2314      1.1  christos   CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
   2315      1.1  christos {
   2316      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2317      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2318      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2319      1.1  christos   int UNUSED written = 0;
   2320      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2321      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2322      1.1  christos 
   2323      1.1  christos   {
   2324      1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2325      1.1  christos     SET_H_SYS_SR_F (opval);
   2326      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2327      1.1  christos   }
   2328      1.1  christos 
   2329      1.1  christos #undef FLD
   2330      1.1  christos }
   2331      1.1  christos   NEXT (vpc);
   2332      1.1  christos 
   2333      1.1  christos   CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
   2334      1.1  christos {
   2335      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2336      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2337      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2338      1.1  christos   int UNUSED written = 0;
   2339      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2340      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2341      1.1  christos 
   2342      1.1  christos {
   2343      1.1  christos {
   2344      1.1  christos   DI tmp_prod;
   2345      1.1  christos   DI tmp_mac;
   2346      1.1  christos   DI tmp_result;
   2347      1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2348      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2349      1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2350      1.1  christos   {
   2351      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2352      1.1  christos     SET_H_MAC_MACHI (opval);
   2353      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2354      1.1  christos   }
   2355      1.1  christos   {
   2356      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2357      1.1  christos     SET_H_MAC_MACLO (opval);
   2358      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2359      1.1  christos   }
   2360      1.1  christos   {
   2361      1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2362      1.1  christos     SET_H_SYS_SR_OV (opval);
   2363      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2364      1.1  christos   }
   2365      1.1  christos }
   2366      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2367      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2368      1.1  christos }
   2369      1.1  christos }
   2370      1.1  christos 
   2371      1.1  christos #undef FLD
   2372      1.1  christos }
   2373      1.1  christos   NEXT (vpc);
   2374      1.1  christos 
   2375      1.1  christos   CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
   2376      1.1  christos {
   2377      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2378      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2379      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2380      1.1  christos   int UNUSED written = 0;
   2381      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2382      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2383      1.1  christos 
   2384      1.1  christos {
   2385      1.1  christos {
   2386      1.1  christos   DI tmp_prod;
   2387      1.1  christos   DI tmp_mac;
   2388      1.1  christos   DI tmp_result;
   2389      1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
   2390      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2391      1.1  christos   tmp_result = ADDDI (tmp_mac, tmp_prod);
   2392      1.1  christos   {
   2393      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2394      1.1  christos     SET_H_MAC_MACHI (opval);
   2395      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2396      1.1  christos   }
   2397      1.1  christos   {
   2398      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2399      1.1  christos     SET_H_MAC_MACLO (opval);
   2400      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2401      1.1  christos   }
   2402      1.1  christos   {
   2403      1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2404      1.1  christos     SET_H_SYS_SR_OV (opval);
   2405      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2406      1.1  christos   }
   2407      1.1  christos }
   2408      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2409      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2410      1.1  christos }
   2411      1.1  christos }
   2412      1.1  christos 
   2413      1.1  christos #undef FLD
   2414      1.1  christos }
   2415      1.1  christos   NEXT (vpc);
   2416      1.1  christos 
   2417      1.1  christos   CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
   2418      1.1  christos {
   2419      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2420      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2421      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2422      1.1  christos   int UNUSED written = 0;
   2423      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2424      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2425      1.1  christos 
   2426      1.1  christos {
   2427      1.1  christos {
   2428      1.1  christos   DI tmp_prod;
   2429      1.1  christos   DI tmp_mac;
   2430      1.1  christos   DI tmp_result;
   2431      1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2432      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2433      1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2434      1.1  christos   {
   2435      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2436      1.1  christos     SET_H_MAC_MACHI (opval);
   2437      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2438      1.1  christos   }
   2439      1.1  christos   {
   2440      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2441      1.1  christos     SET_H_MAC_MACLO (opval);
   2442      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2443      1.1  christos   }
   2444      1.1  christos   {
   2445      1.1  christos     BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
   2446      1.1  christos     SET_H_SYS_SR_CY (opval);
   2447      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2448      1.1  christos   }
   2449      1.1  christos }
   2450      1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2451      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2452      1.1  christos }
   2453      1.1  christos }
   2454      1.1  christos 
   2455      1.1  christos #undef FLD
   2456      1.1  christos }
   2457      1.1  christos   NEXT (vpc);
   2458      1.1  christos 
   2459      1.1  christos   CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
   2460      1.1  christos {
   2461      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2462      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2463      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2464      1.1  christos   int UNUSED written = 0;
   2465      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2466      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2467      1.1  christos 
   2468      1.1  christos {
   2469      1.1  christos {
   2470      1.1  christos   DI tmp_prod;
   2471      1.1  christos   DI tmp_mac;
   2472      1.1  christos   DI tmp_result;
   2473      1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2474      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2475      1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2476      1.1  christos   {
   2477      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2478      1.1  christos     SET_H_MAC_MACHI (opval);
   2479      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2480      1.1  christos   }
   2481      1.1  christos   {
   2482      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2483      1.1  christos     SET_H_MAC_MACLO (opval);
   2484      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2485      1.1  christos   }
   2486      1.1  christos   {
   2487      1.1  christos     BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
   2488      1.1  christos     SET_H_SYS_SR_OV (opval);
   2489      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2490      1.1  christos   }
   2491      1.1  christos }
   2492      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2493      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2494      1.1  christos }
   2495      1.1  christos }
   2496      1.1  christos 
   2497      1.1  christos #undef FLD
   2498      1.1  christos }
   2499      1.1  christos   NEXT (vpc);
   2500      1.1  christos 
   2501      1.1  christos   CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
   2502      1.1  christos {
   2503      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2504      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2505      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2506      1.1  christos   int UNUSED written = 0;
   2507      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2508      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2509      1.1  christos 
   2510      1.1  christos {
   2511      1.1  christos {
   2512      1.1  christos   DI tmp_prod;
   2513      1.1  christos   DI tmp_mac;
   2514      1.1  christos   DI tmp_result;
   2515      1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2516      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2517      1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2518      1.1  christos   {
   2519      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2520      1.1  christos     SET_H_MAC_MACHI (opval);
   2521      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2522      1.1  christos   }
   2523      1.1  christos   {
   2524      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2525      1.1  christos     SET_H_MAC_MACLO (opval);
   2526      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2527      1.1  christos   }
   2528      1.1  christos   {
   2529      1.1  christos     BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
   2530      1.1  christos     SET_H_SYS_SR_CY (opval);
   2531      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2532      1.1  christos   }
   2533      1.1  christos }
   2534      1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2535      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2536      1.1  christos }
   2537      1.1  christos }
   2538      1.1  christos 
   2539      1.1  christos #undef FLD
   2540      1.1  christos }
   2541      1.1  christos   NEXT (vpc);
   2542      1.1  christos 
   2543      1.1  christos   CASE (sem, INSN_L_CUST1) : /* l.cust1 */
   2544      1.1  christos {
   2545      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2546      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2547      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2548      1.1  christos   int UNUSED written = 0;
   2549      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2550      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2551      1.1  christos 
   2552      1.1  christos ((void) 0); /*nop*/
   2553      1.1  christos 
   2554      1.1  christos #undef FLD
   2555      1.1  christos }
   2556      1.1  christos   NEXT (vpc);
   2557      1.1  christos 
   2558      1.1  christos   CASE (sem, INSN_L_CUST2) : /* l.cust2 */
   2559      1.1  christos {
   2560      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2561      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2562      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2563      1.1  christos   int UNUSED written = 0;
   2564      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2565      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2566      1.1  christos 
   2567      1.1  christos ((void) 0); /*nop*/
   2568      1.1  christos 
   2569      1.1  christos #undef FLD
   2570      1.1  christos }
   2571      1.1  christos   NEXT (vpc);
   2572      1.1  christos 
   2573      1.1  christos   CASE (sem, INSN_L_CUST3) : /* l.cust3 */
   2574      1.1  christos {
   2575      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2576      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2577      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2578      1.1  christos   int UNUSED written = 0;
   2579      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2580      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2581      1.1  christos 
   2582      1.1  christos ((void) 0); /*nop*/
   2583      1.1  christos 
   2584      1.1  christos #undef FLD
   2585      1.1  christos }
   2586      1.1  christos   NEXT (vpc);
   2587      1.1  christos 
   2588      1.1  christos   CASE (sem, INSN_L_CUST4) : /* l.cust4 */
   2589      1.1  christos {
   2590      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2591      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2592      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2593      1.1  christos   int UNUSED written = 0;
   2594      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2595      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2596      1.1  christos 
   2597      1.1  christos ((void) 0); /*nop*/
   2598      1.1  christos 
   2599      1.1  christos #undef FLD
   2600      1.1  christos }
   2601      1.1  christos   NEXT (vpc);
   2602      1.1  christos 
   2603      1.1  christos   CASE (sem, INSN_L_CUST5) : /* l.cust5 */
   2604      1.1  christos {
   2605      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2606      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2607      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2608      1.1  christos   int UNUSED written = 0;
   2609      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2610      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2611      1.1  christos 
   2612      1.1  christos ((void) 0); /*nop*/
   2613      1.1  christos 
   2614      1.1  christos #undef FLD
   2615      1.1  christos }
   2616      1.1  christos   NEXT (vpc);
   2617      1.1  christos 
   2618      1.1  christos   CASE (sem, INSN_L_CUST6) : /* l.cust6 */
   2619      1.1  christos {
   2620      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2621      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2622      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2623      1.1  christos   int UNUSED written = 0;
   2624      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2625      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2626      1.1  christos 
   2627      1.1  christos ((void) 0); /*nop*/
   2628      1.1  christos 
   2629      1.1  christos #undef FLD
   2630      1.1  christos }
   2631      1.1  christos   NEXT (vpc);
   2632      1.1  christos 
   2633      1.1  christos   CASE (sem, INSN_L_CUST7) : /* l.cust7 */
   2634      1.1  christos {
   2635      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2636      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2637      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2638      1.1  christos   int UNUSED written = 0;
   2639      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2640      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2641      1.1  christos 
   2642      1.1  christos ((void) 0); /*nop*/
   2643      1.1  christos 
   2644      1.1  christos #undef FLD
   2645      1.1  christos }
   2646      1.1  christos   NEXT (vpc);
   2647      1.1  christos 
   2648      1.1  christos   CASE (sem, INSN_L_CUST8) : /* l.cust8 */
   2649      1.1  christos {
   2650      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2651      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2652      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2653      1.1  christos   int UNUSED written = 0;
   2654      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2655      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2656      1.1  christos 
   2657      1.1  christos ((void) 0); /*nop*/
   2658      1.1  christos 
   2659      1.1  christos #undef FLD
   2660      1.1  christos }
   2661      1.1  christos   NEXT (vpc);
   2662      1.1  christos 
   2663      1.1  christos   CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
   2664      1.1  christos {
   2665      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2666      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2667      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2668      1.1  christos   int UNUSED written = 0;
   2669      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2670      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2671      1.1  christos 
   2672      1.1  christos   {
   2673      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)));
   2674      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2675      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2676      1.1  christos   }
   2677      1.1  christos 
   2678      1.1  christos #undef FLD
   2679      1.1  christos }
   2680      1.1  christos   NEXT (vpc);
   2681      1.1  christos 
   2682  1.1.1.2  christos   CASE (sem, INSN_LF_ADD_D32) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
   2683  1.1.1.2  christos {
   2684  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2685  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2686  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2687  1.1.1.2  christos   int UNUSED written = 0;
   2688  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2689  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2690  1.1.1.2  christos 
   2691  1.1.1.2  christos   {
   2692  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2693  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2694  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2695  1.1.1.2  christos   }
   2696  1.1.1.2  christos 
   2697  1.1.1.2  christos #undef FLD
   2698  1.1.1.2  christos }
   2699  1.1.1.2  christos   NEXT (vpc);
   2700  1.1.1.2  christos 
   2701      1.1  christos   CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
   2702      1.1  christos {
   2703      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2704      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2705      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2706      1.1  christos   int UNUSED written = 0;
   2707      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2708      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2709      1.1  christos 
   2710      1.1  christos   {
   2711      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)));
   2712      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2713      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2714      1.1  christos   }
   2715      1.1  christos 
   2716      1.1  christos #undef FLD
   2717      1.1  christos }
   2718      1.1  christos   NEXT (vpc);
   2719      1.1  christos 
   2720  1.1.1.2  christos   CASE (sem, INSN_LF_SUB_D32) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
   2721  1.1.1.2  christos {
   2722  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2723  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2724  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2725  1.1.1.2  christos   int UNUSED written = 0;
   2726  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2727  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2728  1.1.1.2  christos 
   2729  1.1.1.2  christos   {
   2730  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2731  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2732  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2733  1.1.1.2  christos   }
   2734  1.1.1.2  christos 
   2735  1.1.1.2  christos #undef FLD
   2736  1.1.1.2  christos }
   2737  1.1.1.2  christos   NEXT (vpc);
   2738  1.1.1.2  christos 
   2739      1.1  christos   CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
   2740      1.1  christos {
   2741      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2742      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2743      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2744      1.1  christos   int UNUSED written = 0;
   2745      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2746      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2747      1.1  christos 
   2748      1.1  christos   {
   2749      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)));
   2750      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2751      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2752      1.1  christos   }
   2753      1.1  christos 
   2754      1.1  christos #undef FLD
   2755      1.1  christos }
   2756      1.1  christos   NEXT (vpc);
   2757      1.1  christos 
   2758  1.1.1.2  christos   CASE (sem, INSN_LF_MUL_D32) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
   2759  1.1.1.2  christos {
   2760  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2761  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2762  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2763  1.1.1.2  christos   int UNUSED written = 0;
   2764  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2765  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2766  1.1.1.2  christos 
   2767  1.1.1.2  christos   {
   2768  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2769  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2770  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2771  1.1.1.2  christos   }
   2772  1.1.1.2  christos 
   2773  1.1.1.2  christos #undef FLD
   2774  1.1.1.2  christos }
   2775  1.1.1.2  christos   NEXT (vpc);
   2776  1.1.1.2  christos 
   2777      1.1  christos   CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
   2778      1.1  christos {
   2779      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2780      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2781      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2782      1.1  christos   int UNUSED written = 0;
   2783      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2784      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2785      1.1  christos 
   2786      1.1  christos   {
   2787      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)));
   2788      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2789      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2790      1.1  christos   }
   2791      1.1  christos 
   2792      1.1  christos #undef FLD
   2793      1.1  christos }
   2794      1.1  christos   NEXT (vpc);
   2795      1.1  christos 
   2796  1.1.1.2  christos   CASE (sem, INSN_LF_DIV_D32) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
   2797  1.1.1.2  christos {
   2798  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2799  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2800  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2801  1.1.1.2  christos   int UNUSED written = 0;
   2802  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2803  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2804  1.1.1.2  christos 
   2805  1.1.1.2  christos   {
   2806  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2807  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2808  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2809  1.1.1.2  christos   }
   2810  1.1.1.2  christos 
   2811  1.1.1.2  christos #undef FLD
   2812  1.1.1.2  christos }
   2813  1.1.1.2  christos   NEXT (vpc);
   2814  1.1.1.2  christos 
   2815      1.1  christos   CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
   2816      1.1  christos {
   2817      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2818      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2819      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2820      1.1  christos   int UNUSED written = 0;
   2821      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2822      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2823      1.1  christos 
   2824      1.1  christos   {
   2825      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)));
   2826      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2827      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2828      1.1  christos   }
   2829      1.1  christos 
   2830      1.1  christos #undef FLD
   2831      1.1  christos }
   2832      1.1  christos   NEXT (vpc);
   2833      1.1  christos 
   2834  1.1.1.2  christos   CASE (sem, INSN_LF_REM_D32) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
   2835  1.1.1.2  christos {
   2836  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2837  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2838  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2839  1.1.1.2  christos   int UNUSED written = 0;
   2840  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2841  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2842  1.1.1.2  christos 
   2843  1.1.1.2  christos   {
   2844  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2845  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2846  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2847  1.1.1.2  christos   }
   2848  1.1.1.2  christos 
   2849  1.1.1.2  christos #undef FLD
   2850  1.1.1.2  christos }
   2851  1.1.1.2  christos   NEXT (vpc);
   2852  1.1.1.2  christos 
   2853      1.1  christos   CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
   2854      1.1  christos {
   2855      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2856      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2857      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2858      1.1  christos   int UNUSED written = 0;
   2859      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2860      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2861      1.1  christos 
   2862      1.1  christos   {
   2863      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))));
   2864      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2865      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2866      1.1  christos   }
   2867      1.1  christos 
   2868      1.1  christos #undef FLD
   2869      1.1  christos }
   2870      1.1  christos   NEXT (vpc);
   2871      1.1  christos 
   2872  1.1.1.2  christos   CASE (sem, INSN_LF_ITOF_D32) : /* lf.itof.d $rDD32F,$rADI */
   2873  1.1.1.2  christos {
   2874  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2875  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2876  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2877  1.1.1.2  christos   int UNUSED written = 0;
   2878  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2879  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2880  1.1.1.2  christos 
   2881  1.1.1.2  christos   {
   2882  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (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_I64R (FLD (f_rad32)));
   2883  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2884  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2885  1.1.1.2  christos   }
   2886  1.1.1.2  christos 
   2887  1.1.1.2  christos #undef FLD
   2888  1.1.1.2  christos }
   2889  1.1.1.2  christos   NEXT (vpc);
   2890  1.1.1.2  christos 
   2891      1.1  christos   CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
   2892      1.1  christos {
   2893      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2894      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2895      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2896      1.1  christos   int UNUSED written = 0;
   2897      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2898      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2899      1.1  christos 
   2900      1.1  christos   {
   2901      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))));
   2902      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   2903      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   2904      1.1  christos   }
   2905      1.1  christos 
   2906      1.1  christos #undef FLD
   2907      1.1  christos }
   2908      1.1  christos   NEXT (vpc);
   2909      1.1  christos 
   2910  1.1.1.2  christos   CASE (sem, INSN_LF_FTOI_D32) : /* lf.ftoi.d $rDDI,$rAD32F */
   2911  1.1.1.2  christos {
   2912  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2913  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2914  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2915  1.1.1.2  christos   int UNUSED written = 0;
   2916  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2917  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2918  1.1.1.2  christos 
   2919  1.1.1.2  christos   {
   2920  1.1.1.2  christos     DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (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_FD32R (FLD (f_rad32)));
   2921  1.1.1.2  christos     SET_H_I64R (FLD (f_rdd32), opval);
   2922  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
   2923  1.1.1.2  christos   }
   2924  1.1.1.2  christos 
   2925  1.1.1.2  christos #undef FLD
   2926  1.1.1.2  christos }
   2927  1.1.1.2  christos   NEXT (vpc);
   2928  1.1.1.2  christos 
   2929  1.1.1.2  christos   CASE (sem, INSN_LF_SFEQ_S) : /* lf.sfeq.s $rASF,$rBSF */
   2930      1.1  christos {
   2931      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2932      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2933      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2934      1.1  christos   int UNUSED written = 0;
   2935      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2936      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2937      1.1  christos 
   2938      1.1  christos   {
   2939      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)));
   2940      1.1  christos     SET_H_SYS_SR_F (opval);
   2941      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2942      1.1  christos   }
   2943      1.1  christos 
   2944      1.1  christos #undef FLD
   2945      1.1  christos }
   2946      1.1  christos   NEXT (vpc);
   2947      1.1  christos 
   2948  1.1.1.2  christos   CASE (sem, INSN_LF_SFEQ_D32) : /* lf.sfeq.d $rAD32F,$rBD32F */
   2949  1.1.1.2  christos {
   2950  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2951  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2952  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2953  1.1.1.2  christos   int UNUSED written = 0;
   2954  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2955  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2956  1.1.1.2  christos 
   2957  1.1.1.2  christos   {
   2958  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2959  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   2960  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2961  1.1.1.2  christos   }
   2962  1.1.1.2  christos 
   2963  1.1.1.2  christos #undef FLD
   2964  1.1.1.2  christos }
   2965  1.1.1.2  christos   NEXT (vpc);
   2966  1.1.1.2  christos 
   2967  1.1.1.2  christos   CASE (sem, INSN_LF_SFNE_S) : /* lf.sfne.s $rASF,$rBSF */
   2968      1.1  christos {
   2969      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2970      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2971      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2972      1.1  christos   int UNUSED written = 0;
   2973      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2974      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2975      1.1  christos 
   2976      1.1  christos   {
   2977      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)));
   2978      1.1  christos     SET_H_SYS_SR_F (opval);
   2979      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2980      1.1  christos   }
   2981      1.1  christos 
   2982      1.1  christos #undef FLD
   2983      1.1  christos }
   2984      1.1  christos   NEXT (vpc);
   2985      1.1  christos 
   2986  1.1.1.2  christos   CASE (sem, INSN_LF_SFNE_D32) : /* lf.sfne.d $rAD32F,$rBD32F */
   2987  1.1.1.2  christos {
   2988  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2989  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2990  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2991  1.1.1.2  christos   int UNUSED written = 0;
   2992  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2993  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2994  1.1.1.2  christos 
   2995  1.1.1.2  christos   {
   2996  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2997  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   2998  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2999  1.1.1.2  christos   }
   3000  1.1.1.2  christos 
   3001  1.1.1.2  christos #undef FLD
   3002  1.1.1.2  christos }
   3003  1.1.1.2  christos   NEXT (vpc);
   3004  1.1.1.2  christos 
   3005  1.1.1.2  christos   CASE (sem, INSN_LF_SFGE_S) : /* lf.sfge.s $rASF,$rBSF */
   3006      1.1  christos {
   3007      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3008      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3009      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3010      1.1  christos   int UNUSED written = 0;
   3011      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3012      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3013      1.1  christos 
   3014      1.1  christos   {
   3015      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)));
   3016      1.1  christos     SET_H_SYS_SR_F (opval);
   3017      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3018      1.1  christos   }
   3019      1.1  christos 
   3020      1.1  christos #undef FLD
   3021      1.1  christos }
   3022      1.1  christos   NEXT (vpc);
   3023      1.1  christos 
   3024  1.1.1.2  christos   CASE (sem, INSN_LF_SFGE_D32) : /* lf.sfge.d $rAD32F,$rBD32F */
   3025  1.1.1.2  christos {
   3026  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3027  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3028  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3029  1.1.1.2  christos   int UNUSED written = 0;
   3030  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3031  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3032  1.1.1.2  christos 
   3033  1.1.1.2  christos   {
   3034  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3035  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3036  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3037  1.1.1.2  christos   }
   3038  1.1.1.2  christos 
   3039  1.1.1.2  christos #undef FLD
   3040  1.1.1.2  christos }
   3041  1.1.1.2  christos   NEXT (vpc);
   3042  1.1.1.2  christos 
   3043  1.1.1.2  christos   CASE (sem, INSN_LF_SFGT_S) : /* lf.sfgt.s $rASF,$rBSF */
   3044      1.1  christos {
   3045      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3046      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3047      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3048      1.1  christos   int UNUSED written = 0;
   3049      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3050      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3051      1.1  christos 
   3052      1.1  christos   {
   3053      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)));
   3054      1.1  christos     SET_H_SYS_SR_F (opval);
   3055      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3056      1.1  christos   }
   3057      1.1  christos 
   3058      1.1  christos #undef FLD
   3059      1.1  christos }
   3060      1.1  christos   NEXT (vpc);
   3061      1.1  christos 
   3062  1.1.1.2  christos   CASE (sem, INSN_LF_SFGT_D32) : /* lf.sfgt.d $rAD32F,$rBD32F */
   3063  1.1.1.2  christos {
   3064  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3065  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3066  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3067  1.1.1.2  christos   int UNUSED written = 0;
   3068  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3069  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3070  1.1.1.2  christos 
   3071  1.1.1.2  christos   {
   3072  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3073  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3074  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3075  1.1.1.2  christos   }
   3076  1.1.1.2  christos 
   3077  1.1.1.2  christos #undef FLD
   3078  1.1.1.2  christos }
   3079  1.1.1.2  christos   NEXT (vpc);
   3080  1.1.1.2  christos 
   3081  1.1.1.2  christos   CASE (sem, INSN_LF_SFLT_S) : /* lf.sflt.s $rASF,$rBSF */
   3082      1.1  christos {
   3083      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3084      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3085      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3086      1.1  christos   int UNUSED written = 0;
   3087      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3088      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3089      1.1  christos 
   3090      1.1  christos   {
   3091      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)));
   3092      1.1  christos     SET_H_SYS_SR_F (opval);
   3093      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3094      1.1  christos   }
   3095      1.1  christos 
   3096      1.1  christos #undef FLD
   3097      1.1  christos }
   3098      1.1  christos   NEXT (vpc);
   3099      1.1  christos 
   3100  1.1.1.2  christos   CASE (sem, INSN_LF_SFLT_D32) : /* lf.sflt.d $rAD32F,$rBD32F */
   3101  1.1.1.2  christos {
   3102  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3103  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3104  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3105  1.1.1.2  christos   int UNUSED written = 0;
   3106  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3107  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3108  1.1.1.2  christos 
   3109  1.1.1.2  christos   {
   3110  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3111  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3112  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3113  1.1.1.2  christos   }
   3114  1.1.1.2  christos 
   3115  1.1.1.2  christos #undef FLD
   3116  1.1.1.2  christos }
   3117  1.1.1.2  christos   NEXT (vpc);
   3118  1.1.1.2  christos 
   3119  1.1.1.2  christos   CASE (sem, INSN_LF_SFLE_S) : /* lf.sfle.s $rASF,$rBSF */
   3120      1.1  christos {
   3121      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3122      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3123      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3124      1.1  christos   int UNUSED written = 0;
   3125      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3126      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3127      1.1  christos 
   3128      1.1  christos   {
   3129      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)));
   3130      1.1  christos     SET_H_SYS_SR_F (opval);
   3131      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3132      1.1  christos   }
   3133      1.1  christos 
   3134      1.1  christos #undef FLD
   3135      1.1  christos }
   3136      1.1  christos   NEXT (vpc);
   3137      1.1  christos 
   3138  1.1.1.2  christos   CASE (sem, INSN_LF_SFLE_D32) : /* lf.sfle.d $rAD32F,$rBD32F */
   3139  1.1.1.2  christos {
   3140  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3141  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3142  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3143  1.1.1.2  christos   int UNUSED written = 0;
   3144  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3145  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3146  1.1.1.2  christos 
   3147  1.1.1.2  christos   {
   3148  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3149  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3150  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3151  1.1.1.2  christos   }
   3152  1.1.1.2  christos 
   3153  1.1.1.2  christos #undef FLD
   3154  1.1.1.2  christos }
   3155  1.1.1.2  christos   NEXT (vpc);
   3156  1.1.1.2  christos 
   3157  1.1.1.2  christos   CASE (sem, INSN_LF_SFUEQ_S) : /* lf.sfueq.s $rASF,$rBSF */
   3158  1.1.1.2  christos {
   3159  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3160  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3161  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3162  1.1.1.2  christos   int UNUSED written = 0;
   3163  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3164  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3165  1.1.1.2  christos 
   3166  1.1.1.2  christos   {
   3167  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3168  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3169  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3170  1.1.1.2  christos   }
   3171  1.1.1.2  christos 
   3172  1.1.1.2  christos #undef FLD
   3173  1.1.1.2  christos }
   3174  1.1.1.2  christos   NEXT (vpc);
   3175  1.1.1.2  christos 
   3176  1.1.1.2  christos   CASE (sem, INSN_LF_SFUEQ_D32) : /* lf.sfueq.d $rAD32F,$rBD32F */
   3177  1.1.1.2  christos {
   3178  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3179  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3180  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3181  1.1.1.2  christos   int UNUSED written = 0;
   3182  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3183  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3184  1.1.1.2  christos 
   3185  1.1.1.2  christos   {
   3186  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3187  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3188  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3189  1.1.1.2  christos   }
   3190  1.1.1.2  christos 
   3191  1.1.1.2  christos #undef FLD
   3192  1.1.1.2  christos }
   3193  1.1.1.2  christos   NEXT (vpc);
   3194  1.1.1.2  christos 
   3195  1.1.1.2  christos   CASE (sem, INSN_LF_SFUNE_S) : /* lf.sfune.s $rASF,$rBSF */
   3196  1.1.1.2  christos {
   3197  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3198  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3199  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3200  1.1.1.2  christos   int UNUSED written = 0;
   3201  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3202  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3203  1.1.1.2  christos 
   3204  1.1.1.2  christos   {
   3205  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3206  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3207  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3208  1.1.1.2  christos   }
   3209  1.1.1.2  christos 
   3210  1.1.1.2  christos #undef FLD
   3211  1.1.1.2  christos }
   3212  1.1.1.2  christos   NEXT (vpc);
   3213  1.1.1.2  christos 
   3214  1.1.1.2  christos   CASE (sem, INSN_LF_SFUNE_D32) : /* lf.sfune.d $rAD32F,$rBD32F */
   3215  1.1.1.2  christos {
   3216  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3217  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3218  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3219  1.1.1.2  christos   int UNUSED written = 0;
   3220  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3221  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3222  1.1.1.2  christos 
   3223  1.1.1.2  christos   {
   3224  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3225  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3226  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3227  1.1.1.2  christos   }
   3228  1.1.1.2  christos 
   3229  1.1.1.2  christos #undef FLD
   3230  1.1.1.2  christos }
   3231  1.1.1.2  christos   NEXT (vpc);
   3232  1.1.1.2  christos 
   3233  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGT_S) : /* lf.sfugt.s $rASF,$rBSF */
   3234  1.1.1.2  christos {
   3235  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3236  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3237  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3238  1.1.1.2  christos   int UNUSED written = 0;
   3239  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3240  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3241  1.1.1.2  christos 
   3242  1.1.1.2  christos   {
   3243  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3244  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3245  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3246  1.1.1.2  christos   }
   3247  1.1.1.2  christos 
   3248  1.1.1.2  christos #undef FLD
   3249  1.1.1.2  christos }
   3250  1.1.1.2  christos   NEXT (vpc);
   3251  1.1.1.2  christos 
   3252  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGT_D32) : /* lf.sfugt.d $rAD32F,$rBD32F */
   3253  1.1.1.2  christos {
   3254  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3255  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3256  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3257  1.1.1.2  christos   int UNUSED written = 0;
   3258  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3259  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3260  1.1.1.2  christos 
   3261  1.1.1.2  christos   {
   3262  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3263  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3264  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3265  1.1.1.2  christos   }
   3266  1.1.1.2  christos 
   3267  1.1.1.2  christos #undef FLD
   3268  1.1.1.2  christos }
   3269  1.1.1.2  christos   NEXT (vpc);
   3270  1.1.1.2  christos 
   3271  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGE_S) : /* lf.sfuge.s $rASF,$rBSF */
   3272  1.1.1.2  christos {
   3273  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3274  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3275  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3276  1.1.1.2  christos   int UNUSED written = 0;
   3277  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3278  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3279  1.1.1.2  christos 
   3280  1.1.1.2  christos   {
   3281  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3282  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3283  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3284  1.1.1.2  christos   }
   3285  1.1.1.2  christos 
   3286  1.1.1.2  christos #undef FLD
   3287  1.1.1.2  christos }
   3288  1.1.1.2  christos   NEXT (vpc);
   3289  1.1.1.2  christos 
   3290  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGE_D32) : /* lf.sfuge.d $rAD32F,$rBD32F */
   3291  1.1.1.2  christos {
   3292  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3293  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3294  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3295  1.1.1.2  christos   int UNUSED written = 0;
   3296  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3297  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3298  1.1.1.2  christos 
   3299  1.1.1.2  christos   {
   3300  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3301  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3302  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3303  1.1.1.2  christos   }
   3304  1.1.1.2  christos 
   3305  1.1.1.2  christos #undef FLD
   3306  1.1.1.2  christos }
   3307  1.1.1.2  christos   NEXT (vpc);
   3308  1.1.1.2  christos 
   3309  1.1.1.2  christos   CASE (sem, INSN_LF_SFULT_S) : /* lf.sfult.s $rASF,$rBSF */
   3310  1.1.1.2  christos {
   3311  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3312  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3313  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3314  1.1.1.2  christos   int UNUSED written = 0;
   3315  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3316  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3317  1.1.1.2  christos 
   3318  1.1.1.2  christos   {
   3319  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3320  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3321  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3322  1.1.1.2  christos   }
   3323  1.1.1.2  christos 
   3324  1.1.1.2  christos #undef FLD
   3325  1.1.1.2  christos }
   3326  1.1.1.2  christos   NEXT (vpc);
   3327  1.1.1.2  christos 
   3328  1.1.1.2  christos   CASE (sem, INSN_LF_SFULT_D32) : /* lf.sfult.d $rAD32F,$rBD32F */
   3329  1.1.1.2  christos {
   3330  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3331  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3332  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3333  1.1.1.2  christos   int UNUSED written = 0;
   3334  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3335  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3336  1.1.1.2  christos 
   3337  1.1.1.2  christos   {
   3338  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3339  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3340  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3341  1.1.1.2  christos   }
   3342  1.1.1.2  christos 
   3343  1.1.1.2  christos #undef FLD
   3344  1.1.1.2  christos }
   3345  1.1.1.2  christos   NEXT (vpc);
   3346  1.1.1.2  christos 
   3347  1.1.1.2  christos   CASE (sem, INSN_LF_SFULE_S) : /* lf.sfule.s $rASF,$rBSF */
   3348  1.1.1.2  christos {
   3349  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3350  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3351  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3352  1.1.1.2  christos   int UNUSED written = 0;
   3353  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3354  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3355  1.1.1.2  christos 
   3356  1.1.1.2  christos   {
   3357  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3358  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3359  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3360  1.1.1.2  christos   }
   3361  1.1.1.2  christos 
   3362  1.1.1.2  christos #undef FLD
   3363  1.1.1.2  christos }
   3364  1.1.1.2  christos   NEXT (vpc);
   3365  1.1.1.2  christos 
   3366  1.1.1.2  christos   CASE (sem, INSN_LF_SFULE_D32) : /* lf.sfule.d $rAD32F,$rBD32F */
   3367  1.1.1.2  christos {
   3368  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3369  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3370  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3371  1.1.1.2  christos   int UNUSED written = 0;
   3372  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3373  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3374  1.1.1.2  christos 
   3375  1.1.1.2  christos   {
   3376  1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3377  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3378  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3379  1.1.1.2  christos   }
   3380  1.1.1.2  christos 
   3381  1.1.1.2  christos #undef FLD
   3382  1.1.1.2  christos }
   3383  1.1.1.2  christos   NEXT (vpc);
   3384  1.1.1.2  christos 
   3385  1.1.1.2  christos   CASE (sem, INSN_LF_SFUN_S) : /* lf.sfun.s $rASF,$rBSF */
   3386  1.1.1.2  christos {
   3387  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3388  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3389  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3390  1.1.1.2  christos   int UNUSED written = 0;
   3391  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3392  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3393  1.1.1.2  christos 
   3394  1.1.1.2  christos   {
   3395  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3396  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3397  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3398  1.1.1.2  christos   }
   3399  1.1.1.2  christos 
   3400  1.1.1.2  christos #undef FLD
   3401  1.1.1.2  christos }
   3402  1.1.1.2  christos   NEXT (vpc);
   3403  1.1.1.2  christos 
   3404  1.1.1.2  christos   CASE (sem, INSN_LF_SFUN_D32) : /* lf.sfun.d $rAD32F,$rBD32F */
   3405  1.1.1.2  christos {
   3406  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3407  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3408  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3409  1.1.1.2  christos   int UNUSED written = 0;
   3410  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3411  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3412  1.1.1.2  christos 
   3413  1.1.1.2  christos   {
   3414  1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3415  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3416  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3417  1.1.1.2  christos   }
   3418  1.1.1.2  christos 
   3419  1.1.1.2  christos #undef FLD
   3420  1.1.1.2  christos }
   3421  1.1.1.2  christos   NEXT (vpc);
   3422  1.1.1.2  christos 
   3423      1.1  christos   CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
   3424      1.1  christos {
   3425      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3426      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3427      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3428      1.1  christos   int UNUSED written = 0;
   3429      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3430      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3431      1.1  christos 
   3432      1.1  christos   {
   3433      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)));
   3434      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   3435      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   3436      1.1  christos   }
   3437      1.1  christos 
   3438      1.1  christos #undef FLD
   3439      1.1  christos }
   3440      1.1  christos   NEXT (vpc);
   3441      1.1  christos 
   3442  1.1.1.2  christos   CASE (sem, INSN_LF_MADD_D32) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
   3443  1.1.1.2  christos {
   3444  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3445  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3446  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3447  1.1.1.2  christos   int UNUSED written = 0;
   3448  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3449  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3450  1.1.1.2  christos 
   3451  1.1.1.2  christos   {
   3452  1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32)));
   3453  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   3454  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   3455  1.1.1.2  christos   }
   3456  1.1.1.2  christos 
   3457  1.1.1.2  christos #undef FLD
   3458  1.1.1.2  christos }
   3459  1.1.1.2  christos   NEXT (vpc);
   3460  1.1.1.2  christos 
   3461      1.1  christos   CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
   3462      1.1  christos {
   3463      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3464      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3465      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3466      1.1  christos   int UNUSED written = 0;
   3467      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3468      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3469      1.1  christos 
   3470      1.1  christos ((void) 0); /*nop*/
   3471      1.1  christos 
   3472      1.1  christos #undef FLD
   3473      1.1  christos }
   3474      1.1  christos   NEXT (vpc);
   3475      1.1  christos 
   3476  1.1.1.2  christos   CASE (sem, INSN_LF_CUST1_D32) : /* lf.cust1.d */
   3477  1.1.1.2  christos {
   3478  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3479  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3480  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3481  1.1.1.2  christos   int UNUSED written = 0;
   3482  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3483  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3484  1.1.1.2  christos 
   3485  1.1.1.2  christos ((void) 0); /*nop*/
   3486  1.1.1.2  christos 
   3487  1.1.1.2  christos #undef FLD
   3488  1.1.1.2  christos }
   3489  1.1.1.2  christos   NEXT (vpc);
   3490  1.1.1.2  christos 
   3491      1.1  christos 
   3492      1.1  christos     }
   3493      1.1  christos   ENDSWITCH (sem) /* End of semantic switch.  */
   3494      1.1  christos 
   3495      1.1  christos   /* At this point `vpc' contains the next insn to execute.  */
   3496      1.1  christos }
   3497      1.1  christos 
   3498      1.1  christos #undef DEFINE_SWITCH
   3499      1.1  christos #endif /* DEFINE_SWITCH */
   3500