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