Home | History | Annotate | Line # | Download | only in or1k
sem.c revision 1.1.1.3.2.1
      1          1.1  christos /* Simulator instruction semantics for or1k32bf.
      2          1.1  christos 
      3          1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      4          1.1  christos 
      5  1.1.1.3.2.1  perseant Copyright (C) 1996-2024 Free Software Foundation, Inc.
      6          1.1  christos 
      7          1.1  christos This file is part of the GNU simulators.
      8          1.1  christos 
      9          1.1  christos    This file is free software; you can redistribute it and/or modify
     10          1.1  christos    it under the terms of the GNU General Public License as published by
     11          1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     12          1.1  christos    any later version.
     13          1.1  christos 
     14          1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     15          1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     16          1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     17          1.1  christos    License for more details.
     18          1.1  christos 
     19          1.1  christos    You should have received a copy of the GNU General Public License along
     20          1.1  christos    with this program; if not, write to the Free Software Foundation, Inc.,
     21          1.1  christos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     22          1.1  christos 
     23          1.1  christos */
     24          1.1  christos 
     25          1.1  christos #define WANT_CPU or1k32bf
     26          1.1  christos #define WANT_CPU_OR1K32BF
     27          1.1  christos 
     28          1.1  christos #include "sim-main.h"
     29          1.1  christos #include "cgen-mem.h"
     30          1.1  christos #include "cgen-ops.h"
     31          1.1  christos 
     32          1.1  christos #undef GET_ATTR
     33          1.1  christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
     34          1.1  christos 
     35          1.1  christos /* This is used so that we can compile two copies of the semantic code,
     36          1.1  christos    one with full feature support and one without that runs fast(er).
     37          1.1  christos    FAST_P, when desired, is defined on the command line, -DFAST_P=1.  */
     38          1.1  christos #if FAST_P
     39          1.1  christos #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
     40          1.1  christos #undef CGEN_TRACE_RESULT
     41          1.1  christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
     42          1.1  christos #else
     43          1.1  christos #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
     44          1.1  christos #endif
     45          1.1  christos 
     46          1.1  christos /* x-invalid: --invalid-- */
     47          1.1  christos 
     48          1.1  christos static SEM_PC
     49          1.1  christos SEM_FN_NAME (or1k32bf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
     50          1.1  christos {
     51          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
     52          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
     53          1.1  christos   int UNUSED written = 0;
     54          1.1  christos   IADDR UNUSED pc = abuf->addr;
     55          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
     56          1.1  christos 
     57          1.1  christos   {
     58          1.1  christos     /* Update the recorded pc in the cpu state struct.
     59          1.1  christos        Only necessary for WITH_SCACHE case, but to avoid the
     60          1.1  christos        conditional compilation ....  */
     61          1.1  christos     SET_H_PC (pc);
     62          1.1  christos     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
     63          1.1  christos        using the default-insn-bitsize spec.  When executing insns in parallel
     64          1.1  christos        we may want to queue the fault and continue execution.  */
     65          1.1  christos     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
     66          1.1  christos     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
     67          1.1  christos   }
     68          1.1  christos 
     69          1.1  christos   return vpc;
     70          1.1  christos #undef FLD
     71          1.1  christos }
     72          1.1  christos 
     73          1.1  christos /* x-after: --after-- */
     74          1.1  christos 
     75          1.1  christos static SEM_PC
     76          1.1  christos SEM_FN_NAME (or1k32bf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
     77          1.1  christos {
     78          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
     79          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
     80          1.1  christos   int UNUSED written = 0;
     81          1.1  christos   IADDR UNUSED pc = abuf->addr;
     82          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
     83          1.1  christos 
     84          1.1  christos   {
     85          1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
     86          1.1  christos     or1k32bf_pbb_after (current_cpu, sem_arg);
     87          1.1  christos #endif
     88          1.1  christos   }
     89          1.1  christos 
     90          1.1  christos   return vpc;
     91          1.1  christos #undef FLD
     92          1.1  christos }
     93          1.1  christos 
     94          1.1  christos /* x-before: --before-- */
     95          1.1  christos 
     96          1.1  christos static SEM_PC
     97          1.1  christos SEM_FN_NAME (or1k32bf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
     98          1.1  christos {
     99          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    100          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    101          1.1  christos   int UNUSED written = 0;
    102          1.1  christos   IADDR UNUSED pc = abuf->addr;
    103          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    104          1.1  christos 
    105          1.1  christos   {
    106          1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    107          1.1  christos     or1k32bf_pbb_before (current_cpu, sem_arg);
    108          1.1  christos #endif
    109          1.1  christos   }
    110          1.1  christos 
    111          1.1  christos   return vpc;
    112          1.1  christos #undef FLD
    113          1.1  christos }
    114          1.1  christos 
    115          1.1  christos /* x-cti-chain: --cti-chain-- */
    116          1.1  christos 
    117          1.1  christos static SEM_PC
    118          1.1  christos SEM_FN_NAME (or1k32bf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    119          1.1  christos {
    120          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    121          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    122          1.1  christos   int UNUSED written = 0;
    123          1.1  christos   IADDR UNUSED pc = abuf->addr;
    124          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    125          1.1  christos 
    126          1.1  christos   {
    127          1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    128          1.1  christos #ifdef DEFINE_SWITCH
    129          1.1  christos     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
    130          1.1  christos 			       pbb_br_type, pbb_br_npc);
    131          1.1  christos     BREAK (sem);
    132          1.1  christos #else
    133          1.1  christos     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
    134          1.1  christos     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
    135          1.1  christos 			       CPU_PBB_BR_TYPE (current_cpu),
    136          1.1  christos 			       CPU_PBB_BR_NPC (current_cpu));
    137          1.1  christos #endif
    138          1.1  christos #endif
    139          1.1  christos   }
    140          1.1  christos 
    141          1.1  christos   return vpc;
    142          1.1  christos #undef FLD
    143          1.1  christos }
    144          1.1  christos 
    145          1.1  christos /* x-chain: --chain-- */
    146          1.1  christos 
    147          1.1  christos static SEM_PC
    148          1.1  christos SEM_FN_NAME (or1k32bf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    149          1.1  christos {
    150          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    151          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    152          1.1  christos   int UNUSED written = 0;
    153          1.1  christos   IADDR UNUSED pc = abuf->addr;
    154          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    155          1.1  christos 
    156          1.1  christos   {
    157          1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    158          1.1  christos     vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
    159          1.1  christos #ifdef DEFINE_SWITCH
    160          1.1  christos     BREAK (sem);
    161          1.1  christos #endif
    162          1.1  christos #endif
    163          1.1  christos   }
    164          1.1  christos 
    165          1.1  christos   return vpc;
    166          1.1  christos #undef FLD
    167          1.1  christos }
    168          1.1  christos 
    169          1.1  christos /* x-begin: --begin-- */
    170          1.1  christos 
    171          1.1  christos static SEM_PC
    172          1.1  christos SEM_FN_NAME (or1k32bf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    173          1.1  christos {
    174          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    175          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    176          1.1  christos   int UNUSED written = 0;
    177          1.1  christos   IADDR UNUSED pc = abuf->addr;
    178          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
    179          1.1  christos 
    180          1.1  christos   {
    181          1.1  christos #if WITH_SCACHE_PBB_OR1K32BF
    182          1.1  christos #if defined DEFINE_SWITCH || defined FAST_P
    183          1.1  christos     /* In the switch case FAST_P is a constant, allowing several optimizations
    184          1.1  christos        in any called inline functions.  */
    185          1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
    186          1.1  christos #else
    187          1.1  christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
    188          1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
    189          1.1  christos #else
    190          1.1  christos     vpc = or1k32bf_pbb_begin (current_cpu, 0);
    191          1.1  christos #endif
    192          1.1  christos #endif
    193          1.1  christos #endif
    194          1.1  christos   }
    195          1.1  christos 
    196          1.1  christos   return vpc;
    197          1.1  christos #undef FLD
    198          1.1  christos }
    199          1.1  christos 
    200          1.1  christos /* l-j: l.j ${disp26} */
    201          1.1  christos 
    202          1.1  christos static SEM_PC
    203          1.1  christos SEM_FN_NAME (or1k32bf,l_j) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    204          1.1  christos {
    205          1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    206          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    207          1.1  christos   int UNUSED written = 0;
    208          1.1  christos   IADDR UNUSED pc = abuf->addr;
    209          1.1  christos   SEM_BRANCH_INIT
    210          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    211          1.1  christos 
    212          1.1  christos {
    213          1.1  christos {
    214          1.1  christos   {
    215          1.1  christos     USI opval = FLD (i_disp26);
    216          1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    217          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    218          1.1  christos   }
    219          1.1  christos }
    220          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    221          1.1  christos if (1)
    222          1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    223          1.1  christos }
    224          1.1  christos }
    225          1.1  christos 
    226          1.1  christos   SEM_BRANCH_FINI (vpc);
    227          1.1  christos   return vpc;
    228          1.1  christos #undef FLD
    229          1.1  christos }
    230          1.1  christos 
    231          1.1  christos /* l-adrp: l.adrp $rD,${disp21} */
    232          1.1  christos 
    233          1.1  christos static SEM_PC
    234          1.1  christos SEM_FN_NAME (or1k32bf,l_adrp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    235          1.1  christos {
    236          1.1  christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
    237          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    238          1.1  christos   int UNUSED written = 0;
    239          1.1  christos   IADDR UNUSED pc = abuf->addr;
    240          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    241          1.1  christos 
    242          1.1  christos   {
    243          1.1  christos     USI opval = FLD (i_disp21);
    244          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    245          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    246          1.1  christos   }
    247          1.1  christos 
    248          1.1  christos   return vpc;
    249          1.1  christos #undef FLD
    250          1.1  christos }
    251          1.1  christos 
    252          1.1  christos /* l-jal: l.jal ${disp26} */
    253          1.1  christos 
    254          1.1  christos static SEM_PC
    255          1.1  christos SEM_FN_NAME (or1k32bf,l_jal) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    256          1.1  christos {
    257          1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    258          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    259          1.1  christos   int UNUSED written = 0;
    260          1.1  christos   IADDR UNUSED pc = abuf->addr;
    261          1.1  christos   SEM_BRANCH_INIT
    262          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    263          1.1  christos 
    264          1.1  christos {
    265          1.1  christos   {
    266          1.1  christos     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
    267          1.1  christos     SET_H_GPR (((UINT) 9), opval);
    268          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    269          1.1  christos   }
    270          1.1  christos {
    271          1.1  christos {
    272          1.1  christos   {
    273          1.1  christos     USI opval = FLD (i_disp26);
    274          1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    275          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    276          1.1  christos   }
    277          1.1  christos }
    278          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    279          1.1  christos if (1)
    280          1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    281          1.1  christos }
    282          1.1  christos }
    283          1.1  christos }
    284          1.1  christos 
    285          1.1  christos   SEM_BRANCH_FINI (vpc);
    286          1.1  christos   return vpc;
    287          1.1  christos #undef FLD
    288          1.1  christos }
    289          1.1  christos 
    290          1.1  christos /* l-jr: l.jr $rB */
    291          1.1  christos 
    292          1.1  christos static SEM_PC
    293          1.1  christos SEM_FN_NAME (or1k32bf,l_jr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    294          1.1  christos {
    295          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
    296          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    297          1.1  christos   int UNUSED written = 0;
    298          1.1  christos   IADDR UNUSED pc = abuf->addr;
    299          1.1  christos   SEM_BRANCH_INIT
    300          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    301          1.1  christos 
    302          1.1  christos {
    303          1.1  christos {
    304          1.1  christos   {
    305          1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
    306          1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    307          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    308          1.1  christos   }
    309          1.1  christos }
    310          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    311          1.1  christos if (1)
    312          1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    313          1.1  christos }
    314          1.1  christos }
    315          1.1  christos 
    316          1.1  christos   SEM_BRANCH_FINI (vpc);
    317          1.1  christos   return vpc;
    318          1.1  christos #undef FLD
    319          1.1  christos }
    320          1.1  christos 
    321          1.1  christos /* l-jalr: l.jalr $rB */
    322          1.1  christos 
    323          1.1  christos static SEM_PC
    324          1.1  christos SEM_FN_NAME (or1k32bf,l_jalr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    325          1.1  christos {
    326          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
    327          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    328          1.1  christos   int UNUSED written = 0;
    329          1.1  christos   IADDR UNUSED pc = abuf->addr;
    330          1.1  christos   SEM_BRANCH_INIT
    331          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    332          1.1  christos 
    333          1.1  christos {
    334          1.1  christos   {
    335          1.1  christos     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
    336          1.1  christos     SET_H_GPR (((UINT) 9), opval);
    337          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    338          1.1  christos   }
    339          1.1  christos {
    340          1.1  christos {
    341          1.1  christos   {
    342          1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
    343          1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    344          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    345          1.1  christos   }
    346          1.1  christos }
    347          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    348          1.1  christos if (1)
    349          1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    350          1.1  christos }
    351          1.1  christos }
    352          1.1  christos }
    353          1.1  christos 
    354          1.1  christos   SEM_BRANCH_FINI (vpc);
    355          1.1  christos   return vpc;
    356          1.1  christos #undef FLD
    357          1.1  christos }
    358          1.1  christos 
    359          1.1  christos /* l-bnf: l.bnf ${disp26} */
    360          1.1  christos 
    361          1.1  christos static SEM_PC
    362          1.1  christos SEM_FN_NAME (or1k32bf,l_bnf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    363          1.1  christos {
    364          1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    365          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    366          1.1  christos   int UNUSED written = 0;
    367          1.1  christos   IADDR UNUSED pc = abuf->addr;
    368          1.1  christos   SEM_BRANCH_INIT
    369          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    370          1.1  christos 
    371          1.1  christos {
    372          1.1  christos if (NOTSI (GET_H_SYS_SR_F ())) {
    373          1.1  christos {
    374          1.1  christos   {
    375          1.1  christos     USI opval = FLD (i_disp26);
    376          1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    377          1.1  christos     written |= (1 << 4);
    378          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    379          1.1  christos   }
    380          1.1  christos }
    381          1.1  christos } else {
    382          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    383          1.1  christos {
    384          1.1  christos   {
    385          1.1  christos     USI opval = ADDSI (pc, 4);
    386          1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    387          1.1  christos     written |= (1 << 4);
    388          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    389          1.1  christos   }
    390          1.1  christos }
    391          1.1  christos }
    392          1.1  christos }
    393          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    394          1.1  christos if (1)
    395          1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    396          1.1  christos }
    397          1.1  christos }
    398          1.1  christos 
    399          1.1  christos   abuf->written = written;
    400          1.1  christos   SEM_BRANCH_FINI (vpc);
    401          1.1  christos   return vpc;
    402          1.1  christos #undef FLD
    403          1.1  christos }
    404          1.1  christos 
    405          1.1  christos /* l-bf: l.bf ${disp26} */
    406          1.1  christos 
    407          1.1  christos static SEM_PC
    408          1.1  christos SEM_FN_NAME (or1k32bf,l_bf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    409          1.1  christos {
    410          1.1  christos #define FLD(f) abuf->fields.sfmt_l_j.f
    411          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    412          1.1  christos   int UNUSED written = 0;
    413          1.1  christos   IADDR UNUSED pc = abuf->addr;
    414          1.1  christos   SEM_BRANCH_INIT
    415          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    416          1.1  christos 
    417          1.1  christos {
    418          1.1  christos if (GET_H_SYS_SR_F ()) {
    419          1.1  christos {
    420          1.1  christos   {
    421          1.1  christos     USI opval = FLD (i_disp26);
    422          1.1  christos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
    423          1.1  christos     written |= (1 << 4);
    424          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    425          1.1  christos   }
    426          1.1  christos }
    427          1.1  christos } else {
    428          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    429          1.1  christos {
    430          1.1  christos   {
    431          1.1  christos     USI opval = ADDSI (pc, 4);
    432          1.1  christos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
    433          1.1  christos     written |= (1 << 4);
    434          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
    435          1.1  christos   }
    436          1.1  christos }
    437          1.1  christos }
    438          1.1  christos }
    439          1.1  christos if (GET_H_SYS_CPUCFGR_ND ()) {
    440          1.1  christos if (1)
    441          1.1  christos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
    442          1.1  christos }
    443          1.1  christos }
    444          1.1  christos 
    445          1.1  christos   abuf->written = written;
    446          1.1  christos   SEM_BRANCH_FINI (vpc);
    447          1.1  christos   return vpc;
    448          1.1  christos #undef FLD
    449          1.1  christos }
    450          1.1  christos 
    451          1.1  christos /* l-trap: l.trap ${uimm16} */
    452          1.1  christos 
    453          1.1  christos static SEM_PC
    454          1.1  christos SEM_FN_NAME (or1k32bf,l_trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    455          1.1  christos {
    456          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    457          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    458          1.1  christos   int UNUSED written = 0;
    459          1.1  christos   IADDR UNUSED pc = abuf->addr;
    460          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    461          1.1  christos 
    462          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
    463          1.1  christos 
    464          1.1  christos   return vpc;
    465          1.1  christos #undef FLD
    466          1.1  christos }
    467          1.1  christos 
    468          1.1  christos /* l-sys: l.sys ${uimm16} */
    469          1.1  christos 
    470          1.1  christos static SEM_PC
    471          1.1  christos SEM_FN_NAME (or1k32bf,l_sys) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    472          1.1  christos {
    473          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    474          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    475          1.1  christos   int UNUSED written = 0;
    476          1.1  christos   IADDR UNUSED pc = abuf->addr;
    477          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    478          1.1  christos 
    479          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
    480          1.1  christos 
    481          1.1  christos   return vpc;
    482          1.1  christos #undef FLD
    483          1.1  christos }
    484          1.1  christos 
    485          1.1  christos /* l-msync: l.msync */
    486          1.1  christos 
    487          1.1  christos static SEM_PC
    488          1.1  christos SEM_FN_NAME (or1k32bf,l_msync) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    489          1.1  christos {
    490          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    491          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    492          1.1  christos   int UNUSED written = 0;
    493          1.1  christos   IADDR UNUSED pc = abuf->addr;
    494          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    495          1.1  christos 
    496          1.1  christos ((void) 0); /*nop*/
    497          1.1  christos 
    498          1.1  christos   return vpc;
    499          1.1  christos #undef FLD
    500          1.1  christos }
    501          1.1  christos 
    502          1.1  christos /* l-psync: l.psync */
    503          1.1  christos 
    504          1.1  christos static SEM_PC
    505          1.1  christos SEM_FN_NAME (or1k32bf,l_psync) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    506          1.1  christos {
    507          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    508          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    509          1.1  christos   int UNUSED written = 0;
    510          1.1  christos   IADDR UNUSED pc = abuf->addr;
    511          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    512          1.1  christos 
    513          1.1  christos ((void) 0); /*nop*/
    514          1.1  christos 
    515          1.1  christos   return vpc;
    516          1.1  christos #undef FLD
    517          1.1  christos }
    518          1.1  christos 
    519          1.1  christos /* l-csync: l.csync */
    520          1.1  christos 
    521          1.1  christos static SEM_PC
    522          1.1  christos SEM_FN_NAME (or1k32bf,l_csync) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    523          1.1  christos {
    524          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    525          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    526          1.1  christos   int UNUSED written = 0;
    527          1.1  christos   IADDR UNUSED pc = abuf->addr;
    528          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    529          1.1  christos 
    530          1.1  christos ((void) 0); /*nop*/
    531          1.1  christos 
    532          1.1  christos   return vpc;
    533          1.1  christos #undef FLD
    534          1.1  christos }
    535          1.1  christos 
    536          1.1  christos /* l-rfe: l.rfe */
    537          1.1  christos 
    538          1.1  christos static SEM_PC
    539          1.1  christos SEM_FN_NAME (or1k32bf,l_rfe) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    540          1.1  christos {
    541          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
    542          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    543          1.1  christos   int UNUSED written = 0;
    544          1.1  christos   IADDR UNUSED pc = abuf->addr;
    545          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    546          1.1  christos 
    547          1.1  christos or1k32bf_rfe (current_cpu);
    548          1.1  christos 
    549          1.1  christos   return vpc;
    550          1.1  christos #undef FLD
    551          1.1  christos }
    552          1.1  christos 
    553          1.1  christos /* l-nop-imm: l.nop ${uimm16} */
    554          1.1  christos 
    555          1.1  christos static SEM_PC
    556          1.1  christos SEM_FN_NAME (or1k32bf,l_nop_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    557          1.1  christos {
    558          1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    559          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    560          1.1  christos   int UNUSED written = 0;
    561          1.1  christos   IADDR UNUSED pc = abuf->addr;
    562          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    563          1.1  christos 
    564          1.1  christos or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
    565          1.1  christos 
    566          1.1  christos   return vpc;
    567          1.1  christos #undef FLD
    568          1.1  christos }
    569          1.1  christos 
    570          1.1  christos /* l-movhi: l.movhi $rD,$uimm16 */
    571          1.1  christos 
    572          1.1  christos static SEM_PC
    573          1.1  christos SEM_FN_NAME (or1k32bf,l_movhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    574          1.1  christos {
    575          1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    576          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    577          1.1  christos   int UNUSED written = 0;
    578          1.1  christos   IADDR UNUSED pc = abuf->addr;
    579          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    580          1.1  christos 
    581          1.1  christos   {
    582          1.1  christos     USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
    583          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    584          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    585          1.1  christos   }
    586          1.1  christos 
    587          1.1  christos   return vpc;
    588          1.1  christos #undef FLD
    589          1.1  christos }
    590          1.1  christos 
    591          1.1  christos /* l-macrc: l.macrc $rD */
    592          1.1  christos 
    593          1.1  christos static SEM_PC
    594          1.1  christos SEM_FN_NAME (or1k32bf,l_macrc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    595          1.1  christos {
    596          1.1  christos #define FLD(f) abuf->fields.sfmt_l_adrp.f
    597          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    598          1.1  christos   int UNUSED written = 0;
    599          1.1  christos   IADDR UNUSED pc = abuf->addr;
    600          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    601          1.1  christos 
    602          1.1  christos {
    603          1.1  christos   {
    604          1.1  christos     USI opval = GET_H_MAC_MACLO ();
    605          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    606          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    607          1.1  christos   }
    608          1.1  christos   {
    609          1.1  christos     USI opval = 0;
    610          1.1  christos     SET_H_MAC_MACLO (opval);
    611          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
    612          1.1  christos   }
    613          1.1  christos   {
    614          1.1  christos     USI opval = 0;
    615          1.1  christos     SET_H_MAC_MACHI (opval);
    616          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
    617          1.1  christos   }
    618          1.1  christos }
    619          1.1  christos 
    620          1.1  christos   return vpc;
    621          1.1  christos #undef FLD
    622          1.1  christos }
    623          1.1  christos 
    624          1.1  christos /* l-mfspr: l.mfspr $rD,$rA,${uimm16} */
    625          1.1  christos 
    626          1.1  christos static SEM_PC
    627          1.1  christos SEM_FN_NAME (or1k32bf,l_mfspr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    628          1.1  christos {
    629          1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
    630          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    631          1.1  christos   int UNUSED written = 0;
    632          1.1  christos   IADDR UNUSED pc = abuf->addr;
    633          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    634          1.1  christos 
    635          1.1  christos   {
    636          1.1  christos     USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
    637          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    638          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    639          1.1  christos   }
    640          1.1  christos 
    641          1.1  christos   return vpc;
    642          1.1  christos #undef FLD
    643          1.1  christos }
    644          1.1  christos 
    645          1.1  christos /* l-mtspr: l.mtspr $rA,$rB,${uimm16-split} */
    646          1.1  christos 
    647          1.1  christos static SEM_PC
    648          1.1  christos SEM_FN_NAME (or1k32bf,l_mtspr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    649          1.1  christos {
    650          1.1  christos #define FLD(f) abuf->fields.sfmt_l_mtspr.f
    651          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    652          1.1  christos   int UNUSED written = 0;
    653          1.1  christos   IADDR UNUSED pc = abuf->addr;
    654          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    655          1.1  christos 
    656          1.1  christos or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
    657          1.1  christos 
    658          1.1  christos   return vpc;
    659          1.1  christos #undef FLD
    660          1.1  christos }
    661          1.1  christos 
    662          1.1  christos /* l-lwz: l.lwz $rD,${simm16}($rA) */
    663          1.1  christos 
    664          1.1  christos static SEM_PC
    665          1.1  christos SEM_FN_NAME (or1k32bf,l_lwz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    666          1.1  christos {
    667          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    668          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    669          1.1  christos   int UNUSED written = 0;
    670          1.1  christos   IADDR UNUSED pc = abuf->addr;
    671          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    672          1.1  christos 
    673          1.1  christos   {
    674          1.1  christos     USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
    675          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    676          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    677          1.1  christos   }
    678          1.1  christos 
    679          1.1  christos   return vpc;
    680          1.1  christos #undef FLD
    681          1.1  christos }
    682          1.1  christos 
    683          1.1  christos /* l-lws: l.lws $rD,${simm16}($rA) */
    684          1.1  christos 
    685          1.1  christos static SEM_PC
    686          1.1  christos SEM_FN_NAME (or1k32bf,l_lws) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    687          1.1  christos {
    688          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    689          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    690          1.1  christos   int UNUSED written = 0;
    691          1.1  christos   IADDR UNUSED pc = abuf->addr;
    692          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    693          1.1  christos 
    694          1.1  christos   {
    695          1.1  christos     SI opval = EXTSISI (GETMEMSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
    696          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    697          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    698          1.1  christos   }
    699          1.1  christos 
    700          1.1  christos   return vpc;
    701          1.1  christos #undef FLD
    702          1.1  christos }
    703          1.1  christos 
    704          1.1  christos /* l-lwa: l.lwa $rD,${simm16}($rA) */
    705          1.1  christos 
    706          1.1  christos static SEM_PC
    707          1.1  christos SEM_FN_NAME (or1k32bf,l_lwa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    708          1.1  christos {
    709          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    710          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    711          1.1  christos   int UNUSED written = 0;
    712          1.1  christos   IADDR UNUSED pc = abuf->addr;
    713          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    714          1.1  christos 
    715          1.1  christos {
    716          1.1  christos   {
    717          1.1  christos     USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
    718          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    719          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    720          1.1  christos   }
    721          1.1  christos   {
    722          1.1  christos     BI opval = 1;
    723          1.1  christos     CPU (h_atomic_reserve) = opval;
    724          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    725          1.1  christos   }
    726          1.1  christos   {
    727          1.1  christos     SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
    728          1.1  christos     CPU (h_atomic_address) = opval;
    729          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
    730          1.1  christos   }
    731          1.1  christos }
    732          1.1  christos 
    733          1.1  christos   return vpc;
    734          1.1  christos #undef FLD
    735          1.1  christos }
    736          1.1  christos 
    737          1.1  christos /* l-lbz: l.lbz $rD,${simm16}($rA) */
    738          1.1  christos 
    739          1.1  christos static SEM_PC
    740          1.1  christos SEM_FN_NAME (or1k32bf,l_lbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    741          1.1  christos {
    742          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    743          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    744          1.1  christos   int UNUSED written = 0;
    745          1.1  christos   IADDR UNUSED pc = abuf->addr;
    746          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    747          1.1  christos 
    748          1.1  christos   {
    749          1.1  christos     USI opval = ZEXTQISI (GETMEMUQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
    750          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    751          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    752          1.1  christos   }
    753          1.1  christos 
    754          1.1  christos   return vpc;
    755          1.1  christos #undef FLD
    756          1.1  christos }
    757          1.1  christos 
    758          1.1  christos /* l-lbs: l.lbs $rD,${simm16}($rA) */
    759          1.1  christos 
    760          1.1  christos static SEM_PC
    761          1.1  christos SEM_FN_NAME (or1k32bf,l_lbs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    762          1.1  christos {
    763          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    764          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    765          1.1  christos   int UNUSED written = 0;
    766          1.1  christos   IADDR UNUSED pc = abuf->addr;
    767          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    768          1.1  christos 
    769          1.1  christos   {
    770          1.1  christos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
    771          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    772          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    773          1.1  christos   }
    774          1.1  christos 
    775          1.1  christos   return vpc;
    776          1.1  christos #undef FLD
    777          1.1  christos }
    778          1.1  christos 
    779          1.1  christos /* l-lhz: l.lhz $rD,${simm16}($rA) */
    780          1.1  christos 
    781          1.1  christos static SEM_PC
    782          1.1  christos SEM_FN_NAME (or1k32bf,l_lhz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    783          1.1  christos {
    784          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    785          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    786          1.1  christos   int UNUSED written = 0;
    787          1.1  christos   IADDR UNUSED pc = abuf->addr;
    788          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    789          1.1  christos 
    790          1.1  christos   {
    791          1.1  christos     USI opval = ZEXTHISI (GETMEMUHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
    792          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    793          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    794          1.1  christos   }
    795          1.1  christos 
    796          1.1  christos   return vpc;
    797          1.1  christos #undef FLD
    798          1.1  christos }
    799          1.1  christos 
    800          1.1  christos /* l-lhs: l.lhs $rD,${simm16}($rA) */
    801          1.1  christos 
    802          1.1  christos static SEM_PC
    803          1.1  christos SEM_FN_NAME (or1k32bf,l_lhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    804          1.1  christos {
    805          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
    806          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    807          1.1  christos   int UNUSED written = 0;
    808          1.1  christos   IADDR UNUSED pc = abuf->addr;
    809          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    810          1.1  christos 
    811          1.1  christos   {
    812          1.1  christos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
    813          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    814          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    815          1.1  christos   }
    816          1.1  christos 
    817          1.1  christos   return vpc;
    818          1.1  christos #undef FLD
    819          1.1  christos }
    820          1.1  christos 
    821          1.1  christos /* l-sw: l.sw ${simm16-split}($rA),$rB */
    822          1.1  christos 
    823          1.1  christos static SEM_PC
    824          1.1  christos SEM_FN_NAME (or1k32bf,l_sw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    825          1.1  christos {
    826          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    827          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    828          1.1  christos   int UNUSED written = 0;
    829          1.1  christos   IADDR UNUSED pc = abuf->addr;
    830          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    831          1.1  christos 
    832          1.1  christos {
    833          1.1  christos   SI tmp_addr;
    834          1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
    835          1.1  christos   {
    836          1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
    837          1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
    838          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    839          1.1  christos   }
    840          1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
    841          1.1  christos   {
    842          1.1  christos     BI opval = 0;
    843          1.1  christos     CPU (h_atomic_reserve) = opval;
    844          1.1  christos     written |= (1 << 4);
    845          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    846          1.1  christos   }
    847          1.1  christos }
    848          1.1  christos }
    849          1.1  christos 
    850          1.1  christos   abuf->written = written;
    851          1.1  christos   return vpc;
    852          1.1  christos #undef FLD
    853          1.1  christos }
    854          1.1  christos 
    855          1.1  christos /* l-sb: l.sb ${simm16-split}($rA),$rB */
    856          1.1  christos 
    857          1.1  christos static SEM_PC
    858          1.1  christos SEM_FN_NAME (or1k32bf,l_sb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    859          1.1  christos {
    860          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    861          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    862          1.1  christos   int UNUSED written = 0;
    863          1.1  christos   IADDR UNUSED pc = abuf->addr;
    864          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    865          1.1  christos 
    866          1.1  christos {
    867          1.1  christos   SI tmp_addr;
    868          1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
    869          1.1  christos   {
    870          1.1  christos     UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
    871          1.1  christos     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
    872          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    873          1.1  christos   }
    874          1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
    875          1.1  christos   {
    876          1.1  christos     BI opval = 0;
    877          1.1  christos     CPU (h_atomic_reserve) = opval;
    878          1.1  christos     written |= (1 << 4);
    879          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    880          1.1  christos   }
    881          1.1  christos }
    882          1.1  christos }
    883          1.1  christos 
    884          1.1  christos   abuf->written = written;
    885          1.1  christos   return vpc;
    886          1.1  christos #undef FLD
    887          1.1  christos }
    888          1.1  christos 
    889          1.1  christos /* l-sh: l.sh ${simm16-split}($rA),$rB */
    890          1.1  christos 
    891          1.1  christos static SEM_PC
    892          1.1  christos SEM_FN_NAME (or1k32bf,l_sh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    893          1.1  christos {
    894          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    895          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    896          1.1  christos   int UNUSED written = 0;
    897          1.1  christos   IADDR UNUSED pc = abuf->addr;
    898          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    899          1.1  christos 
    900          1.1  christos {
    901          1.1  christos   SI tmp_addr;
    902          1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
    903          1.1  christos   {
    904          1.1  christos     UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
    905          1.1  christos     SETMEMUHI (current_cpu, pc, tmp_addr, opval);
    906          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    907          1.1  christos   }
    908          1.1  christos if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
    909          1.1  christos   {
    910          1.1  christos     BI opval = 0;
    911          1.1  christos     CPU (h_atomic_reserve) = opval;
    912          1.1  christos     written |= (1 << 4);
    913          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    914          1.1  christos   }
    915          1.1  christos }
    916          1.1  christos }
    917          1.1  christos 
    918          1.1  christos   abuf->written = written;
    919          1.1  christos   return vpc;
    920          1.1  christos #undef FLD
    921          1.1  christos }
    922          1.1  christos 
    923          1.1  christos /* l-swa: l.swa ${simm16-split}($rA),$rB */
    924          1.1  christos 
    925          1.1  christos static SEM_PC
    926          1.1  christos SEM_FN_NAME (or1k32bf,l_swa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    927          1.1  christos {
    928          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sw.f
    929          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    930          1.1  christos   int UNUSED written = 0;
    931          1.1  christos   IADDR UNUSED pc = abuf->addr;
    932          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    933          1.1  christos 
    934          1.1  christos {
    935          1.1  christos   SI tmp_addr;
    936          1.1  christos   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
    937          1.1  christos   {
    938          1.1  christos     USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
    939          1.1  christos     SET_H_SYS_SR_F (opval);
    940          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
    941          1.1  christos   }
    942          1.1  christos if (GET_H_SYS_SR_F ()) {
    943          1.1  christos   {
    944          1.1  christos     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
    945          1.1  christos     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
    946          1.1  christos     written |= (1 << 7);
    947          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
    948          1.1  christos   }
    949          1.1  christos }
    950          1.1  christos   {
    951          1.1  christos     BI opval = 0;
    952          1.1  christos     CPU (h_atomic_reserve) = opval;
    953          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
    954          1.1  christos   }
    955          1.1  christos }
    956          1.1  christos 
    957          1.1  christos   abuf->written = written;
    958          1.1  christos   return vpc;
    959          1.1  christos #undef FLD
    960          1.1  christos }
    961          1.1  christos 
    962          1.1  christos /* l-sll: l.sll $rD,$rA,$rB */
    963          1.1  christos 
    964          1.1  christos static SEM_PC
    965          1.1  christos SEM_FN_NAME (or1k32bf,l_sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    966          1.1  christos {
    967          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
    968          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    969          1.1  christos   int UNUSED written = 0;
    970          1.1  christos   IADDR UNUSED pc = abuf->addr;
    971          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    972          1.1  christos 
    973          1.1  christos   {
    974          1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
    975          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    976          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    977          1.1  christos   }
    978          1.1  christos 
    979          1.1  christos   return vpc;
    980          1.1  christos #undef FLD
    981          1.1  christos }
    982          1.1  christos 
    983          1.1  christos /* l-slli: l.slli $rD,$rA,${uimm6} */
    984          1.1  christos 
    985          1.1  christos static SEM_PC
    986          1.1  christos SEM_FN_NAME (or1k32bf,l_slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
    987          1.1  christos {
    988          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
    989          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
    990          1.1  christos   int UNUSED written = 0;
    991          1.1  christos   IADDR UNUSED pc = abuf->addr;
    992          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
    993          1.1  christos 
    994          1.1  christos   {
    995          1.1  christos     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
    996          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
    997          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
    998          1.1  christos   }
    999          1.1  christos 
   1000          1.1  christos   return vpc;
   1001          1.1  christos #undef FLD
   1002          1.1  christos }
   1003          1.1  christos 
   1004          1.1  christos /* l-srl: l.srl $rD,$rA,$rB */
   1005          1.1  christos 
   1006          1.1  christos static SEM_PC
   1007          1.1  christos SEM_FN_NAME (or1k32bf,l_srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1008          1.1  christos {
   1009          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1010          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1011          1.1  christos   int UNUSED written = 0;
   1012          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1013          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1014          1.1  christos 
   1015          1.1  christos   {
   1016          1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1017          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1018          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1019          1.1  christos   }
   1020          1.1  christos 
   1021          1.1  christos   return vpc;
   1022          1.1  christos #undef FLD
   1023          1.1  christos }
   1024          1.1  christos 
   1025          1.1  christos /* l-srli: l.srli $rD,$rA,${uimm6} */
   1026          1.1  christos 
   1027          1.1  christos static SEM_PC
   1028          1.1  christos SEM_FN_NAME (or1k32bf,l_srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1029          1.1  christos {
   1030          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1031          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1032          1.1  christos   int UNUSED written = 0;
   1033          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1034          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1035          1.1  christos 
   1036          1.1  christos   {
   1037          1.1  christos     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1038          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1039          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1040          1.1  christos   }
   1041          1.1  christos 
   1042          1.1  christos   return vpc;
   1043          1.1  christos #undef FLD
   1044          1.1  christos }
   1045          1.1  christos 
   1046          1.1  christos /* l-sra: l.sra $rD,$rA,$rB */
   1047          1.1  christos 
   1048          1.1  christos static SEM_PC
   1049          1.1  christos SEM_FN_NAME (or1k32bf,l_sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1050          1.1  christos {
   1051          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1052          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1053          1.1  christos   int UNUSED written = 0;
   1054          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1055          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1056          1.1  christos 
   1057          1.1  christos   {
   1058          1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1059          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1060          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1061          1.1  christos   }
   1062          1.1  christos 
   1063          1.1  christos   return vpc;
   1064          1.1  christos #undef FLD
   1065          1.1  christos }
   1066          1.1  christos 
   1067          1.1  christos /* l-srai: l.srai $rD,$rA,${uimm6} */
   1068          1.1  christos 
   1069          1.1  christos static SEM_PC
   1070          1.1  christos SEM_FN_NAME (or1k32bf,l_srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1071          1.1  christos {
   1072          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1073          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1074          1.1  christos   int UNUSED written = 0;
   1075          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1076          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1077          1.1  christos 
   1078          1.1  christos   {
   1079          1.1  christos     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1080          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1081          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1082          1.1  christos   }
   1083          1.1  christos 
   1084          1.1  christos   return vpc;
   1085          1.1  christos #undef FLD
   1086          1.1  christos }
   1087          1.1  christos 
   1088          1.1  christos /* l-ror: l.ror $rD,$rA,$rB */
   1089          1.1  christos 
   1090          1.1  christos static SEM_PC
   1091          1.1  christos SEM_FN_NAME (or1k32bf,l_ror) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1092          1.1  christos {
   1093          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1094          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1095          1.1  christos   int UNUSED written = 0;
   1096          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1097          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1098          1.1  christos 
   1099          1.1  christos   {
   1100          1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1101          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1102          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1103          1.1  christos   }
   1104          1.1  christos 
   1105          1.1  christos   return vpc;
   1106          1.1  christos #undef FLD
   1107          1.1  christos }
   1108          1.1  christos 
   1109          1.1  christos /* l-rori: l.rori $rD,$rA,${uimm6} */
   1110          1.1  christos 
   1111          1.1  christos static SEM_PC
   1112          1.1  christos SEM_FN_NAME (or1k32bf,l_rori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1113          1.1  christos {
   1114          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1115          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1116          1.1  christos   int UNUSED written = 0;
   1117          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1118          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1119          1.1  christos 
   1120          1.1  christos   {
   1121          1.1  christos     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
   1122          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1123          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1124          1.1  christos   }
   1125          1.1  christos 
   1126          1.1  christos   return vpc;
   1127          1.1  christos #undef FLD
   1128          1.1  christos }
   1129          1.1  christos 
   1130          1.1  christos /* l-and: l.and $rD,$rA,$rB */
   1131          1.1  christos 
   1132          1.1  christos static SEM_PC
   1133          1.1  christos SEM_FN_NAME (or1k32bf,l_and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1134          1.1  christos {
   1135          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1136          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1137          1.1  christos   int UNUSED written = 0;
   1138          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1139          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1140          1.1  christos 
   1141          1.1  christos   {
   1142          1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1143          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1144          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1145          1.1  christos   }
   1146          1.1  christos 
   1147          1.1  christos   return vpc;
   1148          1.1  christos #undef FLD
   1149          1.1  christos }
   1150          1.1  christos 
   1151          1.1  christos /* l-or: l.or $rD,$rA,$rB */
   1152          1.1  christos 
   1153          1.1  christos static SEM_PC
   1154          1.1  christos SEM_FN_NAME (or1k32bf,l_or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1155          1.1  christos {
   1156          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1157          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1158          1.1  christos   int UNUSED written = 0;
   1159          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1160          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1161          1.1  christos 
   1162          1.1  christos   {
   1163          1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1164          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1165          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1166          1.1  christos   }
   1167          1.1  christos 
   1168          1.1  christos   return vpc;
   1169          1.1  christos #undef FLD
   1170          1.1  christos }
   1171          1.1  christos 
   1172          1.1  christos /* l-xor: l.xor $rD,$rA,$rB */
   1173          1.1  christos 
   1174          1.1  christos static SEM_PC
   1175          1.1  christos SEM_FN_NAME (or1k32bf,l_xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1176          1.1  christos {
   1177          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1178          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1179          1.1  christos   int UNUSED written = 0;
   1180          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1181          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1182          1.1  christos 
   1183          1.1  christos   {
   1184          1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1185          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1186          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1187          1.1  christos   }
   1188          1.1  christos 
   1189          1.1  christos   return vpc;
   1190          1.1  christos #undef FLD
   1191          1.1  christos }
   1192          1.1  christos 
   1193          1.1  christos /* l-add: l.add $rD,$rA,$rB */
   1194          1.1  christos 
   1195          1.1  christos static SEM_PC
   1196          1.1  christos SEM_FN_NAME (or1k32bf,l_add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1197          1.1  christos {
   1198          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1199          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1200          1.1  christos   int UNUSED written = 0;
   1201          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1202          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1203          1.1  christos 
   1204          1.1  christos {
   1205          1.1  christos {
   1206          1.1  christos   {
   1207          1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1208          1.1  christos     SET_H_SYS_SR_CY (opval);
   1209          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1210          1.1  christos   }
   1211          1.1  christos   {
   1212          1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1213          1.1  christos     SET_H_SYS_SR_OV (opval);
   1214          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1215          1.1  christos   }
   1216          1.1  christos   {
   1217          1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1218          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1219          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1220          1.1  christos   }
   1221          1.1  christos }
   1222          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1223          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1224          1.1  christos }
   1225          1.1  christos }
   1226          1.1  christos 
   1227          1.1  christos   return vpc;
   1228          1.1  christos #undef FLD
   1229          1.1  christos }
   1230          1.1  christos 
   1231          1.1  christos /* l-sub: l.sub $rD,$rA,$rB */
   1232          1.1  christos 
   1233          1.1  christos static SEM_PC
   1234          1.1  christos SEM_FN_NAME (or1k32bf,l_sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1235          1.1  christos {
   1236          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1237          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1238          1.1  christos   int UNUSED written = 0;
   1239          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1240          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1241          1.1  christos 
   1242          1.1  christos {
   1243          1.1  christos {
   1244          1.1  christos   {
   1245          1.1  christos     BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1246          1.1  christos     SET_H_SYS_SR_CY (opval);
   1247          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1248          1.1  christos   }
   1249          1.1  christos   {
   1250          1.1  christos     BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
   1251          1.1  christos     SET_H_SYS_SR_OV (opval);
   1252          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1253          1.1  christos   }
   1254          1.1  christos   {
   1255          1.1  christos     USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1256          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1257          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1258          1.1  christos   }
   1259          1.1  christos }
   1260          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1261          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1262          1.1  christos }
   1263          1.1  christos }
   1264          1.1  christos 
   1265          1.1  christos   return vpc;
   1266          1.1  christos #undef FLD
   1267          1.1  christos }
   1268          1.1  christos 
   1269          1.1  christos /* l-addc: l.addc $rD,$rA,$rB */
   1270          1.1  christos 
   1271          1.1  christos static SEM_PC
   1272          1.1  christos SEM_FN_NAME (or1k32bf,l_addc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1273          1.1  christos {
   1274          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1275          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1276          1.1  christos   int UNUSED written = 0;
   1277          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1278          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1279          1.1  christos 
   1280          1.1  christos {
   1281          1.1  christos {
   1282          1.1  christos   BI tmp_tmp_sys_sr_cy;
   1283          1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1284          1.1  christos   {
   1285          1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1286          1.1  christos     SET_H_SYS_SR_CY (opval);
   1287          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1288          1.1  christos   }
   1289          1.1  christos   {
   1290          1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1291          1.1  christos     SET_H_SYS_SR_OV (opval);
   1292          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1293          1.1  christos   }
   1294          1.1  christos   {
   1295          1.1  christos     USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
   1296          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1297          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1298          1.1  christos   }
   1299          1.1  christos }
   1300          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1301          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1302          1.1  christos }
   1303          1.1  christos }
   1304          1.1  christos 
   1305          1.1  christos   return vpc;
   1306          1.1  christos #undef FLD
   1307          1.1  christos }
   1308          1.1  christos 
   1309          1.1  christos /* l-mul: l.mul $rD,$rA,$rB */
   1310          1.1  christos 
   1311          1.1  christos static SEM_PC
   1312          1.1  christos SEM_FN_NAME (or1k32bf,l_mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1313          1.1  christos {
   1314          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1315          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1316          1.1  christos   int UNUSED written = 0;
   1317          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1318          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1319          1.1  christos 
   1320          1.1  christos {
   1321          1.1  christos {
   1322          1.1  christos   {
   1323          1.1  christos     BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1324          1.1  christos     SET_H_SYS_SR_OV (opval);
   1325          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1326          1.1  christos   }
   1327          1.1  christos   {
   1328          1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1329          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1330          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1331          1.1  christos   }
   1332          1.1  christos }
   1333          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1334          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1335          1.1  christos }
   1336          1.1  christos }
   1337          1.1  christos 
   1338          1.1  christos   return vpc;
   1339          1.1  christos #undef FLD
   1340          1.1  christos }
   1341          1.1  christos 
   1342          1.1  christos /* l-muld: l.muld $rA,$rB */
   1343          1.1  christos 
   1344          1.1  christos static SEM_PC
   1345          1.1  christos SEM_FN_NAME (or1k32bf,l_muld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1346          1.1  christos {
   1347          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1348          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1349          1.1  christos   int UNUSED written = 0;
   1350          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1351          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1352          1.1  christos 
   1353          1.1  christos {
   1354          1.1  christos   DI tmp_result;
   1355          1.1  christos   tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   1356          1.1  christos   {
   1357          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1358          1.1  christos     SET_H_MAC_MACHI (opval);
   1359          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1360          1.1  christos   }
   1361          1.1  christos   {
   1362          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1363          1.1  christos     SET_H_MAC_MACLO (opval);
   1364          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1365          1.1  christos   }
   1366          1.1  christos }
   1367          1.1  christos 
   1368          1.1  christos   return vpc;
   1369          1.1  christos #undef FLD
   1370          1.1  christos }
   1371          1.1  christos 
   1372          1.1  christos /* l-mulu: l.mulu $rD,$rA,$rB */
   1373          1.1  christos 
   1374          1.1  christos static SEM_PC
   1375          1.1  christos SEM_FN_NAME (or1k32bf,l_mulu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1376          1.1  christos {
   1377          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1378          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1379          1.1  christos   int UNUSED written = 0;
   1380          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1381          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1382          1.1  christos 
   1383          1.1  christos {
   1384          1.1  christos {
   1385          1.1  christos   {
   1386          1.1  christos     BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1387          1.1  christos     SET_H_SYS_SR_CY (opval);
   1388          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1389          1.1  christos   }
   1390          1.1  christos   {
   1391          1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1392          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1393          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1394          1.1  christos   }
   1395          1.1  christos }
   1396          1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   1397          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1398          1.1  christos }
   1399          1.1  christos }
   1400          1.1  christos 
   1401          1.1  christos   return vpc;
   1402          1.1  christos #undef FLD
   1403          1.1  christos }
   1404          1.1  christos 
   1405          1.1  christos /* l-muldu: l.muldu $rA,$rB */
   1406          1.1  christos 
   1407          1.1  christos static SEM_PC
   1408          1.1  christos SEM_FN_NAME (or1k32bf,l_muldu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1409          1.1  christos {
   1410          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1411          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1412          1.1  christos   int UNUSED written = 0;
   1413          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1414          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1415          1.1  christos 
   1416          1.1  christos {
   1417          1.1  christos   DI tmp_result;
   1418          1.1  christos   tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   1419          1.1  christos   {
   1420          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   1421          1.1  christos     SET_H_MAC_MACHI (opval);
   1422          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   1423          1.1  christos   }
   1424          1.1  christos   {
   1425          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   1426          1.1  christos     SET_H_MAC_MACLO (opval);
   1427          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   1428          1.1  christos   }
   1429          1.1  christos }
   1430          1.1  christos 
   1431          1.1  christos   return vpc;
   1432          1.1  christos #undef FLD
   1433          1.1  christos }
   1434          1.1  christos 
   1435          1.1  christos /* l-div: l.div $rD,$rA,$rB */
   1436          1.1  christos 
   1437          1.1  christos static SEM_PC
   1438          1.1  christos SEM_FN_NAME (or1k32bf,l_div) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1439          1.1  christos {
   1440          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1441          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1442          1.1  christos   int UNUSED written = 0;
   1443          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1444          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1445          1.1  christos 
   1446          1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1447          1.1  christos {
   1448          1.1  christos   {
   1449          1.1  christos     BI opval = 0;
   1450          1.1  christos     SET_H_SYS_SR_OV (opval);
   1451          1.1  christos     written |= (1 << 5);
   1452          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1453          1.1  christos   }
   1454          1.1  christos   {
   1455          1.1  christos     SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1456          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1457          1.1  christos     written |= (1 << 4);
   1458          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1459          1.1  christos   }
   1460          1.1  christos }
   1461          1.1  christos } else {
   1462          1.1  christos {
   1463          1.1  christos   {
   1464          1.1  christos     BI opval = 1;
   1465          1.1  christos     SET_H_SYS_SR_OV (opval);
   1466          1.1  christos     written |= (1 << 5);
   1467          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1468          1.1  christos   }
   1469          1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1470          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1471          1.1  christos }
   1472          1.1  christos }
   1473          1.1  christos }
   1474          1.1  christos 
   1475          1.1  christos   abuf->written = written;
   1476          1.1  christos   return vpc;
   1477          1.1  christos #undef FLD
   1478          1.1  christos }
   1479          1.1  christos 
   1480          1.1  christos /* l-divu: l.divu $rD,$rA,$rB */
   1481          1.1  christos 
   1482          1.1  christos static SEM_PC
   1483          1.1  christos SEM_FN_NAME (or1k32bf,l_divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1484          1.1  christos {
   1485          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1486          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1487          1.1  christos   int UNUSED written = 0;
   1488          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1489          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1490          1.1  christos 
   1491          1.1  christos if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
   1492          1.1  christos {
   1493          1.1  christos   {
   1494          1.1  christos     BI opval = 0;
   1495          1.1  christos     SET_H_SYS_SR_CY (opval);
   1496          1.1  christos     written |= (1 << 5);
   1497          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1498          1.1  christos   }
   1499          1.1  christos   {
   1500          1.1  christos     USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1501          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1502          1.1  christos     written |= (1 << 4);
   1503          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1504          1.1  christos   }
   1505          1.1  christos }
   1506          1.1  christos } else {
   1507          1.1  christos {
   1508          1.1  christos   {
   1509          1.1  christos     BI opval = 1;
   1510          1.1  christos     SET_H_SYS_SR_CY (opval);
   1511          1.1  christos     written |= (1 << 5);
   1512          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1513          1.1  christos   }
   1514          1.1  christos if (GET_H_SYS_SR_OVE ()) {
   1515          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1516          1.1  christos }
   1517          1.1  christos }
   1518          1.1  christos }
   1519          1.1  christos 
   1520          1.1  christos   abuf->written = written;
   1521          1.1  christos   return vpc;
   1522          1.1  christos #undef FLD
   1523          1.1  christos }
   1524          1.1  christos 
   1525          1.1  christos /* l-ff1: l.ff1 $rD,$rA */
   1526          1.1  christos 
   1527          1.1  christos static SEM_PC
   1528          1.1  christos SEM_FN_NAME (or1k32bf,l_ff1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1529          1.1  christos {
   1530          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1531          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1532          1.1  christos   int UNUSED written = 0;
   1533          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1534          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1535          1.1  christos 
   1536          1.1  christos   {
   1537          1.1  christos     USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1538          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1539          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1540          1.1  christos   }
   1541          1.1  christos 
   1542          1.1  christos   return vpc;
   1543          1.1  christos #undef FLD
   1544          1.1  christos }
   1545          1.1  christos 
   1546          1.1  christos /* l-fl1: l.fl1 $rD,$rA */
   1547          1.1  christos 
   1548          1.1  christos static SEM_PC
   1549          1.1  christos SEM_FN_NAME (or1k32bf,l_fl1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1550          1.1  christos {
   1551          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1552          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1553          1.1  christos   int UNUSED written = 0;
   1554          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1555          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1556          1.1  christos 
   1557          1.1  christos   {
   1558          1.1  christos     USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
   1559          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1560          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1561          1.1  christos   }
   1562          1.1  christos 
   1563          1.1  christos   return vpc;
   1564          1.1  christos #undef FLD
   1565          1.1  christos }
   1566          1.1  christos 
   1567          1.1  christos /* l-andi: l.andi $rD,$rA,$uimm16 */
   1568          1.1  christos 
   1569          1.1  christos static SEM_PC
   1570          1.1  christos SEM_FN_NAME (or1k32bf,l_andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1571          1.1  christos {
   1572          1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1573          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1574          1.1  christos   int UNUSED written = 0;
   1575          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1576          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1577          1.1  christos 
   1578          1.1  christos   {
   1579          1.1  christos     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1580          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1581          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1582          1.1  christos   }
   1583          1.1  christos 
   1584          1.1  christos   return vpc;
   1585          1.1  christos #undef FLD
   1586          1.1  christos }
   1587          1.1  christos 
   1588          1.1  christos /* l-ori: l.ori $rD,$rA,$uimm16 */
   1589          1.1  christos 
   1590          1.1  christos static SEM_PC
   1591          1.1  christos SEM_FN_NAME (or1k32bf,l_ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1592          1.1  christos {
   1593          1.1  christos #define FLD(f) abuf->fields.sfmt_l_mfspr.f
   1594          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1595          1.1  christos   int UNUSED written = 0;
   1596          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1597          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1598          1.1  christos 
   1599          1.1  christos   {
   1600          1.1  christos     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
   1601          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1602          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1603          1.1  christos   }
   1604          1.1  christos 
   1605          1.1  christos   return vpc;
   1606          1.1  christos #undef FLD
   1607          1.1  christos }
   1608          1.1  christos 
   1609          1.1  christos /* l-xori: l.xori $rD,$rA,$simm16 */
   1610          1.1  christos 
   1611          1.1  christos static SEM_PC
   1612          1.1  christos SEM_FN_NAME (or1k32bf,l_xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1613          1.1  christos {
   1614          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1615          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1616          1.1  christos   int UNUSED written = 0;
   1617          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1618          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1619          1.1  christos 
   1620          1.1  christos   {
   1621          1.1  christos     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1622          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1623          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1624          1.1  christos   }
   1625          1.1  christos 
   1626          1.1  christos   return vpc;
   1627          1.1  christos #undef FLD
   1628          1.1  christos }
   1629          1.1  christos 
   1630          1.1  christos /* l-addi: l.addi $rD,$rA,$simm16 */
   1631          1.1  christos 
   1632          1.1  christos static SEM_PC
   1633          1.1  christos SEM_FN_NAME (or1k32bf,l_addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1634          1.1  christos {
   1635          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1636          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1637          1.1  christos   int UNUSED written = 0;
   1638          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1639          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1640          1.1  christos 
   1641          1.1  christos {
   1642          1.1  christos {
   1643          1.1  christos   {
   1644          1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1645          1.1  christos     SET_H_SYS_SR_CY (opval);
   1646          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1647          1.1  christos   }
   1648          1.1  christos   {
   1649          1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
   1650          1.1  christos     SET_H_SYS_SR_OV (opval);
   1651          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1652          1.1  christos   }
   1653          1.1  christos   {
   1654          1.1  christos     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1655          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1656          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1657          1.1  christos   }
   1658          1.1  christos }
   1659          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1660          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1661          1.1  christos }
   1662          1.1  christos }
   1663          1.1  christos 
   1664          1.1  christos   return vpc;
   1665          1.1  christos #undef FLD
   1666          1.1  christos }
   1667          1.1  christos 
   1668          1.1  christos /* l-addic: l.addic $rD,$rA,$simm16 */
   1669          1.1  christos 
   1670          1.1  christos static SEM_PC
   1671          1.1  christos SEM_FN_NAME (or1k32bf,l_addic) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1672          1.1  christos {
   1673          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1674          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1675          1.1  christos   int UNUSED written = 0;
   1676          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1677          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1678          1.1  christos 
   1679          1.1  christos {
   1680          1.1  christos {
   1681          1.1  christos   BI tmp_tmp_sys_sr_cy;
   1682          1.1  christos   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
   1683          1.1  christos   {
   1684          1.1  christos     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1685          1.1  christos     SET_H_SYS_SR_CY (opval);
   1686          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   1687          1.1  christos   }
   1688          1.1  christos   {
   1689          1.1  christos     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1690          1.1  christos     SET_H_SYS_SR_OV (opval);
   1691          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1692          1.1  christos   }
   1693          1.1  christos   {
   1694          1.1  christos     SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
   1695          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1696          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1697          1.1  christos   }
   1698          1.1  christos }
   1699          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1700          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1701          1.1  christos }
   1702          1.1  christos }
   1703          1.1  christos 
   1704          1.1  christos   return vpc;
   1705          1.1  christos #undef FLD
   1706          1.1  christos }
   1707          1.1  christos 
   1708          1.1  christos /* l-muli: l.muli $rD,$rA,$simm16 */
   1709          1.1  christos 
   1710          1.1  christos static SEM_PC
   1711          1.1  christos SEM_FN_NAME (or1k32bf,l_muli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1712          1.1  christos {
   1713          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1714          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1715          1.1  christos   int UNUSED written = 0;
   1716          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1717          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1718          1.1  christos 
   1719          1.1  christos {
   1720          1.1  christos {
   1721          1.1  christos   {
   1722          1.1  christos     USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1723          1.1  christos     SET_H_SYS_SR_OV (opval);
   1724          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   1725          1.1  christos   }
   1726          1.1  christos   {
   1727          1.1  christos     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1728          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1729          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1730          1.1  christos   }
   1731          1.1  christos }
   1732          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   1733          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   1734          1.1  christos }
   1735          1.1  christos }
   1736          1.1  christos 
   1737          1.1  christos   return vpc;
   1738          1.1  christos #undef FLD
   1739          1.1  christos }
   1740          1.1  christos 
   1741          1.1  christos /* l-exths: l.exths $rD,$rA */
   1742          1.1  christos 
   1743          1.1  christos static SEM_PC
   1744          1.1  christos SEM_FN_NAME (or1k32bf,l_exths) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1745          1.1  christos {
   1746          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1747          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1748          1.1  christos   int UNUSED written = 0;
   1749          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1750          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1751          1.1  christos 
   1752          1.1  christos   {
   1753          1.1  christos     USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1754          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1755          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1756          1.1  christos   }
   1757          1.1  christos 
   1758          1.1  christos   return vpc;
   1759          1.1  christos #undef FLD
   1760          1.1  christos }
   1761          1.1  christos 
   1762          1.1  christos /* l-extbs: l.extbs $rD,$rA */
   1763          1.1  christos 
   1764          1.1  christos static SEM_PC
   1765          1.1  christos SEM_FN_NAME (or1k32bf,l_extbs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1766          1.1  christos {
   1767          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1768          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1769          1.1  christos   int UNUSED written = 0;
   1770          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1771          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1772          1.1  christos 
   1773          1.1  christos   {
   1774          1.1  christos     USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1775          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1776          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1777          1.1  christos   }
   1778          1.1  christos 
   1779          1.1  christos   return vpc;
   1780          1.1  christos #undef FLD
   1781          1.1  christos }
   1782          1.1  christos 
   1783          1.1  christos /* l-exthz: l.exthz $rD,$rA */
   1784          1.1  christos 
   1785          1.1  christos static SEM_PC
   1786          1.1  christos SEM_FN_NAME (or1k32bf,l_exthz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1787          1.1  christos {
   1788          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1789          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1790          1.1  christos   int UNUSED written = 0;
   1791          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1792          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1793          1.1  christos 
   1794          1.1  christos   {
   1795          1.1  christos     USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
   1796          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1797          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1798          1.1  christos   }
   1799          1.1  christos 
   1800          1.1  christos   return vpc;
   1801          1.1  christos #undef FLD
   1802          1.1  christos }
   1803          1.1  christos 
   1804          1.1  christos /* l-extbz: l.extbz $rD,$rA */
   1805          1.1  christos 
   1806          1.1  christos static SEM_PC
   1807          1.1  christos SEM_FN_NAME (or1k32bf,l_extbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1808          1.1  christos {
   1809          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1810          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1811          1.1  christos   int UNUSED written = 0;
   1812          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1813          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1814          1.1  christos 
   1815          1.1  christos   {
   1816          1.1  christos     USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
   1817          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1818          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1819          1.1  christos   }
   1820          1.1  christos 
   1821          1.1  christos   return vpc;
   1822          1.1  christos #undef FLD
   1823          1.1  christos }
   1824          1.1  christos 
   1825          1.1  christos /* l-extws: l.extws $rD,$rA */
   1826          1.1  christos 
   1827          1.1  christos static SEM_PC
   1828          1.1  christos SEM_FN_NAME (or1k32bf,l_extws) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1829          1.1  christos {
   1830          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1831          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1832          1.1  christos   int UNUSED written = 0;
   1833          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1834          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1835          1.1  christos 
   1836          1.1  christos   {
   1837          1.1  christos     USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1838          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1839          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1840          1.1  christos   }
   1841          1.1  christos 
   1842          1.1  christos   return vpc;
   1843          1.1  christos #undef FLD
   1844          1.1  christos }
   1845          1.1  christos 
   1846          1.1  christos /* l-extwz: l.extwz $rD,$rA */
   1847          1.1  christos 
   1848          1.1  christos static SEM_PC
   1849          1.1  christos SEM_FN_NAME (or1k32bf,l_extwz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1850          1.1  christos {
   1851          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   1852          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1853          1.1  christos   int UNUSED written = 0;
   1854          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1855          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1856          1.1  christos 
   1857          1.1  christos   {
   1858          1.1  christos     USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   1859          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1860          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1861          1.1  christos   }
   1862          1.1  christos 
   1863          1.1  christos   return vpc;
   1864          1.1  christos #undef FLD
   1865          1.1  christos }
   1866          1.1  christos 
   1867          1.1  christos /* l-cmov: l.cmov $rD,$rA,$rB */
   1868          1.1  christos 
   1869          1.1  christos static SEM_PC
   1870          1.1  christos SEM_FN_NAME (or1k32bf,l_cmov) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1871          1.1  christos {
   1872          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1873          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1874          1.1  christos   int UNUSED written = 0;
   1875          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1876          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1877          1.1  christos 
   1878          1.1  christos if (GET_H_SYS_SR_F ()) {
   1879          1.1  christos   {
   1880          1.1  christos     USI opval = GET_H_GPR (FLD (f_r2));
   1881          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1882          1.1  christos     written |= (1 << 3);
   1883          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1884          1.1  christos   }
   1885          1.1  christos } else {
   1886          1.1  christos   {
   1887          1.1  christos     USI opval = GET_H_GPR (FLD (f_r3));
   1888          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   1889          1.1  christos     written |= (1 << 3);
   1890          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   1891          1.1  christos   }
   1892          1.1  christos }
   1893          1.1  christos 
   1894          1.1  christos   abuf->written = written;
   1895          1.1  christos   return vpc;
   1896          1.1  christos #undef FLD
   1897          1.1  christos }
   1898          1.1  christos 
   1899          1.1  christos /* l-sfgts: l.sfgts $rA,$rB */
   1900          1.1  christos 
   1901          1.1  christos static SEM_PC
   1902          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1903          1.1  christos {
   1904          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1905          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1906          1.1  christos   int UNUSED written = 0;
   1907          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1908          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1909          1.1  christos 
   1910          1.1  christos   {
   1911          1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1912          1.1  christos     SET_H_SYS_SR_F (opval);
   1913          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1914          1.1  christos   }
   1915          1.1  christos 
   1916          1.1  christos   return vpc;
   1917          1.1  christos #undef FLD
   1918          1.1  christos }
   1919          1.1  christos 
   1920          1.1  christos /* l-sfgtsi: l.sfgtsi $rA,$simm16 */
   1921          1.1  christos 
   1922          1.1  christos static SEM_PC
   1923          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgtsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1924          1.1  christos {
   1925          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1926          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1927          1.1  christos   int UNUSED written = 0;
   1928          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1929          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1930          1.1  christos 
   1931          1.1  christos   {
   1932          1.1  christos     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1933          1.1  christos     SET_H_SYS_SR_F (opval);
   1934          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1935          1.1  christos   }
   1936          1.1  christos 
   1937          1.1  christos   return vpc;
   1938          1.1  christos #undef FLD
   1939          1.1  christos }
   1940          1.1  christos 
   1941          1.1  christos /* l-sfgtu: l.sfgtu $rA,$rB */
   1942          1.1  christos 
   1943          1.1  christos static SEM_PC
   1944          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1945          1.1  christos {
   1946          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1947          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1948          1.1  christos   int UNUSED written = 0;
   1949          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1950          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1951          1.1  christos 
   1952          1.1  christos   {
   1953          1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1954          1.1  christos     SET_H_SYS_SR_F (opval);
   1955          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1956          1.1  christos   }
   1957          1.1  christos 
   1958          1.1  christos   return vpc;
   1959          1.1  christos #undef FLD
   1960          1.1  christos }
   1961          1.1  christos 
   1962          1.1  christos /* l-sfgtui: l.sfgtui $rA,$simm16 */
   1963          1.1  christos 
   1964          1.1  christos static SEM_PC
   1965          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgtui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1966          1.1  christos {
   1967          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   1968          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1969          1.1  christos   int UNUSED written = 0;
   1970          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1971          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1972          1.1  christos 
   1973          1.1  christos   {
   1974          1.1  christos     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   1975          1.1  christos     SET_H_SYS_SR_F (opval);
   1976          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1977          1.1  christos   }
   1978          1.1  christos 
   1979          1.1  christos   return vpc;
   1980          1.1  christos #undef FLD
   1981          1.1  christos }
   1982          1.1  christos 
   1983          1.1  christos /* l-sfges: l.sfges $rA,$rB */
   1984          1.1  christos 
   1985          1.1  christos static SEM_PC
   1986          1.1  christos SEM_FN_NAME (or1k32bf,l_sfges) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   1987          1.1  christos {
   1988          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   1989          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   1990          1.1  christos   int UNUSED written = 0;
   1991          1.1  christos   IADDR UNUSED pc = abuf->addr;
   1992          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   1993          1.1  christos 
   1994          1.1  christos   {
   1995          1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   1996          1.1  christos     SET_H_SYS_SR_F (opval);
   1997          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   1998          1.1  christos   }
   1999          1.1  christos 
   2000          1.1  christos   return vpc;
   2001          1.1  christos #undef FLD
   2002          1.1  christos }
   2003          1.1  christos 
   2004          1.1  christos /* l-sfgesi: l.sfgesi $rA,$simm16 */
   2005          1.1  christos 
   2006          1.1  christos static SEM_PC
   2007          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgesi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2008          1.1  christos {
   2009          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2010          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2011          1.1  christos   int UNUSED written = 0;
   2012          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2013          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2014          1.1  christos 
   2015          1.1  christos   {
   2016          1.1  christos     USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2017          1.1  christos     SET_H_SYS_SR_F (opval);
   2018          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2019          1.1  christos   }
   2020          1.1  christos 
   2021          1.1  christos   return vpc;
   2022          1.1  christos #undef FLD
   2023          1.1  christos }
   2024          1.1  christos 
   2025          1.1  christos /* l-sfgeu: l.sfgeu $rA,$rB */
   2026          1.1  christos 
   2027          1.1  christos static SEM_PC
   2028          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgeu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2029          1.1  christos {
   2030          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2031          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2032          1.1  christos   int UNUSED written = 0;
   2033          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2034          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2035          1.1  christos 
   2036          1.1  christos   {
   2037          1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2038          1.1  christos     SET_H_SYS_SR_F (opval);
   2039          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2040          1.1  christos   }
   2041          1.1  christos 
   2042          1.1  christos   return vpc;
   2043          1.1  christos #undef FLD
   2044          1.1  christos }
   2045          1.1  christos 
   2046          1.1  christos /* l-sfgeui: l.sfgeui $rA,$simm16 */
   2047          1.1  christos 
   2048          1.1  christos static SEM_PC
   2049          1.1  christos SEM_FN_NAME (or1k32bf,l_sfgeui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2050          1.1  christos {
   2051          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2052          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2053          1.1  christos   int UNUSED written = 0;
   2054          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2055          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2056          1.1  christos 
   2057          1.1  christos   {
   2058          1.1  christos     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2059          1.1  christos     SET_H_SYS_SR_F (opval);
   2060          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2061          1.1  christos   }
   2062          1.1  christos 
   2063          1.1  christos   return vpc;
   2064          1.1  christos #undef FLD
   2065          1.1  christos }
   2066          1.1  christos 
   2067          1.1  christos /* l-sflts: l.sflts $rA,$rB */
   2068          1.1  christos 
   2069          1.1  christos static SEM_PC
   2070          1.1  christos SEM_FN_NAME (or1k32bf,l_sflts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2071          1.1  christos {
   2072          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2073          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2074          1.1  christos   int UNUSED written = 0;
   2075          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2076          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2077          1.1  christos 
   2078          1.1  christos   {
   2079          1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2080          1.1  christos     SET_H_SYS_SR_F (opval);
   2081          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2082          1.1  christos   }
   2083          1.1  christos 
   2084          1.1  christos   return vpc;
   2085          1.1  christos #undef FLD
   2086          1.1  christos }
   2087          1.1  christos 
   2088          1.1  christos /* l-sfltsi: l.sfltsi $rA,$simm16 */
   2089          1.1  christos 
   2090          1.1  christos static SEM_PC
   2091          1.1  christos SEM_FN_NAME (or1k32bf,l_sfltsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2092          1.1  christos {
   2093          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2094          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2095          1.1  christos   int UNUSED written = 0;
   2096          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2097          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2098          1.1  christos 
   2099          1.1  christos   {
   2100          1.1  christos     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2101          1.1  christos     SET_H_SYS_SR_F (opval);
   2102          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2103          1.1  christos   }
   2104          1.1  christos 
   2105          1.1  christos   return vpc;
   2106          1.1  christos #undef FLD
   2107          1.1  christos }
   2108          1.1  christos 
   2109          1.1  christos /* l-sfltu: l.sfltu $rA,$rB */
   2110          1.1  christos 
   2111          1.1  christos static SEM_PC
   2112          1.1  christos SEM_FN_NAME (or1k32bf,l_sfltu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2113          1.1  christos {
   2114          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2115          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2116          1.1  christos   int UNUSED written = 0;
   2117          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2118          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2119          1.1  christos 
   2120          1.1  christos   {
   2121          1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2122          1.1  christos     SET_H_SYS_SR_F (opval);
   2123          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2124          1.1  christos   }
   2125          1.1  christos 
   2126          1.1  christos   return vpc;
   2127          1.1  christos #undef FLD
   2128          1.1  christos }
   2129          1.1  christos 
   2130          1.1  christos /* l-sfltui: l.sfltui $rA,$simm16 */
   2131          1.1  christos 
   2132          1.1  christos static SEM_PC
   2133          1.1  christos SEM_FN_NAME (or1k32bf,l_sfltui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2134          1.1  christos {
   2135          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2136          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2137          1.1  christos   int UNUSED written = 0;
   2138          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2139          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2140          1.1  christos 
   2141          1.1  christos   {
   2142          1.1  christos     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2143          1.1  christos     SET_H_SYS_SR_F (opval);
   2144          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2145          1.1  christos   }
   2146          1.1  christos 
   2147          1.1  christos   return vpc;
   2148          1.1  christos #undef FLD
   2149          1.1  christos }
   2150          1.1  christos 
   2151          1.1  christos /* l-sfles: l.sfles $rA,$rB */
   2152          1.1  christos 
   2153          1.1  christos static SEM_PC
   2154          1.1  christos SEM_FN_NAME (or1k32bf,l_sfles) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2155          1.1  christos {
   2156          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2157          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2158          1.1  christos   int UNUSED written = 0;
   2159          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2160          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2161          1.1  christos 
   2162          1.1  christos   {
   2163          1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2164          1.1  christos     SET_H_SYS_SR_F (opval);
   2165          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2166          1.1  christos   }
   2167          1.1  christos 
   2168          1.1  christos   return vpc;
   2169          1.1  christos #undef FLD
   2170          1.1  christos }
   2171          1.1  christos 
   2172          1.1  christos /* l-sflesi: l.sflesi $rA,$simm16 */
   2173          1.1  christos 
   2174          1.1  christos static SEM_PC
   2175          1.1  christos SEM_FN_NAME (or1k32bf,l_sflesi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2176          1.1  christos {
   2177          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2178          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2179          1.1  christos   int UNUSED written = 0;
   2180          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2181          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2182          1.1  christos 
   2183          1.1  christos   {
   2184          1.1  christos     USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2185          1.1  christos     SET_H_SYS_SR_F (opval);
   2186          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2187          1.1  christos   }
   2188          1.1  christos 
   2189          1.1  christos   return vpc;
   2190          1.1  christos #undef FLD
   2191          1.1  christos }
   2192          1.1  christos 
   2193          1.1  christos /* l-sfleu: l.sfleu $rA,$rB */
   2194          1.1  christos 
   2195          1.1  christos static SEM_PC
   2196          1.1  christos SEM_FN_NAME (or1k32bf,l_sfleu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2197          1.1  christos {
   2198          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2199          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2200          1.1  christos   int UNUSED written = 0;
   2201          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2202          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2203          1.1  christos 
   2204          1.1  christos   {
   2205          1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2206          1.1  christos     SET_H_SYS_SR_F (opval);
   2207          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2208          1.1  christos   }
   2209          1.1  christos 
   2210          1.1  christos   return vpc;
   2211          1.1  christos #undef FLD
   2212          1.1  christos }
   2213          1.1  christos 
   2214          1.1  christos /* l-sfleui: l.sfleui $rA,$simm16 */
   2215          1.1  christos 
   2216          1.1  christos static SEM_PC
   2217          1.1  christos SEM_FN_NAME (or1k32bf,l_sfleui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2218          1.1  christos {
   2219          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2220          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2221          1.1  christos   int UNUSED written = 0;
   2222          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2223          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2224          1.1  christos 
   2225          1.1  christos   {
   2226          1.1  christos     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2227          1.1  christos     SET_H_SYS_SR_F (opval);
   2228          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2229          1.1  christos   }
   2230          1.1  christos 
   2231          1.1  christos   return vpc;
   2232          1.1  christos #undef FLD
   2233          1.1  christos }
   2234          1.1  christos 
   2235          1.1  christos /* l-sfeq: l.sfeq $rA,$rB */
   2236          1.1  christos 
   2237          1.1  christos static SEM_PC
   2238          1.1  christos SEM_FN_NAME (or1k32bf,l_sfeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2239          1.1  christos {
   2240          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2241          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2242          1.1  christos   int UNUSED written = 0;
   2243          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2244          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2245          1.1  christos 
   2246          1.1  christos   {
   2247          1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2248          1.1  christos     SET_H_SYS_SR_F (opval);
   2249          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2250          1.1  christos   }
   2251          1.1  christos 
   2252          1.1  christos   return vpc;
   2253          1.1  christos #undef FLD
   2254          1.1  christos }
   2255          1.1  christos 
   2256          1.1  christos /* l-sfeqi: l.sfeqi $rA,$simm16 */
   2257          1.1  christos 
   2258          1.1  christos static SEM_PC
   2259          1.1  christos SEM_FN_NAME (or1k32bf,l_sfeqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2260          1.1  christos {
   2261          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2262          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2263          1.1  christos   int UNUSED written = 0;
   2264          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2265          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2266          1.1  christos 
   2267          1.1  christos   {
   2268          1.1  christos     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2269          1.1  christos     SET_H_SYS_SR_F (opval);
   2270          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2271          1.1  christos   }
   2272          1.1  christos 
   2273          1.1  christos   return vpc;
   2274          1.1  christos #undef FLD
   2275          1.1  christos }
   2276          1.1  christos 
   2277          1.1  christos /* l-sfne: l.sfne $rA,$rB */
   2278          1.1  christos 
   2279          1.1  christos static SEM_PC
   2280          1.1  christos SEM_FN_NAME (or1k32bf,l_sfne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2281          1.1  christos {
   2282          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2283          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2284          1.1  christos   int UNUSED written = 0;
   2285          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2286          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2287          1.1  christos 
   2288          1.1  christos   {
   2289          1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
   2290          1.1  christos     SET_H_SYS_SR_F (opval);
   2291          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2292          1.1  christos   }
   2293          1.1  christos 
   2294          1.1  christos   return vpc;
   2295          1.1  christos #undef FLD
   2296          1.1  christos }
   2297          1.1  christos 
   2298          1.1  christos /* l-sfnei: l.sfnei $rA,$simm16 */
   2299          1.1  christos 
   2300          1.1  christos static SEM_PC
   2301          1.1  christos SEM_FN_NAME (or1k32bf,l_sfnei) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2302          1.1  christos {
   2303          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2304          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2305          1.1  christos   int UNUSED written = 0;
   2306          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2307          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2308          1.1  christos 
   2309          1.1  christos   {
   2310          1.1  christos     USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
   2311          1.1  christos     SET_H_SYS_SR_F (opval);
   2312          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2313          1.1  christos   }
   2314          1.1  christos 
   2315          1.1  christos   return vpc;
   2316          1.1  christos #undef FLD
   2317          1.1  christos }
   2318          1.1  christos 
   2319          1.1  christos /* l-mac: l.mac $rA,$rB */
   2320          1.1  christos 
   2321          1.1  christos static SEM_PC
   2322          1.1  christos SEM_FN_NAME (or1k32bf,l_mac) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2323          1.1  christos {
   2324          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2325          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2326          1.1  christos   int UNUSED written = 0;
   2327          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2328          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2329          1.1  christos 
   2330          1.1  christos {
   2331          1.1  christos {
   2332          1.1  christos   DI tmp_prod;
   2333          1.1  christos   DI tmp_mac;
   2334          1.1  christos   DI tmp_result;
   2335          1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2336          1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2337          1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2338          1.1  christos   {
   2339          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2340          1.1  christos     SET_H_MAC_MACHI (opval);
   2341          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2342          1.1  christos   }
   2343          1.1  christos   {
   2344          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2345          1.1  christos     SET_H_MAC_MACLO (opval);
   2346          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2347          1.1  christos   }
   2348          1.1  christos   {
   2349          1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2350          1.1  christos     SET_H_SYS_SR_OV (opval);
   2351          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2352          1.1  christos   }
   2353          1.1  christos }
   2354          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2355          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2356          1.1  christos }
   2357          1.1  christos }
   2358          1.1  christos 
   2359          1.1  christos   return vpc;
   2360          1.1  christos #undef FLD
   2361          1.1  christos }
   2362          1.1  christos 
   2363          1.1  christos /* l-maci: l.maci $rA,${simm16} */
   2364          1.1  christos 
   2365          1.1  christos static SEM_PC
   2366          1.1  christos SEM_FN_NAME (or1k32bf,l_maci) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2367          1.1  christos {
   2368          1.1  christos #define FLD(f) abuf->fields.sfmt_l_lwz.f
   2369          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2370          1.1  christos   int UNUSED written = 0;
   2371          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2372          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2373          1.1  christos 
   2374          1.1  christos {
   2375          1.1  christos {
   2376          1.1  christos   DI tmp_prod;
   2377          1.1  christos   DI tmp_mac;
   2378          1.1  christos   DI tmp_result;
   2379          1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
   2380          1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2381          1.1  christos   tmp_result = ADDDI (tmp_mac, tmp_prod);
   2382          1.1  christos   {
   2383          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2384          1.1  christos     SET_H_MAC_MACHI (opval);
   2385          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2386          1.1  christos   }
   2387          1.1  christos   {
   2388          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2389          1.1  christos     SET_H_MAC_MACLO (opval);
   2390          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2391          1.1  christos   }
   2392          1.1  christos   {
   2393          1.1  christos     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
   2394          1.1  christos     SET_H_SYS_SR_OV (opval);
   2395          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2396          1.1  christos   }
   2397          1.1  christos }
   2398          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2399          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2400          1.1  christos }
   2401          1.1  christos }
   2402          1.1  christos 
   2403          1.1  christos   return vpc;
   2404          1.1  christos #undef FLD
   2405          1.1  christos }
   2406          1.1  christos 
   2407          1.1  christos /* l-macu: l.macu $rA,$rB */
   2408          1.1  christos 
   2409          1.1  christos static SEM_PC
   2410          1.1  christos SEM_FN_NAME (or1k32bf,l_macu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2411          1.1  christos {
   2412          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2413          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2414          1.1  christos   int UNUSED written = 0;
   2415          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2416          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2417          1.1  christos 
   2418          1.1  christos {
   2419          1.1  christos {
   2420          1.1  christos   DI tmp_prod;
   2421          1.1  christos   DI tmp_mac;
   2422          1.1  christos   DI tmp_result;
   2423          1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2424          1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2425          1.1  christos   tmp_result = ADDDI (tmp_prod, tmp_mac);
   2426          1.1  christos   {
   2427          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2428          1.1  christos     SET_H_MAC_MACHI (opval);
   2429          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2430          1.1  christos   }
   2431          1.1  christos   {
   2432          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2433          1.1  christos     SET_H_MAC_MACLO (opval);
   2434          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2435          1.1  christos   }
   2436          1.1  christos   {
   2437          1.1  christos     BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
   2438          1.1  christos     SET_H_SYS_SR_CY (opval);
   2439          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2440          1.1  christos   }
   2441          1.1  christos }
   2442          1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2443          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2444          1.1  christos }
   2445          1.1  christos }
   2446          1.1  christos 
   2447          1.1  christos   return vpc;
   2448          1.1  christos #undef FLD
   2449          1.1  christos }
   2450          1.1  christos 
   2451          1.1  christos /* l-msb: l.msb $rA,$rB */
   2452          1.1  christos 
   2453          1.1  christos static SEM_PC
   2454          1.1  christos SEM_FN_NAME (or1k32bf,l_msb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2455          1.1  christos {
   2456          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2457          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2458          1.1  christos   int UNUSED written = 0;
   2459          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2460          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2461          1.1  christos 
   2462          1.1  christos {
   2463          1.1  christos {
   2464          1.1  christos   DI tmp_prod;
   2465          1.1  christos   DI tmp_mac;
   2466          1.1  christos   DI tmp_result;
   2467          1.1  christos   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
   2468          1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2469          1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2470          1.1  christos   {
   2471          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2472          1.1  christos     SET_H_MAC_MACHI (opval);
   2473          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2474          1.1  christos   }
   2475          1.1  christos   {
   2476          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2477          1.1  christos     SET_H_MAC_MACLO (opval);
   2478          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2479          1.1  christos   }
   2480          1.1  christos   {
   2481          1.1  christos     BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
   2482          1.1  christos     SET_H_SYS_SR_OV (opval);
   2483          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
   2484          1.1  christos   }
   2485          1.1  christos }
   2486          1.1  christos if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
   2487          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2488          1.1  christos }
   2489          1.1  christos }
   2490          1.1  christos 
   2491          1.1  christos   return vpc;
   2492          1.1  christos #undef FLD
   2493          1.1  christos }
   2494          1.1  christos 
   2495          1.1  christos /* l-msbu: l.msbu $rA,$rB */
   2496          1.1  christos 
   2497          1.1  christos static SEM_PC
   2498          1.1  christos SEM_FN_NAME (or1k32bf,l_msbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2499          1.1  christos {
   2500          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2501          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2502          1.1  christos   int UNUSED written = 0;
   2503          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2504          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2505          1.1  christos 
   2506          1.1  christos {
   2507          1.1  christos {
   2508          1.1  christos   DI tmp_prod;
   2509          1.1  christos   DI tmp_mac;
   2510          1.1  christos   DI tmp_result;
   2511          1.1  christos   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
   2512          1.1  christos   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
   2513          1.1  christos   tmp_result = SUBDI (tmp_mac, tmp_prod);
   2514          1.1  christos   {
   2515          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 0);
   2516          1.1  christos     SET_H_MAC_MACHI (opval);
   2517          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
   2518          1.1  christos   }
   2519          1.1  christos   {
   2520          1.1  christos     SI opval = SUBWORDDISI (tmp_result, 1);
   2521          1.1  christos     SET_H_MAC_MACLO (opval);
   2522          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
   2523          1.1  christos   }
   2524          1.1  christos   {
   2525          1.1  christos     BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
   2526          1.1  christos     SET_H_SYS_SR_CY (opval);
   2527          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
   2528          1.1  christos   }
   2529          1.1  christos }
   2530          1.1  christos if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
   2531          1.1  christos or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
   2532          1.1  christos }
   2533          1.1  christos }
   2534          1.1  christos 
   2535          1.1  christos   return vpc;
   2536          1.1  christos #undef FLD
   2537          1.1  christos }
   2538          1.1  christos 
   2539          1.1  christos /* l-cust1: l.cust1 */
   2540          1.1  christos 
   2541          1.1  christos static SEM_PC
   2542          1.1  christos SEM_FN_NAME (or1k32bf,l_cust1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2543          1.1  christos {
   2544          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2545          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2546          1.1  christos   int UNUSED written = 0;
   2547          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2548          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2549          1.1  christos 
   2550          1.1  christos ((void) 0); /*nop*/
   2551          1.1  christos 
   2552          1.1  christos   return vpc;
   2553          1.1  christos #undef FLD
   2554          1.1  christos }
   2555          1.1  christos 
   2556          1.1  christos /* l-cust2: l.cust2 */
   2557          1.1  christos 
   2558          1.1  christos static SEM_PC
   2559          1.1  christos SEM_FN_NAME (or1k32bf,l_cust2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2560          1.1  christos {
   2561          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2562          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2563          1.1  christos   int UNUSED written = 0;
   2564          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2565          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2566          1.1  christos 
   2567          1.1  christos ((void) 0); /*nop*/
   2568          1.1  christos 
   2569          1.1  christos   return vpc;
   2570          1.1  christos #undef FLD
   2571          1.1  christos }
   2572          1.1  christos 
   2573          1.1  christos /* l-cust3: l.cust3 */
   2574          1.1  christos 
   2575          1.1  christos static SEM_PC
   2576          1.1  christos SEM_FN_NAME (or1k32bf,l_cust3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2577          1.1  christos {
   2578          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2579          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2580          1.1  christos   int UNUSED written = 0;
   2581          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2582          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2583          1.1  christos 
   2584          1.1  christos ((void) 0); /*nop*/
   2585          1.1  christos 
   2586          1.1  christos   return vpc;
   2587          1.1  christos #undef FLD
   2588          1.1  christos }
   2589          1.1  christos 
   2590          1.1  christos /* l-cust4: l.cust4 */
   2591          1.1  christos 
   2592          1.1  christos static SEM_PC
   2593          1.1  christos SEM_FN_NAME (or1k32bf,l_cust4) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2594          1.1  christos {
   2595          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2596          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2597          1.1  christos   int UNUSED written = 0;
   2598          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2599          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2600          1.1  christos 
   2601          1.1  christos ((void) 0); /*nop*/
   2602          1.1  christos 
   2603          1.1  christos   return vpc;
   2604          1.1  christos #undef FLD
   2605          1.1  christos }
   2606          1.1  christos 
   2607          1.1  christos /* l-cust5: l.cust5 */
   2608          1.1  christos 
   2609          1.1  christos static SEM_PC
   2610          1.1  christos SEM_FN_NAME (or1k32bf,l_cust5) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2611          1.1  christos {
   2612          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2613          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2614          1.1  christos   int UNUSED written = 0;
   2615          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2616          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2617          1.1  christos 
   2618          1.1  christos ((void) 0); /*nop*/
   2619          1.1  christos 
   2620          1.1  christos   return vpc;
   2621          1.1  christos #undef FLD
   2622          1.1  christos }
   2623          1.1  christos 
   2624          1.1  christos /* l-cust6: l.cust6 */
   2625          1.1  christos 
   2626          1.1  christos static SEM_PC
   2627          1.1  christos SEM_FN_NAME (or1k32bf,l_cust6) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2628          1.1  christos {
   2629          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2630          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2631          1.1  christos   int UNUSED written = 0;
   2632          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2633          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2634          1.1  christos 
   2635          1.1  christos ((void) 0); /*nop*/
   2636          1.1  christos 
   2637          1.1  christos   return vpc;
   2638          1.1  christos #undef FLD
   2639          1.1  christos }
   2640          1.1  christos 
   2641          1.1  christos /* l-cust7: l.cust7 */
   2642          1.1  christos 
   2643          1.1  christos static SEM_PC
   2644          1.1  christos SEM_FN_NAME (or1k32bf,l_cust7) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2645          1.1  christos {
   2646          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2647          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2648          1.1  christos   int UNUSED written = 0;
   2649          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2650          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2651          1.1  christos 
   2652          1.1  christos ((void) 0); /*nop*/
   2653          1.1  christos 
   2654          1.1  christos   return vpc;
   2655          1.1  christos #undef FLD
   2656          1.1  christos }
   2657          1.1  christos 
   2658          1.1  christos /* l-cust8: l.cust8 */
   2659          1.1  christos 
   2660          1.1  christos static SEM_PC
   2661          1.1  christos SEM_FN_NAME (or1k32bf,l_cust8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2662          1.1  christos {
   2663          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   2664          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2665          1.1  christos   int UNUSED written = 0;
   2666          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2667          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2668          1.1  christos 
   2669          1.1  christos ((void) 0); /*nop*/
   2670          1.1  christos 
   2671          1.1  christos   return vpc;
   2672          1.1  christos #undef FLD
   2673          1.1  christos }
   2674          1.1  christos 
   2675          1.1  christos /* lf-add-s: lf.add.s $rDSF,$rASF,$rBSF */
   2676          1.1  christos 
   2677          1.1  christos static SEM_PC
   2678          1.1  christos SEM_FN_NAME (or1k32bf,lf_add_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2679          1.1  christos {
   2680          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2681          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2682          1.1  christos   int UNUSED written = 0;
   2683          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2684          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2685          1.1  christos 
   2686          1.1  christos   {
   2687          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2688          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2689          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2690          1.1  christos   }
   2691          1.1  christos 
   2692          1.1  christos   return vpc;
   2693          1.1  christos #undef FLD
   2694          1.1  christos }
   2695          1.1  christos 
   2696      1.1.1.2  christos /* lf-add-d32: lf.add.d $rDD32F,$rAD32F,$rBD32F */
   2697      1.1.1.2  christos 
   2698      1.1.1.2  christos static SEM_PC
   2699      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_add_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2700      1.1.1.2  christos {
   2701      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2702      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2703      1.1.1.2  christos   int UNUSED written = 0;
   2704      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2705      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2706      1.1.1.2  christos 
   2707      1.1.1.2  christos   {
   2708      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2709      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2710      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2711      1.1.1.2  christos   }
   2712      1.1.1.2  christos 
   2713      1.1.1.2  christos   return vpc;
   2714      1.1.1.2  christos #undef FLD
   2715      1.1.1.2  christos }
   2716      1.1.1.2  christos 
   2717          1.1  christos /* lf-sub-s: lf.sub.s $rDSF,$rASF,$rBSF */
   2718          1.1  christos 
   2719          1.1  christos static SEM_PC
   2720          1.1  christos SEM_FN_NAME (or1k32bf,lf_sub_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2721          1.1  christos {
   2722          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2723          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2724          1.1  christos   int UNUSED written = 0;
   2725          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2726          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2727          1.1  christos 
   2728          1.1  christos   {
   2729          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2730          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2731          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2732          1.1  christos   }
   2733          1.1  christos 
   2734          1.1  christos   return vpc;
   2735          1.1  christos #undef FLD
   2736          1.1  christos }
   2737          1.1  christos 
   2738      1.1.1.2  christos /* lf-sub-d32: lf.sub.d $rDD32F,$rAD32F,$rBD32F */
   2739      1.1.1.2  christos 
   2740      1.1.1.2  christos static SEM_PC
   2741      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sub_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2742      1.1.1.2  christos {
   2743      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2744      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2745      1.1.1.2  christos   int UNUSED written = 0;
   2746      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2747      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2748      1.1.1.2  christos 
   2749      1.1.1.2  christos   {
   2750      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2751      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2752      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2753      1.1.1.2  christos   }
   2754      1.1.1.2  christos 
   2755      1.1.1.2  christos   return vpc;
   2756      1.1.1.2  christos #undef FLD
   2757      1.1.1.2  christos }
   2758      1.1.1.2  christos 
   2759          1.1  christos /* lf-mul-s: lf.mul.s $rDSF,$rASF,$rBSF */
   2760          1.1  christos 
   2761          1.1  christos static SEM_PC
   2762          1.1  christos SEM_FN_NAME (or1k32bf,lf_mul_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2763          1.1  christos {
   2764          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2765          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2766          1.1  christos   int UNUSED written = 0;
   2767          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2768          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2769          1.1  christos 
   2770          1.1  christos   {
   2771          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2772          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2773          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2774          1.1  christos   }
   2775          1.1  christos 
   2776          1.1  christos   return vpc;
   2777          1.1  christos #undef FLD
   2778          1.1  christos }
   2779          1.1  christos 
   2780      1.1.1.2  christos /* lf-mul-d32: lf.mul.d $rDD32F,$rAD32F,$rBD32F */
   2781      1.1.1.2  christos 
   2782      1.1.1.2  christos static SEM_PC
   2783      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_mul_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2784      1.1.1.2  christos {
   2785      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2786      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2787      1.1.1.2  christos   int UNUSED written = 0;
   2788      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2789      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2790      1.1.1.2  christos 
   2791      1.1.1.2  christos   {
   2792      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2793      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2794      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2795      1.1.1.2  christos   }
   2796      1.1.1.2  christos 
   2797      1.1.1.2  christos   return vpc;
   2798      1.1.1.2  christos #undef FLD
   2799      1.1.1.2  christos }
   2800      1.1.1.2  christos 
   2801          1.1  christos /* lf-div-s: lf.div.s $rDSF,$rASF,$rBSF */
   2802          1.1  christos 
   2803          1.1  christos static SEM_PC
   2804          1.1  christos SEM_FN_NAME (or1k32bf,lf_div_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2805          1.1  christos {
   2806          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2807          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2808          1.1  christos   int UNUSED written = 0;
   2809          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2810          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2811          1.1  christos 
   2812          1.1  christos   {
   2813          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2814          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2815          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2816          1.1  christos   }
   2817          1.1  christos 
   2818          1.1  christos   return vpc;
   2819          1.1  christos #undef FLD
   2820          1.1  christos }
   2821          1.1  christos 
   2822      1.1.1.2  christos /* lf-div-d32: lf.div.d $rDD32F,$rAD32F,$rBD32F */
   2823      1.1.1.2  christos 
   2824      1.1.1.2  christos static SEM_PC
   2825      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_div_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2826      1.1.1.2  christos {
   2827      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2828      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2829      1.1.1.2  christos   int UNUSED written = 0;
   2830      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2831      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2832      1.1.1.2  christos 
   2833      1.1.1.2  christos   {
   2834      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2835      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2836      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2837      1.1.1.2  christos   }
   2838      1.1.1.2  christos 
   2839      1.1.1.2  christos   return vpc;
   2840      1.1.1.2  christos #undef FLD
   2841      1.1.1.2  christos }
   2842      1.1.1.2  christos 
   2843          1.1  christos /* lf-rem-s: lf.rem.s $rDSF,$rASF,$rBSF */
   2844          1.1  christos 
   2845          1.1  christos static SEM_PC
   2846          1.1  christos SEM_FN_NAME (or1k32bf,lf_rem_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2847          1.1  christos {
   2848          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2849          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2850          1.1  christos   int UNUSED written = 0;
   2851          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2852          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2853          1.1  christos 
   2854          1.1  christos   {
   2855          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->remsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2856          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2857          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2858          1.1  christos   }
   2859          1.1  christos 
   2860          1.1  christos   return vpc;
   2861          1.1  christos #undef FLD
   2862          1.1  christos }
   2863          1.1  christos 
   2864      1.1.1.2  christos /* lf-rem-d32: lf.rem.d $rDD32F,$rAD32F,$rBD32F */
   2865      1.1.1.2  christos 
   2866      1.1.1.2  christos static SEM_PC
   2867      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_rem_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2868      1.1.1.2  christos {
   2869      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2870      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2871      1.1.1.2  christos   int UNUSED written = 0;
   2872      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2873      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2874      1.1.1.2  christos 
   2875      1.1.1.2  christos   {
   2876      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   2877      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2878      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2879      1.1.1.2  christos   }
   2880      1.1.1.2  christos 
   2881      1.1.1.2  christos   return vpc;
   2882      1.1.1.2  christos #undef FLD
   2883      1.1.1.2  christos }
   2884      1.1.1.2  christos 
   2885          1.1  christos /* lf-itof-s: lf.itof.s $rDSF,$rA */
   2886          1.1  christos 
   2887          1.1  christos static SEM_PC
   2888          1.1  christos SEM_FN_NAME (or1k32bf,lf_itof_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2889          1.1  christos {
   2890          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2891          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2892          1.1  christos   int UNUSED written = 0;
   2893          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2894          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2895          1.1  christos 
   2896          1.1  christos   {
   2897          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2))));
   2898          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   2899          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   2900          1.1  christos   }
   2901          1.1  christos 
   2902          1.1  christos   return vpc;
   2903          1.1  christos #undef FLD
   2904          1.1  christos }
   2905          1.1  christos 
   2906      1.1.1.2  christos /* lf-itof-d32: lf.itof.d $rDD32F,$rADI */
   2907      1.1.1.2  christos 
   2908      1.1.1.2  christos static SEM_PC
   2909      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_itof_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2910      1.1.1.2  christos {
   2911      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2912      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2913      1.1.1.2  christos   int UNUSED written = 0;
   2914      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2915      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2916      1.1.1.2  christos 
   2917      1.1.1.2  christos   {
   2918      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_I64R (FLD (f_rad32)));
   2919      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   2920      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   2921      1.1.1.2  christos   }
   2922      1.1.1.2  christos 
   2923      1.1.1.2  christos   return vpc;
   2924      1.1.1.2  christos #undef FLD
   2925      1.1.1.2  christos }
   2926      1.1.1.2  christos 
   2927          1.1  christos /* lf-ftoi-s: lf.ftoi.s $rD,$rASF */
   2928          1.1  christos 
   2929          1.1  christos static SEM_PC
   2930          1.1  christos SEM_FN_NAME (or1k32bf,lf_ftoi_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2931          1.1  christos {
   2932          1.1  christos #define FLD(f) abuf->fields.sfmt_l_slli.f
   2933          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2934          1.1  christos   int UNUSED written = 0;
   2935          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2936          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2937          1.1  christos 
   2938          1.1  christos   {
   2939          1.1  christos     SI opval = EXTSISI (CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2))));
   2940          1.1  christos     SET_H_GPR (FLD (f_r1), opval);
   2941          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
   2942          1.1  christos   }
   2943          1.1  christos 
   2944          1.1  christos   return vpc;
   2945          1.1  christos #undef FLD
   2946          1.1  christos }
   2947          1.1  christos 
   2948      1.1.1.2  christos /* lf-ftoi-d32: lf.ftoi.d $rDDI,$rAD32F */
   2949      1.1.1.2  christos 
   2950      1.1.1.2  christos static SEM_PC
   2951      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_ftoi_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2952      1.1.1.2  christos {
   2953      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2954      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2955      1.1.1.2  christos   int UNUSED written = 0;
   2956      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2957      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2958      1.1.1.2  christos 
   2959      1.1.1.2  christos   {
   2960      1.1.1.2  christos     DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FD32R (FLD (f_rad32)));
   2961      1.1.1.2  christos     SET_H_I64R (FLD (f_rdd32), opval);
   2962      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
   2963      1.1.1.2  christos   }
   2964      1.1.1.2  christos 
   2965      1.1.1.2  christos   return vpc;
   2966      1.1.1.2  christos #undef FLD
   2967      1.1.1.2  christos }
   2968      1.1.1.2  christos 
   2969      1.1.1.2  christos /* lf-sfeq-s: lf.sfeq.s $rASF,$rBSF */
   2970          1.1  christos 
   2971          1.1  christos static SEM_PC
   2972      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfeq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2973          1.1  christos {
   2974          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   2975          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2976          1.1  christos   int UNUSED written = 0;
   2977          1.1  christos   IADDR UNUSED pc = abuf->addr;
   2978          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   2979          1.1  christos 
   2980          1.1  christos   {
   2981          1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   2982          1.1  christos     SET_H_SYS_SR_F (opval);
   2983          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   2984          1.1  christos   }
   2985          1.1  christos 
   2986          1.1  christos   return vpc;
   2987          1.1  christos #undef FLD
   2988          1.1  christos }
   2989          1.1  christos 
   2990      1.1.1.2  christos /* lf-sfeq-d32: lf.sfeq.d $rAD32F,$rBD32F */
   2991          1.1  christos 
   2992          1.1  christos static SEM_PC
   2993      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfeq_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   2994      1.1.1.2  christos {
   2995      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   2996      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   2997      1.1.1.2  christos   int UNUSED written = 0;
   2998      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   2999      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3000      1.1.1.2  christos 
   3001      1.1.1.2  christos   {
   3002      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3003      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3004      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3005      1.1.1.2  christos   }
   3006      1.1.1.2  christos 
   3007      1.1.1.2  christos   return vpc;
   3008      1.1.1.2  christos #undef FLD
   3009      1.1.1.2  christos }
   3010      1.1.1.2  christos 
   3011      1.1.1.2  christos /* lf-sfne-s: lf.sfne.s $rASF,$rBSF */
   3012      1.1.1.2  christos 
   3013      1.1.1.2  christos static SEM_PC
   3014      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfne_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3015          1.1  christos {
   3016          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3017          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3018          1.1  christos   int UNUSED written = 0;
   3019          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3020          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3021          1.1  christos 
   3022          1.1  christos   {
   3023          1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3024          1.1  christos     SET_H_SYS_SR_F (opval);
   3025          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3026          1.1  christos   }
   3027          1.1  christos 
   3028          1.1  christos   return vpc;
   3029          1.1  christos #undef FLD
   3030          1.1  christos }
   3031          1.1  christos 
   3032      1.1.1.2  christos /* lf-sfne-d32: lf.sfne.d $rAD32F,$rBD32F */
   3033      1.1.1.2  christos 
   3034      1.1.1.2  christos static SEM_PC
   3035      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfne_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3036      1.1.1.2  christos {
   3037      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3038      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3039      1.1.1.2  christos   int UNUSED written = 0;
   3040      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3041      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3042      1.1.1.2  christos 
   3043      1.1.1.2  christos   {
   3044      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3045      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3046      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3047      1.1.1.2  christos   }
   3048      1.1.1.2  christos 
   3049      1.1.1.2  christos   return vpc;
   3050      1.1.1.2  christos #undef FLD
   3051      1.1.1.2  christos }
   3052      1.1.1.2  christos 
   3053      1.1.1.2  christos /* lf-sfge-s: lf.sfge.s $rASF,$rBSF */
   3054          1.1  christos 
   3055          1.1  christos static SEM_PC
   3056      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3057          1.1  christos {
   3058          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3059          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3060          1.1  christos   int UNUSED written = 0;
   3061          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3062          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3063          1.1  christos 
   3064          1.1  christos   {
   3065          1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3066          1.1  christos     SET_H_SYS_SR_F (opval);
   3067          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3068          1.1  christos   }
   3069          1.1  christos 
   3070          1.1  christos   return vpc;
   3071          1.1  christos #undef FLD
   3072          1.1  christos }
   3073          1.1  christos 
   3074      1.1.1.2  christos /* lf-sfge-d32: lf.sfge.d $rAD32F,$rBD32F */
   3075      1.1.1.2  christos 
   3076      1.1.1.2  christos static SEM_PC
   3077      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfge_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3078      1.1.1.2  christos {
   3079      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3080      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3081      1.1.1.2  christos   int UNUSED written = 0;
   3082      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3083      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3084      1.1.1.2  christos 
   3085      1.1.1.2  christos   {
   3086      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3087      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3088      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3089      1.1.1.2  christos   }
   3090      1.1.1.2  christos 
   3091      1.1.1.2  christos   return vpc;
   3092      1.1.1.2  christos #undef FLD
   3093      1.1.1.2  christos }
   3094      1.1.1.2  christos 
   3095      1.1.1.2  christos /* lf-sfgt-s: lf.sfgt.s $rASF,$rBSF */
   3096          1.1  christos 
   3097          1.1  christos static SEM_PC
   3098      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfgt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3099          1.1  christos {
   3100          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3101          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3102          1.1  christos   int UNUSED written = 0;
   3103          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3104          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3105          1.1  christos 
   3106          1.1  christos   {
   3107          1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3108          1.1  christos     SET_H_SYS_SR_F (opval);
   3109          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3110          1.1  christos   }
   3111          1.1  christos 
   3112          1.1  christos   return vpc;
   3113          1.1  christos #undef FLD
   3114          1.1  christos }
   3115          1.1  christos 
   3116      1.1.1.2  christos /* lf-sfgt-d32: lf.sfgt.d $rAD32F,$rBD32F */
   3117      1.1.1.2  christos 
   3118      1.1.1.2  christos static SEM_PC
   3119      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfgt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3120      1.1.1.2  christos {
   3121      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3122      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3123      1.1.1.2  christos   int UNUSED written = 0;
   3124      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3125      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3126      1.1.1.2  christos 
   3127      1.1.1.2  christos   {
   3128      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3129      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3130      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3131      1.1.1.2  christos   }
   3132      1.1.1.2  christos 
   3133      1.1.1.2  christos   return vpc;
   3134      1.1.1.2  christos #undef FLD
   3135      1.1.1.2  christos }
   3136      1.1.1.2  christos 
   3137      1.1.1.2  christos /* lf-sflt-s: lf.sflt.s $rASF,$rBSF */
   3138          1.1  christos 
   3139          1.1  christos static SEM_PC
   3140      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sflt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3141          1.1  christos {
   3142          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3143          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3144          1.1  christos   int UNUSED written = 0;
   3145          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3146          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3147          1.1  christos 
   3148          1.1  christos   {
   3149          1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3150          1.1  christos     SET_H_SYS_SR_F (opval);
   3151          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3152          1.1  christos   }
   3153          1.1  christos 
   3154          1.1  christos   return vpc;
   3155          1.1  christos #undef FLD
   3156          1.1  christos }
   3157          1.1  christos 
   3158      1.1.1.2  christos /* lf-sflt-d32: lf.sflt.d $rAD32F,$rBD32F */
   3159      1.1.1.2  christos 
   3160      1.1.1.2  christos static SEM_PC
   3161      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sflt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3162      1.1.1.2  christos {
   3163      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3164      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3165      1.1.1.2  christos   int UNUSED written = 0;
   3166      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3167      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3168      1.1.1.2  christos 
   3169      1.1.1.2  christos   {
   3170      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3171      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3172      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3173      1.1.1.2  christos   }
   3174      1.1.1.2  christos 
   3175      1.1.1.2  christos   return vpc;
   3176      1.1.1.2  christos #undef FLD
   3177      1.1.1.2  christos }
   3178      1.1.1.2  christos 
   3179      1.1.1.2  christos /* lf-sfle-s: lf.sfle.s $rASF,$rBSF */
   3180          1.1  christos 
   3181          1.1  christos static SEM_PC
   3182      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfle_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3183          1.1  christos {
   3184          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3185          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3186          1.1  christos   int UNUSED written = 0;
   3187          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3188          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3189          1.1  christos 
   3190          1.1  christos   {
   3191          1.1  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3192          1.1  christos     SET_H_SYS_SR_F (opval);
   3193          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3194          1.1  christos   }
   3195          1.1  christos 
   3196          1.1  christos   return vpc;
   3197          1.1  christos #undef FLD
   3198          1.1  christos }
   3199          1.1  christos 
   3200      1.1.1.2  christos /* lf-sfle-d32: lf.sfle.d $rAD32F,$rBD32F */
   3201      1.1.1.2  christos 
   3202      1.1.1.2  christos static SEM_PC
   3203      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfle_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3204      1.1.1.2  christos {
   3205      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3206      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3207      1.1.1.2  christos   int UNUSED written = 0;
   3208      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3209      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3210      1.1.1.2  christos 
   3211      1.1.1.2  christos   {
   3212      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3213      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3214      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3215      1.1.1.2  christos   }
   3216      1.1.1.2  christos 
   3217      1.1.1.2  christos   return vpc;
   3218      1.1.1.2  christos #undef FLD
   3219      1.1.1.2  christos }
   3220      1.1.1.2  christos 
   3221      1.1.1.2  christos /* lf-sfueq-s: lf.sfueq.s $rASF,$rBSF */
   3222      1.1.1.2  christos 
   3223      1.1.1.2  christos static SEM_PC
   3224      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfueq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3225      1.1.1.2  christos {
   3226      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3227      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3228      1.1.1.2  christos   int UNUSED written = 0;
   3229      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3230      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3231      1.1.1.2  christos 
   3232      1.1.1.2  christos   {
   3233      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3234      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3235      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3236      1.1.1.2  christos   }
   3237      1.1.1.2  christos 
   3238      1.1.1.2  christos   return vpc;
   3239      1.1.1.2  christos #undef FLD
   3240      1.1.1.2  christos }
   3241      1.1.1.2  christos 
   3242      1.1.1.2  christos /* lf-sfueq-d32: lf.sfueq.d $rAD32F,$rBD32F */
   3243      1.1.1.2  christos 
   3244      1.1.1.2  christos static SEM_PC
   3245      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfueq_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3246      1.1.1.2  christos {
   3247      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3248      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3249      1.1.1.2  christos   int UNUSED written = 0;
   3250      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3251      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3252      1.1.1.2  christos 
   3253      1.1.1.2  christos   {
   3254      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3255      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3256      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3257      1.1.1.2  christos   }
   3258      1.1.1.2  christos 
   3259      1.1.1.2  christos   return vpc;
   3260      1.1.1.2  christos #undef FLD
   3261      1.1.1.2  christos }
   3262      1.1.1.2  christos 
   3263      1.1.1.2  christos /* lf-sfune-s: lf.sfune.s $rASF,$rBSF */
   3264      1.1.1.2  christos 
   3265      1.1.1.2  christos static SEM_PC
   3266      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfune_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3267      1.1.1.2  christos {
   3268      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3269      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3270      1.1.1.2  christos   int UNUSED written = 0;
   3271      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3272      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3273      1.1.1.2  christos 
   3274      1.1.1.2  christos   {
   3275      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3276      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3277      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3278      1.1.1.2  christos   }
   3279      1.1.1.2  christos 
   3280      1.1.1.2  christos   return vpc;
   3281      1.1.1.2  christos #undef FLD
   3282      1.1.1.2  christos }
   3283      1.1.1.2  christos 
   3284      1.1.1.2  christos /* lf-sfune-d32: lf.sfune.d $rAD32F,$rBD32F */
   3285      1.1.1.2  christos 
   3286      1.1.1.2  christos static SEM_PC
   3287      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfune_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3288      1.1.1.2  christos {
   3289      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3290      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3291      1.1.1.2  christos   int UNUSED written = 0;
   3292      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3293      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3294      1.1.1.2  christos 
   3295      1.1.1.2  christos   {
   3296      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3297      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3298      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3299      1.1.1.2  christos   }
   3300      1.1.1.2  christos 
   3301      1.1.1.2  christos   return vpc;
   3302      1.1.1.2  christos #undef FLD
   3303      1.1.1.2  christos }
   3304      1.1.1.2  christos 
   3305      1.1.1.2  christos /* lf-sfugt-s: lf.sfugt.s $rASF,$rBSF */
   3306      1.1.1.2  christos 
   3307      1.1.1.2  christos static SEM_PC
   3308      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfugt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3309      1.1.1.2  christos {
   3310      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3311      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3312      1.1.1.2  christos   int UNUSED written = 0;
   3313      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3314      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3315      1.1.1.2  christos 
   3316      1.1.1.2  christos   {
   3317      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3318      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3319      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3320      1.1.1.2  christos   }
   3321      1.1.1.2  christos 
   3322      1.1.1.2  christos   return vpc;
   3323      1.1.1.2  christos #undef FLD
   3324      1.1.1.2  christos }
   3325      1.1.1.2  christos 
   3326      1.1.1.2  christos /* lf-sfugt-d32: lf.sfugt.d $rAD32F,$rBD32F */
   3327      1.1.1.2  christos 
   3328      1.1.1.2  christos static SEM_PC
   3329      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfugt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3330      1.1.1.2  christos {
   3331      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3332      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3333      1.1.1.2  christos   int UNUSED written = 0;
   3334      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3335      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3336      1.1.1.2  christos 
   3337      1.1.1.2  christos   {
   3338      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3339      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3340      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3341      1.1.1.2  christos   }
   3342      1.1.1.2  christos 
   3343      1.1.1.2  christos   return vpc;
   3344      1.1.1.2  christos #undef FLD
   3345      1.1.1.2  christos }
   3346      1.1.1.2  christos 
   3347      1.1.1.2  christos /* lf-sfuge-s: lf.sfuge.s $rASF,$rBSF */
   3348      1.1.1.2  christos 
   3349      1.1.1.2  christos static SEM_PC
   3350      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfuge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3351      1.1.1.2  christos {
   3352      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3353      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3354      1.1.1.2  christos   int UNUSED written = 0;
   3355      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3356      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3357      1.1.1.2  christos 
   3358      1.1.1.2  christos   {
   3359      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3360      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3361      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3362      1.1.1.2  christos   }
   3363      1.1.1.2  christos 
   3364      1.1.1.2  christos   return vpc;
   3365      1.1.1.2  christos #undef FLD
   3366      1.1.1.2  christos }
   3367      1.1.1.2  christos 
   3368      1.1.1.2  christos /* lf-sfuge-d32: lf.sfuge.d $rAD32F,$rBD32F */
   3369      1.1.1.2  christos 
   3370      1.1.1.2  christos static SEM_PC
   3371      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfuge_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3372      1.1.1.2  christos {
   3373      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3374      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3375      1.1.1.2  christos   int UNUSED written = 0;
   3376      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3377      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3378      1.1.1.2  christos 
   3379      1.1.1.2  christos   {
   3380      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3381      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3382      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3383      1.1.1.2  christos   }
   3384      1.1.1.2  christos 
   3385      1.1.1.2  christos   return vpc;
   3386      1.1.1.2  christos #undef FLD
   3387      1.1.1.2  christos }
   3388      1.1.1.2  christos 
   3389      1.1.1.2  christos /* lf-sfult-s: lf.sfult.s $rASF,$rBSF */
   3390      1.1.1.2  christos 
   3391      1.1.1.2  christos static SEM_PC
   3392      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfult_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3393      1.1.1.2  christos {
   3394      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3395      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3396      1.1.1.2  christos   int UNUSED written = 0;
   3397      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3398      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3399      1.1.1.2  christos 
   3400      1.1.1.2  christos   {
   3401      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3402      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3403      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3404      1.1.1.2  christos   }
   3405      1.1.1.2  christos 
   3406      1.1.1.2  christos   return vpc;
   3407      1.1.1.2  christos #undef FLD
   3408      1.1.1.2  christos }
   3409      1.1.1.2  christos 
   3410      1.1.1.2  christos /* lf-sfult-d32: lf.sfult.d $rAD32F,$rBD32F */
   3411      1.1.1.2  christos 
   3412      1.1.1.2  christos static SEM_PC
   3413      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfult_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3414      1.1.1.2  christos {
   3415      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3416      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3417      1.1.1.2  christos   int UNUSED written = 0;
   3418      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3419      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3420      1.1.1.2  christos 
   3421      1.1.1.2  christos   {
   3422      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3423      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3424      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3425      1.1.1.2  christos   }
   3426      1.1.1.2  christos 
   3427      1.1.1.2  christos   return vpc;
   3428      1.1.1.2  christos #undef FLD
   3429      1.1.1.2  christos }
   3430      1.1.1.2  christos 
   3431      1.1.1.2  christos /* lf-sfule-s: lf.sfule.s $rASF,$rBSF */
   3432      1.1.1.2  christos 
   3433      1.1.1.2  christos static SEM_PC
   3434      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfule_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3435      1.1.1.2  christos {
   3436      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3437      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3438      1.1.1.2  christos   int UNUSED written = 0;
   3439      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3440      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3441      1.1.1.2  christos 
   3442      1.1.1.2  christos   {
   3443      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
   3444      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3445      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3446      1.1.1.2  christos   }
   3447      1.1.1.2  christos 
   3448      1.1.1.2  christos   return vpc;
   3449      1.1.1.2  christos #undef FLD
   3450      1.1.1.2  christos }
   3451      1.1.1.2  christos 
   3452      1.1.1.2  christos /* lf-sfule-d32: lf.sfule.d $rAD32F,$rBD32F */
   3453      1.1.1.2  christos 
   3454      1.1.1.2  christos static SEM_PC
   3455      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfule_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3456      1.1.1.2  christos {
   3457      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3458      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3459      1.1.1.2  christos   int UNUSED written = 0;
   3460      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3461      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3462      1.1.1.2  christos 
   3463      1.1.1.2  christos   {
   3464      1.1.1.2  christos     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
   3465      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3466      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3467      1.1.1.2  christos   }
   3468      1.1.1.2  christos 
   3469      1.1.1.2  christos   return vpc;
   3470      1.1.1.2  christos #undef FLD
   3471      1.1.1.2  christos }
   3472      1.1.1.2  christos 
   3473      1.1.1.2  christos /* lf-sfun-s: lf.sfun.s $rASF,$rBSF */
   3474      1.1.1.2  christos 
   3475      1.1.1.2  christos static SEM_PC
   3476      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfun_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3477      1.1.1.2  christos {
   3478      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3479      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3480      1.1.1.2  christos   int UNUSED written = 0;
   3481      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3482      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3483      1.1.1.2  christos 
   3484      1.1.1.2  christos   {
   3485      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
   3486      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3487      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3488      1.1.1.2  christos   }
   3489      1.1.1.2  christos 
   3490      1.1.1.2  christos   return vpc;
   3491      1.1.1.2  christos #undef FLD
   3492      1.1.1.2  christos }
   3493      1.1.1.2  christos 
   3494      1.1.1.2  christos /* lf-sfun-d32: lf.sfun.d $rAD32F,$rBD32F */
   3495      1.1.1.2  christos 
   3496      1.1.1.2  christos static SEM_PC
   3497      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_sfun_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3498      1.1.1.2  christos {
   3499      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3500      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3501      1.1.1.2  christos   int UNUSED written = 0;
   3502      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3503      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3504      1.1.1.2  christos 
   3505      1.1.1.2  christos   {
   3506      1.1.1.2  christos     BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
   3507      1.1.1.2  christos     SET_H_SYS_SR_F (opval);
   3508      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
   3509      1.1.1.2  christos   }
   3510      1.1.1.2  christos 
   3511      1.1.1.2  christos   return vpc;
   3512      1.1.1.2  christos #undef FLD
   3513      1.1.1.2  christos }
   3514      1.1.1.2  christos 
   3515          1.1  christos /* lf-madd-s: lf.madd.s $rDSF,$rASF,$rBSF */
   3516          1.1  christos 
   3517          1.1  christos static SEM_PC
   3518          1.1  christos SEM_FN_NAME (or1k32bf,lf_madd_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3519          1.1  christos {
   3520          1.1  christos #define FLD(f) abuf->fields.sfmt_l_sll.f
   3521          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3522          1.1  christos   int UNUSED written = 0;
   3523          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3524          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3525          1.1  christos 
   3526          1.1  christos   {
   3527          1.1  christos     SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), GET_H_FSR (FLD (f_r1)));
   3528          1.1  christos     SET_H_FSR (FLD (f_r1), opval);
   3529          1.1  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
   3530          1.1  christos   }
   3531          1.1  christos 
   3532          1.1  christos   return vpc;
   3533          1.1  christos #undef FLD
   3534          1.1  christos }
   3535          1.1  christos 
   3536      1.1.1.2  christos /* lf-madd-d32: lf.madd.d $rDD32F,$rAD32F,$rBD32F */
   3537      1.1.1.2  christos 
   3538      1.1.1.2  christos static SEM_PC
   3539      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_madd_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3540      1.1.1.2  christos {
   3541      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
   3542      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3543      1.1.1.2  christos   int UNUSED written = 0;
   3544      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3545      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3546      1.1.1.2  christos 
   3547      1.1.1.2  christos   {
   3548      1.1.1.2  christos     DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32)));
   3549      1.1.1.2  christos     SET_H_FD32R (FLD (f_rdd32), opval);
   3550      1.1.1.2  christos     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
   3551      1.1.1.2  christos   }
   3552      1.1.1.2  christos 
   3553      1.1.1.2  christos   return vpc;
   3554      1.1.1.2  christos #undef FLD
   3555      1.1.1.2  christos }
   3556      1.1.1.2  christos 
   3557          1.1  christos /* lf-cust1-s: lf.cust1.s $rASF,$rBSF */
   3558          1.1  christos 
   3559          1.1  christos static SEM_PC
   3560          1.1  christos SEM_FN_NAME (or1k32bf,lf_cust1_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3561          1.1  christos {
   3562          1.1  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3563          1.1  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3564          1.1  christos   int UNUSED written = 0;
   3565          1.1  christos   IADDR UNUSED pc = abuf->addr;
   3566          1.1  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3567          1.1  christos 
   3568          1.1  christos ((void) 0); /*nop*/
   3569          1.1  christos 
   3570          1.1  christos   return vpc;
   3571          1.1  christos #undef FLD
   3572          1.1  christos }
   3573          1.1  christos 
   3574      1.1.1.2  christos /* lf-cust1-d32: lf.cust1.d */
   3575      1.1.1.2  christos 
   3576      1.1.1.2  christos static SEM_PC
   3577      1.1.1.2  christos SEM_FN_NAME (or1k32bf,lf_cust1_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
   3578      1.1.1.2  christos {
   3579      1.1.1.2  christos #define FLD(f) abuf->fields.sfmt_empty.f
   3580      1.1.1.2  christos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
   3581      1.1.1.2  christos   int UNUSED written = 0;
   3582      1.1.1.2  christos   IADDR UNUSED pc = abuf->addr;
   3583      1.1.1.2  christos   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
   3584      1.1.1.2  christos 
   3585      1.1.1.2  christos ((void) 0); /*nop*/
   3586      1.1.1.2  christos 
   3587      1.1.1.2  christos   return vpc;
   3588      1.1.1.2  christos #undef FLD
   3589      1.1.1.2  christos }
   3590      1.1.1.2  christos 
   3591          1.1  christos /* Table of all semantic fns.  */
   3592          1.1  christos 
   3593          1.1  christos static const struct sem_fn_desc sem_fns[] = {
   3594          1.1  christos   { OR1K32BF_INSN_X_INVALID, SEM_FN_NAME (or1k32bf,x_invalid) },
   3595          1.1  christos   { OR1K32BF_INSN_X_AFTER, SEM_FN_NAME (or1k32bf,x_after) },
   3596          1.1  christos   { OR1K32BF_INSN_X_BEFORE, SEM_FN_NAME (or1k32bf,x_before) },
   3597          1.1  christos   { OR1K32BF_INSN_X_CTI_CHAIN, SEM_FN_NAME (or1k32bf,x_cti_chain) },
   3598          1.1  christos   { OR1K32BF_INSN_X_CHAIN, SEM_FN_NAME (or1k32bf,x_chain) },
   3599          1.1  christos   { OR1K32BF_INSN_X_BEGIN, SEM_FN_NAME (or1k32bf,x_begin) },
   3600          1.1  christos   { OR1K32BF_INSN_L_J, SEM_FN_NAME (or1k32bf,l_j) },
   3601          1.1  christos   { OR1K32BF_INSN_L_ADRP, SEM_FN_NAME (or1k32bf,l_adrp) },
   3602          1.1  christos   { OR1K32BF_INSN_L_JAL, SEM_FN_NAME (or1k32bf,l_jal) },
   3603          1.1  christos   { OR1K32BF_INSN_L_JR, SEM_FN_NAME (or1k32bf,l_jr) },
   3604          1.1  christos   { OR1K32BF_INSN_L_JALR, SEM_FN_NAME (or1k32bf,l_jalr) },
   3605          1.1  christos   { OR1K32BF_INSN_L_BNF, SEM_FN_NAME (or1k32bf,l_bnf) },
   3606          1.1  christos   { OR1K32BF_INSN_L_BF, SEM_FN_NAME (or1k32bf,l_bf) },
   3607          1.1  christos   { OR1K32BF_INSN_L_TRAP, SEM_FN_NAME (or1k32bf,l_trap) },
   3608          1.1  christos   { OR1K32BF_INSN_L_SYS, SEM_FN_NAME (or1k32bf,l_sys) },
   3609          1.1  christos   { OR1K32BF_INSN_L_MSYNC, SEM_FN_NAME (or1k32bf,l_msync) },
   3610          1.1  christos   { OR1K32BF_INSN_L_PSYNC, SEM_FN_NAME (or1k32bf,l_psync) },
   3611          1.1  christos   { OR1K32BF_INSN_L_CSYNC, SEM_FN_NAME (or1k32bf,l_csync) },
   3612          1.1  christos   { OR1K32BF_INSN_L_RFE, SEM_FN_NAME (or1k32bf,l_rfe) },
   3613          1.1  christos   { OR1K32BF_INSN_L_NOP_IMM, SEM_FN_NAME (or1k32bf,l_nop_imm) },
   3614          1.1  christos   { OR1K32BF_INSN_L_MOVHI, SEM_FN_NAME (or1k32bf,l_movhi) },
   3615          1.1  christos   { OR1K32BF_INSN_L_MACRC, SEM_FN_NAME (or1k32bf,l_macrc) },
   3616          1.1  christos   { OR1K32BF_INSN_L_MFSPR, SEM_FN_NAME (or1k32bf,l_mfspr) },
   3617          1.1  christos   { OR1K32BF_INSN_L_MTSPR, SEM_FN_NAME (or1k32bf,l_mtspr) },
   3618          1.1  christos   { OR1K32BF_INSN_L_LWZ, SEM_FN_NAME (or1k32bf,l_lwz) },
   3619          1.1  christos   { OR1K32BF_INSN_L_LWS, SEM_FN_NAME (or1k32bf,l_lws) },
   3620          1.1  christos   { OR1K32BF_INSN_L_LWA, SEM_FN_NAME (or1k32bf,l_lwa) },
   3621          1.1  christos   { OR1K32BF_INSN_L_LBZ, SEM_FN_NAME (or1k32bf,l_lbz) },
   3622          1.1  christos   { OR1K32BF_INSN_L_LBS, SEM_FN_NAME (or1k32bf,l_lbs) },
   3623          1.1  christos   { OR1K32BF_INSN_L_LHZ, SEM_FN_NAME (or1k32bf,l_lhz) },
   3624          1.1  christos   { OR1K32BF_INSN_L_LHS, SEM_FN_NAME (or1k32bf,l_lhs) },
   3625          1.1  christos   { OR1K32BF_INSN_L_SW, SEM_FN_NAME (or1k32bf,l_sw) },
   3626          1.1  christos   { OR1K32BF_INSN_L_SB, SEM_FN_NAME (or1k32bf,l_sb) },
   3627          1.1  christos   { OR1K32BF_INSN_L_SH, SEM_FN_NAME (or1k32bf,l_sh) },
   3628          1.1  christos   { OR1K32BF_INSN_L_SWA, SEM_FN_NAME (or1k32bf,l_swa) },
   3629          1.1  christos   { OR1K32BF_INSN_L_SLL, SEM_FN_NAME (or1k32bf,l_sll) },
   3630          1.1  christos   { OR1K32BF_INSN_L_SLLI, SEM_FN_NAME (or1k32bf,l_slli) },
   3631          1.1  christos   { OR1K32BF_INSN_L_SRL, SEM_FN_NAME (or1k32bf,l_srl) },
   3632          1.1  christos   { OR1K32BF_INSN_L_SRLI, SEM_FN_NAME (or1k32bf,l_srli) },
   3633          1.1  christos   { OR1K32BF_INSN_L_SRA, SEM_FN_NAME (or1k32bf,l_sra) },
   3634          1.1  christos   { OR1K32BF_INSN_L_SRAI, SEM_FN_NAME (or1k32bf,l_srai) },
   3635          1.1  christos   { OR1K32BF_INSN_L_ROR, SEM_FN_NAME (or1k32bf,l_ror) },
   3636          1.1  christos   { OR1K32BF_INSN_L_RORI, SEM_FN_NAME (or1k32bf,l_rori) },
   3637          1.1  christos   { OR1K32BF_INSN_L_AND, SEM_FN_NAME (or1k32bf,l_and) },
   3638          1.1  christos   { OR1K32BF_INSN_L_OR, SEM_FN_NAME (or1k32bf,l_or) },
   3639          1.1  christos   { OR1K32BF_INSN_L_XOR, SEM_FN_NAME (or1k32bf,l_xor) },
   3640          1.1  christos   { OR1K32BF_INSN_L_ADD, SEM_FN_NAME (or1k32bf,l_add) },
   3641          1.1  christos   { OR1K32BF_INSN_L_SUB, SEM_FN_NAME (or1k32bf,l_sub) },
   3642          1.1  christos   { OR1K32BF_INSN_L_ADDC, SEM_FN_NAME (or1k32bf,l_addc) },
   3643          1.1  christos   { OR1K32BF_INSN_L_MUL, SEM_FN_NAME (or1k32bf,l_mul) },
   3644          1.1  christos   { OR1K32BF_INSN_L_MULD, SEM_FN_NAME (or1k32bf,l_muld) },
   3645          1.1  christos   { OR1K32BF_INSN_L_MULU, SEM_FN_NAME (or1k32bf,l_mulu) },
   3646          1.1  christos   { OR1K32BF_INSN_L_MULDU, SEM_FN_NAME (or1k32bf,l_muldu) },
   3647          1.1  christos   { OR1K32BF_INSN_L_DIV, SEM_FN_NAME (or1k32bf,l_div) },
   3648          1.1  christos   { OR1K32BF_INSN_L_DIVU, SEM_FN_NAME (or1k32bf,l_divu) },
   3649          1.1  christos   { OR1K32BF_INSN_L_FF1, SEM_FN_NAME (or1k32bf,l_ff1) },
   3650          1.1  christos   { OR1K32BF_INSN_L_FL1, SEM_FN_NAME (or1k32bf,l_fl1) },
   3651          1.1  christos   { OR1K32BF_INSN_L_ANDI, SEM_FN_NAME (or1k32bf,l_andi) },
   3652          1.1  christos   { OR1K32BF_INSN_L_ORI, SEM_FN_NAME (or1k32bf,l_ori) },
   3653          1.1  christos   { OR1K32BF_INSN_L_XORI, SEM_FN_NAME (or1k32bf,l_xori) },
   3654          1.1  christos   { OR1K32BF_INSN_L_ADDI, SEM_FN_NAME (or1k32bf,l_addi) },
   3655          1.1  christos   { OR1K32BF_INSN_L_ADDIC, SEM_FN_NAME (or1k32bf,l_addic) },
   3656          1.1  christos   { OR1K32BF_INSN_L_MULI, SEM_FN_NAME (or1k32bf,l_muli) },
   3657          1.1  christos   { OR1K32BF_INSN_L_EXTHS, SEM_FN_NAME (or1k32bf,l_exths) },
   3658          1.1  christos   { OR1K32BF_INSN_L_EXTBS, SEM_FN_NAME (or1k32bf,l_extbs) },
   3659          1.1  christos   { OR1K32BF_INSN_L_EXTHZ, SEM_FN_NAME (or1k32bf,l_exthz) },
   3660          1.1  christos   { OR1K32BF_INSN_L_EXTBZ, SEM_FN_NAME (or1k32bf,l_extbz) },
   3661          1.1  christos   { OR1K32BF_INSN_L_EXTWS, SEM_FN_NAME (or1k32bf,l_extws) },
   3662          1.1  christos   { OR1K32BF_INSN_L_EXTWZ, SEM_FN_NAME (or1k32bf,l_extwz) },
   3663          1.1  christos   { OR1K32BF_INSN_L_CMOV, SEM_FN_NAME (or1k32bf,l_cmov) },
   3664          1.1  christos   { OR1K32BF_INSN_L_SFGTS, SEM_FN_NAME (or1k32bf,l_sfgts) },
   3665          1.1  christos   { OR1K32BF_INSN_L_SFGTSI, SEM_FN_NAME (or1k32bf,l_sfgtsi) },
   3666          1.1  christos   { OR1K32BF_INSN_L_SFGTU, SEM_FN_NAME (or1k32bf,l_sfgtu) },
   3667          1.1  christos   { OR1K32BF_INSN_L_SFGTUI, SEM_FN_NAME (or1k32bf,l_sfgtui) },
   3668          1.1  christos   { OR1K32BF_INSN_L_SFGES, SEM_FN_NAME (or1k32bf,l_sfges) },
   3669          1.1  christos   { OR1K32BF_INSN_L_SFGESI, SEM_FN_NAME (or1k32bf,l_sfgesi) },
   3670          1.1  christos   { OR1K32BF_INSN_L_SFGEU, SEM_FN_NAME (or1k32bf,l_sfgeu) },
   3671          1.1  christos   { OR1K32BF_INSN_L_SFGEUI, SEM_FN_NAME (or1k32bf,l_sfgeui) },
   3672          1.1  christos   { OR1K32BF_INSN_L_SFLTS, SEM_FN_NAME (or1k32bf,l_sflts) },
   3673          1.1  christos   { OR1K32BF_INSN_L_SFLTSI, SEM_FN_NAME (or1k32bf,l_sfltsi) },
   3674          1.1  christos   { OR1K32BF_INSN_L_SFLTU, SEM_FN_NAME (or1k32bf,l_sfltu) },
   3675          1.1  christos   { OR1K32BF_INSN_L_SFLTUI, SEM_FN_NAME (or1k32bf,l_sfltui) },
   3676          1.1  christos   { OR1K32BF_INSN_L_SFLES, SEM_FN_NAME (or1k32bf,l_sfles) },
   3677          1.1  christos   { OR1K32BF_INSN_L_SFLESI, SEM_FN_NAME (or1k32bf,l_sflesi) },
   3678          1.1  christos   { OR1K32BF_INSN_L_SFLEU, SEM_FN_NAME (or1k32bf,l_sfleu) },
   3679          1.1  christos   { OR1K32BF_INSN_L_SFLEUI, SEM_FN_NAME (or1k32bf,l_sfleui) },
   3680          1.1  christos   { OR1K32BF_INSN_L_SFEQ, SEM_FN_NAME (or1k32bf,l_sfeq) },
   3681          1.1  christos   { OR1K32BF_INSN_L_SFEQI, SEM_FN_NAME (or1k32bf,l_sfeqi) },
   3682          1.1  christos   { OR1K32BF_INSN_L_SFNE, SEM_FN_NAME (or1k32bf,l_sfne) },
   3683          1.1  christos   { OR1K32BF_INSN_L_SFNEI, SEM_FN_NAME (or1k32bf,l_sfnei) },
   3684          1.1  christos   { OR1K32BF_INSN_L_MAC, SEM_FN_NAME (or1k32bf,l_mac) },
   3685          1.1  christos   { OR1K32BF_INSN_L_MACI, SEM_FN_NAME (or1k32bf,l_maci) },
   3686          1.1  christos   { OR1K32BF_INSN_L_MACU, SEM_FN_NAME (or1k32bf,l_macu) },
   3687          1.1  christos   { OR1K32BF_INSN_L_MSB, SEM_FN_NAME (or1k32bf,l_msb) },
   3688          1.1  christos   { OR1K32BF_INSN_L_MSBU, SEM_FN_NAME (or1k32bf,l_msbu) },
   3689          1.1  christos   { OR1K32BF_INSN_L_CUST1, SEM_FN_NAME (or1k32bf,l_cust1) },
   3690          1.1  christos   { OR1K32BF_INSN_L_CUST2, SEM_FN_NAME (or1k32bf,l_cust2) },
   3691          1.1  christos   { OR1K32BF_INSN_L_CUST3, SEM_FN_NAME (or1k32bf,l_cust3) },
   3692          1.1  christos   { OR1K32BF_INSN_L_CUST4, SEM_FN_NAME (or1k32bf,l_cust4) },
   3693          1.1  christos   { OR1K32BF_INSN_L_CUST5, SEM_FN_NAME (or1k32bf,l_cust5) },
   3694          1.1  christos   { OR1K32BF_INSN_L_CUST6, SEM_FN_NAME (or1k32bf,l_cust6) },
   3695          1.1  christos   { OR1K32BF_INSN_L_CUST7, SEM_FN_NAME (or1k32bf,l_cust7) },
   3696          1.1  christos   { OR1K32BF_INSN_L_CUST8, SEM_FN_NAME (or1k32bf,l_cust8) },
   3697          1.1  christos   { OR1K32BF_INSN_LF_ADD_S, SEM_FN_NAME (or1k32bf,lf_add_s) },
   3698      1.1.1.2  christos   { OR1K32BF_INSN_LF_ADD_D32, SEM_FN_NAME (or1k32bf,lf_add_d32) },
   3699          1.1  christos   { OR1K32BF_INSN_LF_SUB_S, SEM_FN_NAME (or1k32bf,lf_sub_s) },
   3700      1.1.1.2  christos   { OR1K32BF_INSN_LF_SUB_D32, SEM_FN_NAME (or1k32bf,lf_sub_d32) },
   3701          1.1  christos   { OR1K32BF_INSN_LF_MUL_S, SEM_FN_NAME (or1k32bf,lf_mul_s) },
   3702      1.1.1.2  christos   { OR1K32BF_INSN_LF_MUL_D32, SEM_FN_NAME (or1k32bf,lf_mul_d32) },
   3703          1.1  christos   { OR1K32BF_INSN_LF_DIV_S, SEM_FN_NAME (or1k32bf,lf_div_s) },
   3704      1.1.1.2  christos   { OR1K32BF_INSN_LF_DIV_D32, SEM_FN_NAME (or1k32bf,lf_div_d32) },
   3705          1.1  christos   { OR1K32BF_INSN_LF_REM_S, SEM_FN_NAME (or1k32bf,lf_rem_s) },
   3706      1.1.1.2  christos   { OR1K32BF_INSN_LF_REM_D32, SEM_FN_NAME (or1k32bf,lf_rem_d32) },
   3707          1.1  christos   { OR1K32BF_INSN_LF_ITOF_S, SEM_FN_NAME (or1k32bf,lf_itof_s) },
   3708      1.1.1.2  christos   { OR1K32BF_INSN_LF_ITOF_D32, SEM_FN_NAME (or1k32bf,lf_itof_d32) },
   3709          1.1  christos   { OR1K32BF_INSN_LF_FTOI_S, SEM_FN_NAME (or1k32bf,lf_ftoi_s) },
   3710      1.1.1.2  christos   { OR1K32BF_INSN_LF_FTOI_D32, SEM_FN_NAME (or1k32bf,lf_ftoi_d32) },
   3711      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFEQ_S, SEM_FN_NAME (or1k32bf,lf_sfeq_s) },
   3712      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFEQ_D32, SEM_FN_NAME (or1k32bf,lf_sfeq_d32) },
   3713      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFNE_S, SEM_FN_NAME (or1k32bf,lf_sfne_s) },
   3714      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFNE_D32, SEM_FN_NAME (or1k32bf,lf_sfne_d32) },
   3715      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFGE_S, SEM_FN_NAME (or1k32bf,lf_sfge_s) },
   3716      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFGE_D32, SEM_FN_NAME (or1k32bf,lf_sfge_d32) },
   3717      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFGT_S, SEM_FN_NAME (or1k32bf,lf_sfgt_s) },
   3718      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFGT_D32, SEM_FN_NAME (or1k32bf,lf_sfgt_d32) },
   3719      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFLT_S, SEM_FN_NAME (or1k32bf,lf_sflt_s) },
   3720      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFLT_D32, SEM_FN_NAME (or1k32bf,lf_sflt_d32) },
   3721      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFLE_S, SEM_FN_NAME (or1k32bf,lf_sfle_s) },
   3722      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFLE_D32, SEM_FN_NAME (or1k32bf,lf_sfle_d32) },
   3723      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUEQ_S, SEM_FN_NAME (or1k32bf,lf_sfueq_s) },
   3724      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUEQ_D32, SEM_FN_NAME (or1k32bf,lf_sfueq_d32) },
   3725      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUNE_S, SEM_FN_NAME (or1k32bf,lf_sfune_s) },
   3726      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUNE_D32, SEM_FN_NAME (or1k32bf,lf_sfune_d32) },
   3727      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUGT_S, SEM_FN_NAME (or1k32bf,lf_sfugt_s) },
   3728      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUGT_D32, SEM_FN_NAME (or1k32bf,lf_sfugt_d32) },
   3729      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUGE_S, SEM_FN_NAME (or1k32bf,lf_sfuge_s) },
   3730      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUGE_D32, SEM_FN_NAME (or1k32bf,lf_sfuge_d32) },
   3731      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFULT_S, SEM_FN_NAME (or1k32bf,lf_sfult_s) },
   3732      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFULT_D32, SEM_FN_NAME (or1k32bf,lf_sfult_d32) },
   3733      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFULE_S, SEM_FN_NAME (or1k32bf,lf_sfule_s) },
   3734      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFULE_D32, SEM_FN_NAME (or1k32bf,lf_sfule_d32) },
   3735      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUN_S, SEM_FN_NAME (or1k32bf,lf_sfun_s) },
   3736      1.1.1.2  christos   { OR1K32BF_INSN_LF_SFUN_D32, SEM_FN_NAME (or1k32bf,lf_sfun_d32) },
   3737          1.1  christos   { OR1K32BF_INSN_LF_MADD_S, SEM_FN_NAME (or1k32bf,lf_madd_s) },
   3738      1.1.1.2  christos   { OR1K32BF_INSN_LF_MADD_D32, SEM_FN_NAME (or1k32bf,lf_madd_d32) },
   3739          1.1  christos   { OR1K32BF_INSN_LF_CUST1_S, SEM_FN_NAME (or1k32bf,lf_cust1_s) },
   3740      1.1.1.2  christos   { OR1K32BF_INSN_LF_CUST1_D32, SEM_FN_NAME (or1k32bf,lf_cust1_d32) },
   3741          1.1  christos   { 0, 0 }
   3742          1.1  christos };
   3743          1.1  christos 
   3744          1.1  christos /* Add the semantic fns to IDESC_TABLE.  */
   3745          1.1  christos 
   3746          1.1  christos void
   3747          1.1  christos SEM_FN_NAME (or1k32bf,init_idesc_table) (SIM_CPU *current_cpu)
   3748          1.1  christos {
   3749          1.1  christos   IDESC *idesc_table = CPU_IDESC (current_cpu);
   3750          1.1  christos   const struct sem_fn_desc *sf;
   3751          1.1  christos   int mach_num = MACH_NUM (CPU_MACH (current_cpu));
   3752          1.1  christos 
   3753          1.1  christos   for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
   3754          1.1  christos     {
   3755          1.1  christos       const CGEN_INSN *insn = idesc_table[sf->index].idata;
   3756          1.1  christos       int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
   3757          1.1  christos 		     || CGEN_INSN_MACH_HAS_P (insn, mach_num));
   3758          1.1  christos #if FAST_P
   3759          1.1  christos       if (valid_p)
   3760          1.1  christos 	idesc_table[sf->index].sem_fast = sf->fn;
   3761          1.1  christos       else
   3762          1.1  christos 	idesc_table[sf->index].sem_fast = SEM_FN_NAME (or1k32bf,x_invalid);
   3763          1.1  christos #else
   3764          1.1  christos       if (valid_p)
   3765          1.1  christos 	idesc_table[sf->index].sem_full = sf->fn;
   3766          1.1  christos       else
   3767          1.1  christos 	idesc_table[sf->index].sem_full = SEM_FN_NAME (or1k32bf,x_invalid);
   3768          1.1  christos #endif
   3769          1.1  christos     }
   3770          1.1  christos }
   3771          1.1  christos 
   3772