Home | History | Annotate | Line # | Download | only in or1k
      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.5  christos Copyright (C) 1996-2025 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.1.4  christos /* FIXME: A better way would be to have CGEN_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   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
   1060      1.1  christos   {
   1061      1.1  christos     USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
   1062      1.1  christos     SET_H_SYS_SR_F (opval);
   1063      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1064      1.1  christos   }
   1065      1.1  christos if (GET_H_SYS_SR_F ()) {
   1066      1.1  christos   {
   1067      1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
   1068      1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
   1069      1.1  christos     written |= (1 << 7);
   1070      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1071      1.1  christos   }
   1072      1.1  christos }
   1073      1.1  christos   {
   1074      1.1  christos     BI opval = 0;
   1075      1.1  christos     CPU (h_atomic_reserve) = opval;
   1076      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
   1077      1.1  christos   }
   1078      1.1  christos }
   1079      1.1  christos 
   1080      1.1  christos   abuf->written = written;
   1081      1.1  christos #undef FLD
   1082      1.1  christos }
   1083      1.1  christos   NEXT (vpc);
   1084      1.1  christos 
   1085      1.1  christos   CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
   1086      1.1  christos {
   1087      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1088      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1089      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1090      1.1  christos   int UNUSED written = 0;
   1091      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1092      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1093      1.1  christos 
   1094      1.1  christos   {
   1095      1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1096      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1097      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1098      1.1  christos   }
   1099      1.1  christos 
   1100      1.1  christos #undef FLD
   1101      1.1  christos }
   1102      1.1  christos   NEXT (vpc);
   1103      1.1  christos 
   1104      1.1  christos   CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
   1105      1.1  christos {
   1106      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1107      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1108      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1109      1.1  christos   int UNUSED written = 0;
   1110      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1111      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1112      1.1  christos 
   1113      1.1  christos   {
   1114      1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1115      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1116      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1117      1.1  christos   }
   1118      1.1  christos 
   1119      1.1  christos #undef FLD
   1120      1.1  christos }
   1121      1.1  christos   NEXT (vpc);
   1122      1.1  christos 
   1123      1.1  christos   CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
   1124      1.1  christos {
   1125      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1126      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1127      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1128      1.1  christos   int UNUSED written = 0;
   1129      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1130      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1131      1.1  christos 
   1132      1.1  christos   {
   1133      1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1134      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1135      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1136      1.1  christos   }
   1137      1.1  christos 
   1138      1.1  christos #undef FLD
   1139      1.1  christos }
   1140      1.1  christos   NEXT (vpc);
   1141      1.1  christos 
   1142      1.1  christos   CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
   1143      1.1  christos {
   1144      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1145      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1146      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1147      1.1  christos   int UNUSED written = 0;
   1148      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1149      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1150      1.1  christos 
   1151      1.1  christos   {
   1152      1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1153      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1154      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1155      1.1  christos   }
   1156      1.1  christos 
   1157      1.1  christos #undef FLD
   1158      1.1  christos }
   1159      1.1  christos   NEXT (vpc);
   1160      1.1  christos 
   1161      1.1  christos   CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
   1162      1.1  christos {
   1163      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1164      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1165      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1166      1.1  christos   int UNUSED written = 0;
   1167      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1168      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1169      1.1  christos 
   1170      1.1  christos   {
   1171      1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1172      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1173      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1174      1.1  christos   }
   1175      1.1  christos 
   1176      1.1  christos #undef FLD
   1177      1.1  christos }
   1178      1.1  christos   NEXT (vpc);
   1179      1.1  christos 
   1180      1.1  christos   CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
   1181      1.1  christos {
   1182      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1183      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1184      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1185      1.1  christos   int UNUSED written = 0;
   1186      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1187      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1188      1.1  christos 
   1189      1.1  christos   {
   1190      1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1191      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1192      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1193      1.1  christos   }
   1194      1.1  christos 
   1195      1.1  christos #undef FLD
   1196      1.1  christos }
   1197      1.1  christos   NEXT (vpc);
   1198      1.1  christos 
   1199      1.1  christos   CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
   1200      1.1  christos {
   1201      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1202      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1203      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1204      1.1  christos   int UNUSED written = 0;
   1205      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1206      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1207      1.1  christos 
   1208      1.1  christos   {
   1209      1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1210      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1211      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1212      1.1  christos   }
   1213      1.1  christos 
   1214      1.1  christos #undef FLD
   1215      1.1  christos }
   1216      1.1  christos   NEXT (vpc);
   1217      1.1  christos 
   1218      1.1  christos   CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
   1219      1.1  christos {
   1220      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1221      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1222      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1223      1.1  christos   int UNUSED written = 0;
   1224      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1225      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1226      1.1  christos 
   1227      1.1  christos   {
   1228      1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1229      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1230      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1231      1.1  christos   }
   1232      1.1  christos 
   1233      1.1  christos #undef FLD
   1234      1.1  christos }
   1235      1.1  christos   NEXT (vpc);
   1236      1.1  christos 
   1237      1.1  christos   CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
   1238      1.1  christos {
   1239      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1240      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1241      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1242      1.1  christos   int UNUSED written = 0;
   1243      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1244      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1245      1.1  christos 
   1246      1.1  christos   {
   1247      1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1248      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1249      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1250      1.1  christos   }
   1251      1.1  christos 
   1252      1.1  christos #undef FLD
   1253      1.1  christos }
   1254      1.1  christos   NEXT (vpc);
   1255      1.1  christos 
   1256      1.1  christos   CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
   1257      1.1  christos {
   1258      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1259      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1260      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1261      1.1  christos   int UNUSED written = 0;
   1262      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1263      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1264      1.1  christos 
   1265      1.1  christos   {
   1266      1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1267      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1268      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1269      1.1  christos   }
   1270      1.1  christos 
   1271      1.1  christos #undef FLD
   1272      1.1  christos }
   1273      1.1  christos   NEXT (vpc);
   1274      1.1  christos 
   1275      1.1  christos   CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
   1276      1.1  christos {
   1277      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1278      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1279      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1280      1.1  christos   int UNUSED written = 0;
   1281      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1282      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1283      1.1  christos 
   1284      1.1  christos   {
   1285      1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1286      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1287      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1288      1.1  christos   }
   1289      1.1  christos 
   1290      1.1  christos #undef FLD
   1291      1.1  christos }
   1292      1.1  christos   NEXT (vpc);
   1293      1.1  christos 
   1294      1.1  christos   CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
   1295      1.1  christos {
   1296      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1297      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1298      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1299      1.1  christos   int UNUSED written = 0;
   1300      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1301      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1302      1.1  christos 
   1303      1.1  christos {
   1304      1.1  christos {
   1305      1.1  christos   {
   1306      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1307      1.1  christos     SET_H_SYS_SR_CY (opval);
   1308      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1309      1.1  christos   }
   1310      1.1  christos   {
   1311      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1312      1.1  christos     SET_H_SYS_SR_OV (opval);
   1313      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1314      1.1  christos   }
   1315      1.1  christos   {
   1316      1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1317      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1318      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1319      1.1  christos   }
   1320      1.1  christos }
   1321      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1322      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1323      1.1  christos }
   1324      1.1  christos }
   1325      1.1  christos 
   1326      1.1  christos #undef FLD
   1327      1.1  christos }
   1328      1.1  christos   NEXT (vpc);
   1329      1.1  christos 
   1330      1.1  christos   CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
   1331      1.1  christos {
   1332      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1333      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1334      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1335      1.1  christos   int UNUSED written = 0;
   1336      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1337      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1338      1.1  christos 
   1339      1.1  christos {
   1340      1.1  christos {
   1341      1.1  christos   {
   1342      1.1  christos     BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1343      1.1  christos     SET_H_SYS_SR_CY (opval);
   1344      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1345      1.1  christos   }
   1346      1.1  christos   {
   1347      1.1  christos     BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1348      1.1  christos     SET_H_SYS_SR_OV (opval);
   1349      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1350      1.1  christos   }
   1351      1.1  christos   {
   1352      1.1  christos     USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1353      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1354      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1355      1.1  christos   }
   1356      1.1  christos }
   1357      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1358      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1359      1.1  christos }
   1360      1.1  christos }
   1361      1.1  christos 
   1362      1.1  christos #undef FLD
   1363      1.1  christos }
   1364      1.1  christos   NEXT (vpc);
   1365      1.1  christos 
   1366      1.1  christos   CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
   1367      1.1  christos {
   1368      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1369      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1370      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1371      1.1  christos   int UNUSED written = 0;
   1372      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1373      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1374      1.1  christos 
   1375      1.1  christos {
   1376      1.1  christos {
   1377      1.1  christos   BI tmp_tmp_sys_sr_cy;
   1378      1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1379      1.1  christos   {
   1380      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1381      1.1  christos     SET_H_SYS_SR_CY (opval);
   1382      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1383      1.1  christos   }
   1384      1.1  christos   {
   1385      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1386      1.1  christos     SET_H_SYS_SR_OV (opval);
   1387      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1388      1.1  christos   }
   1389      1.1  christos   {
   1390      1.1  christos     USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1391      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1392      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1393      1.1  christos   }
   1394      1.1  christos }
   1395      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1396      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1397      1.1  christos }
   1398      1.1  christos }
   1399      1.1  christos 
   1400      1.1  christos #undef FLD
   1401      1.1  christos }
   1402      1.1  christos   NEXT (vpc);
   1403      1.1  christos 
   1404      1.1  christos   CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
   1405      1.1  christos {
   1406      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1407      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1408      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1409      1.1  christos   int UNUSED written = 0;
   1410      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1411      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1412      1.1  christos 
   1413      1.1  christos {
   1414      1.1  christos {
   1415      1.1  christos   {
   1416      1.1  christos     BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1417      1.1  christos     SET_H_SYS_SR_OV (opval);
   1418      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1419      1.1  christos   }
   1420      1.1  christos   {
   1421      1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1422      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1423      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1424      1.1  christos   }
   1425      1.1  christos }
   1426      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1427      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1428      1.1  christos }
   1429      1.1  christos }
   1430      1.1  christos 
   1431      1.1  christos #undef FLD
   1432      1.1  christos }
   1433      1.1  christos   NEXT (vpc);
   1434      1.1  christos 
   1435      1.1  christos   CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
   1436      1.1  christos {
   1437      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1438      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1439      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1440      1.1  christos   int UNUSED written = 0;
   1441      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1442      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1443      1.1  christos 
   1444      1.1  christos {
   1445      1.1  christos   DI tmp_result;
   1446      1.1  christos   tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   1447      1.1  christos   {
   1448      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1449      1.1  christos     SET_H_MAC_MACHI (opval);
   1450      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1451      1.1  christos   }
   1452      1.1  christos   {
   1453      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1454      1.1  christos     SET_H_MAC_MACLO (opval);
   1455      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1456      1.1  christos   }
   1457      1.1  christos }
   1458      1.1  christos 
   1459      1.1  christos #undef FLD
   1460      1.1  christos }
   1461      1.1  christos   NEXT (vpc);
   1462      1.1  christos 
   1463      1.1  christos   CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
   1464      1.1  christos {
   1465      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1466      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1467      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1468      1.1  christos   int UNUSED written = 0;
   1469      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1470      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1471      1.1  christos 
   1472      1.1  christos {
   1473      1.1  christos {
   1474      1.1  christos   {
   1475      1.1  christos     BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1476      1.1  christos     SET_H_SYS_SR_CY (opval);
   1477      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1478      1.1  christos   }
   1479      1.1  christos   {
   1480      1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1481      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1482      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1483      1.1  christos   }
   1484      1.1  christos }
   1485      1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   1486      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1487      1.1  christos }
   1488      1.1  christos }
   1489      1.1  christos 
   1490      1.1  christos #undef FLD
   1491      1.1  christos }
   1492      1.1  christos   NEXT (vpc);
   1493      1.1  christos 
   1494      1.1  christos   CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
   1495      1.1  christos {
   1496      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1497      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1498      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1499      1.1  christos   int UNUSED written = 0;
   1500      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1501      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1502      1.1  christos 
   1503      1.1  christos {
   1504      1.1  christos   DI tmp_result;
   1505      1.1  christos   tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   1506      1.1  christos   {
   1507      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1508      1.1  christos     SET_H_MAC_MACHI (opval);
   1509      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1510      1.1  christos   }
   1511      1.1  christos   {
   1512      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1513      1.1  christos     SET_H_MAC_MACLO (opval);
   1514      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1515      1.1  christos   }
   1516      1.1  christos }
   1517      1.1  christos 
   1518      1.1  christos #undef FLD
   1519      1.1  christos }
   1520      1.1  christos   NEXT (vpc);
   1521      1.1  christos 
   1522      1.1  christos   CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
   1523      1.1  christos {
   1524      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1525      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1526      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1527      1.1  christos   int UNUSED written = 0;
   1528      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1529      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1530      1.1  christos 
   1531      1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1532      1.1  christos {
   1533      1.1  christos   {
   1534      1.1  christos     BI opval = 0;
   1535      1.1  christos     SET_H_SYS_SR_OV (opval);
   1536      1.1  christos     written |= (1 << 5);
   1537      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1538      1.1  christos   }
   1539      1.1  christos   {
   1540      1.1  christos     SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1541      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1542      1.1  christos     written |= (1 << 4);
   1543      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1544      1.1  christos   }
   1545      1.1  christos }
   1546      1.1  christos } else {
   1547      1.1  christos {
   1548      1.1  christos   {
   1549      1.1  christos     BI opval = 1;
   1550      1.1  christos     SET_H_SYS_SR_OV (opval);
   1551      1.1  christos     written |= (1 << 5);
   1552      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1553      1.1  christos   }
   1554      1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1555      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1556      1.1  christos }
   1557      1.1  christos }
   1558      1.1  christos }
   1559      1.1  christos 
   1560      1.1  christos   abuf->written = written;
   1561      1.1  christos #undef FLD
   1562      1.1  christos }
   1563      1.1  christos   NEXT (vpc);
   1564      1.1  christos 
   1565      1.1  christos   CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
   1566      1.1  christos {
   1567      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1568      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1569      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1570      1.1  christos   int UNUSED written = 0;
   1571      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1572      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1573      1.1  christos 
   1574      1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1575      1.1  christos {
   1576      1.1  christos   {
   1577      1.1  christos     BI opval = 0;
   1578      1.1  christos     SET_H_SYS_SR_CY (opval);
   1579      1.1  christos     written |= (1 << 5);
   1580      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1581      1.1  christos   }
   1582      1.1  christos   {
   1583      1.1  christos     USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1584      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1585      1.1  christos     written |= (1 << 4);
   1586      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1587      1.1  christos   }
   1588      1.1  christos }
   1589      1.1  christos } else {
   1590      1.1  christos {
   1591      1.1  christos   {
   1592      1.1  christos     BI opval = 1;
   1593      1.1  christos     SET_H_SYS_SR_CY (opval);
   1594      1.1  christos     written |= (1 << 5);
   1595      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1596      1.1  christos   }
   1597      1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1598      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1599      1.1  christos }
   1600      1.1  christos }
   1601      1.1  christos }
   1602      1.1  christos 
   1603      1.1  christos   abuf->written = written;
   1604      1.1  christos #undef FLD
   1605      1.1  christos }
   1606      1.1  christos   NEXT (vpc);
   1607      1.1  christos 
   1608      1.1  christos   CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
   1609      1.1  christos {
   1610      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1611      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1612      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1613      1.1  christos   int UNUSED written = 0;
   1614      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1615      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1616      1.1  christos 
   1617      1.1  christos   {
   1618      1.1  christos     USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1619      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1620      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1621      1.1  christos   }
   1622      1.1  christos 
   1623      1.1  christos #undef FLD
   1624      1.1  christos }
   1625      1.1  christos   NEXT (vpc);
   1626      1.1  christos 
   1627      1.1  christos   CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
   1628      1.1  christos {
   1629      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1630      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1631      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1632      1.1  christos   int UNUSED written = 0;
   1633      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1634      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1635      1.1  christos 
   1636      1.1  christos   {
   1637      1.1  christos     USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1638      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1639      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1640      1.1  christos   }
   1641      1.1  christos 
   1642      1.1  christos #undef FLD
   1643      1.1  christos }
   1644      1.1  christos   NEXT (vpc);
   1645      1.1  christos 
   1646      1.1  christos   CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
   1647      1.1  christos {
   1648      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1649      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1650      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1651      1.1  christos   int UNUSED written = 0;
   1652      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1653      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1654      1.1  christos 
   1655      1.1  christos   {
   1656      1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1657      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1658      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1659      1.1  christos   }
   1660      1.1  christos 
   1661      1.1  christos #undef FLD
   1662      1.1  christos }
   1663      1.1  christos   NEXT (vpc);
   1664      1.1  christos 
   1665      1.1  christos   CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
   1666      1.1  christos {
   1667      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1668      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1669      1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1670      1.1  christos   int UNUSED written = 0;
   1671      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1672      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1673      1.1  christos 
   1674      1.1  christos   {
   1675      1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1676      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1677      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1678      1.1  christos   }
   1679      1.1  christos 
   1680      1.1  christos #undef FLD
   1681      1.1  christos }
   1682      1.1  christos   NEXT (vpc);
   1683      1.1  christos 
   1684      1.1  christos   CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
   1685      1.1  christos {
   1686      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1687      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1688      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1689      1.1  christos   int UNUSED written = 0;
   1690      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1691      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1692      1.1  christos 
   1693      1.1  christos   {
   1694      1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1695      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1696      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1697      1.1  christos   }
   1698      1.1  christos 
   1699      1.1  christos #undef FLD
   1700      1.1  christos }
   1701      1.1  christos   NEXT (vpc);
   1702      1.1  christos 
   1703      1.1  christos   CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
   1704      1.1  christos {
   1705      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1706      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1707      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1708      1.1  christos   int UNUSED written = 0;
   1709      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1710      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1711      1.1  christos 
   1712      1.1  christos {
   1713      1.1  christos {
   1714      1.1  christos   {
   1715      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1716      1.1  christos     SET_H_SYS_SR_CY (opval);
   1717      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1718      1.1  christos   }
   1719      1.1  christos   {
   1720      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1721      1.1  christos     SET_H_SYS_SR_OV (opval);
   1722      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1723      1.1  christos   }
   1724      1.1  christos   {
   1725      1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1726      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1727      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1728      1.1  christos   }
   1729      1.1  christos }
   1730      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1731      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1732      1.1  christos }
   1733      1.1  christos }
   1734      1.1  christos 
   1735      1.1  christos #undef FLD
   1736      1.1  christos }
   1737      1.1  christos   NEXT (vpc);
   1738      1.1  christos 
   1739      1.1  christos   CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
   1740      1.1  christos {
   1741      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1742      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1743      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1744      1.1  christos   int UNUSED written = 0;
   1745      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1746      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1747      1.1  christos 
   1748      1.1  christos {
   1749      1.1  christos {
   1750      1.1  christos   BI tmp_tmp_sys_sr_cy;
   1751      1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1752      1.1  christos   {
   1753      1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1754      1.1  christos     SET_H_SYS_SR_CY (opval);
   1755      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1756      1.1  christos   }
   1757      1.1  christos   {
   1758      1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1759      1.1  christos     SET_H_SYS_SR_OV (opval);
   1760      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1761      1.1  christos   }
   1762      1.1  christos   {
   1763      1.1  christos     SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1764      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1765      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1766      1.1  christos   }
   1767      1.1  christos }
   1768      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1769      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1770      1.1  christos }
   1771      1.1  christos }
   1772      1.1  christos 
   1773      1.1  christos #undef FLD
   1774      1.1  christos }
   1775      1.1  christos   NEXT (vpc);
   1776      1.1  christos 
   1777      1.1  christos   CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
   1778      1.1  christos {
   1779      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1780      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1781      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1782      1.1  christos   int UNUSED written = 0;
   1783      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1784      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1785      1.1  christos 
   1786      1.1  christos {
   1787      1.1  christos {
   1788      1.1  christos   {
   1789      1.1  christos     USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1790      1.1  christos     SET_H_SYS_SR_OV (opval);
   1791      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1792      1.1  christos   }
   1793      1.1  christos   {
   1794      1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1795      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1796      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1797      1.1  christos   }
   1798      1.1  christos }
   1799      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1800      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1801      1.1  christos }
   1802      1.1  christos }
   1803      1.1  christos 
   1804      1.1  christos #undef FLD
   1805      1.1  christos }
   1806      1.1  christos   NEXT (vpc);
   1807      1.1  christos 
   1808      1.1  christos   CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
   1809      1.1  christos {
   1810      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1811      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1812      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1813      1.1  christos   int UNUSED written = 0;
   1814      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1815      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1816      1.1  christos 
   1817      1.1  christos   {
   1818      1.1  christos     USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1819      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1820      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1821      1.1  christos   }
   1822      1.1  christos 
   1823      1.1  christos #undef FLD
   1824      1.1  christos }
   1825      1.1  christos   NEXT (vpc);
   1826      1.1  christos 
   1827      1.1  christos   CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
   1828      1.1  christos {
   1829      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1830      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1831      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1832      1.1  christos   int UNUSED written = 0;
   1833      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1834      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1835      1.1  christos 
   1836      1.1  christos   {
   1837      1.1  christos     USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1838      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1839      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1840      1.1  christos   }
   1841      1.1  christos 
   1842      1.1  christos #undef FLD
   1843      1.1  christos }
   1844      1.1  christos   NEXT (vpc);
   1845      1.1  christos 
   1846      1.1  christos   CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
   1847      1.1  christos {
   1848      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1849      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1850      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1851      1.1  christos   int UNUSED written = 0;
   1852      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1853      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1854      1.1  christos 
   1855      1.1  christos   {
   1856      1.1  christos     USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1857      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1858      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1859      1.1  christos   }
   1860      1.1  christos 
   1861      1.1  christos #undef FLD
   1862      1.1  christos }
   1863      1.1  christos   NEXT (vpc);
   1864      1.1  christos 
   1865      1.1  christos   CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
   1866      1.1  christos {
   1867      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1868      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1869      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1870      1.1  christos   int UNUSED written = 0;
   1871      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1872      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1873      1.1  christos 
   1874      1.1  christos   {
   1875      1.1  christos     USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1876      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1877      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1878      1.1  christos   }
   1879      1.1  christos 
   1880      1.1  christos #undef FLD
   1881      1.1  christos }
   1882      1.1  christos   NEXT (vpc);
   1883      1.1  christos 
   1884      1.1  christos   CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
   1885      1.1  christos {
   1886      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1887      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1888      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1889      1.1  christos   int UNUSED written = 0;
   1890      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1891      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1892      1.1  christos 
   1893      1.1  christos   {
   1894      1.1  christos     USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1895      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1896      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1897      1.1  christos   }
   1898      1.1  christos 
   1899      1.1  christos #undef FLD
   1900      1.1  christos }
   1901      1.1  christos   NEXT (vpc);
   1902      1.1  christos 
   1903      1.1  christos   CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
   1904      1.1  christos {
   1905      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1906      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1907      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1908      1.1  christos   int UNUSED written = 0;
   1909      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1910      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1911      1.1  christos 
   1912      1.1  christos   {
   1913      1.1  christos     USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1914      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1915      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1916      1.1  christos   }
   1917      1.1  christos 
   1918      1.1  christos #undef FLD
   1919      1.1  christos }
   1920      1.1  christos   NEXT (vpc);
   1921      1.1  christos 
   1922      1.1  christos   CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
   1923      1.1  christos {
   1924      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1925      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1926      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1927      1.1  christos   int UNUSED written = 0;
   1928      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1929      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1930      1.1  christos 
   1931      1.1  christos if (GET_H_SYS_SR_F ()) {
   1932      1.1  christos   {
   1933      1.1  christos     USI opval = GET_H_GPR (FLD (f_r2));
   1934      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1935      1.1  christos     written |= (1 << 3);
   1936      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1937      1.1  christos   }
   1938      1.1  christos } else {
   1939      1.1  christos   {
   1940      1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
   1941      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1942      1.1  christos     written |= (1 << 3);
   1943      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1944      1.1  christos   }
   1945      1.1  christos }
   1946      1.1  christos 
   1947      1.1  christos   abuf->written = written;
   1948      1.1  christos #undef FLD
   1949      1.1  christos }
   1950      1.1  christos   NEXT (vpc);
   1951      1.1  christos 
   1952      1.1  christos   CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
   1953      1.1  christos {
   1954      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1955      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1956      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1957      1.1  christos   int UNUSED written = 0;
   1958      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1959      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1960      1.1  christos 
   1961      1.1  christos   {
   1962      1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1963      1.1  christos     SET_H_SYS_SR_F (opval);
   1964      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1965      1.1  christos   }
   1966      1.1  christos 
   1967      1.1  christos #undef FLD
   1968      1.1  christos }
   1969      1.1  christos   NEXT (vpc);
   1970      1.1  christos 
   1971      1.1  christos   CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
   1972      1.1  christos {
   1973      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1974      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1975      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1976      1.1  christos   int UNUSED written = 0;
   1977      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1978      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1979      1.1  christos 
   1980      1.1  christos   {
   1981      1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1982      1.1  christos     SET_H_SYS_SR_F (opval);
   1983      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1984      1.1  christos   }
   1985      1.1  christos 
   1986      1.1  christos #undef FLD
   1987      1.1  christos }
   1988      1.1  christos   NEXT (vpc);
   1989      1.1  christos 
   1990      1.1  christos   CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
   1991      1.1  christos {
   1992      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1993      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1994      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1995      1.1  christos   int UNUSED written = 0;
   1996      1.1  christos   IADDR UNUSED pc = abuf->addr;
   1997      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1998      1.1  christos 
   1999      1.1  christos   {
   2000      1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2001      1.1  christos     SET_H_SYS_SR_F (opval);
   2002      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2003      1.1  christos   }
   2004      1.1  christos 
   2005      1.1  christos #undef FLD
   2006      1.1  christos }
   2007      1.1  christos   NEXT (vpc);
   2008      1.1  christos 
   2009      1.1  christos   CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
   2010      1.1  christos {
   2011      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2012      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2013      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2014      1.1  christos   int UNUSED written = 0;
   2015      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2016      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2017      1.1  christos 
   2018      1.1  christos   {
   2019      1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2020      1.1  christos     SET_H_SYS_SR_F (opval);
   2021      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2022      1.1  christos   }
   2023      1.1  christos 
   2024      1.1  christos #undef FLD
   2025      1.1  christos }
   2026      1.1  christos   NEXT (vpc);
   2027      1.1  christos 
   2028      1.1  christos   CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
   2029      1.1  christos {
   2030      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2031      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2032      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2033      1.1  christos   int UNUSED written = 0;
   2034      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2035      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2036      1.1  christos 
   2037      1.1  christos   {
   2038      1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2039      1.1  christos     SET_H_SYS_SR_F (opval);
   2040      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2041      1.1  christos   }
   2042      1.1  christos 
   2043      1.1  christos #undef FLD
   2044      1.1  christos }
   2045      1.1  christos   NEXT (vpc);
   2046      1.1  christos 
   2047      1.1  christos   CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
   2048      1.1  christos {
   2049      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2050      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2051      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2052      1.1  christos   int UNUSED written = 0;
   2053      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2054      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2055      1.1  christos 
   2056      1.1  christos   {
   2057      1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2058      1.1  christos     SET_H_SYS_SR_F (opval);
   2059      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2060      1.1  christos   }
   2061      1.1  christos 
   2062      1.1  christos #undef FLD
   2063      1.1  christos }
   2064      1.1  christos   NEXT (vpc);
   2065      1.1  christos 
   2066      1.1  christos   CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
   2067      1.1  christos {
   2068      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2069      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2070      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2071      1.1  christos   int UNUSED written = 0;
   2072      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2073      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2074      1.1  christos 
   2075      1.1  christos   {
   2076      1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2077      1.1  christos     SET_H_SYS_SR_F (opval);
   2078      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2079      1.1  christos   }
   2080      1.1  christos 
   2081      1.1  christos #undef FLD
   2082      1.1  christos }
   2083      1.1  christos   NEXT (vpc);
   2084      1.1  christos 
   2085      1.1  christos   CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
   2086      1.1  christos {
   2087      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2088      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2089      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2090      1.1  christos   int UNUSED written = 0;
   2091      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2092      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2093      1.1  christos 
   2094      1.1  christos   {
   2095      1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2096      1.1  christos     SET_H_SYS_SR_F (opval);
   2097      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2098      1.1  christos   }
   2099      1.1  christos 
   2100      1.1  christos #undef FLD
   2101      1.1  christos }
   2102      1.1  christos   NEXT (vpc);
   2103      1.1  christos 
   2104      1.1  christos   CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
   2105      1.1  christos {
   2106      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2107      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2108      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2109      1.1  christos   int UNUSED written = 0;
   2110      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2111      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2112      1.1  christos 
   2113      1.1  christos   {
   2114      1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2115      1.1  christos     SET_H_SYS_SR_F (opval);
   2116      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2117      1.1  christos   }
   2118      1.1  christos 
   2119      1.1  christos #undef FLD
   2120      1.1  christos }
   2121      1.1  christos   NEXT (vpc);
   2122      1.1  christos 
   2123      1.1  christos   CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
   2124      1.1  christos {
   2125      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2126      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2127      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2128      1.1  christos   int UNUSED written = 0;
   2129      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2130      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2131      1.1  christos 
   2132      1.1  christos   {
   2133      1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2134      1.1  christos     SET_H_SYS_SR_F (opval);
   2135      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2136      1.1  christos   }
   2137      1.1  christos 
   2138      1.1  christos #undef FLD
   2139      1.1  christos }
   2140      1.1  christos   NEXT (vpc);
   2141      1.1  christos 
   2142      1.1  christos   CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
   2143      1.1  christos {
   2144      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2145      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2146      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2147      1.1  christos   int UNUSED written = 0;
   2148      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2149      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2150      1.1  christos 
   2151      1.1  christos   {
   2152      1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2153      1.1  christos     SET_H_SYS_SR_F (opval);
   2154      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2155      1.1  christos   }
   2156      1.1  christos 
   2157      1.1  christos #undef FLD
   2158      1.1  christos }
   2159      1.1  christos   NEXT (vpc);
   2160      1.1  christos 
   2161      1.1  christos   CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
   2162      1.1  christos {
   2163      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2164      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2165      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2166      1.1  christos   int UNUSED written = 0;
   2167      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2168      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2169      1.1  christos 
   2170      1.1  christos   {
   2171      1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2172      1.1  christos     SET_H_SYS_SR_F (opval);
   2173      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2174      1.1  christos   }
   2175      1.1  christos 
   2176      1.1  christos #undef FLD
   2177      1.1  christos }
   2178      1.1  christos   NEXT (vpc);
   2179      1.1  christos 
   2180      1.1  christos   CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
   2181      1.1  christos {
   2182      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2183      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2184      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2185      1.1  christos   int UNUSED written = 0;
   2186      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2187      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2188      1.1  christos 
   2189      1.1  christos   {
   2190      1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2191      1.1  christos     SET_H_SYS_SR_F (opval);
   2192      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2193      1.1  christos   }
   2194      1.1  christos 
   2195      1.1  christos #undef FLD
   2196      1.1  christos }
   2197      1.1  christos   NEXT (vpc);
   2198      1.1  christos 
   2199      1.1  christos   CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
   2200      1.1  christos {
   2201      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2202      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2203      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2204      1.1  christos   int UNUSED written = 0;
   2205      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2206      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2207      1.1  christos 
   2208      1.1  christos   {
   2209      1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2210      1.1  christos     SET_H_SYS_SR_F (opval);
   2211      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2212      1.1  christos   }
   2213      1.1  christos 
   2214      1.1  christos #undef FLD
   2215      1.1  christos }
   2216      1.1  christos   NEXT (vpc);
   2217      1.1  christos 
   2218      1.1  christos   CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
   2219      1.1  christos {
   2220      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2221      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2222      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2223      1.1  christos   int UNUSED written = 0;
   2224      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2225      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2226      1.1  christos 
   2227      1.1  christos   {
   2228      1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2229      1.1  christos     SET_H_SYS_SR_F (opval);
   2230      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2231      1.1  christos   }
   2232      1.1  christos 
   2233      1.1  christos #undef FLD
   2234      1.1  christos }
   2235      1.1  christos   NEXT (vpc);
   2236      1.1  christos 
   2237      1.1  christos   CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
   2238      1.1  christos {
   2239      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2240      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2241      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2242      1.1  christos   int UNUSED written = 0;
   2243      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2244      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2245      1.1  christos 
   2246      1.1  christos   {
   2247      1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2248      1.1  christos     SET_H_SYS_SR_F (opval);
   2249      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2250      1.1  christos   }
   2251      1.1  christos 
   2252      1.1  christos #undef FLD
   2253      1.1  christos }
   2254      1.1  christos   NEXT (vpc);
   2255      1.1  christos 
   2256      1.1  christos   CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
   2257      1.1  christos {
   2258      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2259      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2260      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2261      1.1  christos   int UNUSED written = 0;
   2262      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2263      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2264      1.1  christos 
   2265      1.1  christos   {
   2266      1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2267      1.1  christos     SET_H_SYS_SR_F (opval);
   2268      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2269      1.1  christos   }
   2270      1.1  christos 
   2271      1.1  christos #undef FLD
   2272      1.1  christos }
   2273      1.1  christos   NEXT (vpc);
   2274      1.1  christos 
   2275      1.1  christos   CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
   2276      1.1  christos {
   2277      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2278      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2279      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2280      1.1  christos   int UNUSED written = 0;
   2281      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2282      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2283      1.1  christos 
   2284      1.1  christos   {
   2285      1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2286      1.1  christos     SET_H_SYS_SR_F (opval);
   2287      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2288      1.1  christos   }
   2289      1.1  christos 
   2290      1.1  christos #undef FLD
   2291      1.1  christos }
   2292      1.1  christos   NEXT (vpc);
   2293      1.1  christos 
   2294      1.1  christos   CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
   2295      1.1  christos {
   2296      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2297      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2298      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2299      1.1  christos   int UNUSED written = 0;
   2300      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2301      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2302      1.1  christos 
   2303      1.1  christos   {
   2304      1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2305      1.1  christos     SET_H_SYS_SR_F (opval);
   2306      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2307      1.1  christos   }
   2308      1.1  christos 
   2309      1.1  christos #undef FLD
   2310      1.1  christos }
   2311      1.1  christos   NEXT (vpc);
   2312      1.1  christos 
   2313      1.1  christos   CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
   2314      1.1  christos {
   2315      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2316      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2317      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2318      1.1  christos   int UNUSED written = 0;
   2319      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2320      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2321      1.1  christos 
   2322      1.1  christos   {
   2323      1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2324      1.1  christos     SET_H_SYS_SR_F (opval);
   2325      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2326      1.1  christos   }
   2327      1.1  christos 
   2328      1.1  christos #undef FLD
   2329      1.1  christos }
   2330      1.1  christos   NEXT (vpc);
   2331      1.1  christos 
   2332      1.1  christos   CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
   2333      1.1  christos {
   2334      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2335      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2336      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2337      1.1  christos   int UNUSED written = 0;
   2338      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2339      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2340      1.1  christos 
   2341      1.1  christos {
   2342      1.1  christos {
   2343      1.1  christos   DI tmp_prod;
   2344      1.1  christos   DI tmp_mac;
   2345      1.1  christos   DI tmp_result;
   2346      1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2347      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2348      1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2349      1.1  christos   {
   2350      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2351      1.1  christos     SET_H_MAC_MACHI (opval);
   2352      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2353      1.1  christos   }
   2354      1.1  christos   {
   2355      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2356      1.1  christos     SET_H_MAC_MACLO (opval);
   2357      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2358      1.1  christos   }
   2359      1.1  christos   {
   2360      1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2361      1.1  christos     SET_H_SYS_SR_OV (opval);
   2362      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2363      1.1  christos   }
   2364      1.1  christos }
   2365      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2366      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2367      1.1  christos }
   2368      1.1  christos }
   2369      1.1  christos 
   2370      1.1  christos #undef FLD
   2371      1.1  christos }
   2372      1.1  christos   NEXT (vpc);
   2373      1.1  christos 
   2374      1.1  christos   CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
   2375      1.1  christos {
   2376      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2377      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2378      1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2379      1.1  christos   int UNUSED written = 0;
   2380      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2381      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2382      1.1  christos 
   2383      1.1  christos {
   2384      1.1  christos {
   2385      1.1  christos   DI tmp_prod;
   2386      1.1  christos   DI tmp_mac;
   2387      1.1  christos   DI tmp_result;
   2388      1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
   2389      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2390      1.1  christos   tmp_result = ADDDI (tmp_mac, tmp_prod);
   2391      1.1  christos   {
   2392      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2393      1.1  christos     SET_H_MAC_MACHI (opval);
   2394      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2395      1.1  christos   }
   2396      1.1  christos   {
   2397      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2398      1.1  christos     SET_H_MAC_MACLO (opval);
   2399      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2400      1.1  christos   }
   2401      1.1  christos   {
   2402      1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2403      1.1  christos     SET_H_SYS_SR_OV (opval);
   2404      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2405      1.1  christos   }
   2406      1.1  christos }
   2407      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2408      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2409      1.1  christos }
   2410      1.1  christos }
   2411      1.1  christos 
   2412      1.1  christos #undef FLD
   2413      1.1  christos }
   2414      1.1  christos   NEXT (vpc);
   2415      1.1  christos 
   2416      1.1  christos   CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
   2417      1.1  christos {
   2418      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2419      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2420      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2421      1.1  christos   int UNUSED written = 0;
   2422      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2423      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2424      1.1  christos 
   2425      1.1  christos {
   2426      1.1  christos {
   2427      1.1  christos   DI tmp_prod;
   2428      1.1  christos   DI tmp_mac;
   2429      1.1  christos   DI tmp_result;
   2430      1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2431      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2432      1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2433      1.1  christos   {
   2434      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2435      1.1  christos     SET_H_MAC_MACHI (opval);
   2436      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2437      1.1  christos   }
   2438      1.1  christos   {
   2439      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2440      1.1  christos     SET_H_MAC_MACLO (opval);
   2441      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2442      1.1  christos   }
   2443      1.1  christos   {
   2444      1.1  christos     BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
   2445      1.1  christos     SET_H_SYS_SR_CY (opval);
   2446      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2447      1.1  christos   }
   2448      1.1  christos }
   2449      1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2450      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2451      1.1  christos }
   2452      1.1  christos }
   2453      1.1  christos 
   2454      1.1  christos #undef FLD
   2455      1.1  christos }
   2456      1.1  christos   NEXT (vpc);
   2457      1.1  christos 
   2458      1.1  christos   CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
   2459      1.1  christos {
   2460      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2461      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2462      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2463      1.1  christos   int UNUSED written = 0;
   2464      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2465      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2466      1.1  christos 
   2467      1.1  christos {
   2468      1.1  christos {
   2469      1.1  christos   DI tmp_prod;
   2470      1.1  christos   DI tmp_mac;
   2471      1.1  christos   DI tmp_result;
   2472      1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2473      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2474      1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2475      1.1  christos   {
   2476      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2477      1.1  christos     SET_H_MAC_MACHI (opval);
   2478      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2479      1.1  christos   }
   2480      1.1  christos   {
   2481      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2482      1.1  christos     SET_H_MAC_MACLO (opval);
   2483      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2484      1.1  christos   }
   2485      1.1  christos   {
   2486      1.1  christos     BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
   2487      1.1  christos     SET_H_SYS_SR_OV (opval);
   2488      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2489      1.1  christos   }
   2490      1.1  christos }
   2491      1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2492      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2493      1.1  christos }
   2494      1.1  christos }
   2495      1.1  christos 
   2496      1.1  christos #undef FLD
   2497      1.1  christos }
   2498      1.1  christos   NEXT (vpc);
   2499      1.1  christos 
   2500      1.1  christos   CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
   2501      1.1  christos {
   2502      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2503      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2504      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2505      1.1  christos   int UNUSED written = 0;
   2506      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2507      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2508      1.1  christos 
   2509      1.1  christos {
   2510      1.1  christos {
   2511      1.1  christos   DI tmp_prod;
   2512      1.1  christos   DI tmp_mac;
   2513      1.1  christos   DI tmp_result;
   2514      1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2515      1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2516      1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2517      1.1  christos   {
   2518      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2519      1.1  christos     SET_H_MAC_MACHI (opval);
   2520      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2521      1.1  christos   }
   2522      1.1  christos   {
   2523      1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2524      1.1  christos     SET_H_MAC_MACLO (opval);
   2525      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2526      1.1  christos   }
   2527      1.1  christos   {
   2528      1.1  christos     BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
   2529      1.1  christos     SET_H_SYS_SR_CY (opval);
   2530      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2531      1.1  christos   }
   2532      1.1  christos }
   2533      1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2534      1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2535      1.1  christos }
   2536      1.1  christos }
   2537      1.1  christos 
   2538      1.1  christos #undef FLD
   2539      1.1  christos }
   2540      1.1  christos   NEXT (vpc);
   2541      1.1  christos 
   2542      1.1  christos   CASE (sem, INSN_L_CUST1) : /* l.cust1 */
   2543      1.1  christos {
   2544      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2545      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2546      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2547      1.1  christos   int UNUSED written = 0;
   2548      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2549      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2550      1.1  christos 
   2551      1.1  christos ((void) 0); /*nop*/
   2552      1.1  christos 
   2553      1.1  christos #undef FLD
   2554      1.1  christos }
   2555      1.1  christos   NEXT (vpc);
   2556      1.1  christos 
   2557      1.1  christos   CASE (sem, INSN_L_CUST2) : /* l.cust2 */
   2558      1.1  christos {
   2559      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2560      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2561      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2562      1.1  christos   int UNUSED written = 0;
   2563      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2564      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2565      1.1  christos 
   2566      1.1  christos ((void) 0); /*nop*/
   2567      1.1  christos 
   2568      1.1  christos #undef FLD
   2569      1.1  christos }
   2570      1.1  christos   NEXT (vpc);
   2571      1.1  christos 
   2572      1.1  christos   CASE (sem, INSN_L_CUST3) : /* l.cust3 */
   2573      1.1  christos {
   2574      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2575      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2576      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2577      1.1  christos   int UNUSED written = 0;
   2578      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2579      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2580      1.1  christos 
   2581      1.1  christos ((void) 0); /*nop*/
   2582      1.1  christos 
   2583      1.1  christos #undef FLD
   2584      1.1  christos }
   2585      1.1  christos   NEXT (vpc);
   2586      1.1  christos 
   2587      1.1  christos   CASE (sem, INSN_L_CUST4) : /* l.cust4 */
   2588      1.1  christos {
   2589      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2590      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2591      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2592      1.1  christos   int UNUSED written = 0;
   2593      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2594      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2595      1.1  christos 
   2596      1.1  christos ((void) 0); /*nop*/
   2597      1.1  christos 
   2598      1.1  christos #undef FLD
   2599      1.1  christos }
   2600      1.1  christos   NEXT (vpc);
   2601      1.1  christos 
   2602      1.1  christos   CASE (sem, INSN_L_CUST5) : /* l.cust5 */
   2603      1.1  christos {
   2604      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2605      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2606      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2607      1.1  christos   int UNUSED written = 0;
   2608      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2609      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2610      1.1  christos 
   2611      1.1  christos ((void) 0); /*nop*/
   2612      1.1  christos 
   2613      1.1  christos #undef FLD
   2614      1.1  christos }
   2615      1.1  christos   NEXT (vpc);
   2616      1.1  christos 
   2617      1.1  christos   CASE (sem, INSN_L_CUST6) : /* l.cust6 */
   2618      1.1  christos {
   2619      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2620      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2621      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2622      1.1  christos   int UNUSED written = 0;
   2623      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2624      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2625      1.1  christos 
   2626      1.1  christos ((void) 0); /*nop*/
   2627      1.1  christos 
   2628      1.1  christos #undef FLD
   2629      1.1  christos }
   2630      1.1  christos   NEXT (vpc);
   2631      1.1  christos 
   2632      1.1  christos   CASE (sem, INSN_L_CUST7) : /* l.cust7 */
   2633      1.1  christos {
   2634      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2635      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2636      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2637      1.1  christos   int UNUSED written = 0;
   2638      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2639      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2640      1.1  christos 
   2641      1.1  christos ((void) 0); /*nop*/
   2642      1.1  christos 
   2643      1.1  christos #undef FLD
   2644      1.1  christos }
   2645      1.1  christos   NEXT (vpc);
   2646      1.1  christos 
   2647      1.1  christos   CASE (sem, INSN_L_CUST8) : /* l.cust8 */
   2648      1.1  christos {
   2649      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2650      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2651      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2652      1.1  christos   int UNUSED written = 0;
   2653      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2654      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2655      1.1  christos 
   2656      1.1  christos ((void) 0); /*nop*/
   2657      1.1  christos 
   2658      1.1  christos #undef FLD
   2659      1.1  christos }
   2660      1.1  christos   NEXT (vpc);
   2661      1.1  christos 
   2662      1.1  christos   CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
   2663      1.1  christos {
   2664      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2665      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2666      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2667      1.1  christos   int UNUSED written = 0;
   2668      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2669      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2670      1.1  christos 
   2671      1.1  christos   {
   2672      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)));
   2673      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2674      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2675      1.1  christos   }
   2676      1.1  christos 
   2677      1.1  christos #undef FLD
   2678      1.1  christos }
   2679      1.1  christos   NEXT (vpc);
   2680      1.1  christos 
   2681  1.1.1.2  christos   CASE (sem, INSN_LF_ADD_D32) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
   2682  1.1.1.2  christos {
   2683  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2684  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2685  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2686  1.1.1.2  christos   int UNUSED written = 0;
   2687  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2688  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2689  1.1.1.2  christos 
   2690  1.1.1.2  christos   {
   2691  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)));
   2692  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2693  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2694  1.1.1.2  christos   }
   2695  1.1.1.2  christos 
   2696  1.1.1.2  christos #undef FLD
   2697  1.1.1.2  christos }
   2698  1.1.1.2  christos   NEXT (vpc);
   2699  1.1.1.2  christos 
   2700      1.1  christos   CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
   2701      1.1  christos {
   2702      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2703      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2704      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2705      1.1  christos   int UNUSED written = 0;
   2706      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2707      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2708      1.1  christos 
   2709      1.1  christos   {
   2710      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)));
   2711      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2712      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2713      1.1  christos   }
   2714      1.1  christos 
   2715      1.1  christos #undef FLD
   2716      1.1  christos }
   2717      1.1  christos   NEXT (vpc);
   2718      1.1  christos 
   2719  1.1.1.2  christos   CASE (sem, INSN_LF_SUB_D32) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
   2720  1.1.1.2  christos {
   2721  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2722  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2723  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2724  1.1.1.2  christos   int UNUSED written = 0;
   2725  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2726  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2727  1.1.1.2  christos 
   2728  1.1.1.2  christos   {
   2729  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)));
   2730  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2731  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2732  1.1.1.2  christos   }
   2733  1.1.1.2  christos 
   2734  1.1.1.2  christos #undef FLD
   2735  1.1.1.2  christos }
   2736  1.1.1.2  christos   NEXT (vpc);
   2737  1.1.1.2  christos 
   2738      1.1  christos   CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
   2739      1.1  christos {
   2740      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2741      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2742      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2743      1.1  christos   int UNUSED written = 0;
   2744      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2745      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2746      1.1  christos 
   2747      1.1  christos   {
   2748      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)));
   2749      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2750      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2751      1.1  christos   }
   2752      1.1  christos 
   2753      1.1  christos #undef FLD
   2754      1.1  christos }
   2755      1.1  christos   NEXT (vpc);
   2756      1.1  christos 
   2757  1.1.1.2  christos   CASE (sem, INSN_LF_MUL_D32) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
   2758  1.1.1.2  christos {
   2759  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2760  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2761  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2762  1.1.1.2  christos   int UNUSED written = 0;
   2763  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2764  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2765  1.1.1.2  christos 
   2766  1.1.1.2  christos   {
   2767  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)));
   2768  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2769  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2770  1.1.1.2  christos   }
   2771  1.1.1.2  christos 
   2772  1.1.1.2  christos #undef FLD
   2773  1.1.1.2  christos }
   2774  1.1.1.2  christos   NEXT (vpc);
   2775  1.1.1.2  christos 
   2776      1.1  christos   CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
   2777      1.1  christos {
   2778      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2779      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2780      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2781      1.1  christos   int UNUSED written = 0;
   2782      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2783      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2784      1.1  christos 
   2785      1.1  christos   {
   2786      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)));
   2787      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2788      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2789      1.1  christos   }
   2790      1.1  christos 
   2791      1.1  christos #undef FLD
   2792      1.1  christos }
   2793      1.1  christos   NEXT (vpc);
   2794      1.1  christos 
   2795  1.1.1.2  christos   CASE (sem, INSN_LF_DIV_D32) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
   2796  1.1.1.2  christos {
   2797  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2798  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2799  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2800  1.1.1.2  christos   int UNUSED written = 0;
   2801  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2802  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2803  1.1.1.2  christos 
   2804  1.1.1.2  christos   {
   2805  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)));
   2806  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2807  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2808  1.1.1.2  christos   }
   2809  1.1.1.2  christos 
   2810  1.1.1.2  christos #undef FLD
   2811  1.1.1.2  christos }
   2812  1.1.1.2  christos   NEXT (vpc);
   2813  1.1.1.2  christos 
   2814      1.1  christos   CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
   2815      1.1  christos {
   2816      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2817      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2818      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2819      1.1  christos   int UNUSED written = 0;
   2820      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2821      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2822      1.1  christos 
   2823      1.1  christos   {
   2824      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)));
   2825      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2826      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2827      1.1  christos   }
   2828      1.1  christos 
   2829      1.1  christos #undef FLD
   2830      1.1  christos }
   2831      1.1  christos   NEXT (vpc);
   2832      1.1  christos 
   2833  1.1.1.2  christos   CASE (sem, INSN_LF_REM_D32) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
   2834  1.1.1.2  christos {
   2835  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2836  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2837  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2838  1.1.1.2  christos   int UNUSED written = 0;
   2839  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2840  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2841  1.1.1.2  christos 
   2842  1.1.1.2  christos   {
   2843  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)));
   2844  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2845  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2846  1.1.1.2  christos   }
   2847  1.1.1.2  christos 
   2848  1.1.1.2  christos #undef FLD
   2849  1.1.1.2  christos }
   2850  1.1.1.2  christos   NEXT (vpc);
   2851  1.1.1.2  christos 
   2852      1.1  christos   CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
   2853      1.1  christos {
   2854      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2855      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2856      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2857      1.1  christos   int UNUSED written = 0;
   2858      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2859      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2860      1.1  christos 
   2861      1.1  christos   {
   2862      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))));
   2863      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2864      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2865      1.1  christos   }
   2866      1.1  christos 
   2867      1.1  christos #undef FLD
   2868      1.1  christos }
   2869      1.1  christos   NEXT (vpc);
   2870      1.1  christos 
   2871  1.1.1.2  christos   CASE (sem, INSN_LF_ITOF_D32) : /* lf.itof.d $rDD32F,$rADI */
   2872  1.1.1.2  christos {
   2873  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2874  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2875  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2876  1.1.1.2  christos   int UNUSED written = 0;
   2877  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2878  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2879  1.1.1.2  christos 
   2880  1.1.1.2  christos   {
   2881  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)));
   2882  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2883  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2884  1.1.1.2  christos   }
   2885  1.1.1.2  christos 
   2886  1.1.1.2  christos #undef FLD
   2887  1.1.1.2  christos }
   2888  1.1.1.2  christos   NEXT (vpc);
   2889  1.1.1.2  christos 
   2890      1.1  christos   CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
   2891      1.1  christos {
   2892      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2893      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2894      1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2895      1.1  christos   int UNUSED written = 0;
   2896      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2897      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2898      1.1  christos 
   2899      1.1  christos   {
   2900      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))));
   2901      1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   2902      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   2903      1.1  christos   }
   2904      1.1  christos 
   2905      1.1  christos #undef FLD
   2906      1.1  christos }
   2907      1.1  christos   NEXT (vpc);
   2908      1.1  christos 
   2909  1.1.1.2  christos   CASE (sem, INSN_LF_FTOI_D32) : /* lf.ftoi.d $rDDI,$rAD32F */
   2910  1.1.1.2  christos {
   2911  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2912  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2913  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2914  1.1.1.2  christos   int UNUSED written = 0;
   2915  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2916  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2917  1.1.1.2  christos 
   2918  1.1.1.2  christos   {
   2919  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)));
   2920  1.1.1.2  christos     SET_H_I64R (FLD (f_rdd32), opval);
   2921  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
   2922  1.1.1.2  christos   }
   2923  1.1.1.2  christos 
   2924  1.1.1.2  christos #undef FLD
   2925  1.1.1.2  christos }
   2926  1.1.1.2  christos   NEXT (vpc);
   2927  1.1.1.2  christos 
   2928  1.1.1.2  christos   CASE (sem, INSN_LF_SFEQ_S) : /* lf.sfeq.s $rASF,$rBSF */
   2929      1.1  christos {
   2930      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2931      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2932      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2933      1.1  christos   int UNUSED written = 0;
   2934      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2935      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2936      1.1  christos 
   2937      1.1  christos   {
   2938      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)));
   2939      1.1  christos     SET_H_SYS_SR_F (opval);
   2940      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2941      1.1  christos   }
   2942      1.1  christos 
   2943      1.1  christos #undef FLD
   2944      1.1  christos }
   2945      1.1  christos   NEXT (vpc);
   2946      1.1  christos 
   2947  1.1.1.2  christos   CASE (sem, INSN_LF_SFEQ_D32) : /* lf.sfeq.d $rAD32F,$rBD32F */
   2948  1.1.1.2  christos {
   2949  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2950  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2951  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2952  1.1.1.2  christos   int UNUSED written = 0;
   2953  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2954  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2955  1.1.1.2  christos 
   2956  1.1.1.2  christos   {
   2957  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)));
   2958  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   2959  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2960  1.1.1.2  christos   }
   2961  1.1.1.2  christos 
   2962  1.1.1.2  christos #undef FLD
   2963  1.1.1.2  christos }
   2964  1.1.1.2  christos   NEXT (vpc);
   2965  1.1.1.2  christos 
   2966  1.1.1.2  christos   CASE (sem, INSN_LF_SFNE_S) : /* lf.sfne.s $rASF,$rBSF */
   2967      1.1  christos {
   2968      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2969      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2970      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2971      1.1  christos   int UNUSED written = 0;
   2972      1.1  christos   IADDR UNUSED pc = abuf->addr;
   2973      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2974      1.1  christos 
   2975      1.1  christos   {
   2976      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)));
   2977      1.1  christos     SET_H_SYS_SR_F (opval);
   2978      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2979      1.1  christos   }
   2980      1.1  christos 
   2981      1.1  christos #undef FLD
   2982      1.1  christos }
   2983      1.1  christos   NEXT (vpc);
   2984      1.1  christos 
   2985  1.1.1.2  christos   CASE (sem, INSN_LF_SFNE_D32) : /* lf.sfne.d $rAD32F,$rBD32F */
   2986  1.1.1.2  christos {
   2987  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2988  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2989  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2990  1.1.1.2  christos   int UNUSED written = 0;
   2991  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2992  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2993  1.1.1.2  christos 
   2994  1.1.1.2  christos   {
   2995  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)));
   2996  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   2997  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2998  1.1.1.2  christos   }
   2999  1.1.1.2  christos 
   3000  1.1.1.2  christos #undef FLD
   3001  1.1.1.2  christos }
   3002  1.1.1.2  christos   NEXT (vpc);
   3003  1.1.1.2  christos 
   3004  1.1.1.2  christos   CASE (sem, INSN_LF_SFGE_S) : /* lf.sfge.s $rASF,$rBSF */
   3005      1.1  christos {
   3006      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3007      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3008      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3009      1.1  christos   int UNUSED written = 0;
   3010      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3011      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3012      1.1  christos 
   3013      1.1  christos   {
   3014      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)));
   3015      1.1  christos     SET_H_SYS_SR_F (opval);
   3016      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3017      1.1  christos   }
   3018      1.1  christos 
   3019      1.1  christos #undef FLD
   3020      1.1  christos }
   3021      1.1  christos   NEXT (vpc);
   3022      1.1  christos 
   3023  1.1.1.2  christos   CASE (sem, INSN_LF_SFGE_D32) : /* lf.sfge.d $rAD32F,$rBD32F */
   3024  1.1.1.2  christos {
   3025  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3026  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3027  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3028  1.1.1.2  christos   int UNUSED written = 0;
   3029  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3030  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3031  1.1.1.2  christos 
   3032  1.1.1.2  christos   {
   3033  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)));
   3034  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3035  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3036  1.1.1.2  christos   }
   3037  1.1.1.2  christos 
   3038  1.1.1.2  christos #undef FLD
   3039  1.1.1.2  christos }
   3040  1.1.1.2  christos   NEXT (vpc);
   3041  1.1.1.2  christos 
   3042  1.1.1.2  christos   CASE (sem, INSN_LF_SFGT_S) : /* lf.sfgt.s $rASF,$rBSF */
   3043      1.1  christos {
   3044      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3045      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3046      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3047      1.1  christos   int UNUSED written = 0;
   3048      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3049      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3050      1.1  christos 
   3051      1.1  christos   {
   3052      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)));
   3053      1.1  christos     SET_H_SYS_SR_F (opval);
   3054      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3055      1.1  christos   }
   3056      1.1  christos 
   3057      1.1  christos #undef FLD
   3058      1.1  christos }
   3059      1.1  christos   NEXT (vpc);
   3060      1.1  christos 
   3061  1.1.1.2  christos   CASE (sem, INSN_LF_SFGT_D32) : /* lf.sfgt.d $rAD32F,$rBD32F */
   3062  1.1.1.2  christos {
   3063  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3064  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3065  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3066  1.1.1.2  christos   int UNUSED written = 0;
   3067  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3068  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3069  1.1.1.2  christos 
   3070  1.1.1.2  christos   {
   3071  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)));
   3072  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3073  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3074  1.1.1.2  christos   }
   3075  1.1.1.2  christos 
   3076  1.1.1.2  christos #undef FLD
   3077  1.1.1.2  christos }
   3078  1.1.1.2  christos   NEXT (vpc);
   3079  1.1.1.2  christos 
   3080  1.1.1.2  christos   CASE (sem, INSN_LF_SFLT_S) : /* lf.sflt.s $rASF,$rBSF */
   3081      1.1  christos {
   3082      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3083      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3084      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3085      1.1  christos   int UNUSED written = 0;
   3086      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3087      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3088      1.1  christos 
   3089      1.1  christos   {
   3090      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)));
   3091      1.1  christos     SET_H_SYS_SR_F (opval);
   3092      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3093      1.1  christos   }
   3094      1.1  christos 
   3095      1.1  christos #undef FLD
   3096      1.1  christos }
   3097      1.1  christos   NEXT (vpc);
   3098      1.1  christos 
   3099  1.1.1.2  christos   CASE (sem, INSN_LF_SFLT_D32) : /* lf.sflt.d $rAD32F,$rBD32F */
   3100  1.1.1.2  christos {
   3101  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3102  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3103  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3104  1.1.1.2  christos   int UNUSED written = 0;
   3105  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3106  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3107  1.1.1.2  christos 
   3108  1.1.1.2  christos   {
   3109  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)));
   3110  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3111  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3112  1.1.1.2  christos   }
   3113  1.1.1.2  christos 
   3114  1.1.1.2  christos #undef FLD
   3115  1.1.1.2  christos }
   3116  1.1.1.2  christos   NEXT (vpc);
   3117  1.1.1.2  christos 
   3118  1.1.1.2  christos   CASE (sem, INSN_LF_SFLE_S) : /* lf.sfle.s $rASF,$rBSF */
   3119      1.1  christos {
   3120      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3121      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3122      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3123      1.1  christos   int UNUSED written = 0;
   3124      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3125      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3126      1.1  christos 
   3127      1.1  christos   {
   3128      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)));
   3129      1.1  christos     SET_H_SYS_SR_F (opval);
   3130      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3131      1.1  christos   }
   3132      1.1  christos 
   3133      1.1  christos #undef FLD
   3134      1.1  christos }
   3135      1.1  christos   NEXT (vpc);
   3136      1.1  christos 
   3137  1.1.1.2  christos   CASE (sem, INSN_LF_SFLE_D32) : /* lf.sfle.d $rAD32F,$rBD32F */
   3138  1.1.1.2  christos {
   3139  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3140  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3141  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3142  1.1.1.2  christos   int UNUSED written = 0;
   3143  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3144  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3145  1.1.1.2  christos 
   3146  1.1.1.2  christos   {
   3147  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)));
   3148  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3149  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3150  1.1.1.2  christos   }
   3151  1.1.1.2  christos 
   3152  1.1.1.2  christos #undef FLD
   3153  1.1.1.2  christos }
   3154  1.1.1.2  christos   NEXT (vpc);
   3155  1.1.1.2  christos 
   3156  1.1.1.2  christos   CASE (sem, INSN_LF_SFUEQ_S) : /* lf.sfueq.s $rASF,$rBSF */
   3157  1.1.1.2  christos {
   3158  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3159  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3160  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3161  1.1.1.2  christos   int UNUSED written = 0;
   3162  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3163  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3164  1.1.1.2  christos 
   3165  1.1.1.2  christos   {
   3166  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))));
   3167  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3168  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3169  1.1.1.2  christos   }
   3170  1.1.1.2  christos 
   3171  1.1.1.2  christos #undef FLD
   3172  1.1.1.2  christos }
   3173  1.1.1.2  christos   NEXT (vpc);
   3174  1.1.1.2  christos 
   3175  1.1.1.2  christos   CASE (sem, INSN_LF_SFUEQ_D32) : /* lf.sfueq.d $rAD32F,$rBD32F */
   3176  1.1.1.2  christos {
   3177  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3178  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3179  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3180  1.1.1.2  christos   int UNUSED written = 0;
   3181  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3182  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3183  1.1.1.2  christos 
   3184  1.1.1.2  christos   {
   3185  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))));
   3186  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3187  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3188  1.1.1.2  christos   }
   3189  1.1.1.2  christos 
   3190  1.1.1.2  christos #undef FLD
   3191  1.1.1.2  christos }
   3192  1.1.1.2  christos   NEXT (vpc);
   3193  1.1.1.2  christos 
   3194  1.1.1.2  christos   CASE (sem, INSN_LF_SFUNE_S) : /* lf.sfune.s $rASF,$rBSF */
   3195  1.1.1.2  christos {
   3196  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3197  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3198  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3199  1.1.1.2  christos   int UNUSED written = 0;
   3200  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3201  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3202  1.1.1.2  christos 
   3203  1.1.1.2  christos   {
   3204  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))));
   3205  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3206  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3207  1.1.1.2  christos   }
   3208  1.1.1.2  christos 
   3209  1.1.1.2  christos #undef FLD
   3210  1.1.1.2  christos }
   3211  1.1.1.2  christos   NEXT (vpc);
   3212  1.1.1.2  christos 
   3213  1.1.1.2  christos   CASE (sem, INSN_LF_SFUNE_D32) : /* lf.sfune.d $rAD32F,$rBD32F */
   3214  1.1.1.2  christos {
   3215  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3216  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3217  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3218  1.1.1.2  christos   int UNUSED written = 0;
   3219  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3220  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3221  1.1.1.2  christos 
   3222  1.1.1.2  christos   {
   3223  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))));
   3224  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3225  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3226  1.1.1.2  christos   }
   3227  1.1.1.2  christos 
   3228  1.1.1.2  christos #undef FLD
   3229  1.1.1.2  christos }
   3230  1.1.1.2  christos   NEXT (vpc);
   3231  1.1.1.2  christos 
   3232  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGT_S) : /* lf.sfugt.s $rASF,$rBSF */
   3233  1.1.1.2  christos {
   3234  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3235  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3236  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3237  1.1.1.2  christos   int UNUSED written = 0;
   3238  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3239  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3240  1.1.1.2  christos 
   3241  1.1.1.2  christos   {
   3242  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))));
   3243  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3244  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3245  1.1.1.2  christos   }
   3246  1.1.1.2  christos 
   3247  1.1.1.2  christos #undef FLD
   3248  1.1.1.2  christos }
   3249  1.1.1.2  christos   NEXT (vpc);
   3250  1.1.1.2  christos 
   3251  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGT_D32) : /* lf.sfugt.d $rAD32F,$rBD32F */
   3252  1.1.1.2  christos {
   3253  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3254  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3255  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3256  1.1.1.2  christos   int UNUSED written = 0;
   3257  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3258  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3259  1.1.1.2  christos 
   3260  1.1.1.2  christos   {
   3261  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))));
   3262  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3263  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3264  1.1.1.2  christos   }
   3265  1.1.1.2  christos 
   3266  1.1.1.2  christos #undef FLD
   3267  1.1.1.2  christos }
   3268  1.1.1.2  christos   NEXT (vpc);
   3269  1.1.1.2  christos 
   3270  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGE_S) : /* lf.sfuge.s $rASF,$rBSF */
   3271  1.1.1.2  christos {
   3272  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3273  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3274  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3275  1.1.1.2  christos   int UNUSED written = 0;
   3276  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3277  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3278  1.1.1.2  christos 
   3279  1.1.1.2  christos   {
   3280  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))));
   3281  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3282  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3283  1.1.1.2  christos   }
   3284  1.1.1.2  christos 
   3285  1.1.1.2  christos #undef FLD
   3286  1.1.1.2  christos }
   3287  1.1.1.2  christos   NEXT (vpc);
   3288  1.1.1.2  christos 
   3289  1.1.1.2  christos   CASE (sem, INSN_LF_SFUGE_D32) : /* lf.sfuge.d $rAD32F,$rBD32F */
   3290  1.1.1.2  christos {
   3291  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3292  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3293  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3294  1.1.1.2  christos   int UNUSED written = 0;
   3295  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3296  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3297  1.1.1.2  christos 
   3298  1.1.1.2  christos   {
   3299  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))));
   3300  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3301  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3302  1.1.1.2  christos   }
   3303  1.1.1.2  christos 
   3304  1.1.1.2  christos #undef FLD
   3305  1.1.1.2  christos }
   3306  1.1.1.2  christos   NEXT (vpc);
   3307  1.1.1.2  christos 
   3308  1.1.1.2  christos   CASE (sem, INSN_LF_SFULT_S) : /* lf.sfult.s $rASF,$rBSF */
   3309  1.1.1.2  christos {
   3310  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3311  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3312  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3313  1.1.1.2  christos   int UNUSED written = 0;
   3314  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3315  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3316  1.1.1.2  christos 
   3317  1.1.1.2  christos   {
   3318  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))));
   3319  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3320  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3321  1.1.1.2  christos   }
   3322  1.1.1.2  christos 
   3323  1.1.1.2  christos #undef FLD
   3324  1.1.1.2  christos }
   3325  1.1.1.2  christos   NEXT (vpc);
   3326  1.1.1.2  christos 
   3327  1.1.1.2  christos   CASE (sem, INSN_LF_SFULT_D32) : /* lf.sfult.d $rAD32F,$rBD32F */
   3328  1.1.1.2  christos {
   3329  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3330  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3331  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3332  1.1.1.2  christos   int UNUSED written = 0;
   3333  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3334  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3335  1.1.1.2  christos 
   3336  1.1.1.2  christos   {
   3337  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))));
   3338  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3339  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3340  1.1.1.2  christos   }
   3341  1.1.1.2  christos 
   3342  1.1.1.2  christos #undef FLD
   3343  1.1.1.2  christos }
   3344  1.1.1.2  christos   NEXT (vpc);
   3345  1.1.1.2  christos 
   3346  1.1.1.2  christos   CASE (sem, INSN_LF_SFULE_S) : /* lf.sfule.s $rASF,$rBSF */
   3347  1.1.1.2  christos {
   3348  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3349  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3350  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3351  1.1.1.2  christos   int UNUSED written = 0;
   3352  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3353  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3354  1.1.1.2  christos 
   3355  1.1.1.2  christos   {
   3356  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))));
   3357  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3358  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3359  1.1.1.2  christos   }
   3360  1.1.1.2  christos 
   3361  1.1.1.2  christos #undef FLD
   3362  1.1.1.2  christos }
   3363  1.1.1.2  christos   NEXT (vpc);
   3364  1.1.1.2  christos 
   3365  1.1.1.2  christos   CASE (sem, INSN_LF_SFULE_D32) : /* lf.sfule.d $rAD32F,$rBD32F */
   3366  1.1.1.2  christos {
   3367  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3368  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3369  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3370  1.1.1.2  christos   int UNUSED written = 0;
   3371  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3372  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3373  1.1.1.2  christos 
   3374  1.1.1.2  christos   {
   3375  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))));
   3376  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3377  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3378  1.1.1.2  christos   }
   3379  1.1.1.2  christos 
   3380  1.1.1.2  christos #undef FLD
   3381  1.1.1.2  christos }
   3382  1.1.1.2  christos   NEXT (vpc);
   3383  1.1.1.2  christos 
   3384  1.1.1.2  christos   CASE (sem, INSN_LF_SFUN_S) : /* lf.sfun.s $rASF,$rBSF */
   3385  1.1.1.2  christos {
   3386  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3387  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3388  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3389  1.1.1.2  christos   int UNUSED written = 0;
   3390  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3391  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3392  1.1.1.2  christos 
   3393  1.1.1.2  christos   {
   3394  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)));
   3395  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3396  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3397  1.1.1.2  christos   }
   3398  1.1.1.2  christos 
   3399  1.1.1.2  christos #undef FLD
   3400  1.1.1.2  christos }
   3401  1.1.1.2  christos   NEXT (vpc);
   3402  1.1.1.2  christos 
   3403  1.1.1.2  christos   CASE (sem, INSN_LF_SFUN_D32) : /* lf.sfun.d $rAD32F,$rBD32F */
   3404  1.1.1.2  christos {
   3405  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3406  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3407  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3408  1.1.1.2  christos   int UNUSED written = 0;
   3409  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3410  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3411  1.1.1.2  christos 
   3412  1.1.1.2  christos   {
   3413  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)));
   3414  1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3415  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3416  1.1.1.2  christos   }
   3417  1.1.1.2  christos 
   3418  1.1.1.2  christos #undef FLD
   3419  1.1.1.2  christos }
   3420  1.1.1.2  christos   NEXT (vpc);
   3421  1.1.1.2  christos 
   3422      1.1  christos   CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
   3423      1.1  christos {
   3424      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3425      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3426      1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3427      1.1  christos   int UNUSED written = 0;
   3428      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3429      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3430      1.1  christos 
   3431      1.1  christos   {
   3432      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)));
   3433      1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   3434      1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   3435      1.1  christos   }
   3436      1.1  christos 
   3437      1.1  christos #undef FLD
   3438      1.1  christos }
   3439      1.1  christos   NEXT (vpc);
   3440      1.1  christos 
   3441  1.1.1.2  christos   CASE (sem, INSN_LF_MADD_D32) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
   3442  1.1.1.2  christos {
   3443  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3444  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3445  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3446  1.1.1.2  christos   int UNUSED written = 0;
   3447  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3448  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3449  1.1.1.2  christos 
   3450  1.1.1.2  christos   {
   3451  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)));
   3452  1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   3453  1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   3454  1.1.1.2  christos   }
   3455  1.1.1.2  christos 
   3456  1.1.1.2  christos #undef FLD
   3457  1.1.1.2  christos }
   3458  1.1.1.2  christos   NEXT (vpc);
   3459  1.1.1.2  christos 
   3460      1.1  christos   CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
   3461      1.1  christos {
   3462      1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3463      1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3464      1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3465      1.1  christos   int UNUSED written = 0;
   3466      1.1  christos   IADDR UNUSED pc = abuf->addr;
   3467      1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3468      1.1  christos 
   3469      1.1  christos ((void) 0); /*nop*/
   3470      1.1  christos 
   3471      1.1  christos #undef FLD
   3472      1.1  christos }
   3473      1.1  christos   NEXT (vpc);
   3474      1.1  christos 
   3475  1.1.1.2  christos   CASE (sem, INSN_LF_CUST1_D32) : /* lf.cust1.d */
   3476  1.1.1.2  christos {
   3477  1.1.1.2  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3478  1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3479  1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3480  1.1.1.2  christos   int UNUSED written = 0;
   3481  1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3482  1.1.1.2  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3483  1.1.1.2  christos 
   3484  1.1.1.2  christos ((void) 0); /*nop*/
   3485  1.1.1.2  christos 
   3486  1.1.1.2  christos #undef FLD
   3487  1.1.1.2  christos }
   3488  1.1.1.2  christos   NEXT (vpc);
   3489  1.1.1.2  christos 
   3490      1.1  christos 
   3491      1.1  christos     }
   3492      1.1  christos   ENDSWITCH (sem) /* End of semantic switch.  */
   3493      1.1  christos 
   3494      1.1  christos   /* At this point `vpc' contains the next insn to execute.  */
   3495      1.1  christos }
   3496      1.1  christos 
   3497      1.1  christos #undef DEFINE_SWITCH
   3498      1.1  christos #endif /* DEFINE_SWITCH */
   3499