14e98e3e1Schristos /* Simulator instruction semantics for m32rbf. 24e98e3e1Schristos 34e98e3e1Schristos THIS FILE IS MACHINE GENERATED WITH CGEN. 44e98e3e1Schristos 5*05fa0856Schristos Copyright (C) 1996-2024 Free Software Foundation, Inc. 64e98e3e1Schristos 74e98e3e1Schristos This file is part of the GNU simulators. 84e98e3e1Schristos 94e98e3e1Schristos This file is free software; you can redistribute it and/or modify 104e98e3e1Schristos it under the terms of the GNU General Public License as published by 114e98e3e1Schristos the Free Software Foundation; either version 3, or (at your option) 124e98e3e1Schristos any later version. 134e98e3e1Schristos 144e98e3e1Schristos It is distributed in the hope that it will be useful, but WITHOUT 154e98e3e1Schristos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 164e98e3e1Schristos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 174e98e3e1Schristos License for more details. 184e98e3e1Schristos 194e98e3e1Schristos You should have received a copy of the GNU General Public License along 20*05fa0856Schristos with this program; if not, write to the Free Software Foundation, Inc., 21*05fa0856Schristos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 224e98e3e1Schristos 234e98e3e1Schristos */ 244e98e3e1Schristos 254e98e3e1Schristos #ifdef DEFINE_LABELS 264e98e3e1Schristos 274e98e3e1Schristos /* The labels have the case they have because the enum of insn types 284e98e3e1Schristos is all uppercase and in the non-stdc case the insn symbol is built 294e98e3e1Schristos into the enum name. */ 304e98e3e1Schristos 314e98e3e1Schristos static struct { 324e98e3e1Schristos int index; 334e98e3e1Schristos void *label; 344e98e3e1Schristos } labels[] = { 354e98e3e1Schristos { M32RBF_INSN_X_INVALID, && case_sem_INSN_X_INVALID }, 364e98e3e1Schristos { M32RBF_INSN_X_AFTER, && case_sem_INSN_X_AFTER }, 374e98e3e1Schristos { M32RBF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE }, 384e98e3e1Schristos { M32RBF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN }, 394e98e3e1Schristos { M32RBF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN }, 404e98e3e1Schristos { M32RBF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN }, 414e98e3e1Schristos { M32RBF_INSN_ADD, && case_sem_INSN_ADD }, 424e98e3e1Schristos { M32RBF_INSN_ADD3, && case_sem_INSN_ADD3 }, 434e98e3e1Schristos { M32RBF_INSN_AND, && case_sem_INSN_AND }, 444e98e3e1Schristos { M32RBF_INSN_AND3, && case_sem_INSN_AND3 }, 454e98e3e1Schristos { M32RBF_INSN_OR, && case_sem_INSN_OR }, 464e98e3e1Schristos { M32RBF_INSN_OR3, && case_sem_INSN_OR3 }, 474e98e3e1Schristos { M32RBF_INSN_XOR, && case_sem_INSN_XOR }, 484e98e3e1Schristos { M32RBF_INSN_XOR3, && case_sem_INSN_XOR3 }, 494e98e3e1Schristos { M32RBF_INSN_ADDI, && case_sem_INSN_ADDI }, 504e98e3e1Schristos { M32RBF_INSN_ADDV, && case_sem_INSN_ADDV }, 514e98e3e1Schristos { M32RBF_INSN_ADDV3, && case_sem_INSN_ADDV3 }, 524e98e3e1Schristos { M32RBF_INSN_ADDX, && case_sem_INSN_ADDX }, 534e98e3e1Schristos { M32RBF_INSN_BC8, && case_sem_INSN_BC8 }, 544e98e3e1Schristos { M32RBF_INSN_BC24, && case_sem_INSN_BC24 }, 554e98e3e1Schristos { M32RBF_INSN_BEQ, && case_sem_INSN_BEQ }, 564e98e3e1Schristos { M32RBF_INSN_BEQZ, && case_sem_INSN_BEQZ }, 574e98e3e1Schristos { M32RBF_INSN_BGEZ, && case_sem_INSN_BGEZ }, 584e98e3e1Schristos { M32RBF_INSN_BGTZ, && case_sem_INSN_BGTZ }, 594e98e3e1Schristos { M32RBF_INSN_BLEZ, && case_sem_INSN_BLEZ }, 604e98e3e1Schristos { M32RBF_INSN_BLTZ, && case_sem_INSN_BLTZ }, 614e98e3e1Schristos { M32RBF_INSN_BNEZ, && case_sem_INSN_BNEZ }, 624e98e3e1Schristos { M32RBF_INSN_BL8, && case_sem_INSN_BL8 }, 634e98e3e1Schristos { M32RBF_INSN_BL24, && case_sem_INSN_BL24 }, 644e98e3e1Schristos { M32RBF_INSN_BNC8, && case_sem_INSN_BNC8 }, 654e98e3e1Schristos { M32RBF_INSN_BNC24, && case_sem_INSN_BNC24 }, 664e98e3e1Schristos { M32RBF_INSN_BNE, && case_sem_INSN_BNE }, 674e98e3e1Schristos { M32RBF_INSN_BRA8, && case_sem_INSN_BRA8 }, 684e98e3e1Schristos { M32RBF_INSN_BRA24, && case_sem_INSN_BRA24 }, 694e98e3e1Schristos { M32RBF_INSN_CMP, && case_sem_INSN_CMP }, 704e98e3e1Schristos { M32RBF_INSN_CMPI, && case_sem_INSN_CMPI }, 714e98e3e1Schristos { M32RBF_INSN_CMPU, && case_sem_INSN_CMPU }, 724e98e3e1Schristos { M32RBF_INSN_CMPUI, && case_sem_INSN_CMPUI }, 734e98e3e1Schristos { M32RBF_INSN_DIV, && case_sem_INSN_DIV }, 744e98e3e1Schristos { M32RBF_INSN_DIVU, && case_sem_INSN_DIVU }, 754e98e3e1Schristos { M32RBF_INSN_REM, && case_sem_INSN_REM }, 764e98e3e1Schristos { M32RBF_INSN_REMU, && case_sem_INSN_REMU }, 774e98e3e1Schristos { M32RBF_INSN_JL, && case_sem_INSN_JL }, 784e98e3e1Schristos { M32RBF_INSN_JMP, && case_sem_INSN_JMP }, 794e98e3e1Schristos { M32RBF_INSN_LD, && case_sem_INSN_LD }, 804e98e3e1Schristos { M32RBF_INSN_LD_D, && case_sem_INSN_LD_D }, 814e98e3e1Schristos { M32RBF_INSN_LDB, && case_sem_INSN_LDB }, 824e98e3e1Schristos { M32RBF_INSN_LDB_D, && case_sem_INSN_LDB_D }, 834e98e3e1Schristos { M32RBF_INSN_LDH, && case_sem_INSN_LDH }, 844e98e3e1Schristos { M32RBF_INSN_LDH_D, && case_sem_INSN_LDH_D }, 854e98e3e1Schristos { M32RBF_INSN_LDUB, && case_sem_INSN_LDUB }, 864e98e3e1Schristos { M32RBF_INSN_LDUB_D, && case_sem_INSN_LDUB_D }, 874e98e3e1Schristos { M32RBF_INSN_LDUH, && case_sem_INSN_LDUH }, 884e98e3e1Schristos { M32RBF_INSN_LDUH_D, && case_sem_INSN_LDUH_D }, 894e98e3e1Schristos { M32RBF_INSN_LD_PLUS, && case_sem_INSN_LD_PLUS }, 904e98e3e1Schristos { M32RBF_INSN_LD24, && case_sem_INSN_LD24 }, 914e98e3e1Schristos { M32RBF_INSN_LDI8, && case_sem_INSN_LDI8 }, 924e98e3e1Schristos { M32RBF_INSN_LDI16, && case_sem_INSN_LDI16 }, 934e98e3e1Schristos { M32RBF_INSN_LOCK, && case_sem_INSN_LOCK }, 944e98e3e1Schristos { M32RBF_INSN_MACHI, && case_sem_INSN_MACHI }, 954e98e3e1Schristos { M32RBF_INSN_MACLO, && case_sem_INSN_MACLO }, 964e98e3e1Schristos { M32RBF_INSN_MACWHI, && case_sem_INSN_MACWHI }, 974e98e3e1Schristos { M32RBF_INSN_MACWLO, && case_sem_INSN_MACWLO }, 984e98e3e1Schristos { M32RBF_INSN_MUL, && case_sem_INSN_MUL }, 994e98e3e1Schristos { M32RBF_INSN_MULHI, && case_sem_INSN_MULHI }, 1004e98e3e1Schristos { M32RBF_INSN_MULLO, && case_sem_INSN_MULLO }, 1014e98e3e1Schristos { M32RBF_INSN_MULWHI, && case_sem_INSN_MULWHI }, 1024e98e3e1Schristos { M32RBF_INSN_MULWLO, && case_sem_INSN_MULWLO }, 1034e98e3e1Schristos { M32RBF_INSN_MV, && case_sem_INSN_MV }, 1044e98e3e1Schristos { M32RBF_INSN_MVFACHI, && case_sem_INSN_MVFACHI }, 1054e98e3e1Schristos { M32RBF_INSN_MVFACLO, && case_sem_INSN_MVFACLO }, 1064e98e3e1Schristos { M32RBF_INSN_MVFACMI, && case_sem_INSN_MVFACMI }, 1074e98e3e1Schristos { M32RBF_INSN_MVFC, && case_sem_INSN_MVFC }, 1084e98e3e1Schristos { M32RBF_INSN_MVTACHI, && case_sem_INSN_MVTACHI }, 1094e98e3e1Schristos { M32RBF_INSN_MVTACLO, && case_sem_INSN_MVTACLO }, 1104e98e3e1Schristos { M32RBF_INSN_MVTC, && case_sem_INSN_MVTC }, 1114e98e3e1Schristos { M32RBF_INSN_NEG, && case_sem_INSN_NEG }, 1124e98e3e1Schristos { M32RBF_INSN_NOP, && case_sem_INSN_NOP }, 1134e98e3e1Schristos { M32RBF_INSN_NOT, && case_sem_INSN_NOT }, 1144e98e3e1Schristos { M32RBF_INSN_RAC, && case_sem_INSN_RAC }, 1154e98e3e1Schristos { M32RBF_INSN_RACH, && case_sem_INSN_RACH }, 1164e98e3e1Schristos { M32RBF_INSN_RTE, && case_sem_INSN_RTE }, 1174e98e3e1Schristos { M32RBF_INSN_SETH, && case_sem_INSN_SETH }, 1184e98e3e1Schristos { M32RBF_INSN_SLL, && case_sem_INSN_SLL }, 1194e98e3e1Schristos { M32RBF_INSN_SLL3, && case_sem_INSN_SLL3 }, 1204e98e3e1Schristos { M32RBF_INSN_SLLI, && case_sem_INSN_SLLI }, 1214e98e3e1Schristos { M32RBF_INSN_SRA, && case_sem_INSN_SRA }, 1224e98e3e1Schristos { M32RBF_INSN_SRA3, && case_sem_INSN_SRA3 }, 1234e98e3e1Schristos { M32RBF_INSN_SRAI, && case_sem_INSN_SRAI }, 1244e98e3e1Schristos { M32RBF_INSN_SRL, && case_sem_INSN_SRL }, 1254e98e3e1Schristos { M32RBF_INSN_SRL3, && case_sem_INSN_SRL3 }, 1264e98e3e1Schristos { M32RBF_INSN_SRLI, && case_sem_INSN_SRLI }, 1274e98e3e1Schristos { M32RBF_INSN_ST, && case_sem_INSN_ST }, 1284e98e3e1Schristos { M32RBF_INSN_ST_D, && case_sem_INSN_ST_D }, 1294e98e3e1Schristos { M32RBF_INSN_STB, && case_sem_INSN_STB }, 1304e98e3e1Schristos { M32RBF_INSN_STB_D, && case_sem_INSN_STB_D }, 1314e98e3e1Schristos { M32RBF_INSN_STH, && case_sem_INSN_STH }, 1324e98e3e1Schristos { M32RBF_INSN_STH_D, && case_sem_INSN_STH_D }, 1334e98e3e1Schristos { M32RBF_INSN_ST_PLUS, && case_sem_INSN_ST_PLUS }, 1344e98e3e1Schristos { M32RBF_INSN_ST_MINUS, && case_sem_INSN_ST_MINUS }, 1354e98e3e1Schristos { M32RBF_INSN_SUB, && case_sem_INSN_SUB }, 1364e98e3e1Schristos { M32RBF_INSN_SUBV, && case_sem_INSN_SUBV }, 1374e98e3e1Schristos { M32RBF_INSN_SUBX, && case_sem_INSN_SUBX }, 1384e98e3e1Schristos { M32RBF_INSN_TRAP, && case_sem_INSN_TRAP }, 1394e98e3e1Schristos { M32RBF_INSN_UNLOCK, && case_sem_INSN_UNLOCK }, 1404e98e3e1Schristos { M32RBF_INSN_CLRPSW, && case_sem_INSN_CLRPSW }, 1414e98e3e1Schristos { M32RBF_INSN_SETPSW, && case_sem_INSN_SETPSW }, 1424e98e3e1Schristos { M32RBF_INSN_BSET, && case_sem_INSN_BSET }, 1434e98e3e1Schristos { M32RBF_INSN_BCLR, && case_sem_INSN_BCLR }, 1444e98e3e1Schristos { M32RBF_INSN_BTST, && case_sem_INSN_BTST }, 1454e98e3e1Schristos { 0, 0 } 1464e98e3e1Schristos }; 1474e98e3e1Schristos int i; 1484e98e3e1Schristos 1494e98e3e1Schristos for (i = 0; labels[i].label != 0; ++i) 1504e98e3e1Schristos { 1514e98e3e1Schristos #if FAST_P 1524e98e3e1Schristos CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label; 1534e98e3e1Schristos #else 1544e98e3e1Schristos CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label; 1554e98e3e1Schristos #endif 1564e98e3e1Schristos } 1574e98e3e1Schristos 1584e98e3e1Schristos #undef DEFINE_LABELS 1594e98e3e1Schristos #endif /* DEFINE_LABELS */ 1604e98e3e1Schristos 1614e98e3e1Schristos #ifdef DEFINE_SWITCH 1624e98e3e1Schristos 1634e98e3e1Schristos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn 1644e98e3e1Schristos off frills like tracing and profiling. */ 165212397c6Schristos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something 1664e98e3e1Schristos that can cause it to be optimized out. Another way would be to emit 1674e98e3e1Schristos special handlers into the instruction "stream". */ 1684e98e3e1Schristos 1694e98e3e1Schristos #if FAST_P 170212397c6Schristos #undef CGEN_TRACE_RESULT 171212397c6Schristos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) 1724e98e3e1Schristos #endif 1734e98e3e1Schristos 1744e98e3e1Schristos #undef GET_ATTR 1754e98e3e1Schristos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 1764e98e3e1Schristos 1774e98e3e1Schristos { 1784e98e3e1Schristos 1794e98e3e1Schristos #if WITH_SCACHE_PBB 1804e98e3e1Schristos 1814e98e3e1Schristos /* Branch to next handler without going around main loop. */ 1824e98e3e1Schristos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case 1834e98e3e1Schristos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case) 1844e98e3e1Schristos 1854e98e3e1Schristos #else /* ! WITH_SCACHE_PBB */ 1864e98e3e1Schristos 1874e98e3e1Schristos #define NEXT(vpc) BREAK (sem) 1884e98e3e1Schristos #ifdef __GNUC__ 1894e98e3e1Schristos #if FAST_P 1904e98e3e1Schristos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab) 1914e98e3e1Schristos #else 1924e98e3e1Schristos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab) 1934e98e3e1Schristos #endif 1944e98e3e1Schristos #else 1954e98e3e1Schristos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num) 1964e98e3e1Schristos #endif 1974e98e3e1Schristos 1984e98e3e1Schristos #endif /* ! WITH_SCACHE_PBB */ 1994e98e3e1Schristos 2004e98e3e1Schristos { 2014e98e3e1Schristos 2024e98e3e1Schristos CASE (sem, INSN_X_INVALID) : /* --invalid-- */ 2034e98e3e1Schristos { 2044e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2054e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 2074e98e3e1Schristos int UNUSED written = 0; 2084e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 2094e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 2104e98e3e1Schristos 2114e98e3e1Schristos { 2124e98e3e1Schristos /* Update the recorded pc in the cpu state struct. 2134e98e3e1Schristos Only necessary for WITH_SCACHE case, but to avoid the 2144e98e3e1Schristos conditional compilation .... */ 2154e98e3e1Schristos SET_H_PC (pc); 2164e98e3e1Schristos /* Virtual insns have zero size. Overwrite vpc with address of next insn 2174e98e3e1Schristos using the default-insn-bitsize spec. When executing insns in parallel 2184e98e3e1Schristos we may want to queue the fault and continue execution. */ 2194e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2204e98e3e1Schristos vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 2214e98e3e1Schristos } 2224e98e3e1Schristos 2234e98e3e1Schristos #undef FLD 2244e98e3e1Schristos } 2254e98e3e1Schristos NEXT (vpc); 2264e98e3e1Schristos 2274e98e3e1Schristos CASE (sem, INSN_X_AFTER) : /* --after-- */ 2284e98e3e1Schristos { 2294e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2304e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 2324e98e3e1Schristos int UNUSED written = 0; 2334e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 2344e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 2354e98e3e1Schristos 2364e98e3e1Schristos { 2374e98e3e1Schristos #if WITH_SCACHE_PBB_M32RBF 2384e98e3e1Schristos m32rbf_pbb_after (current_cpu, sem_arg); 2394e98e3e1Schristos #endif 2404e98e3e1Schristos } 2414e98e3e1Schristos 2424e98e3e1Schristos #undef FLD 2434e98e3e1Schristos } 2444e98e3e1Schristos NEXT (vpc); 2454e98e3e1Schristos 2464e98e3e1Schristos CASE (sem, INSN_X_BEFORE) : /* --before-- */ 2474e98e3e1Schristos { 2484e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2494e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2504e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 2514e98e3e1Schristos int UNUSED written = 0; 2524e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 2534e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 2544e98e3e1Schristos 2554e98e3e1Schristos { 2564e98e3e1Schristos #if WITH_SCACHE_PBB_M32RBF 2574e98e3e1Schristos m32rbf_pbb_before (current_cpu, sem_arg); 2584e98e3e1Schristos #endif 2594e98e3e1Schristos } 2604e98e3e1Schristos 2614e98e3e1Schristos #undef FLD 2624e98e3e1Schristos } 2634e98e3e1Schristos NEXT (vpc); 2644e98e3e1Schristos 2654e98e3e1Schristos CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */ 2664e98e3e1Schristos { 2674e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2684e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2694e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 2704e98e3e1Schristos int UNUSED written = 0; 2714e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 2724e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 2734e98e3e1Schristos 2744e98e3e1Schristos { 2754e98e3e1Schristos #if WITH_SCACHE_PBB_M32RBF 2764e98e3e1Schristos #ifdef DEFINE_SWITCH 2774e98e3e1Schristos vpc = m32rbf_pbb_cti_chain (current_cpu, sem_arg, 2784e98e3e1Schristos pbb_br_type, pbb_br_npc); 2794e98e3e1Schristos BREAK (sem); 2804e98e3e1Schristos #else 2814e98e3e1Schristos /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 2824e98e3e1Schristos vpc = m32rbf_pbb_cti_chain (current_cpu, sem_arg, 2834e98e3e1Schristos CPU_PBB_BR_TYPE (current_cpu), 2844e98e3e1Schristos CPU_PBB_BR_NPC (current_cpu)); 2854e98e3e1Schristos #endif 2864e98e3e1Schristos #endif 2874e98e3e1Schristos } 2884e98e3e1Schristos 2894e98e3e1Schristos #undef FLD 2904e98e3e1Schristos } 2914e98e3e1Schristos NEXT (vpc); 2924e98e3e1Schristos 2934e98e3e1Schristos CASE (sem, INSN_X_CHAIN) : /* --chain-- */ 2944e98e3e1Schristos { 2954e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2964e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2974e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 2984e98e3e1Schristos int UNUSED written = 0; 2994e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 3004e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3014e98e3e1Schristos 3024e98e3e1Schristos { 3034e98e3e1Schristos #if WITH_SCACHE_PBB_M32RBF 3044e98e3e1Schristos vpc = m32rbf_pbb_chain (current_cpu, sem_arg); 3054e98e3e1Schristos #ifdef DEFINE_SWITCH 3064e98e3e1Schristos BREAK (sem); 3074e98e3e1Schristos #endif 3084e98e3e1Schristos #endif 3094e98e3e1Schristos } 3104e98e3e1Schristos 3114e98e3e1Schristos #undef FLD 3124e98e3e1Schristos } 3134e98e3e1Schristos NEXT (vpc); 3144e98e3e1Schristos 3154e98e3e1Schristos CASE (sem, INSN_X_BEGIN) : /* --begin-- */ 3164e98e3e1Schristos { 3174e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3184e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3194e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 3204e98e3e1Schristos int UNUSED written = 0; 3214e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 3224e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3234e98e3e1Schristos 3244e98e3e1Schristos { 3254e98e3e1Schristos #if WITH_SCACHE_PBB_M32RBF 3264e98e3e1Schristos #if defined DEFINE_SWITCH || defined FAST_P 3274e98e3e1Schristos /* In the switch case FAST_P is a constant, allowing several optimizations 3284e98e3e1Schristos in any called inline functions. */ 3294e98e3e1Schristos vpc = m32rbf_pbb_begin (current_cpu, FAST_P); 3304e98e3e1Schristos #else 3314e98e3e1Schristos #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 3324e98e3e1Schristos vpc = m32rbf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 3334e98e3e1Schristos #else 3344e98e3e1Schristos vpc = m32rbf_pbb_begin (current_cpu, 0); 3354e98e3e1Schristos #endif 3364e98e3e1Schristos #endif 3374e98e3e1Schristos #endif 3384e98e3e1Schristos } 3394e98e3e1Schristos 3404e98e3e1Schristos #undef FLD 3414e98e3e1Schristos } 3424e98e3e1Schristos NEXT (vpc); 3434e98e3e1Schristos 3444e98e3e1Schristos CASE (sem, INSN_ADD) : /* add $dr,$sr */ 3454e98e3e1Schristos { 3464e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3474e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 3494e98e3e1Schristos int UNUSED written = 0; 3504e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 3514e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3524e98e3e1Schristos 3534e98e3e1Schristos { 3544e98e3e1Schristos SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr)); 3554e98e3e1Schristos * FLD (i_dr) = opval; 356212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3574e98e3e1Schristos } 3584e98e3e1Schristos 3594e98e3e1Schristos #undef FLD 3604e98e3e1Schristos } 3614e98e3e1Schristos NEXT (vpc); 3624e98e3e1Schristos 3634e98e3e1Schristos CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */ 3644e98e3e1Schristos { 3654e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3664e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3674e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 3684e98e3e1Schristos int UNUSED written = 0; 3694e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 3704e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3714e98e3e1Schristos 3724e98e3e1Schristos { 3734e98e3e1Schristos SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16)); 3744e98e3e1Schristos * FLD (i_dr) = opval; 375212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3764e98e3e1Schristos } 3774e98e3e1Schristos 3784e98e3e1Schristos #undef FLD 3794e98e3e1Schristos } 3804e98e3e1Schristos NEXT (vpc); 3814e98e3e1Schristos 3824e98e3e1Schristos CASE (sem, INSN_AND) : /* and $dr,$sr */ 3834e98e3e1Schristos { 3844e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3854e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3864e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 3874e98e3e1Schristos int UNUSED written = 0; 3884e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 3894e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3904e98e3e1Schristos 3914e98e3e1Schristos { 3924e98e3e1Schristos SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr)); 3934e98e3e1Schristos * FLD (i_dr) = opval; 394212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3954e98e3e1Schristos } 3964e98e3e1Schristos 3974e98e3e1Schristos #undef FLD 3984e98e3e1Schristos } 3994e98e3e1Schristos NEXT (vpc); 4004e98e3e1Schristos 4014e98e3e1Schristos CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */ 4024e98e3e1Schristos { 4034e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4044e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4054e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 4064e98e3e1Schristos int UNUSED written = 0; 4074e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 4084e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4094e98e3e1Schristos 4104e98e3e1Schristos { 4114e98e3e1Schristos SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16)); 4124e98e3e1Schristos * FLD (i_dr) = opval; 413212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4144e98e3e1Schristos } 4154e98e3e1Schristos 4164e98e3e1Schristos #undef FLD 4174e98e3e1Schristos } 4184e98e3e1Schristos NEXT (vpc); 4194e98e3e1Schristos 4204e98e3e1Schristos CASE (sem, INSN_OR) : /* or $dr,$sr */ 4214e98e3e1Schristos { 4224e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4234e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 4254e98e3e1Schristos int UNUSED written = 0; 4264e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 4274e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4284e98e3e1Schristos 4294e98e3e1Schristos { 4304e98e3e1Schristos SI opval = ORSI (* FLD (i_dr), * FLD (i_sr)); 4314e98e3e1Schristos * FLD (i_dr) = opval; 432212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4334e98e3e1Schristos } 4344e98e3e1Schristos 4354e98e3e1Schristos #undef FLD 4364e98e3e1Schristos } 4374e98e3e1Schristos NEXT (vpc); 4384e98e3e1Schristos 4394e98e3e1Schristos CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */ 4404e98e3e1Schristos { 4414e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4424e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 4444e98e3e1Schristos int UNUSED written = 0; 4454e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 4464e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4474e98e3e1Schristos 4484e98e3e1Schristos { 4494e98e3e1Schristos SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16)); 4504e98e3e1Schristos * FLD (i_dr) = opval; 451212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4524e98e3e1Schristos } 4534e98e3e1Schristos 4544e98e3e1Schristos #undef FLD 4554e98e3e1Schristos } 4564e98e3e1Schristos NEXT (vpc); 4574e98e3e1Schristos 4584e98e3e1Schristos CASE (sem, INSN_XOR) : /* xor $dr,$sr */ 4594e98e3e1Schristos { 4604e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4614e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4624e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 4634e98e3e1Schristos int UNUSED written = 0; 4644e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 4654e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4664e98e3e1Schristos 4674e98e3e1Schristos { 4684e98e3e1Schristos SI opval = XORSI (* FLD (i_dr), * FLD (i_sr)); 4694e98e3e1Schristos * FLD (i_dr) = opval; 470212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4714e98e3e1Schristos } 4724e98e3e1Schristos 4734e98e3e1Schristos #undef FLD 4744e98e3e1Schristos } 4754e98e3e1Schristos NEXT (vpc); 4764e98e3e1Schristos 4774e98e3e1Schristos CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */ 4784e98e3e1Schristos { 4794e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4804e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_and3.f 4824e98e3e1Schristos int UNUSED written = 0; 4834e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 4844e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4854e98e3e1Schristos 4864e98e3e1Schristos { 4874e98e3e1Schristos SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16)); 4884e98e3e1Schristos * FLD (i_dr) = opval; 489212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4904e98e3e1Schristos } 4914e98e3e1Schristos 4924e98e3e1Schristos #undef FLD 4934e98e3e1Schristos } 4944e98e3e1Schristos NEXT (vpc); 4954e98e3e1Schristos 4964e98e3e1Schristos CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */ 4974e98e3e1Schristos { 4984e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4994e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 5014e98e3e1Schristos int UNUSED written = 0; 5024e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 5034e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5044e98e3e1Schristos 5054e98e3e1Schristos { 5064e98e3e1Schristos SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8)); 5074e98e3e1Schristos * FLD (i_dr) = opval; 508212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5094e98e3e1Schristos } 5104e98e3e1Schristos 5114e98e3e1Schristos #undef FLD 5124e98e3e1Schristos } 5134e98e3e1Schristos NEXT (vpc); 5144e98e3e1Schristos 5154e98e3e1Schristos CASE (sem, INSN_ADDV) : /* addv $dr,$sr */ 5164e98e3e1Schristos { 5174e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5184e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5194e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 5204e98e3e1Schristos int UNUSED written = 0; 5214e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 5224e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5234e98e3e1Schristos 5244e98e3e1Schristos { 5254e98e3e1Schristos SI temp0;BI temp1; 5264e98e3e1Schristos temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr)); 5274e98e3e1Schristos temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0); 5284e98e3e1Schristos { 5294e98e3e1Schristos SI opval = temp0; 5304e98e3e1Schristos * FLD (i_dr) = opval; 531212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5324e98e3e1Schristos } 5334e98e3e1Schristos { 5344e98e3e1Schristos BI opval = temp1; 5354e98e3e1Schristos CPU (h_cond) = opval; 536212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 5374e98e3e1Schristos } 5384e98e3e1Schristos } 5394e98e3e1Schristos 5404e98e3e1Schristos #undef FLD 5414e98e3e1Schristos } 5424e98e3e1Schristos NEXT (vpc); 5434e98e3e1Schristos 5444e98e3e1Schristos CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */ 5454e98e3e1Schristos { 5464e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5474e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5484e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 5494e98e3e1Schristos int UNUSED written = 0; 5504e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 5514e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5524e98e3e1Schristos 5534e98e3e1Schristos { 5544e98e3e1Schristos SI temp0;BI temp1; 5554e98e3e1Schristos temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16)); 5564e98e3e1Schristos temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0); 5574e98e3e1Schristos { 5584e98e3e1Schristos SI opval = temp0; 5594e98e3e1Schristos * FLD (i_dr) = opval; 560212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5614e98e3e1Schristos } 5624e98e3e1Schristos { 5634e98e3e1Schristos BI opval = temp1; 5644e98e3e1Schristos CPU (h_cond) = opval; 565212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 5664e98e3e1Schristos } 5674e98e3e1Schristos } 5684e98e3e1Schristos 5694e98e3e1Schristos #undef FLD 5704e98e3e1Schristos } 5714e98e3e1Schristos NEXT (vpc); 5724e98e3e1Schristos 5734e98e3e1Schristos CASE (sem, INSN_ADDX) : /* addx $dr,$sr */ 5744e98e3e1Schristos { 5754e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5764e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5774e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 5784e98e3e1Schristos int UNUSED written = 0; 5794e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 5804e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5814e98e3e1Schristos 5824e98e3e1Schristos { 5834e98e3e1Schristos SI temp0;BI temp1; 5844e98e3e1Schristos temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 5854e98e3e1Schristos temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 5864e98e3e1Schristos { 5874e98e3e1Schristos SI opval = temp0; 5884e98e3e1Schristos * FLD (i_dr) = opval; 589212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5904e98e3e1Schristos } 5914e98e3e1Schristos { 5924e98e3e1Schristos BI opval = temp1; 5934e98e3e1Schristos CPU (h_cond) = opval; 594212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 5954e98e3e1Schristos } 5964e98e3e1Schristos } 5974e98e3e1Schristos 5984e98e3e1Schristos #undef FLD 5994e98e3e1Schristos } 6004e98e3e1Schristos NEXT (vpc); 6014e98e3e1Schristos 6024e98e3e1Schristos CASE (sem, INSN_BC8) : /* bc.s $disp8 */ 6034e98e3e1Schristos { 6044e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6054e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 6074e98e3e1Schristos int UNUSED written = 0; 6084e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 6094e98e3e1Schristos SEM_BRANCH_INIT 6104e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6114e98e3e1Schristos 6124e98e3e1Schristos if (CPU (h_cond)) { 6134e98e3e1Schristos { 6144e98e3e1Schristos USI opval = FLD (i_disp8); 6154e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 6164e98e3e1Schristos written |= (1 << 2); 617212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 6184e98e3e1Schristos } 6194e98e3e1Schristos } 6204e98e3e1Schristos 6214e98e3e1Schristos abuf->written = written; 6224e98e3e1Schristos SEM_BRANCH_FINI (vpc); 6234e98e3e1Schristos #undef FLD 6244e98e3e1Schristos } 6254e98e3e1Schristos NEXT (vpc); 6264e98e3e1Schristos 6274e98e3e1Schristos CASE (sem, INSN_BC24) : /* bc.l $disp24 */ 6284e98e3e1Schristos { 6294e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6304e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 6324e98e3e1Schristos int UNUSED written = 0; 6334e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 6344e98e3e1Schristos SEM_BRANCH_INIT 6354e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6364e98e3e1Schristos 6374e98e3e1Schristos if (CPU (h_cond)) { 6384e98e3e1Schristos { 6394e98e3e1Schristos USI opval = FLD (i_disp24); 6404e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 6414e98e3e1Schristos written |= (1 << 2); 642212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 6434e98e3e1Schristos } 6444e98e3e1Schristos } 6454e98e3e1Schristos 6464e98e3e1Schristos abuf->written = written; 6474e98e3e1Schristos SEM_BRANCH_FINI (vpc); 6484e98e3e1Schristos #undef FLD 6494e98e3e1Schristos } 6504e98e3e1Schristos NEXT (vpc); 6514e98e3e1Schristos 6524e98e3e1Schristos CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */ 6534e98e3e1Schristos { 6544e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6554e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 6574e98e3e1Schristos int UNUSED written = 0; 6584e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 6594e98e3e1Schristos SEM_BRANCH_INIT 6604e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6614e98e3e1Schristos 6624e98e3e1Schristos if (EQSI (* FLD (i_src1), * FLD (i_src2))) { 6634e98e3e1Schristos { 6644e98e3e1Schristos USI opval = FLD (i_disp16); 6654e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 6664e98e3e1Schristos written |= (1 << 3); 667212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 6684e98e3e1Schristos } 6694e98e3e1Schristos } 6704e98e3e1Schristos 6714e98e3e1Schristos abuf->written = written; 6724e98e3e1Schristos SEM_BRANCH_FINI (vpc); 6734e98e3e1Schristos #undef FLD 6744e98e3e1Schristos } 6754e98e3e1Schristos NEXT (vpc); 6764e98e3e1Schristos 6774e98e3e1Schristos CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */ 6784e98e3e1Schristos { 6794e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6804e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 6824e98e3e1Schristos int UNUSED written = 0; 6834e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 6844e98e3e1Schristos SEM_BRANCH_INIT 6854e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 6864e98e3e1Schristos 6874e98e3e1Schristos if (EQSI (* FLD (i_src2), 0)) { 6884e98e3e1Schristos { 6894e98e3e1Schristos USI opval = FLD (i_disp16); 6904e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 6914e98e3e1Schristos written |= (1 << 2); 692212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 6934e98e3e1Schristos } 6944e98e3e1Schristos } 6954e98e3e1Schristos 6964e98e3e1Schristos abuf->written = written; 6974e98e3e1Schristos SEM_BRANCH_FINI (vpc); 6984e98e3e1Schristos #undef FLD 6994e98e3e1Schristos } 7004e98e3e1Schristos NEXT (vpc); 7014e98e3e1Schristos 7024e98e3e1Schristos CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */ 7034e98e3e1Schristos { 7044e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7054e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 7074e98e3e1Schristos int UNUSED written = 0; 7084e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 7094e98e3e1Schristos SEM_BRANCH_INIT 7104e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7114e98e3e1Schristos 7124e98e3e1Schristos if (GESI (* FLD (i_src2), 0)) { 7134e98e3e1Schristos { 7144e98e3e1Schristos USI opval = FLD (i_disp16); 7154e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 7164e98e3e1Schristos written |= (1 << 2); 717212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 7184e98e3e1Schristos } 7194e98e3e1Schristos } 7204e98e3e1Schristos 7214e98e3e1Schristos abuf->written = written; 7224e98e3e1Schristos SEM_BRANCH_FINI (vpc); 7234e98e3e1Schristos #undef FLD 7244e98e3e1Schristos } 7254e98e3e1Schristos NEXT (vpc); 7264e98e3e1Schristos 7274e98e3e1Schristos CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */ 7284e98e3e1Schristos { 7294e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7304e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 7324e98e3e1Schristos int UNUSED written = 0; 7334e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 7344e98e3e1Schristos SEM_BRANCH_INIT 7354e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7364e98e3e1Schristos 7374e98e3e1Schristos if (GTSI (* FLD (i_src2), 0)) { 7384e98e3e1Schristos { 7394e98e3e1Schristos USI opval = FLD (i_disp16); 7404e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 7414e98e3e1Schristos written |= (1 << 2); 742212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 7434e98e3e1Schristos } 7444e98e3e1Schristos } 7454e98e3e1Schristos 7464e98e3e1Schristos abuf->written = written; 7474e98e3e1Schristos SEM_BRANCH_FINI (vpc); 7484e98e3e1Schristos #undef FLD 7494e98e3e1Schristos } 7504e98e3e1Schristos NEXT (vpc); 7514e98e3e1Schristos 7524e98e3e1Schristos CASE (sem, INSN_BLEZ) : /* blez $src2,$disp16 */ 7534e98e3e1Schristos { 7544e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7554e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7564e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 7574e98e3e1Schristos int UNUSED written = 0; 7584e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 7594e98e3e1Schristos SEM_BRANCH_INIT 7604e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7614e98e3e1Schristos 7624e98e3e1Schristos if (LESI (* FLD (i_src2), 0)) { 7634e98e3e1Schristos { 7644e98e3e1Schristos USI opval = FLD (i_disp16); 7654e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 7664e98e3e1Schristos written |= (1 << 2); 767212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 7684e98e3e1Schristos } 7694e98e3e1Schristos } 7704e98e3e1Schristos 7714e98e3e1Schristos abuf->written = written; 7724e98e3e1Schristos SEM_BRANCH_FINI (vpc); 7734e98e3e1Schristos #undef FLD 7744e98e3e1Schristos } 7754e98e3e1Schristos NEXT (vpc); 7764e98e3e1Schristos 7774e98e3e1Schristos CASE (sem, INSN_BLTZ) : /* bltz $src2,$disp16 */ 7784e98e3e1Schristos { 7794e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 7804e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 7814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 7824e98e3e1Schristos int UNUSED written = 0; 7834e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 7844e98e3e1Schristos SEM_BRANCH_INIT 7854e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 7864e98e3e1Schristos 7874e98e3e1Schristos if (LTSI (* FLD (i_src2), 0)) { 7884e98e3e1Schristos { 7894e98e3e1Schristos USI opval = FLD (i_disp16); 7904e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 7914e98e3e1Schristos written |= (1 << 2); 792212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 7934e98e3e1Schristos } 7944e98e3e1Schristos } 7954e98e3e1Schristos 7964e98e3e1Schristos abuf->written = written; 7974e98e3e1Schristos SEM_BRANCH_FINI (vpc); 7984e98e3e1Schristos #undef FLD 7994e98e3e1Schristos } 8004e98e3e1Schristos NEXT (vpc); 8014e98e3e1Schristos 8024e98e3e1Schristos CASE (sem, INSN_BNEZ) : /* bnez $src2,$disp16 */ 8034e98e3e1Schristos { 8044e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8054e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 8074e98e3e1Schristos int UNUSED written = 0; 8084e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 8094e98e3e1Schristos SEM_BRANCH_INIT 8104e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 8114e98e3e1Schristos 8124e98e3e1Schristos if (NESI (* FLD (i_src2), 0)) { 8134e98e3e1Schristos { 8144e98e3e1Schristos USI opval = FLD (i_disp16); 8154e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 8164e98e3e1Schristos written |= (1 << 2); 817212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 8184e98e3e1Schristos } 8194e98e3e1Schristos } 8204e98e3e1Schristos 8214e98e3e1Schristos abuf->written = written; 8224e98e3e1Schristos SEM_BRANCH_FINI (vpc); 8234e98e3e1Schristos #undef FLD 8244e98e3e1Schristos } 8254e98e3e1Schristos NEXT (vpc); 8264e98e3e1Schristos 8274e98e3e1Schristos CASE (sem, INSN_BL8) : /* bl.s $disp8 */ 8284e98e3e1Schristos { 8294e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8304e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 8324e98e3e1Schristos int UNUSED written = 0; 8334e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 8344e98e3e1Schristos SEM_BRANCH_INIT 8354e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8364e98e3e1Schristos 8374e98e3e1Schristos { 8384e98e3e1Schristos { 8394e98e3e1Schristos SI opval = ADDSI (ANDSI (pc, -4), 4); 8404e98e3e1Schristos CPU (h_gr[((UINT) 14)]) = opval; 841212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8424e98e3e1Schristos } 8434e98e3e1Schristos { 8444e98e3e1Schristos USI opval = FLD (i_disp8); 8454e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 846212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 8474e98e3e1Schristos } 8484e98e3e1Schristos } 8494e98e3e1Schristos 8504e98e3e1Schristos SEM_BRANCH_FINI (vpc); 8514e98e3e1Schristos #undef FLD 8524e98e3e1Schristos } 8534e98e3e1Schristos NEXT (vpc); 8544e98e3e1Schristos 8554e98e3e1Schristos CASE (sem, INSN_BL24) : /* bl.l $disp24 */ 8564e98e3e1Schristos { 8574e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8584e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8594e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 8604e98e3e1Schristos int UNUSED written = 0; 8614e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 8624e98e3e1Schristos SEM_BRANCH_INIT 8634e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 8644e98e3e1Schristos 8654e98e3e1Schristos { 8664e98e3e1Schristos { 8674e98e3e1Schristos SI opval = ADDSI (pc, 4); 8684e98e3e1Schristos CPU (h_gr[((UINT) 14)]) = opval; 869212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 8704e98e3e1Schristos } 8714e98e3e1Schristos { 8724e98e3e1Schristos USI opval = FLD (i_disp24); 8734e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 874212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 8754e98e3e1Schristos } 8764e98e3e1Schristos } 8774e98e3e1Schristos 8784e98e3e1Schristos SEM_BRANCH_FINI (vpc); 8794e98e3e1Schristos #undef FLD 8804e98e3e1Schristos } 8814e98e3e1Schristos NEXT (vpc); 8824e98e3e1Schristos 8834e98e3e1Schristos CASE (sem, INSN_BNC8) : /* bnc.s $disp8 */ 8844e98e3e1Schristos { 8854e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 8864e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 8874e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 8884e98e3e1Schristos int UNUSED written = 0; 8894e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 8904e98e3e1Schristos SEM_BRANCH_INIT 8914e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 8924e98e3e1Schristos 8934e98e3e1Schristos if (NOTBI (CPU (h_cond))) { 8944e98e3e1Schristos { 8954e98e3e1Schristos USI opval = FLD (i_disp8); 8964e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 8974e98e3e1Schristos written |= (1 << 2); 898212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 8994e98e3e1Schristos } 9004e98e3e1Schristos } 9014e98e3e1Schristos 9024e98e3e1Schristos abuf->written = written; 9034e98e3e1Schristos SEM_BRANCH_FINI (vpc); 9044e98e3e1Schristos #undef FLD 9054e98e3e1Schristos } 9064e98e3e1Schristos NEXT (vpc); 9074e98e3e1Schristos 9084e98e3e1Schristos CASE (sem, INSN_BNC24) : /* bnc.l $disp24 */ 9094e98e3e1Schristos { 9104e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9114e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9124e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 9134e98e3e1Schristos int UNUSED written = 0; 9144e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 9154e98e3e1Schristos SEM_BRANCH_INIT 9164e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 9174e98e3e1Schristos 9184e98e3e1Schristos if (NOTBI (CPU (h_cond))) { 9194e98e3e1Schristos { 9204e98e3e1Schristos USI opval = FLD (i_disp24); 9214e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 9224e98e3e1Schristos written |= (1 << 2); 923212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 9244e98e3e1Schristos } 9254e98e3e1Schristos } 9264e98e3e1Schristos 9274e98e3e1Schristos abuf->written = written; 9284e98e3e1Schristos SEM_BRANCH_FINI (vpc); 9294e98e3e1Schristos #undef FLD 9304e98e3e1Schristos } 9314e98e3e1Schristos NEXT (vpc); 9324e98e3e1Schristos 9334e98e3e1Schristos CASE (sem, INSN_BNE) : /* bne $src1,$src2,$disp16 */ 9344e98e3e1Schristos { 9354e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9364e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9374e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_beq.f 9384e98e3e1Schristos int UNUSED written = 0; 9394e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 9404e98e3e1Schristos SEM_BRANCH_INIT 9414e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 9424e98e3e1Schristos 9434e98e3e1Schristos if (NESI (* FLD (i_src1), * FLD (i_src2))) { 9444e98e3e1Schristos { 9454e98e3e1Schristos USI opval = FLD (i_disp16); 9464e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 9474e98e3e1Schristos written |= (1 << 3); 948212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 9494e98e3e1Schristos } 9504e98e3e1Schristos } 9514e98e3e1Schristos 9524e98e3e1Schristos abuf->written = written; 9534e98e3e1Schristos SEM_BRANCH_FINI (vpc); 9544e98e3e1Schristos #undef FLD 9554e98e3e1Schristos } 9564e98e3e1Schristos NEXT (vpc); 9574e98e3e1Schristos 9584e98e3e1Schristos CASE (sem, INSN_BRA8) : /* bra.s $disp8 */ 9594e98e3e1Schristos { 9604e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9614e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9624e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl8.f 9634e98e3e1Schristos int UNUSED written = 0; 9644e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 9654e98e3e1Schristos SEM_BRANCH_INIT 9664e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 9674e98e3e1Schristos 9684e98e3e1Schristos { 9694e98e3e1Schristos USI opval = FLD (i_disp8); 9704e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 971212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 9724e98e3e1Schristos } 9734e98e3e1Schristos 9744e98e3e1Schristos SEM_BRANCH_FINI (vpc); 9754e98e3e1Schristos #undef FLD 9764e98e3e1Schristos } 9774e98e3e1Schristos NEXT (vpc); 9784e98e3e1Schristos 9794e98e3e1Schristos CASE (sem, INSN_BRA24) : /* bra.l $disp24 */ 9804e98e3e1Schristos { 9814e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 9824e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 9834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bl24.f 9844e98e3e1Schristos int UNUSED written = 0; 9854e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 9864e98e3e1Schristos SEM_BRANCH_INIT 9874e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 9884e98e3e1Schristos 9894e98e3e1Schristos { 9904e98e3e1Schristos USI opval = FLD (i_disp24); 9914e98e3e1Schristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 992212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 9934e98e3e1Schristos } 9944e98e3e1Schristos 9954e98e3e1Schristos SEM_BRANCH_FINI (vpc); 9964e98e3e1Schristos #undef FLD 9974e98e3e1Schristos } 9984e98e3e1Schristos NEXT (vpc); 9994e98e3e1Schristos 10004e98e3e1Schristos CASE (sem, INSN_CMP) : /* cmp $src1,$src2 */ 10014e98e3e1Schristos { 10024e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10034e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10044e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 10054e98e3e1Schristos int UNUSED written = 0; 10064e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 10074e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10084e98e3e1Schristos 10094e98e3e1Schristos { 10104e98e3e1Schristos BI opval = LTSI (* FLD (i_src1), * FLD (i_src2)); 10114e98e3e1Schristos CPU (h_cond) = opval; 1012212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 10134e98e3e1Schristos } 10144e98e3e1Schristos 10154e98e3e1Schristos #undef FLD 10164e98e3e1Schristos } 10174e98e3e1Schristos NEXT (vpc); 10184e98e3e1Schristos 10194e98e3e1Schristos CASE (sem, INSN_CMPI) : /* cmpi $src2,$simm16 */ 10204e98e3e1Schristos { 10214e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10224e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10234e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 10244e98e3e1Schristos int UNUSED written = 0; 10254e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 10264e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 10274e98e3e1Schristos 10284e98e3e1Schristos { 10294e98e3e1Schristos BI opval = LTSI (* FLD (i_src2), FLD (f_simm16)); 10304e98e3e1Schristos CPU (h_cond) = opval; 1031212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 10324e98e3e1Schristos } 10334e98e3e1Schristos 10344e98e3e1Schristos #undef FLD 10354e98e3e1Schristos } 10364e98e3e1Schristos NEXT (vpc); 10374e98e3e1Schristos 10384e98e3e1Schristos CASE (sem, INSN_CMPU) : /* cmpu $src1,$src2 */ 10394e98e3e1Schristos { 10404e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10414e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10424e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 10434e98e3e1Schristos int UNUSED written = 0; 10444e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 10454e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 10464e98e3e1Schristos 10474e98e3e1Schristos { 10484e98e3e1Schristos BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2)); 10494e98e3e1Schristos CPU (h_cond) = opval; 1050212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 10514e98e3e1Schristos } 10524e98e3e1Schristos 10534e98e3e1Schristos #undef FLD 10544e98e3e1Schristos } 10554e98e3e1Schristos NEXT (vpc); 10564e98e3e1Schristos 10574e98e3e1Schristos CASE (sem, INSN_CMPUI) : /* cmpui $src2,$simm16 */ 10584e98e3e1Schristos { 10594e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10604e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10614e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 10624e98e3e1Schristos int UNUSED written = 0; 10634e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 10644e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 10654e98e3e1Schristos 10664e98e3e1Schristos { 10674e98e3e1Schristos BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16)); 10684e98e3e1Schristos CPU (h_cond) = opval; 1069212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 10704e98e3e1Schristos } 10714e98e3e1Schristos 10724e98e3e1Schristos #undef FLD 10734e98e3e1Schristos } 10744e98e3e1Schristos NEXT (vpc); 10754e98e3e1Schristos 10764e98e3e1Schristos CASE (sem, INSN_DIV) : /* div $dr,$sr */ 10774e98e3e1Schristos { 10784e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 10794e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 10804e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 10814e98e3e1Schristos int UNUSED written = 0; 10824e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 10834e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 10844e98e3e1Schristos 10854e98e3e1Schristos if (NESI (* FLD (i_sr), 0)) { 10864e98e3e1Schristos { 10874e98e3e1Schristos SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr)); 10884e98e3e1Schristos * FLD (i_dr) = opval; 10894e98e3e1Schristos written |= (1 << 2); 1090212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 10914e98e3e1Schristos } 10924e98e3e1Schristos } 10934e98e3e1Schristos 10944e98e3e1Schristos abuf->written = written; 10954e98e3e1Schristos #undef FLD 10964e98e3e1Schristos } 10974e98e3e1Schristos NEXT (vpc); 10984e98e3e1Schristos 10994e98e3e1Schristos CASE (sem, INSN_DIVU) : /* divu $dr,$sr */ 11004e98e3e1Schristos { 11014e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11024e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11034e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 11044e98e3e1Schristos int UNUSED written = 0; 11054e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 11064e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 11074e98e3e1Schristos 11084e98e3e1Schristos if (NESI (* FLD (i_sr), 0)) { 11094e98e3e1Schristos { 11104e98e3e1Schristos SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr)); 11114e98e3e1Schristos * FLD (i_dr) = opval; 11124e98e3e1Schristos written |= (1 << 2); 1113212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11144e98e3e1Schristos } 11154e98e3e1Schristos } 11164e98e3e1Schristos 11174e98e3e1Schristos abuf->written = written; 11184e98e3e1Schristos #undef FLD 11194e98e3e1Schristos } 11204e98e3e1Schristos NEXT (vpc); 11214e98e3e1Schristos 11224e98e3e1Schristos CASE (sem, INSN_REM) : /* rem $dr,$sr */ 11234e98e3e1Schristos { 11244e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11254e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 11274e98e3e1Schristos int UNUSED written = 0; 11284e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 11294e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 11304e98e3e1Schristos 11314e98e3e1Schristos if (NESI (* FLD (i_sr), 0)) { 11324e98e3e1Schristos { 11334e98e3e1Schristos SI opval = MODSI (* FLD (i_dr), * FLD (i_sr)); 11344e98e3e1Schristos * FLD (i_dr) = opval; 11354e98e3e1Schristos written |= (1 << 2); 1136212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11374e98e3e1Schristos } 11384e98e3e1Schristos } 11394e98e3e1Schristos 11404e98e3e1Schristos abuf->written = written; 11414e98e3e1Schristos #undef FLD 11424e98e3e1Schristos } 11434e98e3e1Schristos NEXT (vpc); 11444e98e3e1Schristos 11454e98e3e1Schristos CASE (sem, INSN_REMU) : /* remu $dr,$sr */ 11464e98e3e1Schristos { 11474e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11484e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11494e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 11504e98e3e1Schristos int UNUSED written = 0; 11514e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 11524e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 11534e98e3e1Schristos 11544e98e3e1Schristos if (NESI (* FLD (i_sr), 0)) { 11554e98e3e1Schristos { 11564e98e3e1Schristos SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr)); 11574e98e3e1Schristos * FLD (i_dr) = opval; 11584e98e3e1Schristos written |= (1 << 2); 1159212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11604e98e3e1Schristos } 11614e98e3e1Schristos } 11624e98e3e1Schristos 11634e98e3e1Schristos abuf->written = written; 11644e98e3e1Schristos #undef FLD 11654e98e3e1Schristos } 11664e98e3e1Schristos NEXT (vpc); 11674e98e3e1Schristos 11684e98e3e1Schristos CASE (sem, INSN_JL) : /* jl $sr */ 11694e98e3e1Schristos { 11704e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 11714e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 11724e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 11734e98e3e1Schristos int UNUSED written = 0; 11744e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 11754e98e3e1Schristos SEM_BRANCH_INIT 11764e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 11774e98e3e1Schristos 11784e98e3e1Schristos { 11794e98e3e1Schristos SI temp0;USI temp1; 11804e98e3e1Schristos temp0 = ADDSI (ANDSI (pc, -4), 4); 11814e98e3e1Schristos temp1 = ANDSI (* FLD (i_sr), -4); 11824e98e3e1Schristos { 11834e98e3e1Schristos SI opval = temp0; 11844e98e3e1Schristos CPU (h_gr[((UINT) 14)]) = opval; 1185212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 11864e98e3e1Schristos } 11874e98e3e1Schristos { 11884e98e3e1Schristos USI opval = temp1; 11894e98e3e1Schristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1190212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 11914e98e3e1Schristos } 11924e98e3e1Schristos } 11934e98e3e1Schristos 11944e98e3e1Schristos SEM_BRANCH_FINI (vpc); 11954e98e3e1Schristos #undef FLD 11964e98e3e1Schristos } 11974e98e3e1Schristos NEXT (vpc); 11984e98e3e1Schristos 11994e98e3e1Schristos CASE (sem, INSN_JMP) : /* jmp $sr */ 12004e98e3e1Schristos { 12014e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12024e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12034e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_jl.f 12044e98e3e1Schristos int UNUSED written = 0; 12054e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 12064e98e3e1Schristos SEM_BRANCH_INIT 12074e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12084e98e3e1Schristos 12094e98e3e1Schristos { 12104e98e3e1Schristos USI opval = ANDSI (* FLD (i_sr), -4); 12114e98e3e1Schristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1212212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 12134e98e3e1Schristos } 12144e98e3e1Schristos 12154e98e3e1Schristos SEM_BRANCH_FINI (vpc); 12164e98e3e1Schristos #undef FLD 12174e98e3e1Schristos } 12184e98e3e1Schristos NEXT (vpc); 12194e98e3e1Schristos 12204e98e3e1Schristos CASE (sem, INSN_LD) : /* ld $dr,@$sr */ 12214e98e3e1Schristos { 12224e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12234e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12244e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 12254e98e3e1Schristos int UNUSED written = 0; 12264e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 12274e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12284e98e3e1Schristos 12294e98e3e1Schristos { 12304e98e3e1Schristos SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 12314e98e3e1Schristos * FLD (i_dr) = opval; 1232212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 12334e98e3e1Schristos } 12344e98e3e1Schristos 12354e98e3e1Schristos #undef FLD 12364e98e3e1Schristos } 12374e98e3e1Schristos NEXT (vpc); 12384e98e3e1Schristos 12394e98e3e1Schristos CASE (sem, INSN_LD_D) : /* ld $dr,@($slo16,$sr) */ 12404e98e3e1Schristos { 12414e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12424e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12444e98e3e1Schristos int UNUSED written = 0; 12454e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 12464e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 12474e98e3e1Schristos 12484e98e3e1Schristos { 12494e98e3e1Schristos SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))); 12504e98e3e1Schristos * FLD (i_dr) = opval; 1251212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 12524e98e3e1Schristos } 12534e98e3e1Schristos 12544e98e3e1Schristos #undef FLD 12554e98e3e1Schristos } 12564e98e3e1Schristos NEXT (vpc); 12574e98e3e1Schristos 12584e98e3e1Schristos CASE (sem, INSN_LDB) : /* ldb $dr,@$sr */ 12594e98e3e1Schristos { 12604e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12614e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12624e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 12634e98e3e1Schristos int UNUSED written = 0; 12644e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 12654e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 12664e98e3e1Schristos 12674e98e3e1Schristos { 12684e98e3e1Schristos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 12694e98e3e1Schristos * FLD (i_dr) = opval; 1270212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 12714e98e3e1Schristos } 12724e98e3e1Schristos 12734e98e3e1Schristos #undef FLD 12744e98e3e1Schristos } 12754e98e3e1Schristos NEXT (vpc); 12764e98e3e1Schristos 12774e98e3e1Schristos CASE (sem, INSN_LDB_D) : /* ldb $dr,@($slo16,$sr) */ 12784e98e3e1Schristos { 12794e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12804e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 12814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 12824e98e3e1Schristos int UNUSED written = 0; 12834e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 12844e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 12854e98e3e1Schristos 12864e98e3e1Schristos { 12874e98e3e1Schristos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 12884e98e3e1Schristos * FLD (i_dr) = opval; 1289212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 12904e98e3e1Schristos } 12914e98e3e1Schristos 12924e98e3e1Schristos #undef FLD 12934e98e3e1Schristos } 12944e98e3e1Schristos NEXT (vpc); 12954e98e3e1Schristos 12964e98e3e1Schristos CASE (sem, INSN_LDH) : /* ldh $dr,@$sr */ 12974e98e3e1Schristos { 12984e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 12994e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 13014e98e3e1Schristos int UNUSED written = 0; 13024e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 13034e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13044e98e3e1Schristos 13054e98e3e1Schristos { 13064e98e3e1Schristos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 13074e98e3e1Schristos * FLD (i_dr) = opval; 1308212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13094e98e3e1Schristos } 13104e98e3e1Schristos 13114e98e3e1Schristos #undef FLD 13124e98e3e1Schristos } 13134e98e3e1Schristos NEXT (vpc); 13144e98e3e1Schristos 13154e98e3e1Schristos CASE (sem, INSN_LDH_D) : /* ldh $dr,@($slo16,$sr) */ 13164e98e3e1Schristos { 13174e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13184e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13194e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 13204e98e3e1Schristos int UNUSED written = 0; 13214e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 13224e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13234e98e3e1Schristos 13244e98e3e1Schristos { 13254e98e3e1Schristos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 13264e98e3e1Schristos * FLD (i_dr) = opval; 1327212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13284e98e3e1Schristos } 13294e98e3e1Schristos 13304e98e3e1Schristos #undef FLD 13314e98e3e1Schristos } 13324e98e3e1Schristos NEXT (vpc); 13334e98e3e1Schristos 13344e98e3e1Schristos CASE (sem, INSN_LDUB) : /* ldub $dr,@$sr */ 13354e98e3e1Schristos { 13364e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13374e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13384e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 13394e98e3e1Schristos int UNUSED written = 0; 13404e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 13414e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13424e98e3e1Schristos 13434e98e3e1Schristos { 13444e98e3e1Schristos SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 13454e98e3e1Schristos * FLD (i_dr) = opval; 1346212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13474e98e3e1Schristos } 13484e98e3e1Schristos 13494e98e3e1Schristos #undef FLD 13504e98e3e1Schristos } 13514e98e3e1Schristos NEXT (vpc); 13524e98e3e1Schristos 13534e98e3e1Schristos CASE (sem, INSN_LDUB_D) : /* ldub $dr,@($slo16,$sr) */ 13544e98e3e1Schristos { 13554e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13564e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13574e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 13584e98e3e1Schristos int UNUSED written = 0; 13594e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 13604e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13614e98e3e1Schristos 13624e98e3e1Schristos { 13634e98e3e1Schristos SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 13644e98e3e1Schristos * FLD (i_dr) = opval; 1365212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13664e98e3e1Schristos } 13674e98e3e1Schristos 13684e98e3e1Schristos #undef FLD 13694e98e3e1Schristos } 13704e98e3e1Schristos NEXT (vpc); 13714e98e3e1Schristos 13724e98e3e1Schristos CASE (sem, INSN_LDUH) : /* lduh $dr,@$sr */ 13734e98e3e1Schristos { 13744e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13754e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13764e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 13774e98e3e1Schristos int UNUSED written = 0; 13784e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 13794e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 13804e98e3e1Schristos 13814e98e3e1Schristos { 13824e98e3e1Schristos SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 13834e98e3e1Schristos * FLD (i_dr) = opval; 1384212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 13854e98e3e1Schristos } 13864e98e3e1Schristos 13874e98e3e1Schristos #undef FLD 13884e98e3e1Schristos } 13894e98e3e1Schristos NEXT (vpc); 13904e98e3e1Schristos 13914e98e3e1Schristos CASE (sem, INSN_LDUH_D) : /* lduh $dr,@($slo16,$sr) */ 13924e98e3e1Schristos { 13934e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 13944e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 13954e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 13964e98e3e1Schristos int UNUSED written = 0; 13974e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 13984e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 13994e98e3e1Schristos 14004e98e3e1Schristos { 14014e98e3e1Schristos SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 14024e98e3e1Schristos * FLD (i_dr) = opval; 1403212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 14044e98e3e1Schristos } 14054e98e3e1Schristos 14064e98e3e1Schristos #undef FLD 14074e98e3e1Schristos } 14084e98e3e1Schristos NEXT (vpc); 14094e98e3e1Schristos 14104e98e3e1Schristos CASE (sem, INSN_LD_PLUS) : /* ld $dr,@$sr+ */ 14114e98e3e1Schristos { 14124e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14134e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14144e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 14154e98e3e1Schristos int UNUSED written = 0; 14164e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 14174e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14184e98e3e1Schristos 14194e98e3e1Schristos { 14204e98e3e1Schristos SI temp0;SI temp1; 14214e98e3e1Schristos temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 14224e98e3e1Schristos temp1 = ADDSI (* FLD (i_sr), 4); 14234e98e3e1Schristos { 14244e98e3e1Schristos SI opval = temp0; 14254e98e3e1Schristos * FLD (i_dr) = opval; 1426212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 14274e98e3e1Schristos } 14284e98e3e1Schristos { 14294e98e3e1Schristos SI opval = temp1; 14304e98e3e1Schristos * FLD (i_sr) = opval; 1431212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 14324e98e3e1Schristos } 14334e98e3e1Schristos } 14344e98e3e1Schristos 14354e98e3e1Schristos #undef FLD 14364e98e3e1Schristos } 14374e98e3e1Schristos NEXT (vpc); 14384e98e3e1Schristos 14394e98e3e1Schristos CASE (sem, INSN_LD24) : /* ld24 $dr,$uimm24 */ 14404e98e3e1Schristos { 14414e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14424e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14434e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld24.f 14444e98e3e1Schristos int UNUSED written = 0; 14454e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 14464e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 14474e98e3e1Schristos 14484e98e3e1Schristos { 14494e98e3e1Schristos SI opval = FLD (i_uimm24); 14504e98e3e1Schristos * FLD (i_dr) = opval; 1451212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 14524e98e3e1Schristos } 14534e98e3e1Schristos 14544e98e3e1Schristos #undef FLD 14554e98e3e1Schristos } 14564e98e3e1Schristos NEXT (vpc); 14574e98e3e1Schristos 14584e98e3e1Schristos CASE (sem, INSN_LDI8) : /* ldi8 $dr,$simm8 */ 14594e98e3e1Schristos { 14604e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14614e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14624e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_addi.f 14634e98e3e1Schristos int UNUSED written = 0; 14644e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 14654e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 14664e98e3e1Schristos 14674e98e3e1Schristos { 14684e98e3e1Schristos SI opval = FLD (f_simm8); 14694e98e3e1Schristos * FLD (i_dr) = opval; 1470212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 14714e98e3e1Schristos } 14724e98e3e1Schristos 14734e98e3e1Schristos #undef FLD 14744e98e3e1Schristos } 14754e98e3e1Schristos NEXT (vpc); 14764e98e3e1Schristos 14774e98e3e1Schristos CASE (sem, INSN_LDI16) : /* ldi16 $dr,$hash$slo16 */ 14784e98e3e1Schristos { 14794e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14804e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 14814e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 14824e98e3e1Schristos int UNUSED written = 0; 14834e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 14844e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 14854e98e3e1Schristos 14864e98e3e1Schristos { 14874e98e3e1Schristos SI opval = FLD (f_simm16); 14884e98e3e1Schristos * FLD (i_dr) = opval; 1489212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 14904e98e3e1Schristos } 14914e98e3e1Schristos 14924e98e3e1Schristos #undef FLD 14934e98e3e1Schristos } 14944e98e3e1Schristos NEXT (vpc); 14954e98e3e1Schristos 14964e98e3e1Schristos CASE (sem, INSN_LOCK) : /* lock $dr,@$sr */ 14974e98e3e1Schristos { 14984e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 14994e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 15004e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 15014e98e3e1Schristos int UNUSED written = 0; 15024e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 15034e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 15044e98e3e1Schristos 15054e98e3e1Schristos { 15064e98e3e1Schristos { 15074e98e3e1Schristos BI opval = 1; 15084e98e3e1Schristos CPU (h_lock) = opval; 1509212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 15104e98e3e1Schristos } 15114e98e3e1Schristos { 15124e98e3e1Schristos SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 15134e98e3e1Schristos * FLD (i_dr) = opval; 1514212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 15154e98e3e1Schristos } 15164e98e3e1Schristos } 15174e98e3e1Schristos 15184e98e3e1Schristos #undef FLD 15194e98e3e1Schristos } 15204e98e3e1Schristos NEXT (vpc); 15214e98e3e1Schristos 15224e98e3e1Schristos CASE (sem, INSN_MACHI) : /* machi $src1,$src2 */ 15234e98e3e1Schristos { 15244e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 15254e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 15264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 15274e98e3e1Schristos int UNUSED written = 0; 15284e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 15294e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 15304e98e3e1Schristos 15314e98e3e1Schristos { 15324e98e3e1Schristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8); 15334e98e3e1Schristos SET_H_ACCUM (opval); 1534212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 15354e98e3e1Schristos } 15364e98e3e1Schristos 15374e98e3e1Schristos #undef FLD 15384e98e3e1Schristos } 15394e98e3e1Schristos NEXT (vpc); 15404e98e3e1Schristos 15414e98e3e1Schristos CASE (sem, INSN_MACLO) : /* maclo $src1,$src2 */ 15424e98e3e1Schristos { 15434e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 15444e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 15454e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 15464e98e3e1Schristos int UNUSED written = 0; 15474e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 15484e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 15494e98e3e1Schristos 15504e98e3e1Schristos { 15514e98e3e1Schristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8); 15524e98e3e1Schristos SET_H_ACCUM (opval); 1553212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 15544e98e3e1Schristos } 15554e98e3e1Schristos 15564e98e3e1Schristos #undef FLD 15574e98e3e1Schristos } 15584e98e3e1Schristos NEXT (vpc); 15594e98e3e1Schristos 15604e98e3e1Schristos CASE (sem, INSN_MACWHI) : /* macwhi $src1,$src2 */ 15614e98e3e1Schristos { 15624e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 15634e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 15644e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 15654e98e3e1Schristos int UNUSED written = 0; 15664e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 15674e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 15684e98e3e1Schristos 15694e98e3e1Schristos { 15704e98e3e1Schristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8); 15714e98e3e1Schristos SET_H_ACCUM (opval); 1572212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 15734e98e3e1Schristos } 15744e98e3e1Schristos 15754e98e3e1Schristos #undef FLD 15764e98e3e1Schristos } 15774e98e3e1Schristos NEXT (vpc); 15784e98e3e1Schristos 15794e98e3e1Schristos CASE (sem, INSN_MACWLO) : /* macwlo $src1,$src2 */ 15804e98e3e1Schristos { 15814e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 15824e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 15834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 15844e98e3e1Schristos int UNUSED written = 0; 15854e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 15864e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 15874e98e3e1Schristos 15884e98e3e1Schristos { 15894e98e3e1Schristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8); 15904e98e3e1Schristos SET_H_ACCUM (opval); 1591212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 15924e98e3e1Schristos } 15934e98e3e1Schristos 15944e98e3e1Schristos #undef FLD 15954e98e3e1Schristos } 15964e98e3e1Schristos NEXT (vpc); 15974e98e3e1Schristos 15984e98e3e1Schristos CASE (sem, INSN_MUL) : /* mul $dr,$sr */ 15994e98e3e1Schristos { 16004e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 16014e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 16024e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 16034e98e3e1Schristos int UNUSED written = 0; 16044e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 16054e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 16064e98e3e1Schristos 16074e98e3e1Schristos { 16084e98e3e1Schristos SI opval = MULSI (* FLD (i_dr), * FLD (i_sr)); 16094e98e3e1Schristos * FLD (i_dr) = opval; 1610212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 16114e98e3e1Schristos } 16124e98e3e1Schristos 16134e98e3e1Schristos #undef FLD 16144e98e3e1Schristos } 16154e98e3e1Schristos NEXT (vpc); 16164e98e3e1Schristos 16174e98e3e1Schristos CASE (sem, INSN_MULHI) : /* mulhi $src1,$src2 */ 16184e98e3e1Schristos { 16194e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 16204e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 16214e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 16224e98e3e1Schristos int UNUSED written = 0; 16234e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 16244e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 16254e98e3e1Schristos 16264e98e3e1Schristos { 16274e98e3e1Schristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16); 16284e98e3e1Schristos SET_H_ACCUM (opval); 1629212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 16304e98e3e1Schristos } 16314e98e3e1Schristos 16324e98e3e1Schristos #undef FLD 16334e98e3e1Schristos } 16344e98e3e1Schristos NEXT (vpc); 16354e98e3e1Schristos 16364e98e3e1Schristos CASE (sem, INSN_MULLO) : /* mullo $src1,$src2 */ 16374e98e3e1Schristos { 16384e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 16394e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 16404e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 16414e98e3e1Schristos int UNUSED written = 0; 16424e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 16434e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 16444e98e3e1Schristos 16454e98e3e1Schristos { 16464e98e3e1Schristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16); 16474e98e3e1Schristos SET_H_ACCUM (opval); 1648212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 16494e98e3e1Schristos } 16504e98e3e1Schristos 16514e98e3e1Schristos #undef FLD 16524e98e3e1Schristos } 16534e98e3e1Schristos NEXT (vpc); 16544e98e3e1Schristos 16554e98e3e1Schristos CASE (sem, INSN_MULWHI) : /* mulwhi $src1,$src2 */ 16564e98e3e1Schristos { 16574e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 16584e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 16594e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 16604e98e3e1Schristos int UNUSED written = 0; 16614e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 16624e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 16634e98e3e1Schristos 16644e98e3e1Schristos { 16654e98e3e1Schristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 8), 8); 16664e98e3e1Schristos SET_H_ACCUM (opval); 1667212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 16684e98e3e1Schristos } 16694e98e3e1Schristos 16704e98e3e1Schristos #undef FLD 16714e98e3e1Schristos } 16724e98e3e1Schristos NEXT (vpc); 16734e98e3e1Schristos 16744e98e3e1Schristos CASE (sem, INSN_MULWLO) : /* mulwlo $src1,$src2 */ 16754e98e3e1Schristos { 16764e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 16774e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 16784e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 16794e98e3e1Schristos int UNUSED written = 0; 16804e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 16814e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 16824e98e3e1Schristos 16834e98e3e1Schristos { 16844e98e3e1Schristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 8), 8); 16854e98e3e1Schristos SET_H_ACCUM (opval); 1686212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 16874e98e3e1Schristos } 16884e98e3e1Schristos 16894e98e3e1Schristos #undef FLD 16904e98e3e1Schristos } 16914e98e3e1Schristos NEXT (vpc); 16924e98e3e1Schristos 16934e98e3e1Schristos CASE (sem, INSN_MV) : /* mv $dr,$sr */ 16944e98e3e1Schristos { 16954e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 16964e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 16974e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 16984e98e3e1Schristos int UNUSED written = 0; 16994e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 17004e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 17014e98e3e1Schristos 17024e98e3e1Schristos { 17034e98e3e1Schristos SI opval = * FLD (i_sr); 17044e98e3e1Schristos * FLD (i_dr) = opval; 1705212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 17064e98e3e1Schristos } 17074e98e3e1Schristos 17084e98e3e1Schristos #undef FLD 17094e98e3e1Schristos } 17104e98e3e1Schristos NEXT (vpc); 17114e98e3e1Schristos 17124e98e3e1Schristos CASE (sem, INSN_MVFACHI) : /* mvfachi $dr */ 17134e98e3e1Schristos { 17144e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 17154e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 17164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 17174e98e3e1Schristos int UNUSED written = 0; 17184e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 17194e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 17204e98e3e1Schristos 17214e98e3e1Schristos { 17224e98e3e1Schristos SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 32)); 17234e98e3e1Schristos * FLD (i_dr) = opval; 1724212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 17254e98e3e1Schristos } 17264e98e3e1Schristos 17274e98e3e1Schristos #undef FLD 17284e98e3e1Schristos } 17294e98e3e1Schristos NEXT (vpc); 17304e98e3e1Schristos 17314e98e3e1Schristos CASE (sem, INSN_MVFACLO) : /* mvfaclo $dr */ 17324e98e3e1Schristos { 17334e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 17344e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 17354e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 17364e98e3e1Schristos int UNUSED written = 0; 17374e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 17384e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 17394e98e3e1Schristos 17404e98e3e1Schristos { 17414e98e3e1Schristos SI opval = TRUNCDISI (GET_H_ACCUM ()); 17424e98e3e1Schristos * FLD (i_dr) = opval; 1743212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 17444e98e3e1Schristos } 17454e98e3e1Schristos 17464e98e3e1Schristos #undef FLD 17474e98e3e1Schristos } 17484e98e3e1Schristos NEXT (vpc); 17494e98e3e1Schristos 17504e98e3e1Schristos CASE (sem, INSN_MVFACMI) : /* mvfacmi $dr */ 17514e98e3e1Schristos { 17524e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 17534e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 17544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 17554e98e3e1Schristos int UNUSED written = 0; 17564e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 17574e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 17584e98e3e1Schristos 17594e98e3e1Schristos { 17604e98e3e1Schristos SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 16)); 17614e98e3e1Schristos * FLD (i_dr) = opval; 1762212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 17634e98e3e1Schristos } 17644e98e3e1Schristos 17654e98e3e1Schristos #undef FLD 17664e98e3e1Schristos } 17674e98e3e1Schristos NEXT (vpc); 17684e98e3e1Schristos 17694e98e3e1Schristos CASE (sem, INSN_MVFC) : /* mvfc $dr,$scr */ 17704e98e3e1Schristos { 17714e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 17724e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 17734e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 17744e98e3e1Schristos int UNUSED written = 0; 17754e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 17764e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 17774e98e3e1Schristos 17784e98e3e1Schristos { 17794e98e3e1Schristos SI opval = GET_H_CR (FLD (f_r2)); 17804e98e3e1Schristos * FLD (i_dr) = opval; 1781212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 17824e98e3e1Schristos } 17834e98e3e1Schristos 17844e98e3e1Schristos #undef FLD 17854e98e3e1Schristos } 17864e98e3e1Schristos NEXT (vpc); 17874e98e3e1Schristos 17884e98e3e1Schristos CASE (sem, INSN_MVTACHI) : /* mvtachi $src1 */ 17894e98e3e1Schristos { 17904e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 17914e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 17924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 17934e98e3e1Schristos int UNUSED written = 0; 17944e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 17954e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 17964e98e3e1Schristos 17974e98e3e1Schristos { 17984e98e3e1Schristos DI opval = ORDI (ANDDI (GET_H_ACCUM (), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32)); 17994e98e3e1Schristos SET_H_ACCUM (opval); 1800212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 18014e98e3e1Schristos } 18024e98e3e1Schristos 18034e98e3e1Schristos #undef FLD 18044e98e3e1Schristos } 18054e98e3e1Schristos NEXT (vpc); 18064e98e3e1Schristos 18074e98e3e1Schristos CASE (sem, INSN_MVTACLO) : /* mvtaclo $src1 */ 18084e98e3e1Schristos { 18094e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 18104e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 18114e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 18124e98e3e1Schristos int UNUSED written = 0; 18134e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 18144e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 18154e98e3e1Schristos 18164e98e3e1Schristos { 18174e98e3e1Schristos DI opval = ORDI (ANDDI (GET_H_ACCUM (), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1))); 18184e98e3e1Schristos SET_H_ACCUM (opval); 1819212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 18204e98e3e1Schristos } 18214e98e3e1Schristos 18224e98e3e1Schristos #undef FLD 18234e98e3e1Schristos } 18244e98e3e1Schristos NEXT (vpc); 18254e98e3e1Schristos 18264e98e3e1Schristos CASE (sem, INSN_MVTC) : /* mvtc $sr,$dcr */ 18274e98e3e1Schristos { 18284e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 18294e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 18304e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18314e98e3e1Schristos int UNUSED written = 0; 18324e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 18334e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 18344e98e3e1Schristos 18354e98e3e1Schristos { 18364e98e3e1Schristos USI opval = * FLD (i_sr); 18374e98e3e1Schristos SET_H_CR (FLD (f_r1), opval); 1838212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 18394e98e3e1Schristos } 18404e98e3e1Schristos 18414e98e3e1Schristos #undef FLD 18424e98e3e1Schristos } 18434e98e3e1Schristos NEXT (vpc); 18444e98e3e1Schristos 18454e98e3e1Schristos CASE (sem, INSN_NEG) : /* neg $dr,$sr */ 18464e98e3e1Schristos { 18474e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 18484e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 18494e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18504e98e3e1Schristos int UNUSED written = 0; 18514e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 18524e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 18534e98e3e1Schristos 18544e98e3e1Schristos { 18554e98e3e1Schristos SI opval = NEGSI (* FLD (i_sr)); 18564e98e3e1Schristos * FLD (i_dr) = opval; 1857212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 18584e98e3e1Schristos } 18594e98e3e1Schristos 18604e98e3e1Schristos #undef FLD 18614e98e3e1Schristos } 18624e98e3e1Schristos NEXT (vpc); 18634e98e3e1Schristos 18644e98e3e1Schristos CASE (sem, INSN_NOP) : /* nop */ 18654e98e3e1Schristos { 18664e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 18674e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 18684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 18694e98e3e1Schristos int UNUSED written = 0; 18704e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 18714e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 18724e98e3e1Schristos 18734e98e3e1Schristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr); 18744e98e3e1Schristos 18754e98e3e1Schristos #undef FLD 18764e98e3e1Schristos } 18774e98e3e1Schristos NEXT (vpc); 18784e98e3e1Schristos 18794e98e3e1Schristos CASE (sem, INSN_NOT) : /* not $dr,$sr */ 18804e98e3e1Schristos { 18814e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 18824e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 18834e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 18844e98e3e1Schristos int UNUSED written = 0; 18854e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 18864e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 18874e98e3e1Schristos 18884e98e3e1Schristos { 18894e98e3e1Schristos SI opval = INVSI (* FLD (i_sr)); 18904e98e3e1Schristos * FLD (i_dr) = opval; 1891212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 18924e98e3e1Schristos } 18934e98e3e1Schristos 18944e98e3e1Schristos #undef FLD 18954e98e3e1Schristos } 18964e98e3e1Schristos NEXT (vpc); 18974e98e3e1Schristos 18984e98e3e1Schristos CASE (sem, INSN_RAC) : /* rac */ 18994e98e3e1Schristos { 19004e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 19014e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 19024e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 19034e98e3e1Schristos int UNUSED written = 0; 19044e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 19054e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 19064e98e3e1Schristos 19074e98e3e1Schristos { 19084e98e3e1Schristos DI tmp_tmp1; 19094e98e3e1Schristos tmp_tmp1 = SLLDI (GET_H_ACCUM (), 1); 19104e98e3e1Schristos tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768)); 19114e98e3e1Schristos { 19124e98e3e1Schristos DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000))); 19134e98e3e1Schristos SET_H_ACCUM (opval); 1914212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 19154e98e3e1Schristos } 19164e98e3e1Schristos } 19174e98e3e1Schristos 19184e98e3e1Schristos #undef FLD 19194e98e3e1Schristos } 19204e98e3e1Schristos NEXT (vpc); 19214e98e3e1Schristos 19224e98e3e1Schristos CASE (sem, INSN_RACH) : /* rach */ 19234e98e3e1Schristos { 19244e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 19254e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 19264e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 19274e98e3e1Schristos int UNUSED written = 0; 19284e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 19294e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 19304e98e3e1Schristos 19314e98e3e1Schristos { 19324e98e3e1Schristos DI tmp_tmp1; 19334e98e3e1Schristos tmp_tmp1 = ANDDI (GET_H_ACCUM (), MAKEDI (16777215, 0xffffffff)); 19344e98e3e1Schristos if (ANDIF (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) { 19354e98e3e1Schristos tmp_tmp1 = MAKEDI (16383, 0x80000000); 19364e98e3e1Schristos } else { 19374e98e3e1Schristos if (ANDIF (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) { 19384e98e3e1Schristos tmp_tmp1 = MAKEDI (16760832, 0); 19394e98e3e1Schristos } else { 19404e98e3e1Schristos tmp_tmp1 = ANDDI (ADDDI (GET_H_ACCUM (), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000)); 19414e98e3e1Schristos } 19424e98e3e1Schristos } 19434e98e3e1Schristos tmp_tmp1 = SLLDI (tmp_tmp1, 1); 19444e98e3e1Schristos { 19454e98e3e1Schristos DI opval = SRADI (SLLDI (tmp_tmp1, 7), 7); 19464e98e3e1Schristos SET_H_ACCUM (opval); 1947212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 19484e98e3e1Schristos } 19494e98e3e1Schristos } 19504e98e3e1Schristos 19514e98e3e1Schristos #undef FLD 19524e98e3e1Schristos } 19534e98e3e1Schristos NEXT (vpc); 19544e98e3e1Schristos 19554e98e3e1Schristos CASE (sem, INSN_RTE) : /* rte */ 19564e98e3e1Schristos { 19574e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 19584e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 19594e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_empty.f 19604e98e3e1Schristos int UNUSED written = 0; 19614e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 19624e98e3e1Schristos SEM_BRANCH_INIT 19634e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 19644e98e3e1Schristos 19654e98e3e1Schristos { 19664e98e3e1Schristos { 19674e98e3e1Schristos USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4); 19684e98e3e1Schristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1969212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 19704e98e3e1Schristos } 19714e98e3e1Schristos { 19724e98e3e1Schristos USI opval = GET_H_CR (((UINT) 14)); 19734e98e3e1Schristos SET_H_CR (((UINT) 6), opval); 1974212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 19754e98e3e1Schristos } 19764e98e3e1Schristos { 19774e98e3e1Schristos UQI opval = CPU (h_bpsw); 19784e98e3e1Schristos SET_H_PSW (opval); 1979212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 19804e98e3e1Schristos } 19814e98e3e1Schristos { 19824e98e3e1Schristos UQI opval = CPU (h_bbpsw); 19834e98e3e1Schristos CPU (h_bpsw) = opval; 1984212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 19854e98e3e1Schristos } 19864e98e3e1Schristos } 19874e98e3e1Schristos 19884e98e3e1Schristos SEM_BRANCH_FINI (vpc); 19894e98e3e1Schristos #undef FLD 19904e98e3e1Schristos } 19914e98e3e1Schristos NEXT (vpc); 19924e98e3e1Schristos 19934e98e3e1Schristos CASE (sem, INSN_SETH) : /* seth $dr,$hash$hi16 */ 19944e98e3e1Schristos { 19954e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 19964e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 19974e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_seth.f 19984e98e3e1Schristos int UNUSED written = 0; 19994e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 20004e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 20014e98e3e1Schristos 20024e98e3e1Schristos { 20034e98e3e1Schristos SI opval = SLLSI (FLD (f_hi16), 16); 20044e98e3e1Schristos * FLD (i_dr) = opval; 2005212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 20064e98e3e1Schristos } 20074e98e3e1Schristos 20084e98e3e1Schristos #undef FLD 20094e98e3e1Schristos } 20104e98e3e1Schristos NEXT (vpc); 20114e98e3e1Schristos 20124e98e3e1Schristos CASE (sem, INSN_SLL) : /* sll $dr,$sr */ 20134e98e3e1Schristos { 20144e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 20154e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 20164e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 20174e98e3e1Schristos int UNUSED written = 0; 20184e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 20194e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 20204e98e3e1Schristos 20214e98e3e1Schristos { 20224e98e3e1Schristos SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 20234e98e3e1Schristos * FLD (i_dr) = opval; 2024212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 20254e98e3e1Schristos } 20264e98e3e1Schristos 20274e98e3e1Schristos #undef FLD 20284e98e3e1Schristos } 20294e98e3e1Schristos NEXT (vpc); 20304e98e3e1Schristos 20314e98e3e1Schristos CASE (sem, INSN_SLL3) : /* sll3 $dr,$sr,$simm16 */ 20324e98e3e1Schristos { 20334e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 20344e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 20354e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 20364e98e3e1Schristos int UNUSED written = 0; 20374e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 20384e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 20394e98e3e1Schristos 20404e98e3e1Schristos { 20414e98e3e1Schristos SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 20424e98e3e1Schristos * FLD (i_dr) = opval; 2043212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 20444e98e3e1Schristos } 20454e98e3e1Schristos 20464e98e3e1Schristos #undef FLD 20474e98e3e1Schristos } 20484e98e3e1Schristos NEXT (vpc); 20494e98e3e1Schristos 20504e98e3e1Schristos CASE (sem, INSN_SLLI) : /* slli $dr,$uimm5 */ 20514e98e3e1Schristos { 20524e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 20534e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 20544e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 20554e98e3e1Schristos int UNUSED written = 0; 20564e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 20574e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 20584e98e3e1Schristos 20594e98e3e1Schristos { 20604e98e3e1Schristos SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5)); 20614e98e3e1Schristos * FLD (i_dr) = opval; 2062212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 20634e98e3e1Schristos } 20644e98e3e1Schristos 20654e98e3e1Schristos #undef FLD 20664e98e3e1Schristos } 20674e98e3e1Schristos NEXT (vpc); 20684e98e3e1Schristos 20694e98e3e1Schristos CASE (sem, INSN_SRA) : /* sra $dr,$sr */ 20704e98e3e1Schristos { 20714e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 20724e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 20734e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 20744e98e3e1Schristos int UNUSED written = 0; 20754e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 20764e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 20774e98e3e1Schristos 20784e98e3e1Schristos { 20794e98e3e1Schristos SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 20804e98e3e1Schristos * FLD (i_dr) = opval; 2081212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 20824e98e3e1Schristos } 20834e98e3e1Schristos 20844e98e3e1Schristos #undef FLD 20854e98e3e1Schristos } 20864e98e3e1Schristos NEXT (vpc); 20874e98e3e1Schristos 20884e98e3e1Schristos CASE (sem, INSN_SRA3) : /* sra3 $dr,$sr,$simm16 */ 20894e98e3e1Schristos { 20904e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 20914e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 20924e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 20934e98e3e1Schristos int UNUSED written = 0; 20944e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 20954e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 20964e98e3e1Schristos 20974e98e3e1Schristos { 20984e98e3e1Schristos SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 20994e98e3e1Schristos * FLD (i_dr) = opval; 2100212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 21014e98e3e1Schristos } 21024e98e3e1Schristos 21034e98e3e1Schristos #undef FLD 21044e98e3e1Schristos } 21054e98e3e1Schristos NEXT (vpc); 21064e98e3e1Schristos 21074e98e3e1Schristos CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */ 21084e98e3e1Schristos { 21094e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 21104e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 21114e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 21124e98e3e1Schristos int UNUSED written = 0; 21134e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 21144e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 21154e98e3e1Schristos 21164e98e3e1Schristos { 21174e98e3e1Schristos SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5)); 21184e98e3e1Schristos * FLD (i_dr) = opval; 2119212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 21204e98e3e1Schristos } 21214e98e3e1Schristos 21224e98e3e1Schristos #undef FLD 21234e98e3e1Schristos } 21244e98e3e1Schristos NEXT (vpc); 21254e98e3e1Schristos 21264e98e3e1Schristos CASE (sem, INSN_SRL) : /* srl $dr,$sr */ 21274e98e3e1Schristos { 21284e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 21294e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 21304e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 21314e98e3e1Schristos int UNUSED written = 0; 21324e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 21334e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 21344e98e3e1Schristos 21354e98e3e1Schristos { 21364e98e3e1Schristos SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 21374e98e3e1Schristos * FLD (i_dr) = opval; 2138212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 21394e98e3e1Schristos } 21404e98e3e1Schristos 21414e98e3e1Schristos #undef FLD 21424e98e3e1Schristos } 21434e98e3e1Schristos NEXT (vpc); 21444e98e3e1Schristos 21454e98e3e1Schristos CASE (sem, INSN_SRL3) : /* srl3 $dr,$sr,$simm16 */ 21464e98e3e1Schristos { 21474e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 21484e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 21494e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add3.f 21504e98e3e1Schristos int UNUSED written = 0; 21514e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 21524e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 21534e98e3e1Schristos 21544e98e3e1Schristos { 21554e98e3e1Schristos SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 21564e98e3e1Schristos * FLD (i_dr) = opval; 2157212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 21584e98e3e1Schristos } 21594e98e3e1Schristos 21604e98e3e1Schristos #undef FLD 21614e98e3e1Schristos } 21624e98e3e1Schristos NEXT (vpc); 21634e98e3e1Schristos 21644e98e3e1Schristos CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */ 21654e98e3e1Schristos { 21664e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 21674e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 21684e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_slli.f 21694e98e3e1Schristos int UNUSED written = 0; 21704e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 21714e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 21724e98e3e1Schristos 21734e98e3e1Schristos { 21744e98e3e1Schristos SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5)); 21754e98e3e1Schristos * FLD (i_dr) = opval; 2176212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 21774e98e3e1Schristos } 21784e98e3e1Schristos 21794e98e3e1Schristos #undef FLD 21804e98e3e1Schristos } 21814e98e3e1Schristos NEXT (vpc); 21824e98e3e1Schristos 21834e98e3e1Schristos CASE (sem, INSN_ST) : /* st $src1,@$src2 */ 21844e98e3e1Schristos { 21854e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 21864e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 21874e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 21884e98e3e1Schristos int UNUSED written = 0; 21894e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 21904e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 21914e98e3e1Schristos 21924e98e3e1Schristos { 21934e98e3e1Schristos SI opval = * FLD (i_src1); 21944e98e3e1Schristos SETMEMSI (current_cpu, pc, * FLD (i_src2), opval); 2195212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 21964e98e3e1Schristos } 21974e98e3e1Schristos 21984e98e3e1Schristos #undef FLD 21994e98e3e1Schristos } 22004e98e3e1Schristos NEXT (vpc); 22014e98e3e1Schristos 22024e98e3e1Schristos CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */ 22034e98e3e1Schristos { 22044e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 22054e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 22064e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 22074e98e3e1Schristos int UNUSED written = 0; 22084e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 22094e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 22104e98e3e1Schristos 22114e98e3e1Schristos { 22124e98e3e1Schristos SI opval = * FLD (i_src1); 22134e98e3e1Schristos SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2214212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 22154e98e3e1Schristos } 22164e98e3e1Schristos 22174e98e3e1Schristos #undef FLD 22184e98e3e1Schristos } 22194e98e3e1Schristos NEXT (vpc); 22204e98e3e1Schristos 22214e98e3e1Schristos CASE (sem, INSN_STB) : /* stb $src1,@$src2 */ 22224e98e3e1Schristos { 22234e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 22244e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 22254e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22264e98e3e1Schristos int UNUSED written = 0; 22274e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 22284e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 22294e98e3e1Schristos 22304e98e3e1Schristos { 22314e98e3e1Schristos QI opval = * FLD (i_src1); 22324e98e3e1Schristos SETMEMQI (current_cpu, pc, * FLD (i_src2), opval); 2233212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 22344e98e3e1Schristos } 22354e98e3e1Schristos 22364e98e3e1Schristos #undef FLD 22374e98e3e1Schristos } 22384e98e3e1Schristos NEXT (vpc); 22394e98e3e1Schristos 22404e98e3e1Schristos CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */ 22414e98e3e1Schristos { 22424e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 22434e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 22444e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 22454e98e3e1Schristos int UNUSED written = 0; 22464e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 22474e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 22484e98e3e1Schristos 22494e98e3e1Schristos { 22504e98e3e1Schristos QI opval = * FLD (i_src1); 22514e98e3e1Schristos SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2252212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 22534e98e3e1Schristos } 22544e98e3e1Schristos 22554e98e3e1Schristos #undef FLD 22564e98e3e1Schristos } 22574e98e3e1Schristos NEXT (vpc); 22584e98e3e1Schristos 22594e98e3e1Schristos CASE (sem, INSN_STH) : /* sth $src1,@$src2 */ 22604e98e3e1Schristos { 22614e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 22624e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 22634e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 22644e98e3e1Schristos int UNUSED written = 0; 22654e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 22664e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 22674e98e3e1Schristos 22684e98e3e1Schristos { 22694e98e3e1Schristos HI opval = * FLD (i_src1); 22704e98e3e1Schristos SETMEMHI (current_cpu, pc, * FLD (i_src2), opval); 2271212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 22724e98e3e1Schristos } 22734e98e3e1Schristos 22744e98e3e1Schristos #undef FLD 22754e98e3e1Schristos } 22764e98e3e1Schristos NEXT (vpc); 22774e98e3e1Schristos 22784e98e3e1Schristos CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */ 22794e98e3e1Schristos { 22804e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 22814e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 22824e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_d.f 22834e98e3e1Schristos int UNUSED written = 0; 22844e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 22854e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 22864e98e3e1Schristos 22874e98e3e1Schristos { 22884e98e3e1Schristos HI opval = * FLD (i_src1); 22894e98e3e1Schristos SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2290212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 22914e98e3e1Schristos } 22924e98e3e1Schristos 22934e98e3e1Schristos #undef FLD 22944e98e3e1Schristos } 22954e98e3e1Schristos NEXT (vpc); 22964e98e3e1Schristos 22974e98e3e1Schristos CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */ 22984e98e3e1Schristos { 22994e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 23004e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 23014e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23024e98e3e1Schristos int UNUSED written = 0; 23034e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 23044e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 23054e98e3e1Schristos 23064e98e3e1Schristos { 23074e98e3e1Schristos SI tmp_new_src2; 23084e98e3e1Schristos tmp_new_src2 = ADDSI (* FLD (i_src2), 4); 23094e98e3e1Schristos { 23104e98e3e1Schristos SI opval = * FLD (i_src1); 23114e98e3e1Schristos SETMEMSI (current_cpu, pc, tmp_new_src2, opval); 2312212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 23134e98e3e1Schristos } 23144e98e3e1Schristos { 23154e98e3e1Schristos SI opval = tmp_new_src2; 23164e98e3e1Schristos * FLD (i_src2) = opval; 2317212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 23184e98e3e1Schristos } 23194e98e3e1Schristos } 23204e98e3e1Schristos 23214e98e3e1Schristos #undef FLD 23224e98e3e1Schristos } 23234e98e3e1Schristos NEXT (vpc); 23244e98e3e1Schristos 23254e98e3e1Schristos CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */ 23264e98e3e1Schristos { 23274e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 23284e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 23294e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 23304e98e3e1Schristos int UNUSED written = 0; 23314e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 23324e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 23334e98e3e1Schristos 23344e98e3e1Schristos { 23354e98e3e1Schristos SI tmp_new_src2; 23364e98e3e1Schristos tmp_new_src2 = SUBSI (* FLD (i_src2), 4); 23374e98e3e1Schristos { 23384e98e3e1Schristos SI opval = * FLD (i_src1); 23394e98e3e1Schristos SETMEMSI (current_cpu, pc, tmp_new_src2, opval); 2340212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 23414e98e3e1Schristos } 23424e98e3e1Schristos { 23434e98e3e1Schristos SI opval = tmp_new_src2; 23444e98e3e1Schristos * FLD (i_src2) = opval; 2345212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 23464e98e3e1Schristos } 23474e98e3e1Schristos } 23484e98e3e1Schristos 23494e98e3e1Schristos #undef FLD 23504e98e3e1Schristos } 23514e98e3e1Schristos NEXT (vpc); 23524e98e3e1Schristos 23534e98e3e1Schristos CASE (sem, INSN_SUB) : /* sub $dr,$sr */ 23544e98e3e1Schristos { 23554e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 23564e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 23574e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 23584e98e3e1Schristos int UNUSED written = 0; 23594e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 23604e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 23614e98e3e1Schristos 23624e98e3e1Schristos { 23634e98e3e1Schristos SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr)); 23644e98e3e1Schristos * FLD (i_dr) = opval; 2365212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 23664e98e3e1Schristos } 23674e98e3e1Schristos 23684e98e3e1Schristos #undef FLD 23694e98e3e1Schristos } 23704e98e3e1Schristos NEXT (vpc); 23714e98e3e1Schristos 23724e98e3e1Schristos CASE (sem, INSN_SUBV) : /* subv $dr,$sr */ 23734e98e3e1Schristos { 23744e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 23754e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 23764e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 23774e98e3e1Schristos int UNUSED written = 0; 23784e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 23794e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 23804e98e3e1Schristos 23814e98e3e1Schristos { 23824e98e3e1Schristos SI temp0;BI temp1; 23834e98e3e1Schristos temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr)); 23844e98e3e1Schristos temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0); 23854e98e3e1Schristos { 23864e98e3e1Schristos SI opval = temp0; 23874e98e3e1Schristos * FLD (i_dr) = opval; 2388212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 23894e98e3e1Schristos } 23904e98e3e1Schristos { 23914e98e3e1Schristos BI opval = temp1; 23924e98e3e1Schristos CPU (h_cond) = opval; 2393212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 23944e98e3e1Schristos } 23954e98e3e1Schristos } 23964e98e3e1Schristos 23974e98e3e1Schristos #undef FLD 23984e98e3e1Schristos } 23994e98e3e1Schristos NEXT (vpc); 24004e98e3e1Schristos 24014e98e3e1Schristos CASE (sem, INSN_SUBX) : /* subx $dr,$sr */ 24024e98e3e1Schristos { 24034e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 24044e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 24054e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_add.f 24064e98e3e1Schristos int UNUSED written = 0; 24074e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 24084e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 24094e98e3e1Schristos 24104e98e3e1Schristos { 24114e98e3e1Schristos SI temp0;BI temp1; 24124e98e3e1Schristos temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 24134e98e3e1Schristos temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 24144e98e3e1Schristos { 24154e98e3e1Schristos SI opval = temp0; 24164e98e3e1Schristos * FLD (i_dr) = opval; 2417212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 24184e98e3e1Schristos } 24194e98e3e1Schristos { 24204e98e3e1Schristos BI opval = temp1; 24214e98e3e1Schristos CPU (h_cond) = opval; 2422212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 24234e98e3e1Schristos } 24244e98e3e1Schristos } 24254e98e3e1Schristos 24264e98e3e1Schristos #undef FLD 24274e98e3e1Schristos } 24284e98e3e1Schristos NEXT (vpc); 24294e98e3e1Schristos 24304e98e3e1Schristos CASE (sem, INSN_TRAP) : /* trap $uimm4 */ 24314e98e3e1Schristos { 24324e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 24334e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 24344e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_trap.f 24354e98e3e1Schristos int UNUSED written = 0; 24364e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 24374e98e3e1Schristos SEM_BRANCH_INIT 24384e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 24394e98e3e1Schristos 24404e98e3e1Schristos { 24414e98e3e1Schristos { 24424e98e3e1Schristos USI opval = GET_H_CR (((UINT) 6)); 24434e98e3e1Schristos SET_H_CR (((UINT) 14), opval); 2444212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 24454e98e3e1Schristos } 24464e98e3e1Schristos { 24474e98e3e1Schristos USI opval = ADDSI (pc, 4); 24484e98e3e1Schristos SET_H_CR (((UINT) 6), opval); 2449212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 24504e98e3e1Schristos } 24514e98e3e1Schristos { 24524e98e3e1Schristos UQI opval = CPU (h_bpsw); 24534e98e3e1Schristos CPU (h_bbpsw) = opval; 2454212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval); 24554e98e3e1Schristos } 24564e98e3e1Schristos { 24574e98e3e1Schristos UQI opval = GET_H_PSW (); 24584e98e3e1Schristos CPU (h_bpsw) = opval; 2459212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 24604e98e3e1Schristos } 24614e98e3e1Schristos { 24624e98e3e1Schristos UQI opval = ANDQI (GET_H_PSW (), 128); 24634e98e3e1Schristos SET_H_PSW (opval); 2464212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 24654e98e3e1Schristos } 24664e98e3e1Schristos { 24674e98e3e1Schristos SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4)); 24684e98e3e1Schristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 2469212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 24704e98e3e1Schristos } 24714e98e3e1Schristos } 24724e98e3e1Schristos 24734e98e3e1Schristos SEM_BRANCH_FINI (vpc); 24744e98e3e1Schristos #undef FLD 24754e98e3e1Schristos } 24764e98e3e1Schristos NEXT (vpc); 24774e98e3e1Schristos 24784e98e3e1Schristos CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */ 24794e98e3e1Schristos { 24804e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 24814e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 24824e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f 24834e98e3e1Schristos int UNUSED written = 0; 24844e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 24854e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 24864e98e3e1Schristos 24874e98e3e1Schristos { 24884e98e3e1Schristos if (CPU (h_lock)) { 24894e98e3e1Schristos { 24904e98e3e1Schristos SI opval = * FLD (i_src1); 24914e98e3e1Schristos SETMEMSI (current_cpu, pc, * FLD (i_src2), opval); 24924e98e3e1Schristos written |= (1 << 4); 2493212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 24944e98e3e1Schristos } 24954e98e3e1Schristos } 24964e98e3e1Schristos { 24974e98e3e1Schristos BI opval = 0; 24984e98e3e1Schristos CPU (h_lock) = opval; 2499212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 25004e98e3e1Schristos } 25014e98e3e1Schristos } 25024e98e3e1Schristos 25034e98e3e1Schristos abuf->written = written; 25044e98e3e1Schristos #undef FLD 25054e98e3e1Schristos } 25064e98e3e1Schristos NEXT (vpc); 25074e98e3e1Schristos 25084e98e3e1Schristos CASE (sem, INSN_CLRPSW) : /* clrpsw $uimm8 */ 25094e98e3e1Schristos { 25104e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 25114e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 25124e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 25134e98e3e1Schristos int UNUSED written = 0; 25144e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 25154e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 25164e98e3e1Schristos 25174e98e3e1Schristos { 25184e98e3e1Schristos USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280)); 25194e98e3e1Schristos SET_H_CR (((UINT) 0), opval); 2520212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 25214e98e3e1Schristos } 25224e98e3e1Schristos 25234e98e3e1Schristos #undef FLD 25244e98e3e1Schristos } 25254e98e3e1Schristos NEXT (vpc); 25264e98e3e1Schristos 25274e98e3e1Schristos CASE (sem, INSN_SETPSW) : /* setpsw $uimm8 */ 25284e98e3e1Schristos { 25294e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 25304e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 25314e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 25324e98e3e1Schristos int UNUSED written = 0; 25334e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 25344e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 25354e98e3e1Schristos 25364e98e3e1Schristos { 25374e98e3e1Schristos USI opval = FLD (f_uimm8); 25384e98e3e1Schristos SET_H_CR (((UINT) 0), opval); 2539212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 25404e98e3e1Schristos } 25414e98e3e1Schristos 25424e98e3e1Schristos #undef FLD 25434e98e3e1Schristos } 25444e98e3e1Schristos NEXT (vpc); 25454e98e3e1Schristos 25464e98e3e1Schristos CASE (sem, INSN_BSET) : /* bset $uimm3,@($slo16,$sr) */ 25474e98e3e1Schristos { 25484e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 25494e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 25504e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 25514e98e3e1Schristos int UNUSED written = 0; 25524e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 25534e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 25544e98e3e1Schristos 25554e98e3e1Schristos { 25564e98e3e1Schristos QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3)))); 25574e98e3e1Schristos SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval); 2558212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 25594e98e3e1Schristos } 25604e98e3e1Schristos 25614e98e3e1Schristos #undef FLD 25624e98e3e1Schristos } 25634e98e3e1Schristos NEXT (vpc); 25644e98e3e1Schristos 25654e98e3e1Schristos CASE (sem, INSN_BCLR) : /* bclr $uimm3,@($slo16,$sr) */ 25664e98e3e1Schristos { 25674e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 25684e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 25694e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 25704e98e3e1Schristos int UNUSED written = 0; 25714e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 25724e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 25734e98e3e1Schristos 25744e98e3e1Schristos { 25754e98e3e1Schristos QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3))))); 25764e98e3e1Schristos SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval); 2577212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 25784e98e3e1Schristos } 25794e98e3e1Schristos 25804e98e3e1Schristos #undef FLD 25814e98e3e1Schristos } 25824e98e3e1Schristos NEXT (vpc); 25834e98e3e1Schristos 25844e98e3e1Schristos CASE (sem, INSN_BTST) : /* btst $uimm3,$sr */ 25854e98e3e1Schristos { 25864e98e3e1Schristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 25874e98e3e1Schristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 25884e98e3e1Schristos #define FLD(f) abuf->fields.sfmt_bset.f 25894e98e3e1Schristos int UNUSED written = 0; 25904e98e3e1Schristos IADDR UNUSED pc = abuf->addr; 25914e98e3e1Schristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 25924e98e3e1Schristos 25934e98e3e1Schristos { 25944e98e3e1Schristos BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1); 25954e98e3e1Schristos CPU (h_cond) = opval; 2596212397c6Schristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 25974e98e3e1Schristos } 25984e98e3e1Schristos 25994e98e3e1Schristos #undef FLD 26004e98e3e1Schristos } 26014e98e3e1Schristos NEXT (vpc); 26024e98e3e1Schristos 26034e98e3e1Schristos 26044e98e3e1Schristos } 26054e98e3e1Schristos ENDSWITCH (sem) /* End of semantic switch. */ 26064e98e3e1Schristos 26074e98e3e1Schristos /* At this point `vpc' contains the next insn to execute. */ 26084e98e3e1Schristos } 26094e98e3e1Schristos 26104e98e3e1Schristos #undef DEFINE_SWITCH 26114e98e3e1Schristos #endif /* DEFINE_SWITCH */ 2612