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