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