Home | History | Annotate | Line # | Download | only in iq2000
sem-switch.c revision 1.1
      1  1.1  christos /* Simulator instruction semantics for iq2000bf.
      2  1.1  christos 
      3  1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      4  1.1  christos 
      5  1.1  christos Copyright 1996-2014 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, see <http://www.gnu.org/licenses/>.
     21  1.1  christos 
     22  1.1  christos */
     23  1.1  christos 
     24  1.1  christos #ifdef DEFINE_LABELS
     25  1.1  christos 
     26  1.1  christos   /* The labels have the case they have because the enum of insn types
     27  1.1  christos      is all uppercase and in the non-stdc case the insn symbol is built
     28  1.1  christos      into the enum name.  */
     29  1.1  christos 
     30  1.1  christos   static struct {
     31  1.1  christos     int index;
     32  1.1  christos     void *label;
     33  1.1  christos   } labels[] = {
     34  1.1  christos     { IQ2000BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
     35  1.1  christos     { IQ2000BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
     36  1.1  christos     { IQ2000BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
     37  1.1  christos     { IQ2000BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
     38  1.1  christos     { IQ2000BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
     39  1.1  christos     { IQ2000BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
     40  1.1  christos     { IQ2000BF_INSN_ADD, && case_sem_INSN_ADD },
     41  1.1  christos     { IQ2000BF_INSN_ADDI, && case_sem_INSN_ADDI },
     42  1.1  christos     { IQ2000BF_INSN_ADDIU, && case_sem_INSN_ADDIU },
     43  1.1  christos     { IQ2000BF_INSN_ADDU, && case_sem_INSN_ADDU },
     44  1.1  christos     { IQ2000BF_INSN_ADO16, && case_sem_INSN_ADO16 },
     45  1.1  christos     { IQ2000BF_INSN_AND, && case_sem_INSN_AND },
     46  1.1  christos     { IQ2000BF_INSN_ANDI, && case_sem_INSN_ANDI },
     47  1.1  christos     { IQ2000BF_INSN_ANDOI, && case_sem_INSN_ANDOI },
     48  1.1  christos     { IQ2000BF_INSN_NOR, && case_sem_INSN_NOR },
     49  1.1  christos     { IQ2000BF_INSN_OR, && case_sem_INSN_OR },
     50  1.1  christos     { IQ2000BF_INSN_ORI, && case_sem_INSN_ORI },
     51  1.1  christos     { IQ2000BF_INSN_RAM, && case_sem_INSN_RAM },
     52  1.1  christos     { IQ2000BF_INSN_SLL, && case_sem_INSN_SLL },
     53  1.1  christos     { IQ2000BF_INSN_SLLV, && case_sem_INSN_SLLV },
     54  1.1  christos     { IQ2000BF_INSN_SLMV, && case_sem_INSN_SLMV },
     55  1.1  christos     { IQ2000BF_INSN_SLT, && case_sem_INSN_SLT },
     56  1.1  christos     { IQ2000BF_INSN_SLTI, && case_sem_INSN_SLTI },
     57  1.1  christos     { IQ2000BF_INSN_SLTIU, && case_sem_INSN_SLTIU },
     58  1.1  christos     { IQ2000BF_INSN_SLTU, && case_sem_INSN_SLTU },
     59  1.1  christos     { IQ2000BF_INSN_SRA, && case_sem_INSN_SRA },
     60  1.1  christos     { IQ2000BF_INSN_SRAV, && case_sem_INSN_SRAV },
     61  1.1  christos     { IQ2000BF_INSN_SRL, && case_sem_INSN_SRL },
     62  1.1  christos     { IQ2000BF_INSN_SRLV, && case_sem_INSN_SRLV },
     63  1.1  christos     { IQ2000BF_INSN_SRMV, && case_sem_INSN_SRMV },
     64  1.1  christos     { IQ2000BF_INSN_SUB, && case_sem_INSN_SUB },
     65  1.1  christos     { IQ2000BF_INSN_SUBU, && case_sem_INSN_SUBU },
     66  1.1  christos     { IQ2000BF_INSN_XOR, && case_sem_INSN_XOR },
     67  1.1  christos     { IQ2000BF_INSN_XORI, && case_sem_INSN_XORI },
     68  1.1  christos     { IQ2000BF_INSN_BBI, && case_sem_INSN_BBI },
     69  1.1  christos     { IQ2000BF_INSN_BBIN, && case_sem_INSN_BBIN },
     70  1.1  christos     { IQ2000BF_INSN_BBV, && case_sem_INSN_BBV },
     71  1.1  christos     { IQ2000BF_INSN_BBVN, && case_sem_INSN_BBVN },
     72  1.1  christos     { IQ2000BF_INSN_BEQ, && case_sem_INSN_BEQ },
     73  1.1  christos     { IQ2000BF_INSN_BEQL, && case_sem_INSN_BEQL },
     74  1.1  christos     { IQ2000BF_INSN_BGEZ, && case_sem_INSN_BGEZ },
     75  1.1  christos     { IQ2000BF_INSN_BGEZAL, && case_sem_INSN_BGEZAL },
     76  1.1  christos     { IQ2000BF_INSN_BGEZALL, && case_sem_INSN_BGEZALL },
     77  1.1  christos     { IQ2000BF_INSN_BGEZL, && case_sem_INSN_BGEZL },
     78  1.1  christos     { IQ2000BF_INSN_BLTZ, && case_sem_INSN_BLTZ },
     79  1.1  christos     { IQ2000BF_INSN_BLTZL, && case_sem_INSN_BLTZL },
     80  1.1  christos     { IQ2000BF_INSN_BLTZAL, && case_sem_INSN_BLTZAL },
     81  1.1  christos     { IQ2000BF_INSN_BLTZALL, && case_sem_INSN_BLTZALL },
     82  1.1  christos     { IQ2000BF_INSN_BMB0, && case_sem_INSN_BMB0 },
     83  1.1  christos     { IQ2000BF_INSN_BMB1, && case_sem_INSN_BMB1 },
     84  1.1  christos     { IQ2000BF_INSN_BMB2, && case_sem_INSN_BMB2 },
     85  1.1  christos     { IQ2000BF_INSN_BMB3, && case_sem_INSN_BMB3 },
     86  1.1  christos     { IQ2000BF_INSN_BNE, && case_sem_INSN_BNE },
     87  1.1  christos     { IQ2000BF_INSN_BNEL, && case_sem_INSN_BNEL },
     88  1.1  christos     { IQ2000BF_INSN_JALR, && case_sem_INSN_JALR },
     89  1.1  christos     { IQ2000BF_INSN_JR, && case_sem_INSN_JR },
     90  1.1  christos     { IQ2000BF_INSN_LB, && case_sem_INSN_LB },
     91  1.1  christos     { IQ2000BF_INSN_LBU, && case_sem_INSN_LBU },
     92  1.1  christos     { IQ2000BF_INSN_LH, && case_sem_INSN_LH },
     93  1.1  christos     { IQ2000BF_INSN_LHU, && case_sem_INSN_LHU },
     94  1.1  christos     { IQ2000BF_INSN_LUI, && case_sem_INSN_LUI },
     95  1.1  christos     { IQ2000BF_INSN_LW, && case_sem_INSN_LW },
     96  1.1  christos     { IQ2000BF_INSN_SB, && case_sem_INSN_SB },
     97  1.1  christos     { IQ2000BF_INSN_SH, && case_sem_INSN_SH },
     98  1.1  christos     { IQ2000BF_INSN_SW, && case_sem_INSN_SW },
     99  1.1  christos     { IQ2000BF_INSN_BREAK, && case_sem_INSN_BREAK },
    100  1.1  christos     { IQ2000BF_INSN_SYSCALL, && case_sem_INSN_SYSCALL },
    101  1.1  christos     { IQ2000BF_INSN_ANDOUI, && case_sem_INSN_ANDOUI },
    102  1.1  christos     { IQ2000BF_INSN_ORUI, && case_sem_INSN_ORUI },
    103  1.1  christos     { IQ2000BF_INSN_BGTZ, && case_sem_INSN_BGTZ },
    104  1.1  christos     { IQ2000BF_INSN_BGTZL, && case_sem_INSN_BGTZL },
    105  1.1  christos     { IQ2000BF_INSN_BLEZ, && case_sem_INSN_BLEZ },
    106  1.1  christos     { IQ2000BF_INSN_BLEZL, && case_sem_INSN_BLEZL },
    107  1.1  christos     { IQ2000BF_INSN_MRGB, && case_sem_INSN_MRGB },
    108  1.1  christos     { IQ2000BF_INSN_BCTXT, && case_sem_INSN_BCTXT },
    109  1.1  christos     { IQ2000BF_INSN_BC0F, && case_sem_INSN_BC0F },
    110  1.1  christos     { IQ2000BF_INSN_BC0FL, && case_sem_INSN_BC0FL },
    111  1.1  christos     { IQ2000BF_INSN_BC3F, && case_sem_INSN_BC3F },
    112  1.1  christos     { IQ2000BF_INSN_BC3FL, && case_sem_INSN_BC3FL },
    113  1.1  christos     { IQ2000BF_INSN_BC0T, && case_sem_INSN_BC0T },
    114  1.1  christos     { IQ2000BF_INSN_BC0TL, && case_sem_INSN_BC0TL },
    115  1.1  christos     { IQ2000BF_INSN_BC3T, && case_sem_INSN_BC3T },
    116  1.1  christos     { IQ2000BF_INSN_BC3TL, && case_sem_INSN_BC3TL },
    117  1.1  christos     { IQ2000BF_INSN_CFC0, && case_sem_INSN_CFC0 },
    118  1.1  christos     { IQ2000BF_INSN_CFC1, && case_sem_INSN_CFC1 },
    119  1.1  christos     { IQ2000BF_INSN_CFC2, && case_sem_INSN_CFC2 },
    120  1.1  christos     { IQ2000BF_INSN_CFC3, && case_sem_INSN_CFC3 },
    121  1.1  christos     { IQ2000BF_INSN_CHKHDR, && case_sem_INSN_CHKHDR },
    122  1.1  christos     { IQ2000BF_INSN_CTC0, && case_sem_INSN_CTC0 },
    123  1.1  christos     { IQ2000BF_INSN_CTC1, && case_sem_INSN_CTC1 },
    124  1.1  christos     { IQ2000BF_INSN_CTC2, && case_sem_INSN_CTC2 },
    125  1.1  christos     { IQ2000BF_INSN_CTC3, && case_sem_INSN_CTC3 },
    126  1.1  christos     { IQ2000BF_INSN_JCR, && case_sem_INSN_JCR },
    127  1.1  christos     { IQ2000BF_INSN_LUC32, && case_sem_INSN_LUC32 },
    128  1.1  christos     { IQ2000BF_INSN_LUC32L, && case_sem_INSN_LUC32L },
    129  1.1  christos     { IQ2000BF_INSN_LUC64, && case_sem_INSN_LUC64 },
    130  1.1  christos     { IQ2000BF_INSN_LUC64L, && case_sem_INSN_LUC64L },
    131  1.1  christos     { IQ2000BF_INSN_LUK, && case_sem_INSN_LUK },
    132  1.1  christos     { IQ2000BF_INSN_LULCK, && case_sem_INSN_LULCK },
    133  1.1  christos     { IQ2000BF_INSN_LUM32, && case_sem_INSN_LUM32 },
    134  1.1  christos     { IQ2000BF_INSN_LUM32L, && case_sem_INSN_LUM32L },
    135  1.1  christos     { IQ2000BF_INSN_LUM64, && case_sem_INSN_LUM64 },
    136  1.1  christos     { IQ2000BF_INSN_LUM64L, && case_sem_INSN_LUM64L },
    137  1.1  christos     { IQ2000BF_INSN_LUR, && case_sem_INSN_LUR },
    138  1.1  christos     { IQ2000BF_INSN_LURL, && case_sem_INSN_LURL },
    139  1.1  christos     { IQ2000BF_INSN_LUULCK, && case_sem_INSN_LUULCK },
    140  1.1  christos     { IQ2000BF_INSN_MFC0, && case_sem_INSN_MFC0 },
    141  1.1  christos     { IQ2000BF_INSN_MFC1, && case_sem_INSN_MFC1 },
    142  1.1  christos     { IQ2000BF_INSN_MFC2, && case_sem_INSN_MFC2 },
    143  1.1  christos     { IQ2000BF_INSN_MFC3, && case_sem_INSN_MFC3 },
    144  1.1  christos     { IQ2000BF_INSN_MTC0, && case_sem_INSN_MTC0 },
    145  1.1  christos     { IQ2000BF_INSN_MTC1, && case_sem_INSN_MTC1 },
    146  1.1  christos     { IQ2000BF_INSN_MTC2, && case_sem_INSN_MTC2 },
    147  1.1  christos     { IQ2000BF_INSN_MTC3, && case_sem_INSN_MTC3 },
    148  1.1  christos     { IQ2000BF_INSN_PKRL, && case_sem_INSN_PKRL },
    149  1.1  christos     { IQ2000BF_INSN_PKRLR1, && case_sem_INSN_PKRLR1 },
    150  1.1  christos     { IQ2000BF_INSN_PKRLR30, && case_sem_INSN_PKRLR30 },
    151  1.1  christos     { IQ2000BF_INSN_RB, && case_sem_INSN_RB },
    152  1.1  christos     { IQ2000BF_INSN_RBR1, && case_sem_INSN_RBR1 },
    153  1.1  christos     { IQ2000BF_INSN_RBR30, && case_sem_INSN_RBR30 },
    154  1.1  christos     { IQ2000BF_INSN_RFE, && case_sem_INSN_RFE },
    155  1.1  christos     { IQ2000BF_INSN_RX, && case_sem_INSN_RX },
    156  1.1  christos     { IQ2000BF_INSN_RXR1, && case_sem_INSN_RXR1 },
    157  1.1  christos     { IQ2000BF_INSN_RXR30, && case_sem_INSN_RXR30 },
    158  1.1  christos     { IQ2000BF_INSN_SLEEP, && case_sem_INSN_SLEEP },
    159  1.1  christos     { IQ2000BF_INSN_SRRD, && case_sem_INSN_SRRD },
    160  1.1  christos     { IQ2000BF_INSN_SRRDL, && case_sem_INSN_SRRDL },
    161  1.1  christos     { IQ2000BF_INSN_SRULCK, && case_sem_INSN_SRULCK },
    162  1.1  christos     { IQ2000BF_INSN_SRWR, && case_sem_INSN_SRWR },
    163  1.1  christos     { IQ2000BF_INSN_SRWRU, && case_sem_INSN_SRWRU },
    164  1.1  christos     { IQ2000BF_INSN_TRAPQFL, && case_sem_INSN_TRAPQFL },
    165  1.1  christos     { IQ2000BF_INSN_TRAPQNE, && case_sem_INSN_TRAPQNE },
    166  1.1  christos     { IQ2000BF_INSN_TRAPREL, && case_sem_INSN_TRAPREL },
    167  1.1  christos     { IQ2000BF_INSN_WB, && case_sem_INSN_WB },
    168  1.1  christos     { IQ2000BF_INSN_WBU, && case_sem_INSN_WBU },
    169  1.1  christos     { IQ2000BF_INSN_WBR1, && case_sem_INSN_WBR1 },
    170  1.1  christos     { IQ2000BF_INSN_WBR1U, && case_sem_INSN_WBR1U },
    171  1.1  christos     { IQ2000BF_INSN_WBR30, && case_sem_INSN_WBR30 },
    172  1.1  christos     { IQ2000BF_INSN_WBR30U, && case_sem_INSN_WBR30U },
    173  1.1  christos     { IQ2000BF_INSN_WX, && case_sem_INSN_WX },
    174  1.1  christos     { IQ2000BF_INSN_WXU, && case_sem_INSN_WXU },
    175  1.1  christos     { IQ2000BF_INSN_WXR1, && case_sem_INSN_WXR1 },
    176  1.1  christos     { IQ2000BF_INSN_WXR1U, && case_sem_INSN_WXR1U },
    177  1.1  christos     { IQ2000BF_INSN_WXR30, && case_sem_INSN_WXR30 },
    178  1.1  christos     { IQ2000BF_INSN_WXR30U, && case_sem_INSN_WXR30U },
    179  1.1  christos     { IQ2000BF_INSN_LDW, && case_sem_INSN_LDW },
    180  1.1  christos     { IQ2000BF_INSN_SDW, && case_sem_INSN_SDW },
    181  1.1  christos     { IQ2000BF_INSN_J, && case_sem_INSN_J },
    182  1.1  christos     { IQ2000BF_INSN_JAL, && case_sem_INSN_JAL },
    183  1.1  christos     { IQ2000BF_INSN_BMB, && case_sem_INSN_BMB },
    184  1.1  christos     { 0, 0 }
    185  1.1  christos   };
    186  1.1  christos   int i;
    187  1.1  christos 
    188  1.1  christos   for (i = 0; labels[i].label != 0; ++i)
    189  1.1  christos     {
    190  1.1  christos #if FAST_P
    191  1.1  christos       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
    192  1.1  christos #else
    193  1.1  christos       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
    194  1.1  christos #endif
    195  1.1  christos     }
    196  1.1  christos 
    197  1.1  christos #undef DEFINE_LABELS
    198  1.1  christos #endif /* DEFINE_LABELS */
    199  1.1  christos 
    200  1.1  christos #ifdef DEFINE_SWITCH
    201  1.1  christos 
    202  1.1  christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
    203  1.1  christos    off frills like tracing and profiling.  */
    204  1.1  christos /* FIXME: A better way would be to have TRACE_RESULT check for something
    205  1.1  christos    that can cause it to be optimized out.  Another way would be to emit
    206  1.1  christos    special handlers into the instruction "stream".  */
    207  1.1  christos 
    208  1.1  christos #if FAST_P
    209  1.1  christos #undef TRACE_RESULT
    210  1.1  christos #define TRACE_RESULT(cpu, abuf, name, type, val)
    211  1.1  christos #endif
    212  1.1  christos 
    213  1.1  christos #undef GET_ATTR
    214  1.1  christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
    215  1.1  christos 
    216  1.1  christos {
    217  1.1  christos 
    218  1.1  christos #if WITH_SCACHE_PBB
    219  1.1  christos 
    220  1.1  christos /* Branch to next handler without going around main loop.  */
    221  1.1  christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
    222  1.1  christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
    223  1.1  christos 
    224  1.1  christos #else /* ! WITH_SCACHE_PBB */
    225  1.1  christos 
    226  1.1  christos #define NEXT(vpc) BREAK (sem)
    227  1.1  christos #ifdef __GNUC__
    228  1.1  christos #if FAST_P
    229  1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
    230  1.1  christos #else
    231  1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
    232  1.1  christos #endif
    233  1.1  christos #else
    234  1.1  christos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
    235  1.1  christos #endif
    236  1.1  christos 
    237  1.1  christos #endif /* ! WITH_SCACHE_PBB */
    238  1.1  christos 
    239  1.1  christos     {
    240  1.1  christos 
    241  1.1  christos   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
    242  1.1  christos {
    243  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    244  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    245  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    246  1.1  christos   int UNUSED written = 0;
    247  1.1  christos   IADDR UNUSED pc = abuf->addr;
    248  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    249  1.1  christos 
    250  1.1  christos   {
    251  1.1  christos     /* Update the recorded pc in the cpu state struct.
    252  1.1  christos        Only necessary for WITH_SCACHE case, but to avoid the
    253  1.1  christos        conditional compilation ....  */
    254  1.1  christos     SET_H_PC (pc);
    255  1.1  christos     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
    256  1.1  christos        using the default-insn-bitsize spec.  When executing insns in parallel
    257  1.1  christos        we may want to queue the fault and continue execution.  */
    258  1.1  christos     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    259  1.1  christos     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
    260  1.1  christos   }
    261  1.1  christos 
    262  1.1  christos #undef FLD
    263  1.1  christos }
    264  1.1  christos   NEXT (vpc);
    265  1.1  christos 
    266  1.1  christos   CASE (sem, INSN_X_AFTER) : /* --after-- */
    267  1.1  christos {
    268  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    269  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    270  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    271  1.1  christos   int UNUSED written = 0;
    272  1.1  christos   IADDR UNUSED pc = abuf->addr;
    273  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    274  1.1  christos 
    275  1.1  christos   {
    276  1.1  christos #if WITH_SCACHE_PBB_IQ2000BF
    277  1.1  christos     iq2000bf_pbb_after (current_cpu, sem_arg);
    278  1.1  christos #endif
    279  1.1  christos   }
    280  1.1  christos 
    281  1.1  christos #undef FLD
    282  1.1  christos }
    283  1.1  christos   NEXT (vpc);
    284  1.1  christos 
    285  1.1  christos   CASE (sem, INSN_X_BEFORE) : /* --before-- */
    286  1.1  christos {
    287  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    288  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    289  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    290  1.1  christos   int UNUSED written = 0;
    291  1.1  christos   IADDR UNUSED pc = abuf->addr;
    292  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    293  1.1  christos 
    294  1.1  christos   {
    295  1.1  christos #if WITH_SCACHE_PBB_IQ2000BF
    296  1.1  christos     iq2000bf_pbb_before (current_cpu, sem_arg);
    297  1.1  christos #endif
    298  1.1  christos   }
    299  1.1  christos 
    300  1.1  christos #undef FLD
    301  1.1  christos }
    302  1.1  christos   NEXT (vpc);
    303  1.1  christos 
    304  1.1  christos   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
    305  1.1  christos {
    306  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    307  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    308  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    309  1.1  christos   int UNUSED written = 0;
    310  1.1  christos   IADDR UNUSED pc = abuf->addr;
    311  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    312  1.1  christos 
    313  1.1  christos   {
    314  1.1  christos #if WITH_SCACHE_PBB_IQ2000BF
    315  1.1  christos #ifdef DEFINE_SWITCH
    316  1.1  christos     vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg,
    317  1.1  christos 			       pbb_br_type, pbb_br_npc);
    318  1.1  christos     BREAK (sem);
    319  1.1  christos #else
    320  1.1  christos     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
    321  1.1  christos     vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg,
    322  1.1  christos 			       CPU_PBB_BR_TYPE (current_cpu),
    323  1.1  christos 			       CPU_PBB_BR_NPC (current_cpu));
    324  1.1  christos #endif
    325  1.1  christos #endif
    326  1.1  christos   }
    327  1.1  christos 
    328  1.1  christos #undef FLD
    329  1.1  christos }
    330  1.1  christos   NEXT (vpc);
    331  1.1  christos 
    332  1.1  christos   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
    333  1.1  christos {
    334  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    335  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    336  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    337  1.1  christos   int UNUSED written = 0;
    338  1.1  christos   IADDR UNUSED pc = abuf->addr;
    339  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    340  1.1  christos 
    341  1.1  christos   {
    342  1.1  christos #if WITH_SCACHE_PBB_IQ2000BF
    343  1.1  christos     vpc = iq2000bf_pbb_chain (current_cpu, sem_arg);
    344  1.1  christos #ifdef DEFINE_SWITCH
    345  1.1  christos     BREAK (sem);
    346  1.1  christos #endif
    347  1.1  christos #endif
    348  1.1  christos   }
    349  1.1  christos 
    350  1.1  christos #undef FLD
    351  1.1  christos }
    352  1.1  christos   NEXT (vpc);
    353  1.1  christos 
    354  1.1  christos   CASE (sem, INSN_X_BEGIN) : /* --begin-- */
    355  1.1  christos {
    356  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    357  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    358  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    359  1.1  christos   int UNUSED written = 0;
    360  1.1  christos   IADDR UNUSED pc = abuf->addr;
    361  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    362  1.1  christos 
    363  1.1  christos   {
    364  1.1  christos #if WITH_SCACHE_PBB_IQ2000BF
    365  1.1  christos #if defined DEFINE_SWITCH || defined FAST_P
    366  1.1  christos     /* In the switch case FAST_P is a constant, allowing several optimizations
    367  1.1  christos        in any called inline functions.  */
    368  1.1  christos     vpc = iq2000bf_pbb_begin (current_cpu, FAST_P);
    369  1.1  christos #else
    370  1.1  christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
    371  1.1  christos     vpc = iq2000bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
    372  1.1  christos #else
    373  1.1  christos     vpc = iq2000bf_pbb_begin (current_cpu, 0);
    374  1.1  christos #endif
    375  1.1  christos #endif
    376  1.1  christos #endif
    377  1.1  christos   }
    378  1.1  christos 
    379  1.1  christos #undef FLD
    380  1.1  christos }
    381  1.1  christos   NEXT (vpc);
    382  1.1  christos 
    383  1.1  christos   CASE (sem, INSN_ADD) : /* add $rd,$rs,$rt */
    384  1.1  christos {
    385  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    386  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    387  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    388  1.1  christos   int UNUSED written = 0;
    389  1.1  christos   IADDR UNUSED pc = abuf->addr;
    390  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    391  1.1  christos 
    392  1.1  christos   {
    393  1.1  christos     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    394  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    395  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    396  1.1  christos   }
    397  1.1  christos 
    398  1.1  christos #undef FLD
    399  1.1  christos }
    400  1.1  christos   NEXT (vpc);
    401  1.1  christos 
    402  1.1  christos   CASE (sem, INSN_ADDI) : /* addi $rt,$rs,$lo16 */
    403  1.1  christos {
    404  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    405  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    406  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    407  1.1  christos   int UNUSED written = 0;
    408  1.1  christos   IADDR UNUSED pc = abuf->addr;
    409  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    410  1.1  christos 
    411  1.1  christos   {
    412  1.1  christos     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))));
    413  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    414  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    415  1.1  christos   }
    416  1.1  christos 
    417  1.1  christos #undef FLD
    418  1.1  christos }
    419  1.1  christos   NEXT (vpc);
    420  1.1  christos 
    421  1.1  christos   CASE (sem, INSN_ADDIU) : /* addiu $rt,$rs,$lo16 */
    422  1.1  christos {
    423  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    424  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    425  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    426  1.1  christos   int UNUSED written = 0;
    427  1.1  christos   IADDR UNUSED pc = abuf->addr;
    428  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    429  1.1  christos 
    430  1.1  christos   {
    431  1.1  christos     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))));
    432  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    433  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    434  1.1  christos   }
    435  1.1  christos 
    436  1.1  christos #undef FLD
    437  1.1  christos }
    438  1.1  christos   NEXT (vpc);
    439  1.1  christos 
    440  1.1  christos   CASE (sem, INSN_ADDU) : /* addu $rd,$rs,$rt */
    441  1.1  christos {
    442  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    443  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    444  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    445  1.1  christos   int UNUSED written = 0;
    446  1.1  christos   IADDR UNUSED pc = abuf->addr;
    447  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    448  1.1  christos 
    449  1.1  christos   {
    450  1.1  christos     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    451  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    452  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    453  1.1  christos   }
    454  1.1  christos 
    455  1.1  christos #undef FLD
    456  1.1  christos }
    457  1.1  christos   NEXT (vpc);
    458  1.1  christos 
    459  1.1  christos   CASE (sem, INSN_ADO16) : /* ado16 $rd,$rs,$rt */
    460  1.1  christos {
    461  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    462  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    463  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    464  1.1  christos   int UNUSED written = 0;
    465  1.1  christos   IADDR UNUSED pc = abuf->addr;
    466  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    467  1.1  christos 
    468  1.1  christos {
    469  1.1  christos   HI tmp_high;
    470  1.1  christos   HI tmp_low;
    471  1.1  christos   tmp_low = ADDHI (ANDHI (GET_H_GR (FLD (f_rs)), 65535), ANDHI (GET_H_GR (FLD (f_rt)), 65535));
    472  1.1  christos   tmp_high = ADDHI (SRLSI (GET_H_GR (FLD (f_rs)), 16), SRLSI (GET_H_GR (FLD (f_rt)), 16));
    473  1.1  christos   {
    474  1.1  christos     SI opval = ORSI (SLLSI (tmp_high, 16), tmp_low);
    475  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    476  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    477  1.1  christos   }
    478  1.1  christos }
    479  1.1  christos 
    480  1.1  christos #undef FLD
    481  1.1  christos }
    482  1.1  christos   NEXT (vpc);
    483  1.1  christos 
    484  1.1  christos   CASE (sem, INSN_AND) : /* and $rd,$rs,$rt */
    485  1.1  christos {
    486  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    487  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    488  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    489  1.1  christos   int UNUSED written = 0;
    490  1.1  christos   IADDR UNUSED pc = abuf->addr;
    491  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    492  1.1  christos 
    493  1.1  christos   {
    494  1.1  christos     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    495  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    496  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    497  1.1  christos   }
    498  1.1  christos 
    499  1.1  christos #undef FLD
    500  1.1  christos }
    501  1.1  christos   NEXT (vpc);
    502  1.1  christos 
    503  1.1  christos   CASE (sem, INSN_ANDI) : /* andi $rt,$rs,$lo16 */
    504  1.1  christos {
    505  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    506  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    507  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    508  1.1  christos   int UNUSED written = 0;
    509  1.1  christos   IADDR UNUSED pc = abuf->addr;
    510  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    511  1.1  christos 
    512  1.1  christos   {
    513  1.1  christos     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
    514  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    515  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    516  1.1  christos   }
    517  1.1  christos 
    518  1.1  christos #undef FLD
    519  1.1  christos }
    520  1.1  christos   NEXT (vpc);
    521  1.1  christos 
    522  1.1  christos   CASE (sem, INSN_ANDOI) : /* andoi $rt,$rs,$lo16 */
    523  1.1  christos {
    524  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    525  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    526  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    527  1.1  christos   int UNUSED written = 0;
    528  1.1  christos   IADDR UNUSED pc = abuf->addr;
    529  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    530  1.1  christos 
    531  1.1  christos   {
    532  1.1  christos     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm)))));
    533  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    534  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    535  1.1  christos   }
    536  1.1  christos 
    537  1.1  christos #undef FLD
    538  1.1  christos }
    539  1.1  christos   NEXT (vpc);
    540  1.1  christos 
    541  1.1  christos   CASE (sem, INSN_NOR) : /* nor $rd,$rs,$rt */
    542  1.1  christos {
    543  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    544  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    545  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    546  1.1  christos   int UNUSED written = 0;
    547  1.1  christos   IADDR UNUSED pc = abuf->addr;
    548  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    549  1.1  christos 
    550  1.1  christos   {
    551  1.1  christos     SI opval = INVSI (ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))));
    552  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    553  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    554  1.1  christos   }
    555  1.1  christos 
    556  1.1  christos #undef FLD
    557  1.1  christos }
    558  1.1  christos   NEXT (vpc);
    559  1.1  christos 
    560  1.1  christos   CASE (sem, INSN_OR) : /* or $rd,$rs,$rt */
    561  1.1  christos {
    562  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    563  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    564  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    565  1.1  christos   int UNUSED written = 0;
    566  1.1  christos   IADDR UNUSED pc = abuf->addr;
    567  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    568  1.1  christos 
    569  1.1  christos   {
    570  1.1  christos     SI opval = ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    571  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    572  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    573  1.1  christos   }
    574  1.1  christos 
    575  1.1  christos #undef FLD
    576  1.1  christos }
    577  1.1  christos   NEXT (vpc);
    578  1.1  christos 
    579  1.1  christos   CASE (sem, INSN_ORI) : /* ori $rt,$rs,$lo16 */
    580  1.1  christos {
    581  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    582  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    583  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    584  1.1  christos   int UNUSED written = 0;
    585  1.1  christos   IADDR UNUSED pc = abuf->addr;
    586  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    587  1.1  christos 
    588  1.1  christos   {
    589  1.1  christos     SI opval = ORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
    590  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    591  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    592  1.1  christos   }
    593  1.1  christos 
    594  1.1  christos #undef FLD
    595  1.1  christos }
    596  1.1  christos   NEXT (vpc);
    597  1.1  christos 
    598  1.1  christos   CASE (sem, INSN_RAM) : /* ram $rd,$rt,$shamt,$maskl,$maskr */
    599  1.1  christos {
    600  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    601  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    602  1.1  christos #define FLD(f) abuf->fields.sfmt_ram.f
    603  1.1  christos   int UNUSED written = 0;
    604  1.1  christos   IADDR UNUSED pc = abuf->addr;
    605  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    606  1.1  christos 
    607  1.1  christos {
    608  1.1  christos   {
    609  1.1  christos     SI opval = RORSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
    610  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    611  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    612  1.1  christos   }
    613  1.1  christos   {
    614  1.1  christos     SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SRLSI (0xffffffff, FLD (f_maskl)));
    615  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    616  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    617  1.1  christos   }
    618  1.1  christos   {
    619  1.1  christos     SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SLLSI (0xffffffff, FLD (f_rs)));
    620  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    621  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    622  1.1  christos   }
    623  1.1  christos }
    624  1.1  christos 
    625  1.1  christos #undef FLD
    626  1.1  christos }
    627  1.1  christos   NEXT (vpc);
    628  1.1  christos 
    629  1.1  christos   CASE (sem, INSN_SLL) : /* sll $rd,$rt,$shamt */
    630  1.1  christos {
    631  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    632  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    633  1.1  christos #define FLD(f) abuf->fields.sfmt_ram.f
    634  1.1  christos   int UNUSED written = 0;
    635  1.1  christos   IADDR UNUSED pc = abuf->addr;
    636  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    637  1.1  christos 
    638  1.1  christos   {
    639  1.1  christos     SI opval = SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
    640  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    641  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    642  1.1  christos   }
    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_SLLV) : /* sllv $rd,$rt,$rs */
    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_mrgb.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   {
    658  1.1  christos     SI opval = SLLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
    659  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    660  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    661  1.1  christos   }
    662  1.1  christos 
    663  1.1  christos #undef FLD
    664  1.1  christos }
    665  1.1  christos   NEXT (vpc);
    666  1.1  christos 
    667  1.1  christos   CASE (sem, INSN_SLMV) : /* slmv $rd,$rt,$rs,$shamt */
    668  1.1  christos {
    669  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    670  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    671  1.1  christos #define FLD(f) abuf->fields.sfmt_ram.f
    672  1.1  christos   int UNUSED written = 0;
    673  1.1  christos   IADDR UNUSED pc = abuf->addr;
    674  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    675  1.1  christos 
    676  1.1  christos   {
    677  1.1  christos     SI opval = ANDSI (SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs))));
    678  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    679  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    680  1.1  christos   }
    681  1.1  christos 
    682  1.1  christos #undef FLD
    683  1.1  christos }
    684  1.1  christos   NEXT (vpc);
    685  1.1  christos 
    686  1.1  christos   CASE (sem, INSN_SLT) : /* slt $rd,$rs,$rt */
    687  1.1  christos {
    688  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    689  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    690  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    691  1.1  christos   int UNUSED written = 0;
    692  1.1  christos   IADDR UNUSED pc = abuf->addr;
    693  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    694  1.1  christos 
    695  1.1  christos if (LTSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
    696  1.1  christos   {
    697  1.1  christos     SI opval = 1;
    698  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    699  1.1  christos     written |= (1 << 2);
    700  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    701  1.1  christos   }
    702  1.1  christos } else {
    703  1.1  christos   {
    704  1.1  christos     SI opval = 0;
    705  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    706  1.1  christos     written |= (1 << 2);
    707  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    708  1.1  christos   }
    709  1.1  christos }
    710  1.1  christos 
    711  1.1  christos   abuf->written = written;
    712  1.1  christos #undef FLD
    713  1.1  christos }
    714  1.1  christos   NEXT (vpc);
    715  1.1  christos 
    716  1.1  christos   CASE (sem, INSN_SLTI) : /* slti $rt,$rs,$imm */
    717  1.1  christos {
    718  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    719  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    720  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    721  1.1  christos   int UNUSED written = 0;
    722  1.1  christos   IADDR UNUSED pc = abuf->addr;
    723  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    724  1.1  christos 
    725  1.1  christos if (LTSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) {
    726  1.1  christos   {
    727  1.1  christos     SI opval = 1;
    728  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    729  1.1  christos     written |= (1 << 2);
    730  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    731  1.1  christos   }
    732  1.1  christos } else {
    733  1.1  christos   {
    734  1.1  christos     SI opval = 0;
    735  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    736  1.1  christos     written |= (1 << 2);
    737  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    738  1.1  christos   }
    739  1.1  christos }
    740  1.1  christos 
    741  1.1  christos   abuf->written = written;
    742  1.1  christos #undef FLD
    743  1.1  christos }
    744  1.1  christos   NEXT (vpc);
    745  1.1  christos 
    746  1.1  christos   CASE (sem, INSN_SLTIU) : /* sltiu $rt,$rs,$imm */
    747  1.1  christos {
    748  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    749  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    750  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    751  1.1  christos   int UNUSED written = 0;
    752  1.1  christos   IADDR UNUSED pc = abuf->addr;
    753  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    754  1.1  christos 
    755  1.1  christos if (LTUSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) {
    756  1.1  christos   {
    757  1.1  christos     SI opval = 1;
    758  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    759  1.1  christos     written |= (1 << 2);
    760  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    761  1.1  christos   }
    762  1.1  christos } else {
    763  1.1  christos   {
    764  1.1  christos     SI opval = 0;
    765  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    766  1.1  christos     written |= (1 << 2);
    767  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    768  1.1  christos   }
    769  1.1  christos }
    770  1.1  christos 
    771  1.1  christos   abuf->written = written;
    772  1.1  christos #undef FLD
    773  1.1  christos }
    774  1.1  christos   NEXT (vpc);
    775  1.1  christos 
    776  1.1  christos   CASE (sem, INSN_SLTU) : /* sltu $rd,$rs,$rt */
    777  1.1  christos {
    778  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    779  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    780  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    781  1.1  christos   int UNUSED written = 0;
    782  1.1  christos   IADDR UNUSED pc = abuf->addr;
    783  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    784  1.1  christos 
    785  1.1  christos if (LTUSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
    786  1.1  christos   {
    787  1.1  christos     SI opval = 1;
    788  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    789  1.1  christos     written |= (1 << 2);
    790  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    791  1.1  christos   }
    792  1.1  christos } else {
    793  1.1  christos   {
    794  1.1  christos     SI opval = 0;
    795  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    796  1.1  christos     written |= (1 << 2);
    797  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    798  1.1  christos   }
    799  1.1  christos }
    800  1.1  christos 
    801  1.1  christos   abuf->written = written;
    802  1.1  christos #undef FLD
    803  1.1  christos }
    804  1.1  christos   NEXT (vpc);
    805  1.1  christos 
    806  1.1  christos   CASE (sem, INSN_SRA) : /* sra $rd,$rt,$shamt */
    807  1.1  christos {
    808  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    809  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    810  1.1  christos #define FLD(f) abuf->fields.sfmt_ram.f
    811  1.1  christos   int UNUSED written = 0;
    812  1.1  christos   IADDR UNUSED pc = abuf->addr;
    813  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    814  1.1  christos 
    815  1.1  christos   {
    816  1.1  christos     SI opval = SRASI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
    817  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    818  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    819  1.1  christos   }
    820  1.1  christos 
    821  1.1  christos #undef FLD
    822  1.1  christos }
    823  1.1  christos   NEXT (vpc);
    824  1.1  christos 
    825  1.1  christos   CASE (sem, INSN_SRAV) : /* srav $rd,$rt,$rs */
    826  1.1  christos {
    827  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    828  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    829  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    830  1.1  christos   int UNUSED written = 0;
    831  1.1  christos   IADDR UNUSED pc = abuf->addr;
    832  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    833  1.1  christos 
    834  1.1  christos   {
    835  1.1  christos     SI opval = SRASI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
    836  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    837  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    838  1.1  christos   }
    839  1.1  christos 
    840  1.1  christos #undef FLD
    841  1.1  christos }
    842  1.1  christos   NEXT (vpc);
    843  1.1  christos 
    844  1.1  christos   CASE (sem, INSN_SRL) : /* srl $rd,$rt,$shamt */
    845  1.1  christos {
    846  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    847  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    848  1.1  christos #define FLD(f) abuf->fields.sfmt_ram.f
    849  1.1  christos   int UNUSED written = 0;
    850  1.1  christos   IADDR UNUSED pc = abuf->addr;
    851  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    852  1.1  christos 
    853  1.1  christos   {
    854  1.1  christos     SI opval = SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
    855  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    856  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    857  1.1  christos   }
    858  1.1  christos 
    859  1.1  christos #undef FLD
    860  1.1  christos }
    861  1.1  christos   NEXT (vpc);
    862  1.1  christos 
    863  1.1  christos   CASE (sem, INSN_SRLV) : /* srlv $rd,$rt,$rs */
    864  1.1  christos {
    865  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    866  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    867  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    868  1.1  christos   int UNUSED written = 0;
    869  1.1  christos   IADDR UNUSED pc = abuf->addr;
    870  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    871  1.1  christos 
    872  1.1  christos   {
    873  1.1  christos     SI opval = SRLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
    874  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    875  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    876  1.1  christos   }
    877  1.1  christos 
    878  1.1  christos #undef FLD
    879  1.1  christos }
    880  1.1  christos   NEXT (vpc);
    881  1.1  christos 
    882  1.1  christos   CASE (sem, INSN_SRMV) : /* srmv $rd,$rt,$rs,$shamt */
    883  1.1  christos {
    884  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    885  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    886  1.1  christos #define FLD(f) abuf->fields.sfmt_ram.f
    887  1.1  christos   int UNUSED written = 0;
    888  1.1  christos   IADDR UNUSED pc = abuf->addr;
    889  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    890  1.1  christos 
    891  1.1  christos   {
    892  1.1  christos     SI opval = ANDSI (SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs))));
    893  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    894  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    895  1.1  christos   }
    896  1.1  christos 
    897  1.1  christos #undef FLD
    898  1.1  christos }
    899  1.1  christos   NEXT (vpc);
    900  1.1  christos 
    901  1.1  christos   CASE (sem, INSN_SUB) : /* sub $rd,$rs,$rt */
    902  1.1  christos {
    903  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    904  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    905  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    906  1.1  christos   int UNUSED written = 0;
    907  1.1  christos   IADDR UNUSED pc = abuf->addr;
    908  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    909  1.1  christos 
    910  1.1  christos   {
    911  1.1  christos     SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    912  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    913  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    914  1.1  christos   }
    915  1.1  christos 
    916  1.1  christos #undef FLD
    917  1.1  christos }
    918  1.1  christos   NEXT (vpc);
    919  1.1  christos 
    920  1.1  christos   CASE (sem, INSN_SUBU) : /* subu $rd,$rs,$rt */
    921  1.1  christos {
    922  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    923  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    924  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    925  1.1  christos   int UNUSED written = 0;
    926  1.1  christos   IADDR UNUSED pc = abuf->addr;
    927  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    928  1.1  christos 
    929  1.1  christos   {
    930  1.1  christos     SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    931  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    932  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    933  1.1  christos   }
    934  1.1  christos 
    935  1.1  christos #undef FLD
    936  1.1  christos }
    937  1.1  christos   NEXT (vpc);
    938  1.1  christos 
    939  1.1  christos   CASE (sem, INSN_XOR) : /* xor $rd,$rs,$rt */
    940  1.1  christos {
    941  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    942  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    943  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
    944  1.1  christos   int UNUSED written = 0;
    945  1.1  christos   IADDR UNUSED pc = abuf->addr;
    946  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    947  1.1  christos 
    948  1.1  christos   {
    949  1.1  christos     SI opval = XORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
    950  1.1  christos     SET_H_GR (FLD (f_rd), opval);
    951  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    952  1.1  christos   }
    953  1.1  christos 
    954  1.1  christos #undef FLD
    955  1.1  christos }
    956  1.1  christos   NEXT (vpc);
    957  1.1  christos 
    958  1.1  christos   CASE (sem, INSN_XORI) : /* xori $rt,$rs,$lo16 */
    959  1.1  christos {
    960  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    961  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    962  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
    963  1.1  christos   int UNUSED written = 0;
    964  1.1  christos   IADDR UNUSED pc = abuf->addr;
    965  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    966  1.1  christos 
    967  1.1  christos   {
    968  1.1  christos     SI opval = XORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
    969  1.1  christos     SET_H_GR (FLD (f_rt), opval);
    970  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
    971  1.1  christos   }
    972  1.1  christos 
    973  1.1  christos #undef FLD
    974  1.1  christos }
    975  1.1  christos   NEXT (vpc);
    976  1.1  christos 
    977  1.1  christos   CASE (sem, INSN_BBI) : /* bbi $rs($bitnum),$offset */
    978  1.1  christos {
    979  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
    980  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    981  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
    982  1.1  christos   int UNUSED written = 0;
    983  1.1  christos   IADDR UNUSED pc = abuf->addr;
    984  1.1  christos   SEM_BRANCH_INIT
    985  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    986  1.1  christos 
    987  1.1  christos if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt)))) {
    988  1.1  christos {
    989  1.1  christos   {
    990  1.1  christos     USI opval = FLD (i_offset);
    991  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    992  1.1  christos     written |= (1 << 3);
    993  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    994  1.1  christos   }
    995  1.1  christos }
    996  1.1  christos }
    997  1.1  christos 
    998  1.1  christos   abuf->written = written;
    999  1.1  christos   SEM_BRANCH_FINI (vpc);
   1000  1.1  christos #undef FLD
   1001  1.1  christos }
   1002  1.1  christos   NEXT (vpc);
   1003  1.1  christos 
   1004  1.1  christos   CASE (sem, INSN_BBIN) : /* bbin $rs($bitnum),$offset */
   1005  1.1  christos {
   1006  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1007  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1008  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1009  1.1  christos   int UNUSED written = 0;
   1010  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1011  1.1  christos   SEM_BRANCH_INIT
   1012  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1013  1.1  christos 
   1014  1.1  christos if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt))))) {
   1015  1.1  christos {
   1016  1.1  christos   {
   1017  1.1  christos     USI opval = FLD (i_offset);
   1018  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1019  1.1  christos     written |= (1 << 3);
   1020  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1021  1.1  christos   }
   1022  1.1  christos }
   1023  1.1  christos }
   1024  1.1  christos 
   1025  1.1  christos   abuf->written = written;
   1026  1.1  christos   SEM_BRANCH_FINI (vpc);
   1027  1.1  christos #undef FLD
   1028  1.1  christos }
   1029  1.1  christos   NEXT (vpc);
   1030  1.1  christos 
   1031  1.1  christos   CASE (sem, INSN_BBV) : /* bbv $rs,$rt,$offset */
   1032  1.1  christos {
   1033  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1034  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1035  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1036  1.1  christos   int UNUSED written = 0;
   1037  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1038  1.1  christos   SEM_BRANCH_INIT
   1039  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1040  1.1  christos 
   1041  1.1  christos if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31)))) {
   1042  1.1  christos {
   1043  1.1  christos   {
   1044  1.1  christos     USI opval = FLD (i_offset);
   1045  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1046  1.1  christos     written |= (1 << 3);
   1047  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1048  1.1  christos   }
   1049  1.1  christos }
   1050  1.1  christos }
   1051  1.1  christos 
   1052  1.1  christos   abuf->written = written;
   1053  1.1  christos   SEM_BRANCH_FINI (vpc);
   1054  1.1  christos #undef FLD
   1055  1.1  christos }
   1056  1.1  christos   NEXT (vpc);
   1057  1.1  christos 
   1058  1.1  christos   CASE (sem, INSN_BBVN) : /* bbvn $rs,$rt,$offset */
   1059  1.1  christos {
   1060  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1061  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1062  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1063  1.1  christos   int UNUSED written = 0;
   1064  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1065  1.1  christos   SEM_BRANCH_INIT
   1066  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1067  1.1  christos 
   1068  1.1  christos if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31))))) {
   1069  1.1  christos {
   1070  1.1  christos   {
   1071  1.1  christos     USI opval = FLD (i_offset);
   1072  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1073  1.1  christos     written |= (1 << 3);
   1074  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1075  1.1  christos   }
   1076  1.1  christos }
   1077  1.1  christos }
   1078  1.1  christos 
   1079  1.1  christos   abuf->written = written;
   1080  1.1  christos   SEM_BRANCH_FINI (vpc);
   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_BEQ) : /* beq $rs,$rt,$offset */
   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_bbi.f
   1090  1.1  christos   int UNUSED written = 0;
   1091  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1092  1.1  christos   SEM_BRANCH_INIT
   1093  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1094  1.1  christos 
   1095  1.1  christos if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
   1096  1.1  christos {
   1097  1.1  christos   {
   1098  1.1  christos     USI opval = FLD (i_offset);
   1099  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1100  1.1  christos     written |= (1 << 3);
   1101  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1102  1.1  christos   }
   1103  1.1  christos }
   1104  1.1  christos }
   1105  1.1  christos 
   1106  1.1  christos   abuf->written = written;
   1107  1.1  christos   SEM_BRANCH_FINI (vpc);
   1108  1.1  christos #undef FLD
   1109  1.1  christos }
   1110  1.1  christos   NEXT (vpc);
   1111  1.1  christos 
   1112  1.1  christos   CASE (sem, INSN_BEQL) : /* beql $rs,$rt,$offset */
   1113  1.1  christos {
   1114  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1115  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1116  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1117  1.1  christos   int UNUSED written = 0;
   1118  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1119  1.1  christos   SEM_BRANCH_INIT
   1120  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1121  1.1  christos 
   1122  1.1  christos if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
   1123  1.1  christos {
   1124  1.1  christos   {
   1125  1.1  christos     USI opval = FLD (i_offset);
   1126  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1127  1.1  christos     written |= (1 << 3);
   1128  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1129  1.1  christos   }
   1130  1.1  christos }
   1131  1.1  christos } else {
   1132  1.1  christos if (1)
   1133  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1134  1.1  christos }
   1135  1.1  christos 
   1136  1.1  christos   abuf->written = written;
   1137  1.1  christos   SEM_BRANCH_FINI (vpc);
   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_BGEZ) : /* bgez $rs,$offset */
   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_bbi.f
   1147  1.1  christos   int UNUSED written = 0;
   1148  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1149  1.1  christos   SEM_BRANCH_INIT
   1150  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1151  1.1  christos 
   1152  1.1  christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
   1153  1.1  christos {
   1154  1.1  christos   {
   1155  1.1  christos     USI opval = FLD (i_offset);
   1156  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1157  1.1  christos     written |= (1 << 2);
   1158  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1159  1.1  christos   }
   1160  1.1  christos }
   1161  1.1  christos }
   1162  1.1  christos 
   1163  1.1  christos   abuf->written = written;
   1164  1.1  christos   SEM_BRANCH_FINI (vpc);
   1165  1.1  christos #undef FLD
   1166  1.1  christos }
   1167  1.1  christos   NEXT (vpc);
   1168  1.1  christos 
   1169  1.1  christos   CASE (sem, INSN_BGEZAL) : /* bgezal $rs,$offset */
   1170  1.1  christos {
   1171  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1172  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1173  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1174  1.1  christos   int UNUSED written = 0;
   1175  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1176  1.1  christos   SEM_BRANCH_INIT
   1177  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1178  1.1  christos 
   1179  1.1  christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
   1180  1.1  christos {
   1181  1.1  christos   {
   1182  1.1  christos     SI opval = ADDSI (pc, 8);
   1183  1.1  christos     SET_H_GR (((UINT) 31), opval);
   1184  1.1  christos     written |= (1 << 3);
   1185  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1186  1.1  christos   }
   1187  1.1  christos {
   1188  1.1  christos   {
   1189  1.1  christos     USI opval = FLD (i_offset);
   1190  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1191  1.1  christos     written |= (1 << 4);
   1192  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1193  1.1  christos   }
   1194  1.1  christos }
   1195  1.1  christos }
   1196  1.1  christos }
   1197  1.1  christos 
   1198  1.1  christos   abuf->written = written;
   1199  1.1  christos   SEM_BRANCH_FINI (vpc);
   1200  1.1  christos #undef FLD
   1201  1.1  christos }
   1202  1.1  christos   NEXT (vpc);
   1203  1.1  christos 
   1204  1.1  christos   CASE (sem, INSN_BGEZALL) : /* bgezall $rs,$offset */
   1205  1.1  christos {
   1206  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1207  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1208  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1209  1.1  christos   int UNUSED written = 0;
   1210  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1211  1.1  christos   SEM_BRANCH_INIT
   1212  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1213  1.1  christos 
   1214  1.1  christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
   1215  1.1  christos {
   1216  1.1  christos   {
   1217  1.1  christos     SI opval = ADDSI (pc, 8);
   1218  1.1  christos     SET_H_GR (((UINT) 31), opval);
   1219  1.1  christos     written |= (1 << 3);
   1220  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1221  1.1  christos   }
   1222  1.1  christos {
   1223  1.1  christos   {
   1224  1.1  christos     USI opval = FLD (i_offset);
   1225  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1226  1.1  christos     written |= (1 << 4);
   1227  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1228  1.1  christos   }
   1229  1.1  christos }
   1230  1.1  christos }
   1231  1.1  christos } else {
   1232  1.1  christos if (1)
   1233  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1234  1.1  christos }
   1235  1.1  christos 
   1236  1.1  christos   abuf->written = written;
   1237  1.1  christos   SEM_BRANCH_FINI (vpc);
   1238  1.1  christos #undef FLD
   1239  1.1  christos }
   1240  1.1  christos   NEXT (vpc);
   1241  1.1  christos 
   1242  1.1  christos   CASE (sem, INSN_BGEZL) : /* bgezl $rs,$offset */
   1243  1.1  christos {
   1244  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1245  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1246  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1247  1.1  christos   int UNUSED written = 0;
   1248  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1249  1.1  christos   SEM_BRANCH_INIT
   1250  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1251  1.1  christos 
   1252  1.1  christos if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
   1253  1.1  christos {
   1254  1.1  christos   {
   1255  1.1  christos     USI opval = FLD (i_offset);
   1256  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1257  1.1  christos     written |= (1 << 2);
   1258  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1259  1.1  christos   }
   1260  1.1  christos }
   1261  1.1  christos } else {
   1262  1.1  christos if (1)
   1263  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1264  1.1  christos }
   1265  1.1  christos 
   1266  1.1  christos   abuf->written = written;
   1267  1.1  christos   SEM_BRANCH_FINI (vpc);
   1268  1.1  christos #undef FLD
   1269  1.1  christos }
   1270  1.1  christos   NEXT (vpc);
   1271  1.1  christos 
   1272  1.1  christos   CASE (sem, INSN_BLTZ) : /* bltz $rs,$offset */
   1273  1.1  christos {
   1274  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1275  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1276  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1277  1.1  christos   int UNUSED written = 0;
   1278  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1279  1.1  christos   SEM_BRANCH_INIT
   1280  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1281  1.1  christos 
   1282  1.1  christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
   1283  1.1  christos {
   1284  1.1  christos   {
   1285  1.1  christos     USI opval = FLD (i_offset);
   1286  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1287  1.1  christos     written |= (1 << 2);
   1288  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1289  1.1  christos   }
   1290  1.1  christos }
   1291  1.1  christos }
   1292  1.1  christos 
   1293  1.1  christos   abuf->written = written;
   1294  1.1  christos   SEM_BRANCH_FINI (vpc);
   1295  1.1  christos #undef FLD
   1296  1.1  christos }
   1297  1.1  christos   NEXT (vpc);
   1298  1.1  christos 
   1299  1.1  christos   CASE (sem, INSN_BLTZL) : /* bltzl $rs,$offset */
   1300  1.1  christos {
   1301  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1302  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1303  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1304  1.1  christos   int UNUSED written = 0;
   1305  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1306  1.1  christos   SEM_BRANCH_INIT
   1307  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1308  1.1  christos 
   1309  1.1  christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
   1310  1.1  christos {
   1311  1.1  christos   {
   1312  1.1  christos     USI opval = FLD (i_offset);
   1313  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1314  1.1  christos     written |= (1 << 2);
   1315  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1316  1.1  christos   }
   1317  1.1  christos }
   1318  1.1  christos } else {
   1319  1.1  christos if (1)
   1320  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1321  1.1  christos }
   1322  1.1  christos 
   1323  1.1  christos   abuf->written = written;
   1324  1.1  christos   SEM_BRANCH_FINI (vpc);
   1325  1.1  christos #undef FLD
   1326  1.1  christos }
   1327  1.1  christos   NEXT (vpc);
   1328  1.1  christos 
   1329  1.1  christos   CASE (sem, INSN_BLTZAL) : /* bltzal $rs,$offset */
   1330  1.1  christos {
   1331  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1332  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1333  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1334  1.1  christos   int UNUSED written = 0;
   1335  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1336  1.1  christos   SEM_BRANCH_INIT
   1337  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1338  1.1  christos 
   1339  1.1  christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
   1340  1.1  christos {
   1341  1.1  christos   {
   1342  1.1  christos     SI opval = ADDSI (pc, 8);
   1343  1.1  christos     SET_H_GR (((UINT) 31), opval);
   1344  1.1  christos     written |= (1 << 3);
   1345  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1346  1.1  christos   }
   1347  1.1  christos {
   1348  1.1  christos   {
   1349  1.1  christos     USI opval = FLD (i_offset);
   1350  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1351  1.1  christos     written |= (1 << 4);
   1352  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1353  1.1  christos   }
   1354  1.1  christos }
   1355  1.1  christos }
   1356  1.1  christos }
   1357  1.1  christos 
   1358  1.1  christos   abuf->written = written;
   1359  1.1  christos   SEM_BRANCH_FINI (vpc);
   1360  1.1  christos #undef FLD
   1361  1.1  christos }
   1362  1.1  christos   NEXT (vpc);
   1363  1.1  christos 
   1364  1.1  christos   CASE (sem, INSN_BLTZALL) : /* bltzall $rs,$offset */
   1365  1.1  christos {
   1366  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1367  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1368  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1369  1.1  christos   int UNUSED written = 0;
   1370  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1371  1.1  christos   SEM_BRANCH_INIT
   1372  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1373  1.1  christos 
   1374  1.1  christos if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
   1375  1.1  christos {
   1376  1.1  christos   {
   1377  1.1  christos     SI opval = ADDSI (pc, 8);
   1378  1.1  christos     SET_H_GR (((UINT) 31), opval);
   1379  1.1  christos     written |= (1 << 3);
   1380  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1381  1.1  christos   }
   1382  1.1  christos {
   1383  1.1  christos   {
   1384  1.1  christos     USI opval = FLD (i_offset);
   1385  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1386  1.1  christos     written |= (1 << 4);
   1387  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1388  1.1  christos   }
   1389  1.1  christos }
   1390  1.1  christos }
   1391  1.1  christos } else {
   1392  1.1  christos if (1)
   1393  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1394  1.1  christos }
   1395  1.1  christos 
   1396  1.1  christos   abuf->written = written;
   1397  1.1  christos   SEM_BRANCH_FINI (vpc);
   1398  1.1  christos #undef FLD
   1399  1.1  christos }
   1400  1.1  christos   NEXT (vpc);
   1401  1.1  christos 
   1402  1.1  christos   CASE (sem, INSN_BMB0) : /* bmb0 $rs,$rt,$offset */
   1403  1.1  christos {
   1404  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1405  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1406  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1407  1.1  christos   int UNUSED written = 0;
   1408  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1409  1.1  christos   SEM_BRANCH_INIT
   1410  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1411  1.1  christos 
   1412  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) {
   1413  1.1  christos {
   1414  1.1  christos   {
   1415  1.1  christos     USI opval = FLD (i_offset);
   1416  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1417  1.1  christos     written |= (1 << 3);
   1418  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1419  1.1  christos   }
   1420  1.1  christos }
   1421  1.1  christos }
   1422  1.1  christos 
   1423  1.1  christos   abuf->written = written;
   1424  1.1  christos   SEM_BRANCH_FINI (vpc);
   1425  1.1  christos #undef FLD
   1426  1.1  christos }
   1427  1.1  christos   NEXT (vpc);
   1428  1.1  christos 
   1429  1.1  christos   CASE (sem, INSN_BMB1) : /* bmb1 $rs,$rt,$offset */
   1430  1.1  christos {
   1431  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1432  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1433  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1434  1.1  christos   int UNUSED written = 0;
   1435  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1436  1.1  christos   SEM_BRANCH_INIT
   1437  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1438  1.1  christos 
   1439  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) {
   1440  1.1  christos {
   1441  1.1  christos   {
   1442  1.1  christos     USI opval = FLD (i_offset);
   1443  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1444  1.1  christos     written |= (1 << 3);
   1445  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1446  1.1  christos   }
   1447  1.1  christos }
   1448  1.1  christos }
   1449  1.1  christos 
   1450  1.1  christos   abuf->written = written;
   1451  1.1  christos   SEM_BRANCH_FINI (vpc);
   1452  1.1  christos #undef FLD
   1453  1.1  christos }
   1454  1.1  christos   NEXT (vpc);
   1455  1.1  christos 
   1456  1.1  christos   CASE (sem, INSN_BMB2) : /* bmb2 $rs,$rt,$offset */
   1457  1.1  christos {
   1458  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1459  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1460  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1461  1.1  christos   int UNUSED written = 0;
   1462  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1463  1.1  christos   SEM_BRANCH_INIT
   1464  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1465  1.1  christos 
   1466  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) {
   1467  1.1  christos {
   1468  1.1  christos   {
   1469  1.1  christos     USI opval = FLD (i_offset);
   1470  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1471  1.1  christos     written |= (1 << 3);
   1472  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1473  1.1  christos   }
   1474  1.1  christos }
   1475  1.1  christos }
   1476  1.1  christos 
   1477  1.1  christos   abuf->written = written;
   1478  1.1  christos   SEM_BRANCH_FINI (vpc);
   1479  1.1  christos #undef FLD
   1480  1.1  christos }
   1481  1.1  christos   NEXT (vpc);
   1482  1.1  christos 
   1483  1.1  christos   CASE (sem, INSN_BMB3) : /* bmb3 $rs,$rt,$offset */
   1484  1.1  christos {
   1485  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1486  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1487  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1488  1.1  christos   int UNUSED written = 0;
   1489  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1490  1.1  christos   SEM_BRANCH_INIT
   1491  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1492  1.1  christos 
   1493  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) {
   1494  1.1  christos {
   1495  1.1  christos   {
   1496  1.1  christos     USI opval = FLD (i_offset);
   1497  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1498  1.1  christos     written |= (1 << 3);
   1499  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1500  1.1  christos   }
   1501  1.1  christos }
   1502  1.1  christos }
   1503  1.1  christos 
   1504  1.1  christos   abuf->written = written;
   1505  1.1  christos   SEM_BRANCH_FINI (vpc);
   1506  1.1  christos #undef FLD
   1507  1.1  christos }
   1508  1.1  christos   NEXT (vpc);
   1509  1.1  christos 
   1510  1.1  christos   CASE (sem, INSN_BNE) : /* bne $rs,$rt,$offset */
   1511  1.1  christos {
   1512  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1513  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1514  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1515  1.1  christos   int UNUSED written = 0;
   1516  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1517  1.1  christos   SEM_BRANCH_INIT
   1518  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1519  1.1  christos 
   1520  1.1  christos if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
   1521  1.1  christos {
   1522  1.1  christos   {
   1523  1.1  christos     USI opval = FLD (i_offset);
   1524  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1525  1.1  christos     written |= (1 << 3);
   1526  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1527  1.1  christos   }
   1528  1.1  christos }
   1529  1.1  christos }
   1530  1.1  christos 
   1531  1.1  christos   abuf->written = written;
   1532  1.1  christos   SEM_BRANCH_FINI (vpc);
   1533  1.1  christos #undef FLD
   1534  1.1  christos }
   1535  1.1  christos   NEXT (vpc);
   1536  1.1  christos 
   1537  1.1  christos   CASE (sem, INSN_BNEL) : /* bnel $rs,$rt,$offset */
   1538  1.1  christos {
   1539  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1540  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1541  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1542  1.1  christos   int UNUSED written = 0;
   1543  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1544  1.1  christos   SEM_BRANCH_INIT
   1545  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1546  1.1  christos 
   1547  1.1  christos if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
   1548  1.1  christos {
   1549  1.1  christos   {
   1550  1.1  christos     USI opval = FLD (i_offset);
   1551  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1552  1.1  christos     written |= (1 << 3);
   1553  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1554  1.1  christos   }
   1555  1.1  christos }
   1556  1.1  christos } else {
   1557  1.1  christos if (1)
   1558  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1559  1.1  christos }
   1560  1.1  christos 
   1561  1.1  christos   abuf->written = written;
   1562  1.1  christos   SEM_BRANCH_FINI (vpc);
   1563  1.1  christos #undef FLD
   1564  1.1  christos }
   1565  1.1  christos   NEXT (vpc);
   1566  1.1  christos 
   1567  1.1  christos   CASE (sem, INSN_JALR) : /* jalr $rd,$rs */
   1568  1.1  christos {
   1569  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1570  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1571  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
   1572  1.1  christos   int UNUSED written = 0;
   1573  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1574  1.1  christos   SEM_BRANCH_INIT
   1575  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1576  1.1  christos 
   1577  1.1  christos {
   1578  1.1  christos {
   1579  1.1  christos   {
   1580  1.1  christos     SI opval = ADDSI (pc, 8);
   1581  1.1  christos     SET_H_GR (FLD (f_rd), opval);
   1582  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1583  1.1  christos   }
   1584  1.1  christos   {
   1585  1.1  christos     USI opval = GET_H_GR (FLD (f_rs));
   1586  1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
   1587  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1588  1.1  christos   }
   1589  1.1  christos }
   1590  1.1  christos }
   1591  1.1  christos 
   1592  1.1  christos   SEM_BRANCH_FINI (vpc);
   1593  1.1  christos #undef FLD
   1594  1.1  christos }
   1595  1.1  christos   NEXT (vpc);
   1596  1.1  christos 
   1597  1.1  christos   CASE (sem, INSN_JR) : /* jr $rs */
   1598  1.1  christos {
   1599  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1600  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1601  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1602  1.1  christos   int UNUSED written = 0;
   1603  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1604  1.1  christos   SEM_BRANCH_INIT
   1605  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1606  1.1  christos 
   1607  1.1  christos {
   1608  1.1  christos   {
   1609  1.1  christos     USI opval = GET_H_GR (FLD (f_rs));
   1610  1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
   1611  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1612  1.1  christos   }
   1613  1.1  christos }
   1614  1.1  christos 
   1615  1.1  christos   SEM_BRANCH_FINI (vpc);
   1616  1.1  christos #undef FLD
   1617  1.1  christos }
   1618  1.1  christos   NEXT (vpc);
   1619  1.1  christos 
   1620  1.1  christos   CASE (sem, INSN_LB) : /* lb $rt,$lo16($base) */
   1621  1.1  christos {
   1622  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1623  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1624  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1625  1.1  christos   int UNUSED written = 0;
   1626  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1627  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1628  1.1  christos 
   1629  1.1  christos   {
   1630  1.1  christos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
   1631  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1632  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1633  1.1  christos   }
   1634  1.1  christos 
   1635  1.1  christos #undef FLD
   1636  1.1  christos }
   1637  1.1  christos   NEXT (vpc);
   1638  1.1  christos 
   1639  1.1  christos   CASE (sem, INSN_LBU) : /* lbu $rt,$lo16($base) */
   1640  1.1  christos {
   1641  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1642  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1643  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1644  1.1  christos   int UNUSED written = 0;
   1645  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1646  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1647  1.1  christos 
   1648  1.1  christos   {
   1649  1.1  christos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
   1650  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1651  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1652  1.1  christos   }
   1653  1.1  christos 
   1654  1.1  christos #undef FLD
   1655  1.1  christos }
   1656  1.1  christos   NEXT (vpc);
   1657  1.1  christos 
   1658  1.1  christos   CASE (sem, INSN_LH) : /* lh $rt,$lo16($base) */
   1659  1.1  christos {
   1660  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1661  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1662  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1663  1.1  christos   int UNUSED written = 0;
   1664  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1665  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1666  1.1  christos 
   1667  1.1  christos   {
   1668  1.1  christos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
   1669  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1670  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1671  1.1  christos   }
   1672  1.1  christos 
   1673  1.1  christos #undef FLD
   1674  1.1  christos }
   1675  1.1  christos   NEXT (vpc);
   1676  1.1  christos 
   1677  1.1  christos   CASE (sem, INSN_LHU) : /* lhu $rt,$lo16($base) */
   1678  1.1  christos {
   1679  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1680  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1681  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1682  1.1  christos   int UNUSED written = 0;
   1683  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1684  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1685  1.1  christos 
   1686  1.1  christos   {
   1687  1.1  christos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
   1688  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1689  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1690  1.1  christos   }
   1691  1.1  christos 
   1692  1.1  christos #undef FLD
   1693  1.1  christos }
   1694  1.1  christos   NEXT (vpc);
   1695  1.1  christos 
   1696  1.1  christos   CASE (sem, INSN_LUI) : /* lui $rt,$hi16 */
   1697  1.1  christos {
   1698  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1699  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1700  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1701  1.1  christos   int UNUSED written = 0;
   1702  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1703  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1704  1.1  christos 
   1705  1.1  christos   {
   1706  1.1  christos     SI opval = SLLSI (FLD (f_imm), 16);
   1707  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1708  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1709  1.1  christos   }
   1710  1.1  christos 
   1711  1.1  christos #undef FLD
   1712  1.1  christos }
   1713  1.1  christos   NEXT (vpc);
   1714  1.1  christos 
   1715  1.1  christos   CASE (sem, INSN_LW) : /* lw $rt,$lo16($base) */
   1716  1.1  christos {
   1717  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1718  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1719  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1720  1.1  christos   int UNUSED written = 0;
   1721  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1722  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1723  1.1  christos 
   1724  1.1  christos   {
   1725  1.1  christos     SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))));
   1726  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1727  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1728  1.1  christos   }
   1729  1.1  christos 
   1730  1.1  christos #undef FLD
   1731  1.1  christos }
   1732  1.1  christos   NEXT (vpc);
   1733  1.1  christos 
   1734  1.1  christos   CASE (sem, INSN_SB) : /* sb $rt,$lo16($base) */
   1735  1.1  christos {
   1736  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1737  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1738  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1739  1.1  christos   int UNUSED written = 0;
   1740  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1741  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1742  1.1  christos 
   1743  1.1  christos   {
   1744  1.1  christos     QI opval = ANDQI (GET_H_GR (FLD (f_rt)), 255);
   1745  1.1  christos     SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
   1746  1.1  christos     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1747  1.1  christos   }
   1748  1.1  christos 
   1749  1.1  christos #undef FLD
   1750  1.1  christos }
   1751  1.1  christos   NEXT (vpc);
   1752  1.1  christos 
   1753  1.1  christos   CASE (sem, INSN_SH) : /* sh $rt,$lo16($base) */
   1754  1.1  christos {
   1755  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1756  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1757  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1758  1.1  christos   int UNUSED written = 0;
   1759  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1760  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1761  1.1  christos 
   1762  1.1  christos   {
   1763  1.1  christos     HI opval = ANDHI (GET_H_GR (FLD (f_rt)), 65535);
   1764  1.1  christos     SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
   1765  1.1  christos     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1766  1.1  christos   }
   1767  1.1  christos 
   1768  1.1  christos #undef FLD
   1769  1.1  christos }
   1770  1.1  christos   NEXT (vpc);
   1771  1.1  christos 
   1772  1.1  christos   CASE (sem, INSN_SW) : /* sw $rt,$lo16($base) */
   1773  1.1  christos {
   1774  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1775  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1776  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1777  1.1  christos   int UNUSED written = 0;
   1778  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1779  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1780  1.1  christos 
   1781  1.1  christos   {
   1782  1.1  christos     SI opval = GET_H_GR (FLD (f_rt));
   1783  1.1  christos     SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
   1784  1.1  christos     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   1785  1.1  christos   }
   1786  1.1  christos 
   1787  1.1  christos #undef FLD
   1788  1.1  christos }
   1789  1.1  christos   NEXT (vpc);
   1790  1.1  christos 
   1791  1.1  christos   CASE (sem, INSN_BREAK) : /* break */
   1792  1.1  christos {
   1793  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1794  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1795  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   1796  1.1  christos   int UNUSED written = 0;
   1797  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1798  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1799  1.1  christos 
   1800  1.1  christos do_break (current_cpu, pc);
   1801  1.1  christos 
   1802  1.1  christos #undef FLD
   1803  1.1  christos }
   1804  1.1  christos   NEXT (vpc);
   1805  1.1  christos 
   1806  1.1  christos   CASE (sem, INSN_SYSCALL) : /* syscall */
   1807  1.1  christos {
   1808  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1809  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1810  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   1811  1.1  christos   int UNUSED written = 0;
   1812  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1813  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1814  1.1  christos 
   1815  1.1  christos do_syscall (current_cpu);
   1816  1.1  christos 
   1817  1.1  christos #undef FLD
   1818  1.1  christos }
   1819  1.1  christos   NEXT (vpc);
   1820  1.1  christos 
   1821  1.1  christos   CASE (sem, INSN_ANDOUI) : /* andoui $rt,$rs,$hi16 */
   1822  1.1  christos {
   1823  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1824  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1825  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1826  1.1  christos   int UNUSED written = 0;
   1827  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1828  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1829  1.1  christos 
   1830  1.1  christos   {
   1831  1.1  christos     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (SLLSI (FLD (f_imm), 16), 65535));
   1832  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1833  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1834  1.1  christos   }
   1835  1.1  christos 
   1836  1.1  christos #undef FLD
   1837  1.1  christos }
   1838  1.1  christos   NEXT (vpc);
   1839  1.1  christos 
   1840  1.1  christos   CASE (sem, INSN_ORUI) : /* orui $rt,$rs,$hi16 */
   1841  1.1  christos {
   1842  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1843  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1844  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   1845  1.1  christos   int UNUSED written = 0;
   1846  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1847  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1848  1.1  christos 
   1849  1.1  christos   {
   1850  1.1  christos     SI opval = ORSI (GET_H_GR (FLD (f_rs)), SLLSI (FLD (f_imm), 16));
   1851  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   1852  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   1853  1.1  christos   }
   1854  1.1  christos 
   1855  1.1  christos #undef FLD
   1856  1.1  christos }
   1857  1.1  christos   NEXT (vpc);
   1858  1.1  christos 
   1859  1.1  christos   CASE (sem, INSN_BGTZ) : /* bgtz $rs,$offset */
   1860  1.1  christos {
   1861  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1862  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1863  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1864  1.1  christos   int UNUSED written = 0;
   1865  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1866  1.1  christos   SEM_BRANCH_INIT
   1867  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1868  1.1  christos 
   1869  1.1  christos if (GTSI (GET_H_GR (FLD (f_rs)), 0)) {
   1870  1.1  christos {
   1871  1.1  christos   {
   1872  1.1  christos     USI opval = FLD (i_offset);
   1873  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1874  1.1  christos     written |= (1 << 2);
   1875  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1876  1.1  christos   }
   1877  1.1  christos }
   1878  1.1  christos }
   1879  1.1  christos 
   1880  1.1  christos   abuf->written = written;
   1881  1.1  christos   SEM_BRANCH_FINI (vpc);
   1882  1.1  christos #undef FLD
   1883  1.1  christos }
   1884  1.1  christos   NEXT (vpc);
   1885  1.1  christos 
   1886  1.1  christos   CASE (sem, INSN_BGTZL) : /* bgtzl $rs,$offset */
   1887  1.1  christos {
   1888  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1889  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1890  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1891  1.1  christos   int UNUSED written = 0;
   1892  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1893  1.1  christos   SEM_BRANCH_INIT
   1894  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1895  1.1  christos 
   1896  1.1  christos if (GTSI (GET_H_GR (FLD (f_rs)), 0)) {
   1897  1.1  christos {
   1898  1.1  christos   {
   1899  1.1  christos     USI opval = FLD (i_offset);
   1900  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1901  1.1  christos     written |= (1 << 2);
   1902  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1903  1.1  christos   }
   1904  1.1  christos }
   1905  1.1  christos } else {
   1906  1.1  christos if (1)
   1907  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1908  1.1  christos }
   1909  1.1  christos 
   1910  1.1  christos   abuf->written = written;
   1911  1.1  christos   SEM_BRANCH_FINI (vpc);
   1912  1.1  christos #undef FLD
   1913  1.1  christos }
   1914  1.1  christos   NEXT (vpc);
   1915  1.1  christos 
   1916  1.1  christos   CASE (sem, INSN_BLEZ) : /* blez $rs,$offset */
   1917  1.1  christos {
   1918  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1919  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1920  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1921  1.1  christos   int UNUSED written = 0;
   1922  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1923  1.1  christos   SEM_BRANCH_INIT
   1924  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1925  1.1  christos 
   1926  1.1  christos if (LESI (GET_H_GR (FLD (f_rs)), 0)) {
   1927  1.1  christos {
   1928  1.1  christos   {
   1929  1.1  christos     USI opval = FLD (i_offset);
   1930  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1931  1.1  christos     written |= (1 << 2);
   1932  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1933  1.1  christos   }
   1934  1.1  christos }
   1935  1.1  christos }
   1936  1.1  christos 
   1937  1.1  christos   abuf->written = written;
   1938  1.1  christos   SEM_BRANCH_FINI (vpc);
   1939  1.1  christos #undef FLD
   1940  1.1  christos }
   1941  1.1  christos   NEXT (vpc);
   1942  1.1  christos 
   1943  1.1  christos   CASE (sem, INSN_BLEZL) : /* blezl $rs,$offset */
   1944  1.1  christos {
   1945  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1946  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1947  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   1948  1.1  christos   int UNUSED written = 0;
   1949  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1950  1.1  christos   SEM_BRANCH_INIT
   1951  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1952  1.1  christos 
   1953  1.1  christos if (LESI (GET_H_GR (FLD (f_rs)), 0)) {
   1954  1.1  christos {
   1955  1.1  christos   {
   1956  1.1  christos     USI opval = FLD (i_offset);
   1957  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   1958  1.1  christos     written |= (1 << 2);
   1959  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   1960  1.1  christos   }
   1961  1.1  christos }
   1962  1.1  christos } else {
   1963  1.1  christos if (1)
   1964  1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
   1965  1.1  christos }
   1966  1.1  christos 
   1967  1.1  christos   abuf->written = written;
   1968  1.1  christos   SEM_BRANCH_FINI (vpc);
   1969  1.1  christos #undef FLD
   1970  1.1  christos }
   1971  1.1  christos   NEXT (vpc);
   1972  1.1  christos 
   1973  1.1  christos   CASE (sem, INSN_MRGB) : /* mrgb $rd,$rs,$rt,$mask */
   1974  1.1  christos {
   1975  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   1976  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1977  1.1  christos #define FLD(f) abuf->fields.sfmt_mrgb.f
   1978  1.1  christos   int UNUSED written = 0;
   1979  1.1  christos   IADDR UNUSED pc = abuf->addr;
   1980  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1981  1.1  christos 
   1982  1.1  christos {
   1983  1.1  christos   SI tmp_temp;
   1984  1.1  christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 0)))) {
   1985  1.1  christos   tmp_temp = ANDSI (GET_H_GR (FLD (f_rs)), 255);
   1986  1.1  christos } else {
   1987  1.1  christos   tmp_temp = ANDSI (GET_H_GR (FLD (f_rt)), 255);
   1988  1.1  christos }
   1989  1.1  christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 1)))) {
   1990  1.1  christos   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 65280));
   1991  1.1  christos } else {
   1992  1.1  christos   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 65280));
   1993  1.1  christos }
   1994  1.1  christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 2)))) {
   1995  1.1  christos   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 16711680));
   1996  1.1  christos } else {
   1997  1.1  christos   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 16711680));
   1998  1.1  christos }
   1999  1.1  christos if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 3)))) {
   2000  1.1  christos   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000));
   2001  1.1  christos } else {
   2002  1.1  christos   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000));
   2003  1.1  christos }
   2004  1.1  christos   {
   2005  1.1  christos     SI opval = tmp_temp;
   2006  1.1  christos     SET_H_GR (FLD (f_rd), opval);
   2007  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   2008  1.1  christos   }
   2009  1.1  christos }
   2010  1.1  christos 
   2011  1.1  christos #undef FLD
   2012  1.1  christos }
   2013  1.1  christos   NEXT (vpc);
   2014  1.1  christos 
   2015  1.1  christos   CASE (sem, INSN_BCTXT) : /* bctxt $rs,$offset */
   2016  1.1  christos {
   2017  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2018  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2019  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2020  1.1  christos   int UNUSED written = 0;
   2021  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2022  1.1  christos   SEM_BRANCH_INIT
   2023  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2024  1.1  christos 
   2025  1.1  christos ((void) 0); /*nop*/
   2026  1.1  christos 
   2027  1.1  christos   SEM_BRANCH_FINI (vpc);
   2028  1.1  christos #undef FLD
   2029  1.1  christos }
   2030  1.1  christos   NEXT (vpc);
   2031  1.1  christos 
   2032  1.1  christos   CASE (sem, INSN_BC0F) : /* bc0f $offset */
   2033  1.1  christos {
   2034  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2035  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2036  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2037  1.1  christos   int UNUSED written = 0;
   2038  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2039  1.1  christos   SEM_BRANCH_INIT
   2040  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2041  1.1  christos 
   2042  1.1  christos ((void) 0); /*nop*/
   2043  1.1  christos 
   2044  1.1  christos   SEM_BRANCH_FINI (vpc);
   2045  1.1  christos #undef FLD
   2046  1.1  christos }
   2047  1.1  christos   NEXT (vpc);
   2048  1.1  christos 
   2049  1.1  christos   CASE (sem, INSN_BC0FL) : /* bc0fl $offset */
   2050  1.1  christos {
   2051  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2052  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2053  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2054  1.1  christos   int UNUSED written = 0;
   2055  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2056  1.1  christos   SEM_BRANCH_INIT
   2057  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2058  1.1  christos 
   2059  1.1  christos ((void) 0); /*nop*/
   2060  1.1  christos 
   2061  1.1  christos   SEM_BRANCH_FINI (vpc);
   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_BC3F) : /* bc3f $offset */
   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_empty.f
   2071  1.1  christos   int UNUSED written = 0;
   2072  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2073  1.1  christos   SEM_BRANCH_INIT
   2074  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2075  1.1  christos 
   2076  1.1  christos ((void) 0); /*nop*/
   2077  1.1  christos 
   2078  1.1  christos   SEM_BRANCH_FINI (vpc);
   2079  1.1  christos #undef FLD
   2080  1.1  christos }
   2081  1.1  christos   NEXT (vpc);
   2082  1.1  christos 
   2083  1.1  christos   CASE (sem, INSN_BC3FL) : /* bc3fl $offset */
   2084  1.1  christos {
   2085  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2086  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2087  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2088  1.1  christos   int UNUSED written = 0;
   2089  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2090  1.1  christos   SEM_BRANCH_INIT
   2091  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2092  1.1  christos 
   2093  1.1  christos ((void) 0); /*nop*/
   2094  1.1  christos 
   2095  1.1  christos   SEM_BRANCH_FINI (vpc);
   2096  1.1  christos #undef FLD
   2097  1.1  christos }
   2098  1.1  christos   NEXT (vpc);
   2099  1.1  christos 
   2100  1.1  christos   CASE (sem, INSN_BC0T) : /* bc0t $offset */
   2101  1.1  christos {
   2102  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2103  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2104  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2105  1.1  christos   int UNUSED written = 0;
   2106  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2107  1.1  christos   SEM_BRANCH_INIT
   2108  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2109  1.1  christos 
   2110  1.1  christos ((void) 0); /*nop*/
   2111  1.1  christos 
   2112  1.1  christos   SEM_BRANCH_FINI (vpc);
   2113  1.1  christos #undef FLD
   2114  1.1  christos }
   2115  1.1  christos   NEXT (vpc);
   2116  1.1  christos 
   2117  1.1  christos   CASE (sem, INSN_BC0TL) : /* bc0tl $offset */
   2118  1.1  christos {
   2119  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2120  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2121  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2122  1.1  christos   int UNUSED written = 0;
   2123  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2124  1.1  christos   SEM_BRANCH_INIT
   2125  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2126  1.1  christos 
   2127  1.1  christos ((void) 0); /*nop*/
   2128  1.1  christos 
   2129  1.1  christos   SEM_BRANCH_FINI (vpc);
   2130  1.1  christos #undef FLD
   2131  1.1  christos }
   2132  1.1  christos   NEXT (vpc);
   2133  1.1  christos 
   2134  1.1  christos   CASE (sem, INSN_BC3T) : /* bc3t $offset */
   2135  1.1  christos {
   2136  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2137  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2138  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2139  1.1  christos   int UNUSED written = 0;
   2140  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2141  1.1  christos   SEM_BRANCH_INIT
   2142  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2143  1.1  christos 
   2144  1.1  christos ((void) 0); /*nop*/
   2145  1.1  christos 
   2146  1.1  christos   SEM_BRANCH_FINI (vpc);
   2147  1.1  christos #undef FLD
   2148  1.1  christos }
   2149  1.1  christos   NEXT (vpc);
   2150  1.1  christos 
   2151  1.1  christos   CASE (sem, INSN_BC3TL) : /* bc3tl $offset */
   2152  1.1  christos {
   2153  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2154  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2155  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2156  1.1  christos   int UNUSED written = 0;
   2157  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2158  1.1  christos   SEM_BRANCH_INIT
   2159  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2160  1.1  christos 
   2161  1.1  christos ((void) 0); /*nop*/
   2162  1.1  christos 
   2163  1.1  christos   SEM_BRANCH_FINI (vpc);
   2164  1.1  christos #undef FLD
   2165  1.1  christos }
   2166  1.1  christos   NEXT (vpc);
   2167  1.1  christos 
   2168  1.1  christos   CASE (sem, INSN_CFC0) : /* cfc0 $rt,$rd */
   2169  1.1  christos {
   2170  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2171  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2172  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2173  1.1  christos   int UNUSED written = 0;
   2174  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2175  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2176  1.1  christos 
   2177  1.1  christos ((void) 0); /*nop*/
   2178  1.1  christos 
   2179  1.1  christos #undef FLD
   2180  1.1  christos }
   2181  1.1  christos   NEXT (vpc);
   2182  1.1  christos 
   2183  1.1  christos   CASE (sem, INSN_CFC1) : /* cfc1 $rt,$rd */
   2184  1.1  christos {
   2185  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2186  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2187  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2188  1.1  christos   int UNUSED written = 0;
   2189  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2190  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2191  1.1  christos 
   2192  1.1  christos ((void) 0); /*nop*/
   2193  1.1  christos 
   2194  1.1  christos #undef FLD
   2195  1.1  christos }
   2196  1.1  christos   NEXT (vpc);
   2197  1.1  christos 
   2198  1.1  christos   CASE (sem, INSN_CFC2) : /* cfc2 $rt,$rd */
   2199  1.1  christos {
   2200  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2201  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2202  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2203  1.1  christos   int UNUSED written = 0;
   2204  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2205  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2206  1.1  christos 
   2207  1.1  christos ((void) 0); /*nop*/
   2208  1.1  christos 
   2209  1.1  christos #undef FLD
   2210  1.1  christos }
   2211  1.1  christos   NEXT (vpc);
   2212  1.1  christos 
   2213  1.1  christos   CASE (sem, INSN_CFC3) : /* cfc3 $rt,$rd */
   2214  1.1  christos {
   2215  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2216  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2217  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2218  1.1  christos   int UNUSED written = 0;
   2219  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2220  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2221  1.1  christos 
   2222  1.1  christos ((void) 0); /*nop*/
   2223  1.1  christos 
   2224  1.1  christos #undef FLD
   2225  1.1  christos }
   2226  1.1  christos   NEXT (vpc);
   2227  1.1  christos 
   2228  1.1  christos   CASE (sem, INSN_CHKHDR) : /* chkhdr $rd,$rt */
   2229  1.1  christos {
   2230  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2231  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2232  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2233  1.1  christos   int UNUSED written = 0;
   2234  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2235  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2236  1.1  christos 
   2237  1.1  christos ((void) 0); /*nop*/
   2238  1.1  christos 
   2239  1.1  christos #undef FLD
   2240  1.1  christos }
   2241  1.1  christos   NEXT (vpc);
   2242  1.1  christos 
   2243  1.1  christos   CASE (sem, INSN_CTC0) : /* ctc0 $rt,$rd */
   2244  1.1  christos {
   2245  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2246  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2247  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2248  1.1  christos   int UNUSED written = 0;
   2249  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2250  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2251  1.1  christos 
   2252  1.1  christos ((void) 0); /*nop*/
   2253  1.1  christos 
   2254  1.1  christos #undef FLD
   2255  1.1  christos }
   2256  1.1  christos   NEXT (vpc);
   2257  1.1  christos 
   2258  1.1  christos   CASE (sem, INSN_CTC1) : /* ctc1 $rt,$rd */
   2259  1.1  christos {
   2260  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2261  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2262  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2263  1.1  christos   int UNUSED written = 0;
   2264  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2265  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2266  1.1  christos 
   2267  1.1  christos ((void) 0); /*nop*/
   2268  1.1  christos 
   2269  1.1  christos #undef FLD
   2270  1.1  christos }
   2271  1.1  christos   NEXT (vpc);
   2272  1.1  christos 
   2273  1.1  christos   CASE (sem, INSN_CTC2) : /* ctc2 $rt,$rd */
   2274  1.1  christos {
   2275  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2276  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2277  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2278  1.1  christos   int UNUSED written = 0;
   2279  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2280  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2281  1.1  christos 
   2282  1.1  christos ((void) 0); /*nop*/
   2283  1.1  christos 
   2284  1.1  christos #undef FLD
   2285  1.1  christos }
   2286  1.1  christos   NEXT (vpc);
   2287  1.1  christos 
   2288  1.1  christos   CASE (sem, INSN_CTC3) : /* ctc3 $rt,$rd */
   2289  1.1  christos {
   2290  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2291  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2292  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2293  1.1  christos   int UNUSED written = 0;
   2294  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2295  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2296  1.1  christos 
   2297  1.1  christos ((void) 0); /*nop*/
   2298  1.1  christos 
   2299  1.1  christos #undef FLD
   2300  1.1  christos }
   2301  1.1  christos   NEXT (vpc);
   2302  1.1  christos 
   2303  1.1  christos   CASE (sem, INSN_JCR) : /* jcr $rs */
   2304  1.1  christos {
   2305  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2306  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2307  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2308  1.1  christos   int UNUSED written = 0;
   2309  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2310  1.1  christos   SEM_BRANCH_INIT
   2311  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2312  1.1  christos 
   2313  1.1  christos ((void) 0); /*nop*/
   2314  1.1  christos 
   2315  1.1  christos   SEM_BRANCH_FINI (vpc);
   2316  1.1  christos #undef FLD
   2317  1.1  christos }
   2318  1.1  christos   NEXT (vpc);
   2319  1.1  christos 
   2320  1.1  christos   CASE (sem, INSN_LUC32) : /* luc32 $rt,$rd */
   2321  1.1  christos {
   2322  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2323  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2324  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2325  1.1  christos   int UNUSED written = 0;
   2326  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2327  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2328  1.1  christos 
   2329  1.1  christos ((void) 0); /*nop*/
   2330  1.1  christos 
   2331  1.1  christos #undef FLD
   2332  1.1  christos }
   2333  1.1  christos   NEXT (vpc);
   2334  1.1  christos 
   2335  1.1  christos   CASE (sem, INSN_LUC32L) : /* luc32l $rt,$rd */
   2336  1.1  christos {
   2337  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2338  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2339  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2340  1.1  christos   int UNUSED written = 0;
   2341  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2342  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2343  1.1  christos 
   2344  1.1  christos ((void) 0); /*nop*/
   2345  1.1  christos 
   2346  1.1  christos #undef FLD
   2347  1.1  christos }
   2348  1.1  christos   NEXT (vpc);
   2349  1.1  christos 
   2350  1.1  christos   CASE (sem, INSN_LUC64) : /* luc64 $rt,$rd */
   2351  1.1  christos {
   2352  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2353  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2354  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2355  1.1  christos   int UNUSED written = 0;
   2356  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2357  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2358  1.1  christos 
   2359  1.1  christos ((void) 0); /*nop*/
   2360  1.1  christos 
   2361  1.1  christos #undef FLD
   2362  1.1  christos }
   2363  1.1  christos   NEXT (vpc);
   2364  1.1  christos 
   2365  1.1  christos   CASE (sem, INSN_LUC64L) : /* luc64l $rt,$rd */
   2366  1.1  christos {
   2367  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2368  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2369  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2370  1.1  christos   int UNUSED written = 0;
   2371  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2372  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2373  1.1  christos 
   2374  1.1  christos ((void) 0); /*nop*/
   2375  1.1  christos 
   2376  1.1  christos #undef FLD
   2377  1.1  christos }
   2378  1.1  christos   NEXT (vpc);
   2379  1.1  christos 
   2380  1.1  christos   CASE (sem, INSN_LUK) : /* luk $rt,$rd */
   2381  1.1  christos {
   2382  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2383  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2384  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2385  1.1  christos   int UNUSED written = 0;
   2386  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2387  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2388  1.1  christos 
   2389  1.1  christos ((void) 0); /*nop*/
   2390  1.1  christos 
   2391  1.1  christos #undef FLD
   2392  1.1  christos }
   2393  1.1  christos   NEXT (vpc);
   2394  1.1  christos 
   2395  1.1  christos   CASE (sem, INSN_LULCK) : /* lulck $rt */
   2396  1.1  christos {
   2397  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2398  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2399  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2400  1.1  christos   int UNUSED written = 0;
   2401  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2402  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2403  1.1  christos 
   2404  1.1  christos ((void) 0); /*nop*/
   2405  1.1  christos 
   2406  1.1  christos #undef FLD
   2407  1.1  christos }
   2408  1.1  christos   NEXT (vpc);
   2409  1.1  christos 
   2410  1.1  christos   CASE (sem, INSN_LUM32) : /* lum32 $rt,$rd */
   2411  1.1  christos {
   2412  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2413  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2414  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2415  1.1  christos   int UNUSED written = 0;
   2416  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2417  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2418  1.1  christos 
   2419  1.1  christos ((void) 0); /*nop*/
   2420  1.1  christos 
   2421  1.1  christos #undef FLD
   2422  1.1  christos }
   2423  1.1  christos   NEXT (vpc);
   2424  1.1  christos 
   2425  1.1  christos   CASE (sem, INSN_LUM32L) : /* lum32l $rt,$rd */
   2426  1.1  christos {
   2427  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2428  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2429  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2430  1.1  christos   int UNUSED written = 0;
   2431  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2432  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2433  1.1  christos 
   2434  1.1  christos ((void) 0); /*nop*/
   2435  1.1  christos 
   2436  1.1  christos #undef FLD
   2437  1.1  christos }
   2438  1.1  christos   NEXT (vpc);
   2439  1.1  christos 
   2440  1.1  christos   CASE (sem, INSN_LUM64) : /* lum64 $rt,$rd */
   2441  1.1  christos {
   2442  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2443  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2444  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2445  1.1  christos   int UNUSED written = 0;
   2446  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2447  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2448  1.1  christos 
   2449  1.1  christos ((void) 0); /*nop*/
   2450  1.1  christos 
   2451  1.1  christos #undef FLD
   2452  1.1  christos }
   2453  1.1  christos   NEXT (vpc);
   2454  1.1  christos 
   2455  1.1  christos   CASE (sem, INSN_LUM64L) : /* lum64l $rt,$rd */
   2456  1.1  christos {
   2457  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2458  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2459  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2460  1.1  christos   int UNUSED written = 0;
   2461  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2462  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2463  1.1  christos 
   2464  1.1  christos ((void) 0); /*nop*/
   2465  1.1  christos 
   2466  1.1  christos #undef FLD
   2467  1.1  christos }
   2468  1.1  christos   NEXT (vpc);
   2469  1.1  christos 
   2470  1.1  christos   CASE (sem, INSN_LUR) : /* lur $rt,$rd */
   2471  1.1  christos {
   2472  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2473  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2474  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2475  1.1  christos   int UNUSED written = 0;
   2476  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2477  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2478  1.1  christos 
   2479  1.1  christos ((void) 0); /*nop*/
   2480  1.1  christos 
   2481  1.1  christos #undef FLD
   2482  1.1  christos }
   2483  1.1  christos   NEXT (vpc);
   2484  1.1  christos 
   2485  1.1  christos   CASE (sem, INSN_LURL) : /* lurl $rt,$rd */
   2486  1.1  christos {
   2487  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2488  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2489  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2490  1.1  christos   int UNUSED written = 0;
   2491  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2492  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2493  1.1  christos 
   2494  1.1  christos ((void) 0); /*nop*/
   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_LUULCK) : /* luulck $rt */
   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_empty.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 ((void) 0); /*nop*/
   2510  1.1  christos 
   2511  1.1  christos #undef FLD
   2512  1.1  christos }
   2513  1.1  christos   NEXT (vpc);
   2514  1.1  christos 
   2515  1.1  christos   CASE (sem, INSN_MFC0) : /* mfc0 $rt,$rd */
   2516  1.1  christos {
   2517  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2518  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2519  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2520  1.1  christos   int UNUSED written = 0;
   2521  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2522  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2523  1.1  christos 
   2524  1.1  christos ((void) 0); /*nop*/
   2525  1.1  christos 
   2526  1.1  christos #undef FLD
   2527  1.1  christos }
   2528  1.1  christos   NEXT (vpc);
   2529  1.1  christos 
   2530  1.1  christos   CASE (sem, INSN_MFC1) : /* mfc1 $rt,$rd */
   2531  1.1  christos {
   2532  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2533  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2534  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2535  1.1  christos   int UNUSED written = 0;
   2536  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2537  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2538  1.1  christos 
   2539  1.1  christos ((void) 0); /*nop*/
   2540  1.1  christos 
   2541  1.1  christos #undef FLD
   2542  1.1  christos }
   2543  1.1  christos   NEXT (vpc);
   2544  1.1  christos 
   2545  1.1  christos   CASE (sem, INSN_MFC2) : /* mfc2 $rt,$rd */
   2546  1.1  christos {
   2547  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2548  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2549  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2550  1.1  christos   int UNUSED written = 0;
   2551  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2552  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2553  1.1  christos 
   2554  1.1  christos ((void) 0); /*nop*/
   2555  1.1  christos 
   2556  1.1  christos #undef FLD
   2557  1.1  christos }
   2558  1.1  christos   NEXT (vpc);
   2559  1.1  christos 
   2560  1.1  christos   CASE (sem, INSN_MFC3) : /* mfc3 $rt,$rd */
   2561  1.1  christos {
   2562  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2563  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2564  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2565  1.1  christos   int UNUSED written = 0;
   2566  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2567  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2568  1.1  christos 
   2569  1.1  christos ((void) 0); /*nop*/
   2570  1.1  christos 
   2571  1.1  christos #undef FLD
   2572  1.1  christos }
   2573  1.1  christos   NEXT (vpc);
   2574  1.1  christos 
   2575  1.1  christos   CASE (sem, INSN_MTC0) : /* mtc0 $rt,$rd */
   2576  1.1  christos {
   2577  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2578  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2579  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2580  1.1  christos   int UNUSED written = 0;
   2581  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2582  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2583  1.1  christos 
   2584  1.1  christos ((void) 0); /*nop*/
   2585  1.1  christos 
   2586  1.1  christos #undef FLD
   2587  1.1  christos }
   2588  1.1  christos   NEXT (vpc);
   2589  1.1  christos 
   2590  1.1  christos   CASE (sem, INSN_MTC1) : /* mtc1 $rt,$rd */
   2591  1.1  christos {
   2592  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2593  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2594  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2595  1.1  christos   int UNUSED written = 0;
   2596  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2597  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2598  1.1  christos 
   2599  1.1  christos ((void) 0); /*nop*/
   2600  1.1  christos 
   2601  1.1  christos #undef FLD
   2602  1.1  christos }
   2603  1.1  christos   NEXT (vpc);
   2604  1.1  christos 
   2605  1.1  christos   CASE (sem, INSN_MTC2) : /* mtc2 $rt,$rd */
   2606  1.1  christos {
   2607  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2608  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2609  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2610  1.1  christos   int UNUSED written = 0;
   2611  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2612  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2613  1.1  christos 
   2614  1.1  christos ((void) 0); /*nop*/
   2615  1.1  christos 
   2616  1.1  christos #undef FLD
   2617  1.1  christos }
   2618  1.1  christos   NEXT (vpc);
   2619  1.1  christos 
   2620  1.1  christos   CASE (sem, INSN_MTC3) : /* mtc3 $rt,$rd */
   2621  1.1  christos {
   2622  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2623  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2624  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2625  1.1  christos   int UNUSED written = 0;
   2626  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2627  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2628  1.1  christos 
   2629  1.1  christos ((void) 0); /*nop*/
   2630  1.1  christos 
   2631  1.1  christos #undef FLD
   2632  1.1  christos }
   2633  1.1  christos   NEXT (vpc);
   2634  1.1  christos 
   2635  1.1  christos   CASE (sem, INSN_PKRL) : /* pkrl $rd,$rt */
   2636  1.1  christos {
   2637  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2638  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2639  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2640  1.1  christos   int UNUSED written = 0;
   2641  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2642  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2643  1.1  christos 
   2644  1.1  christos ((void) 0); /*nop*/
   2645  1.1  christos 
   2646  1.1  christos #undef FLD
   2647  1.1  christos }
   2648  1.1  christos   NEXT (vpc);
   2649  1.1  christos 
   2650  1.1  christos   CASE (sem, INSN_PKRLR1) : /* pkrlr1 $rt,$_index,$count */
   2651  1.1  christos {
   2652  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2653  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2654  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2655  1.1  christos   int UNUSED written = 0;
   2656  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2657  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2658  1.1  christos 
   2659  1.1  christos ((void) 0); /*nop*/
   2660  1.1  christos 
   2661  1.1  christos #undef FLD
   2662  1.1  christos }
   2663  1.1  christos   NEXT (vpc);
   2664  1.1  christos 
   2665  1.1  christos   CASE (sem, INSN_PKRLR30) : /* pkrlr30 $rt,$_index,$count */
   2666  1.1  christos {
   2667  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2668  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2669  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2670  1.1  christos   int UNUSED written = 0;
   2671  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2672  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2673  1.1  christos 
   2674  1.1  christos ((void) 0); /*nop*/
   2675  1.1  christos 
   2676  1.1  christos #undef FLD
   2677  1.1  christos }
   2678  1.1  christos   NEXT (vpc);
   2679  1.1  christos 
   2680  1.1  christos   CASE (sem, INSN_RB) : /* rb $rd,$rt */
   2681  1.1  christos {
   2682  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2683  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2684  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2685  1.1  christos   int UNUSED written = 0;
   2686  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2687  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2688  1.1  christos 
   2689  1.1  christos ((void) 0); /*nop*/
   2690  1.1  christos 
   2691  1.1  christos #undef FLD
   2692  1.1  christos }
   2693  1.1  christos   NEXT (vpc);
   2694  1.1  christos 
   2695  1.1  christos   CASE (sem, INSN_RBR1) : /* rbr1 $rt,$_index,$count */
   2696  1.1  christos {
   2697  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2698  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2699  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2700  1.1  christos   int UNUSED written = 0;
   2701  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2702  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2703  1.1  christos 
   2704  1.1  christos ((void) 0); /*nop*/
   2705  1.1  christos 
   2706  1.1  christos #undef FLD
   2707  1.1  christos }
   2708  1.1  christos   NEXT (vpc);
   2709  1.1  christos 
   2710  1.1  christos   CASE (sem, INSN_RBR30) : /* rbr30 $rt,$_index,$count */
   2711  1.1  christos {
   2712  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2713  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2714  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2715  1.1  christos   int UNUSED written = 0;
   2716  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2717  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2718  1.1  christos 
   2719  1.1  christos ((void) 0); /*nop*/
   2720  1.1  christos 
   2721  1.1  christos #undef FLD
   2722  1.1  christos }
   2723  1.1  christos   NEXT (vpc);
   2724  1.1  christos 
   2725  1.1  christos   CASE (sem, INSN_RFE) : /* rfe */
   2726  1.1  christos {
   2727  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2728  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2729  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2730  1.1  christos   int UNUSED written = 0;
   2731  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2732  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2733  1.1  christos 
   2734  1.1  christos ((void) 0); /*nop*/
   2735  1.1  christos 
   2736  1.1  christos #undef FLD
   2737  1.1  christos }
   2738  1.1  christos   NEXT (vpc);
   2739  1.1  christos 
   2740  1.1  christos   CASE (sem, INSN_RX) : /* rx $rd,$rt */
   2741  1.1  christos {
   2742  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2743  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2744  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2745  1.1  christos   int UNUSED written = 0;
   2746  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2747  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2748  1.1  christos 
   2749  1.1  christos ((void) 0); /*nop*/
   2750  1.1  christos 
   2751  1.1  christos #undef FLD
   2752  1.1  christos }
   2753  1.1  christos   NEXT (vpc);
   2754  1.1  christos 
   2755  1.1  christos   CASE (sem, INSN_RXR1) : /* rxr1 $rt,$_index,$count */
   2756  1.1  christos {
   2757  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2758  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2759  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2760  1.1  christos   int UNUSED written = 0;
   2761  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2762  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2763  1.1  christos 
   2764  1.1  christos ((void) 0); /*nop*/
   2765  1.1  christos 
   2766  1.1  christos #undef FLD
   2767  1.1  christos }
   2768  1.1  christos   NEXT (vpc);
   2769  1.1  christos 
   2770  1.1  christos   CASE (sem, INSN_RXR30) : /* rxr30 $rt,$_index,$count */
   2771  1.1  christos {
   2772  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2773  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2774  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2775  1.1  christos   int UNUSED written = 0;
   2776  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2777  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2778  1.1  christos 
   2779  1.1  christos ((void) 0); /*nop*/
   2780  1.1  christos 
   2781  1.1  christos #undef FLD
   2782  1.1  christos }
   2783  1.1  christos   NEXT (vpc);
   2784  1.1  christos 
   2785  1.1  christos   CASE (sem, INSN_SLEEP) : /* sleep */
   2786  1.1  christos {
   2787  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2788  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2789  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2790  1.1  christos   int UNUSED written = 0;
   2791  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2792  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2793  1.1  christos 
   2794  1.1  christos ((void) 0); /*nop*/
   2795  1.1  christos 
   2796  1.1  christos #undef FLD
   2797  1.1  christos }
   2798  1.1  christos   NEXT (vpc);
   2799  1.1  christos 
   2800  1.1  christos   CASE (sem, INSN_SRRD) : /* srrd $rt */
   2801  1.1  christos {
   2802  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2803  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2804  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2805  1.1  christos   int UNUSED written = 0;
   2806  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2807  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2808  1.1  christos 
   2809  1.1  christos ((void) 0); /*nop*/
   2810  1.1  christos 
   2811  1.1  christos #undef FLD
   2812  1.1  christos }
   2813  1.1  christos   NEXT (vpc);
   2814  1.1  christos 
   2815  1.1  christos   CASE (sem, INSN_SRRDL) : /* srrdl $rt */
   2816  1.1  christos {
   2817  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2818  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2819  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2820  1.1  christos   int UNUSED written = 0;
   2821  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2822  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2823  1.1  christos 
   2824  1.1  christos ((void) 0); /*nop*/
   2825  1.1  christos 
   2826  1.1  christos #undef FLD
   2827  1.1  christos }
   2828  1.1  christos   NEXT (vpc);
   2829  1.1  christos 
   2830  1.1  christos   CASE (sem, INSN_SRULCK) : /* srulck $rt */
   2831  1.1  christos {
   2832  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2833  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2834  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2835  1.1  christos   int UNUSED written = 0;
   2836  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2837  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2838  1.1  christos 
   2839  1.1  christos ((void) 0); /*nop*/
   2840  1.1  christos 
   2841  1.1  christos #undef FLD
   2842  1.1  christos }
   2843  1.1  christos   NEXT (vpc);
   2844  1.1  christos 
   2845  1.1  christos   CASE (sem, INSN_SRWR) : /* srwr $rt,$rd */
   2846  1.1  christos {
   2847  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2848  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2849  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2850  1.1  christos   int UNUSED written = 0;
   2851  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2852  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2853  1.1  christos 
   2854  1.1  christos ((void) 0); /*nop*/
   2855  1.1  christos 
   2856  1.1  christos #undef FLD
   2857  1.1  christos }
   2858  1.1  christos   NEXT (vpc);
   2859  1.1  christos 
   2860  1.1  christos   CASE (sem, INSN_SRWRU) : /* srwru $rt,$rd */
   2861  1.1  christos {
   2862  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2863  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2864  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2865  1.1  christos   int UNUSED written = 0;
   2866  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2867  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2868  1.1  christos 
   2869  1.1  christos ((void) 0); /*nop*/
   2870  1.1  christos 
   2871  1.1  christos #undef FLD
   2872  1.1  christos }
   2873  1.1  christos   NEXT (vpc);
   2874  1.1  christos 
   2875  1.1  christos   CASE (sem, INSN_TRAPQFL) : /* trapqfl */
   2876  1.1  christos {
   2877  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2878  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2879  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2880  1.1  christos   int UNUSED written = 0;
   2881  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2882  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2883  1.1  christos 
   2884  1.1  christos ((void) 0); /*nop*/
   2885  1.1  christos 
   2886  1.1  christos #undef FLD
   2887  1.1  christos }
   2888  1.1  christos   NEXT (vpc);
   2889  1.1  christos 
   2890  1.1  christos   CASE (sem, INSN_TRAPQNE) : /* trapqne */
   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_empty.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 ((void) 0); /*nop*/
   2900  1.1  christos 
   2901  1.1  christos #undef FLD
   2902  1.1  christos }
   2903  1.1  christos   NEXT (vpc);
   2904  1.1  christos 
   2905  1.1  christos   CASE (sem, INSN_TRAPREL) : /* traprel $rt */
   2906  1.1  christos {
   2907  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2908  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2909  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2910  1.1  christos   int UNUSED written = 0;
   2911  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2912  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2913  1.1  christos 
   2914  1.1  christos ((void) 0); /*nop*/
   2915  1.1  christos 
   2916  1.1  christos #undef FLD
   2917  1.1  christos }
   2918  1.1  christos   NEXT (vpc);
   2919  1.1  christos 
   2920  1.1  christos   CASE (sem, INSN_WB) : /* wb $rd,$rt */
   2921  1.1  christos {
   2922  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2923  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2924  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2925  1.1  christos   int UNUSED written = 0;
   2926  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2927  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2928  1.1  christos 
   2929  1.1  christos ((void) 0); /*nop*/
   2930  1.1  christos 
   2931  1.1  christos #undef FLD
   2932  1.1  christos }
   2933  1.1  christos   NEXT (vpc);
   2934  1.1  christos 
   2935  1.1  christos   CASE (sem, INSN_WBU) : /* wbu $rd,$rt */
   2936  1.1  christos {
   2937  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2938  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2939  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2940  1.1  christos   int UNUSED written = 0;
   2941  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2942  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2943  1.1  christos 
   2944  1.1  christos ((void) 0); /*nop*/
   2945  1.1  christos 
   2946  1.1  christos #undef FLD
   2947  1.1  christos }
   2948  1.1  christos   NEXT (vpc);
   2949  1.1  christos 
   2950  1.1  christos   CASE (sem, INSN_WBR1) : /* wbr1 $rt,$_index,$count */
   2951  1.1  christos {
   2952  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2953  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2954  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2955  1.1  christos   int UNUSED written = 0;
   2956  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2957  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2958  1.1  christos 
   2959  1.1  christos ((void) 0); /*nop*/
   2960  1.1  christos 
   2961  1.1  christos #undef FLD
   2962  1.1  christos }
   2963  1.1  christos   NEXT (vpc);
   2964  1.1  christos 
   2965  1.1  christos   CASE (sem, INSN_WBR1U) : /* wbr1u $rt,$_index,$count */
   2966  1.1  christos {
   2967  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2968  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2969  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2970  1.1  christos   int UNUSED written = 0;
   2971  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2972  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2973  1.1  christos 
   2974  1.1  christos ((void) 0); /*nop*/
   2975  1.1  christos 
   2976  1.1  christos #undef FLD
   2977  1.1  christos }
   2978  1.1  christos   NEXT (vpc);
   2979  1.1  christos 
   2980  1.1  christos   CASE (sem, INSN_WBR30) : /* wbr30 $rt,$_index,$count */
   2981  1.1  christos {
   2982  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2983  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2984  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2985  1.1  christos   int UNUSED written = 0;
   2986  1.1  christos   IADDR UNUSED pc = abuf->addr;
   2987  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2988  1.1  christos 
   2989  1.1  christos ((void) 0); /*nop*/
   2990  1.1  christos 
   2991  1.1  christos #undef FLD
   2992  1.1  christos }
   2993  1.1  christos   NEXT (vpc);
   2994  1.1  christos 
   2995  1.1  christos   CASE (sem, INSN_WBR30U) : /* wbr30u $rt,$_index,$count */
   2996  1.1  christos {
   2997  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   2998  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2999  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3000  1.1  christos   int UNUSED written = 0;
   3001  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3002  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3003  1.1  christos 
   3004  1.1  christos ((void) 0); /*nop*/
   3005  1.1  christos 
   3006  1.1  christos #undef FLD
   3007  1.1  christos }
   3008  1.1  christos   NEXT (vpc);
   3009  1.1  christos 
   3010  1.1  christos   CASE (sem, INSN_WX) : /* wx $rd,$rt */
   3011  1.1  christos {
   3012  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3013  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3014  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3015  1.1  christos   int UNUSED written = 0;
   3016  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3017  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3018  1.1  christos 
   3019  1.1  christos ((void) 0); /*nop*/
   3020  1.1  christos 
   3021  1.1  christos #undef FLD
   3022  1.1  christos }
   3023  1.1  christos   NEXT (vpc);
   3024  1.1  christos 
   3025  1.1  christos   CASE (sem, INSN_WXU) : /* wxu $rd,$rt */
   3026  1.1  christos {
   3027  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3028  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3029  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3030  1.1  christos   int UNUSED written = 0;
   3031  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3032  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3033  1.1  christos 
   3034  1.1  christos ((void) 0); /*nop*/
   3035  1.1  christos 
   3036  1.1  christos #undef FLD
   3037  1.1  christos }
   3038  1.1  christos   NEXT (vpc);
   3039  1.1  christos 
   3040  1.1  christos   CASE (sem, INSN_WXR1) : /* wxr1 $rt,$_index,$count */
   3041  1.1  christos {
   3042  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3043  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3044  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3045  1.1  christos   int UNUSED written = 0;
   3046  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3047  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3048  1.1  christos 
   3049  1.1  christos ((void) 0); /*nop*/
   3050  1.1  christos 
   3051  1.1  christos #undef FLD
   3052  1.1  christos }
   3053  1.1  christos   NEXT (vpc);
   3054  1.1  christos 
   3055  1.1  christos   CASE (sem, INSN_WXR1U) : /* wxr1u $rt,$_index,$count */
   3056  1.1  christos {
   3057  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3058  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3059  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3060  1.1  christos   int UNUSED written = 0;
   3061  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3062  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3063  1.1  christos 
   3064  1.1  christos ((void) 0); /*nop*/
   3065  1.1  christos 
   3066  1.1  christos #undef FLD
   3067  1.1  christos }
   3068  1.1  christos   NEXT (vpc);
   3069  1.1  christos 
   3070  1.1  christos   CASE (sem, INSN_WXR30) : /* wxr30 $rt,$_index,$count */
   3071  1.1  christos {
   3072  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3073  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3074  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3075  1.1  christos   int UNUSED written = 0;
   3076  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3077  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3078  1.1  christos 
   3079  1.1  christos ((void) 0); /*nop*/
   3080  1.1  christos 
   3081  1.1  christos #undef FLD
   3082  1.1  christos }
   3083  1.1  christos   NEXT (vpc);
   3084  1.1  christos 
   3085  1.1  christos   CASE (sem, INSN_WXR30U) : /* wxr30u $rt,$_index,$count */
   3086  1.1  christos {
   3087  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3088  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3089  1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3090  1.1  christos   int UNUSED written = 0;
   3091  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3092  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3093  1.1  christos 
   3094  1.1  christos ((void) 0); /*nop*/
   3095  1.1  christos 
   3096  1.1  christos #undef FLD
   3097  1.1  christos }
   3098  1.1  christos   NEXT (vpc);
   3099  1.1  christos 
   3100  1.1  christos   CASE (sem, INSN_LDW) : /* ldw $rt,$lo16($base) */
   3101  1.1  christos {
   3102  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3103  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3104  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   3105  1.1  christos   int UNUSED written = 0;
   3106  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3107  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3108  1.1  christos 
   3109  1.1  christos {
   3110  1.1  christos   SI tmp_addr;
   3111  1.1  christos   tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3));
   3112  1.1  christos   {
   3113  1.1  christos     SI opval = GETMEMSI (current_cpu, pc, tmp_addr);
   3114  1.1  christos     SET_H_GR (ADDSI (FLD (f_rt), 1), opval);
   3115  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   3116  1.1  christos   }
   3117  1.1  christos   {
   3118  1.1  christos     SI opval = GETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4));
   3119  1.1  christos     SET_H_GR (FLD (f_rt), opval);
   3120  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   3121  1.1  christos   }
   3122  1.1  christos }
   3123  1.1  christos 
   3124  1.1  christos #undef FLD
   3125  1.1  christos }
   3126  1.1  christos   NEXT (vpc);
   3127  1.1  christos 
   3128  1.1  christos   CASE (sem, INSN_SDW) : /* sdw $rt,$lo16($base) */
   3129  1.1  christos {
   3130  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3131  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3132  1.1  christos #define FLD(f) abuf->fields.sfmt_addi.f
   3133  1.1  christos   int UNUSED written = 0;
   3134  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3135  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3136  1.1  christos 
   3137  1.1  christos {
   3138  1.1  christos   SI tmp_addr;
   3139  1.1  christos   tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3));
   3140  1.1  christos   {
   3141  1.1  christos     SI opval = GET_H_GR (FLD (f_rt));
   3142  1.1  christos     SETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4), opval);
   3143  1.1  christos     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   3144  1.1  christos   }
   3145  1.1  christos   {
   3146  1.1  christos     SI opval = GET_H_GR (ADDSI (FLD (f_rt), 1));
   3147  1.1  christos     SETMEMSI (current_cpu, pc, tmp_addr, opval);
   3148  1.1  christos     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
   3149  1.1  christos   }
   3150  1.1  christos }
   3151  1.1  christos 
   3152  1.1  christos #undef FLD
   3153  1.1  christos }
   3154  1.1  christos   NEXT (vpc);
   3155  1.1  christos 
   3156  1.1  christos   CASE (sem, INSN_J) : /* j $jmptarg */
   3157  1.1  christos {
   3158  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3159  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3160  1.1  christos #define FLD(f) abuf->fields.sfmt_j.f
   3161  1.1  christos   int UNUSED written = 0;
   3162  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3163  1.1  christos   SEM_BRANCH_INIT
   3164  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3165  1.1  christos 
   3166  1.1  christos {
   3167  1.1  christos   {
   3168  1.1  christos     USI opval = FLD (i_jmptarg);
   3169  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   3170  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   3171  1.1  christos   }
   3172  1.1  christos }
   3173  1.1  christos 
   3174  1.1  christos   SEM_BRANCH_FINI (vpc);
   3175  1.1  christos #undef FLD
   3176  1.1  christos }
   3177  1.1  christos   NEXT (vpc);
   3178  1.1  christos 
   3179  1.1  christos   CASE (sem, INSN_JAL) : /* jal $jmptarg */
   3180  1.1  christos {
   3181  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3182  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3183  1.1  christos #define FLD(f) abuf->fields.sfmt_j.f
   3184  1.1  christos   int UNUSED written = 0;
   3185  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3186  1.1  christos   SEM_BRANCH_INIT
   3187  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3188  1.1  christos 
   3189  1.1  christos {
   3190  1.1  christos {
   3191  1.1  christos   {
   3192  1.1  christos     SI opval = ADDSI (pc, 8);
   3193  1.1  christos     SET_H_GR (((UINT) 31), opval);
   3194  1.1  christos     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
   3195  1.1  christos   }
   3196  1.1  christos   {
   3197  1.1  christos     USI opval = FLD (i_jmptarg);
   3198  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   3199  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   3200  1.1  christos   }
   3201  1.1  christos }
   3202  1.1  christos }
   3203  1.1  christos 
   3204  1.1  christos   SEM_BRANCH_FINI (vpc);
   3205  1.1  christos #undef FLD
   3206  1.1  christos }
   3207  1.1  christos   NEXT (vpc);
   3208  1.1  christos 
   3209  1.1  christos   CASE (sem, INSN_BMB) : /* bmb $rs,$rt,$offset */
   3210  1.1  christos {
   3211  1.1  christos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
   3212  1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3213  1.1  christos #define FLD(f) abuf->fields.sfmt_bbi.f
   3214  1.1  christos   int UNUSED written = 0;
   3215  1.1  christos   IADDR UNUSED pc = abuf->addr;
   3216  1.1  christos   SEM_BRANCH_INIT
   3217  1.1  christos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3218  1.1  christos 
   3219  1.1  christos {
   3220  1.1  christos   BI tmp_branch_;
   3221  1.1  christos   tmp_branch_ = 0;
   3222  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) {
   3223  1.1  christos   tmp_branch_ = 1;
   3224  1.1  christos }
   3225  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) {
   3226  1.1  christos   tmp_branch_ = 1;
   3227  1.1  christos }
   3228  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) {
   3229  1.1  christos   tmp_branch_ = 1;
   3230  1.1  christos }
   3231  1.1  christos if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) {
   3232  1.1  christos   tmp_branch_ = 1;
   3233  1.1  christos }
   3234  1.1  christos if (tmp_branch_) {
   3235  1.1  christos {
   3236  1.1  christos   {
   3237  1.1  christos     USI opval = FLD (i_offset);
   3238  1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
   3239  1.1  christos     written |= (1 << 3);
   3240  1.1  christos     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
   3241  1.1  christos   }
   3242  1.1  christos }
   3243  1.1  christos }
   3244  1.1  christos }
   3245  1.1  christos 
   3246  1.1  christos   abuf->written = written;
   3247  1.1  christos   SEM_BRANCH_FINI (vpc);
   3248  1.1  christos #undef FLD
   3249  1.1  christos }
   3250  1.1  christos   NEXT (vpc);
   3251  1.1  christos 
   3252  1.1  christos 
   3253  1.1  christos     }
   3254  1.1  christos   ENDSWITCH (sem) /* End of semantic switch.  */
   3255  1.1  christos 
   3256  1.1  christos   /* At this point `vpc' contains the next insn to execute.  */
   3257  1.1  christos }
   3258  1.1  christos 
   3259  1.1  christos #undef DEFINE_SWITCH
   3260  1.1  christos #endif /* DEFINE_SWITCH */
   3261