1a5a4af3bSchristos /* Simulator instruction semantics for m32r2f. 2a5a4af3bSchristos 3a5a4af3bSchristos THIS FILE IS MACHINE GENERATED WITH CGEN. 4a5a4af3bSchristos 5*8b657b07Schristos Copyright 1996-2023 Free Software Foundation, Inc. 6a5a4af3bSchristos 7a5a4af3bSchristos This file is part of the GNU simulators. 8a5a4af3bSchristos 9a5a4af3bSchristos This file is free software; you can redistribute it and/or modify 10a5a4af3bSchristos it under the terms of the GNU General Public License as published by 11a5a4af3bSchristos the Free Software Foundation; either version 3, or (at your option) 12a5a4af3bSchristos any later version. 13a5a4af3bSchristos 14a5a4af3bSchristos It is distributed in the hope that it will be useful, but WITHOUT 15a5a4af3bSchristos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16a5a4af3bSchristos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17a5a4af3bSchristos License for more details. 18a5a4af3bSchristos 19a5a4af3bSchristos You should have received a copy of the GNU General Public License along 20a5a4af3bSchristos with this program; if not, see <http://www.gnu.org/licenses/>. 21a5a4af3bSchristos 22a5a4af3bSchristos */ 23a5a4af3bSchristos 24a5a4af3bSchristos #ifdef DEFINE_LABELS 25a5a4af3bSchristos 26a5a4af3bSchristos /* The labels have the case they have because the enum of insn types 27a5a4af3bSchristos is all uppercase and in the non-stdc case the insn symbol is built 28a5a4af3bSchristos into the enum name. */ 29a5a4af3bSchristos 30a5a4af3bSchristos static struct { 31a5a4af3bSchristos int index; 32a5a4af3bSchristos void *label; 33a5a4af3bSchristos } labels[] = { 34a5a4af3bSchristos { M32R2F_INSN_X_INVALID, && case_sem_INSN_X_INVALID }, 35a5a4af3bSchristos { M32R2F_INSN_X_AFTER, && case_sem_INSN_X_AFTER }, 36a5a4af3bSchristos { M32R2F_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE }, 37a5a4af3bSchristos { M32R2F_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN }, 38a5a4af3bSchristos { M32R2F_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN }, 39a5a4af3bSchristos { M32R2F_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN }, 40a5a4af3bSchristos { M32R2F_INSN_ADD, && case_sem_INSN_ADD }, 41a5a4af3bSchristos { M32R2F_INSN_ADD3, && case_sem_INSN_ADD3 }, 42a5a4af3bSchristos { M32R2F_INSN_AND, && case_sem_INSN_AND }, 43a5a4af3bSchristos { M32R2F_INSN_AND3, && case_sem_INSN_AND3 }, 44a5a4af3bSchristos { M32R2F_INSN_OR, && case_sem_INSN_OR }, 45a5a4af3bSchristos { M32R2F_INSN_OR3, && case_sem_INSN_OR3 }, 46a5a4af3bSchristos { M32R2F_INSN_XOR, && case_sem_INSN_XOR }, 47a5a4af3bSchristos { M32R2F_INSN_XOR3, && case_sem_INSN_XOR3 }, 48a5a4af3bSchristos { M32R2F_INSN_ADDI, && case_sem_INSN_ADDI }, 49a5a4af3bSchristos { M32R2F_INSN_ADDV, && case_sem_INSN_ADDV }, 50a5a4af3bSchristos { M32R2F_INSN_ADDV3, && case_sem_INSN_ADDV3 }, 51a5a4af3bSchristos { M32R2F_INSN_ADDX, && case_sem_INSN_ADDX }, 52a5a4af3bSchristos { M32R2F_INSN_BC8, && case_sem_INSN_BC8 }, 53a5a4af3bSchristos { M32R2F_INSN_BC24, && case_sem_INSN_BC24 }, 54a5a4af3bSchristos { M32R2F_INSN_BEQ, && case_sem_INSN_BEQ }, 55a5a4af3bSchristos { M32R2F_INSN_BEQZ, && case_sem_INSN_BEQZ }, 56a5a4af3bSchristos { M32R2F_INSN_BGEZ, && case_sem_INSN_BGEZ }, 57a5a4af3bSchristos { M32R2F_INSN_BGTZ, && case_sem_INSN_BGTZ }, 58a5a4af3bSchristos { M32R2F_INSN_BLEZ, && case_sem_INSN_BLEZ }, 59a5a4af3bSchristos { M32R2F_INSN_BLTZ, && case_sem_INSN_BLTZ }, 60a5a4af3bSchristos { M32R2F_INSN_BNEZ, && case_sem_INSN_BNEZ }, 61a5a4af3bSchristos { M32R2F_INSN_BL8, && case_sem_INSN_BL8 }, 62a5a4af3bSchristos { M32R2F_INSN_BL24, && case_sem_INSN_BL24 }, 63a5a4af3bSchristos { M32R2F_INSN_BCL8, && case_sem_INSN_BCL8 }, 64a5a4af3bSchristos { M32R2F_INSN_BCL24, && case_sem_INSN_BCL24 }, 65a5a4af3bSchristos { M32R2F_INSN_BNC8, && case_sem_INSN_BNC8 }, 66a5a4af3bSchristos { M32R2F_INSN_BNC24, && case_sem_INSN_BNC24 }, 67a5a4af3bSchristos { M32R2F_INSN_BNE, && case_sem_INSN_BNE }, 68a5a4af3bSchristos { M32R2F_INSN_BRA8, && case_sem_INSN_BRA8 }, 69a5a4af3bSchristos { M32R2F_INSN_BRA24, && case_sem_INSN_BRA24 }, 70a5a4af3bSchristos { M32R2F_INSN_BNCL8, && case_sem_INSN_BNCL8 }, 71a5a4af3bSchristos { M32R2F_INSN_BNCL24, && case_sem_INSN_BNCL24 }, 72a5a4af3bSchristos { M32R2F_INSN_CMP, && case_sem_INSN_CMP }, 73a5a4af3bSchristos { M32R2F_INSN_CMPI, && case_sem_INSN_CMPI }, 74a5a4af3bSchristos { M32R2F_INSN_CMPU, && case_sem_INSN_CMPU }, 75a5a4af3bSchristos { M32R2F_INSN_CMPUI, && case_sem_INSN_CMPUI }, 76a5a4af3bSchristos { M32R2F_INSN_CMPEQ, && case_sem_INSN_CMPEQ }, 77a5a4af3bSchristos { M32R2F_INSN_CMPZ, && case_sem_INSN_CMPZ }, 78a5a4af3bSchristos { M32R2F_INSN_DIV, && case_sem_INSN_DIV }, 79a5a4af3bSchristos { M32R2F_INSN_DIVU, && case_sem_INSN_DIVU }, 80a5a4af3bSchristos { M32R2F_INSN_REM, && case_sem_INSN_REM }, 81a5a4af3bSchristos { M32R2F_INSN_REMU, && case_sem_INSN_REMU }, 82a5a4af3bSchristos { M32R2F_INSN_REMH, && case_sem_INSN_REMH }, 83a5a4af3bSchristos { M32R2F_INSN_REMUH, && case_sem_INSN_REMUH }, 84a5a4af3bSchristos { M32R2F_INSN_REMB, && case_sem_INSN_REMB }, 85a5a4af3bSchristos { M32R2F_INSN_REMUB, && case_sem_INSN_REMUB }, 86a5a4af3bSchristos { M32R2F_INSN_DIVUH, && case_sem_INSN_DIVUH }, 87a5a4af3bSchristos { M32R2F_INSN_DIVB, && case_sem_INSN_DIVB }, 88a5a4af3bSchristos { M32R2F_INSN_DIVUB, && case_sem_INSN_DIVUB }, 89a5a4af3bSchristos { M32R2F_INSN_DIVH, && case_sem_INSN_DIVH }, 90a5a4af3bSchristos { M32R2F_INSN_JC, && case_sem_INSN_JC }, 91a5a4af3bSchristos { M32R2F_INSN_JNC, && case_sem_INSN_JNC }, 92a5a4af3bSchristos { M32R2F_INSN_JL, && case_sem_INSN_JL }, 93a5a4af3bSchristos { M32R2F_INSN_JMP, && case_sem_INSN_JMP }, 94a5a4af3bSchristos { M32R2F_INSN_LD, && case_sem_INSN_LD }, 95a5a4af3bSchristos { M32R2F_INSN_LD_D, && case_sem_INSN_LD_D }, 96a5a4af3bSchristos { M32R2F_INSN_LDB, && case_sem_INSN_LDB }, 97a5a4af3bSchristos { M32R2F_INSN_LDB_D, && case_sem_INSN_LDB_D }, 98a5a4af3bSchristos { M32R2F_INSN_LDH, && case_sem_INSN_LDH }, 99a5a4af3bSchristos { M32R2F_INSN_LDH_D, && case_sem_INSN_LDH_D }, 100a5a4af3bSchristos { M32R2F_INSN_LDUB, && case_sem_INSN_LDUB }, 101a5a4af3bSchristos { M32R2F_INSN_LDUB_D, && case_sem_INSN_LDUB_D }, 102a5a4af3bSchristos { M32R2F_INSN_LDUH, && case_sem_INSN_LDUH }, 103a5a4af3bSchristos { M32R2F_INSN_LDUH_D, && case_sem_INSN_LDUH_D }, 104a5a4af3bSchristos { M32R2F_INSN_LD_PLUS, && case_sem_INSN_LD_PLUS }, 105a5a4af3bSchristos { M32R2F_INSN_LD24, && case_sem_INSN_LD24 }, 106a5a4af3bSchristos { M32R2F_INSN_LDI8, && case_sem_INSN_LDI8 }, 107a5a4af3bSchristos { M32R2F_INSN_LDI16, && case_sem_INSN_LDI16 }, 108a5a4af3bSchristos { M32R2F_INSN_LOCK, && case_sem_INSN_LOCK }, 109a5a4af3bSchristos { M32R2F_INSN_MACHI_A, && case_sem_INSN_MACHI_A }, 110a5a4af3bSchristos { M32R2F_INSN_MACLO_A, && case_sem_INSN_MACLO_A }, 111a5a4af3bSchristos { M32R2F_INSN_MACWHI_A, && case_sem_INSN_MACWHI_A }, 112a5a4af3bSchristos { M32R2F_INSN_MACWLO_A, && case_sem_INSN_MACWLO_A }, 113a5a4af3bSchristos { M32R2F_INSN_MUL, && case_sem_INSN_MUL }, 114a5a4af3bSchristos { M32R2F_INSN_MULHI_A, && case_sem_INSN_MULHI_A }, 115a5a4af3bSchristos { M32R2F_INSN_MULLO_A, && case_sem_INSN_MULLO_A }, 116a5a4af3bSchristos { M32R2F_INSN_MULWHI_A, && case_sem_INSN_MULWHI_A }, 117a5a4af3bSchristos { M32R2F_INSN_MULWLO_A, && case_sem_INSN_MULWLO_A }, 118a5a4af3bSchristos { M32R2F_INSN_MV, && case_sem_INSN_MV }, 119a5a4af3bSchristos { M32R2F_INSN_MVFACHI_A, && case_sem_INSN_MVFACHI_A }, 120a5a4af3bSchristos { M32R2F_INSN_MVFACLO_A, && case_sem_INSN_MVFACLO_A }, 121a5a4af3bSchristos { M32R2F_INSN_MVFACMI_A, && case_sem_INSN_MVFACMI_A }, 122a5a4af3bSchristos { M32R2F_INSN_MVFC, && case_sem_INSN_MVFC }, 123a5a4af3bSchristos { M32R2F_INSN_MVTACHI_A, && case_sem_INSN_MVTACHI_A }, 124a5a4af3bSchristos { M32R2F_INSN_MVTACLO_A, && case_sem_INSN_MVTACLO_A }, 125a5a4af3bSchristos { M32R2F_INSN_MVTC, && case_sem_INSN_MVTC }, 126a5a4af3bSchristos { M32R2F_INSN_NEG, && case_sem_INSN_NEG }, 127a5a4af3bSchristos { M32R2F_INSN_NOP, && case_sem_INSN_NOP }, 128a5a4af3bSchristos { M32R2F_INSN_NOT, && case_sem_INSN_NOT }, 129a5a4af3bSchristos { M32R2F_INSN_RAC_DSI, && case_sem_INSN_RAC_DSI }, 130a5a4af3bSchristos { M32R2F_INSN_RACH_DSI, && case_sem_INSN_RACH_DSI }, 131a5a4af3bSchristos { M32R2F_INSN_RTE, && case_sem_INSN_RTE }, 132a5a4af3bSchristos { M32R2F_INSN_SETH, && case_sem_INSN_SETH }, 133a5a4af3bSchristos { M32R2F_INSN_SLL, && case_sem_INSN_SLL }, 134a5a4af3bSchristos { M32R2F_INSN_SLL3, && case_sem_INSN_SLL3 }, 135a5a4af3bSchristos { M32R2F_INSN_SLLI, && case_sem_INSN_SLLI }, 136a5a4af3bSchristos { M32R2F_INSN_SRA, && case_sem_INSN_SRA }, 137a5a4af3bSchristos { M32R2F_INSN_SRA3, && case_sem_INSN_SRA3 }, 138a5a4af3bSchristos { M32R2F_INSN_SRAI, && case_sem_INSN_SRAI }, 139a5a4af3bSchristos { M32R2F_INSN_SRL, && case_sem_INSN_SRL }, 140a5a4af3bSchristos { M32R2F_INSN_SRL3, && case_sem_INSN_SRL3 }, 141a5a4af3bSchristos { M32R2F_INSN_SRLI, && case_sem_INSN_SRLI }, 142a5a4af3bSchristos { M32R2F_INSN_ST, && case_sem_INSN_ST }, 143a5a4af3bSchristos { M32R2F_INSN_ST_D, && case_sem_INSN_ST_D }, 144a5a4af3bSchristos { M32R2F_INSN_STB, && case_sem_INSN_STB }, 145a5a4af3bSchristos { M32R2F_INSN_STB_D, && case_sem_INSN_STB_D }, 146a5a4af3bSchristos { M32R2F_INSN_STH, && case_sem_INSN_STH }, 147a5a4af3bSchristos { M32R2F_INSN_STH_D, && case_sem_INSN_STH_D }, 148a5a4af3bSchristos { M32R2F_INSN_ST_PLUS, && case_sem_INSN_ST_PLUS }, 149a5a4af3bSchristos { M32R2F_INSN_STH_PLUS, && case_sem_INSN_STH_PLUS }, 150a5a4af3bSchristos { M32R2F_INSN_STB_PLUS, && case_sem_INSN_STB_PLUS }, 151a5a4af3bSchristos { M32R2F_INSN_ST_MINUS, && case_sem_INSN_ST_MINUS }, 152a5a4af3bSchristos { M32R2F_INSN_SUB, && case_sem_INSN_SUB }, 153a5a4af3bSchristos { M32R2F_INSN_SUBV, && case_sem_INSN_SUBV }, 154a5a4af3bSchristos { M32R2F_INSN_SUBX, && case_sem_INSN_SUBX }, 155a5a4af3bSchristos { M32R2F_INSN_TRAP, && case_sem_INSN_TRAP }, 156a5a4af3bSchristos { M32R2F_INSN_UNLOCK, && case_sem_INSN_UNLOCK }, 157a5a4af3bSchristos { M32R2F_INSN_SATB, && case_sem_INSN_SATB }, 158a5a4af3bSchristos { M32R2F_INSN_SATH, && case_sem_INSN_SATH }, 159a5a4af3bSchristos { M32R2F_INSN_SAT, && case_sem_INSN_SAT }, 160a5a4af3bSchristos { M32R2F_INSN_PCMPBZ, && case_sem_INSN_PCMPBZ }, 161a5a4af3bSchristos { M32R2F_INSN_SADD, && case_sem_INSN_SADD }, 162a5a4af3bSchristos { M32R2F_INSN_MACWU1, && case_sem_INSN_MACWU1 }, 163a5a4af3bSchristos { M32R2F_INSN_MSBLO, && case_sem_INSN_MSBLO }, 164a5a4af3bSchristos { M32R2F_INSN_MULWU1, && case_sem_INSN_MULWU1 }, 165a5a4af3bSchristos { M32R2F_INSN_MACLH1, && case_sem_INSN_MACLH1 }, 166a5a4af3bSchristos { M32R2F_INSN_SC, && case_sem_INSN_SC }, 167a5a4af3bSchristos { M32R2F_INSN_SNC, && case_sem_INSN_SNC }, 168a5a4af3bSchristos { M32R2F_INSN_CLRPSW, && case_sem_INSN_CLRPSW }, 169a5a4af3bSchristos { M32R2F_INSN_SETPSW, && case_sem_INSN_SETPSW }, 170a5a4af3bSchristos { M32R2F_INSN_BSET, && case_sem_INSN_BSET }, 171a5a4af3bSchristos { M32R2F_INSN_BCLR, && case_sem_INSN_BCLR }, 172a5a4af3bSchristos { M32R2F_INSN_BTST, && case_sem_INSN_BTST }, 173a5a4af3bSchristos { M32R2F_INSN_PAR_ADD, && case_sem_INSN_PAR_ADD }, 174a5a4af3bSchristos { M32R2F_INSN_WRITE_ADD, && case_sem_INSN_WRITE_ADD }, 175a5a4af3bSchristos { M32R2F_INSN_PAR_AND, && case_sem_INSN_PAR_AND }, 176a5a4af3bSchristos { M32R2F_INSN_WRITE_AND, && case_sem_INSN_WRITE_AND }, 177a5a4af3bSchristos { M32R2F_INSN_PAR_OR, && case_sem_INSN_PAR_OR }, 178a5a4af3bSchristos { M32R2F_INSN_WRITE_OR, && case_sem_INSN_WRITE_OR }, 179a5a4af3bSchristos { M32R2F_INSN_PAR_XOR, && case_sem_INSN_PAR_XOR }, 180a5a4af3bSchristos { M32R2F_INSN_WRITE_XOR, && case_sem_INSN_WRITE_XOR }, 181a5a4af3bSchristos { M32R2F_INSN_PAR_ADDI, && case_sem_INSN_PAR_ADDI }, 182a5a4af3bSchristos { M32R2F_INSN_WRITE_ADDI, && case_sem_INSN_WRITE_ADDI }, 183a5a4af3bSchristos { M32R2F_INSN_PAR_ADDV, && case_sem_INSN_PAR_ADDV }, 184a5a4af3bSchristos { M32R2F_INSN_WRITE_ADDV, && case_sem_INSN_WRITE_ADDV }, 185a5a4af3bSchristos { M32R2F_INSN_PAR_ADDX, && case_sem_INSN_PAR_ADDX }, 186a5a4af3bSchristos { M32R2F_INSN_WRITE_ADDX, && case_sem_INSN_WRITE_ADDX }, 187a5a4af3bSchristos { M32R2F_INSN_PAR_BC8, && case_sem_INSN_PAR_BC8 }, 188a5a4af3bSchristos { M32R2F_INSN_WRITE_BC8, && case_sem_INSN_WRITE_BC8 }, 189a5a4af3bSchristos { M32R2F_INSN_PAR_BL8, && case_sem_INSN_PAR_BL8 }, 190a5a4af3bSchristos { M32R2F_INSN_WRITE_BL8, && case_sem_INSN_WRITE_BL8 }, 191a5a4af3bSchristos { M32R2F_INSN_PAR_BCL8, && case_sem_INSN_PAR_BCL8 }, 192a5a4af3bSchristos { M32R2F_INSN_WRITE_BCL8, && case_sem_INSN_WRITE_BCL8 }, 193a5a4af3bSchristos { M32R2F_INSN_PAR_BNC8, && case_sem_INSN_PAR_BNC8 }, 194a5a4af3bSchristos { M32R2F_INSN_WRITE_BNC8, && case_sem_INSN_WRITE_BNC8 }, 195a5a4af3bSchristos { M32R2F_INSN_PAR_BRA8, && case_sem_INSN_PAR_BRA8 }, 196a5a4af3bSchristos { M32R2F_INSN_WRITE_BRA8, && case_sem_INSN_WRITE_BRA8 }, 197a5a4af3bSchristos { M32R2F_INSN_PAR_BNCL8, && case_sem_INSN_PAR_BNCL8 }, 198a5a4af3bSchristos { M32R2F_INSN_WRITE_BNCL8, && case_sem_INSN_WRITE_BNCL8 }, 199a5a4af3bSchristos { M32R2F_INSN_PAR_CMP, && case_sem_INSN_PAR_CMP }, 200a5a4af3bSchristos { M32R2F_INSN_WRITE_CMP, && case_sem_INSN_WRITE_CMP }, 201a5a4af3bSchristos { M32R2F_INSN_PAR_CMPU, && case_sem_INSN_PAR_CMPU }, 202a5a4af3bSchristos { M32R2F_INSN_WRITE_CMPU, && case_sem_INSN_WRITE_CMPU }, 203a5a4af3bSchristos { M32R2F_INSN_PAR_CMPEQ, && case_sem_INSN_PAR_CMPEQ }, 204a5a4af3bSchristos { M32R2F_INSN_WRITE_CMPEQ, && case_sem_INSN_WRITE_CMPEQ }, 205a5a4af3bSchristos { M32R2F_INSN_PAR_CMPZ, && case_sem_INSN_PAR_CMPZ }, 206a5a4af3bSchristos { M32R2F_INSN_WRITE_CMPZ, && case_sem_INSN_WRITE_CMPZ }, 207a5a4af3bSchristos { M32R2F_INSN_PAR_JC, && case_sem_INSN_PAR_JC }, 208a5a4af3bSchristos { M32R2F_INSN_WRITE_JC, && case_sem_INSN_WRITE_JC }, 209a5a4af3bSchristos { M32R2F_INSN_PAR_JNC, && case_sem_INSN_PAR_JNC }, 210a5a4af3bSchristos { M32R2F_INSN_WRITE_JNC, && case_sem_INSN_WRITE_JNC }, 211a5a4af3bSchristos { M32R2F_INSN_PAR_JL, && case_sem_INSN_PAR_JL }, 212a5a4af3bSchristos { M32R2F_INSN_WRITE_JL, && case_sem_INSN_WRITE_JL }, 213a5a4af3bSchristos { M32R2F_INSN_PAR_JMP, && case_sem_INSN_PAR_JMP }, 214a5a4af3bSchristos { M32R2F_INSN_WRITE_JMP, && case_sem_INSN_WRITE_JMP }, 215a5a4af3bSchristos { M32R2F_INSN_PAR_LD, && case_sem_INSN_PAR_LD }, 216a5a4af3bSchristos { M32R2F_INSN_WRITE_LD, && case_sem_INSN_WRITE_LD }, 217a5a4af3bSchristos { M32R2F_INSN_PAR_LDB, && case_sem_INSN_PAR_LDB }, 218a5a4af3bSchristos { M32R2F_INSN_WRITE_LDB, && case_sem_INSN_WRITE_LDB }, 219a5a4af3bSchristos { M32R2F_INSN_PAR_LDH, && case_sem_INSN_PAR_LDH }, 220a5a4af3bSchristos { M32R2F_INSN_WRITE_LDH, && case_sem_INSN_WRITE_LDH }, 221a5a4af3bSchristos { M32R2F_INSN_PAR_LDUB, && case_sem_INSN_PAR_LDUB }, 222a5a4af3bSchristos { M32R2F_INSN_WRITE_LDUB, && case_sem_INSN_WRITE_LDUB }, 223a5a4af3bSchristos { M32R2F_INSN_PAR_LDUH, && case_sem_INSN_PAR_LDUH }, 224a5a4af3bSchristos { M32R2F_INSN_WRITE_LDUH, && case_sem_INSN_WRITE_LDUH }, 225a5a4af3bSchristos { M32R2F_INSN_PAR_LD_PLUS, && case_sem_INSN_PAR_LD_PLUS }, 226a5a4af3bSchristos { M32R2F_INSN_WRITE_LD_PLUS, && case_sem_INSN_WRITE_LD_PLUS }, 227a5a4af3bSchristos { M32R2F_INSN_PAR_LDI8, && case_sem_INSN_PAR_LDI8 }, 228a5a4af3bSchristos { M32R2F_INSN_WRITE_LDI8, && case_sem_INSN_WRITE_LDI8 }, 229a5a4af3bSchristos { M32R2F_INSN_PAR_LOCK, && case_sem_INSN_PAR_LOCK }, 230a5a4af3bSchristos { M32R2F_INSN_WRITE_LOCK, && case_sem_INSN_WRITE_LOCK }, 231a5a4af3bSchristos { M32R2F_INSN_PAR_MACHI_A, && case_sem_INSN_PAR_MACHI_A }, 232a5a4af3bSchristos { M32R2F_INSN_WRITE_MACHI_A, && case_sem_INSN_WRITE_MACHI_A }, 233a5a4af3bSchristos { M32R2F_INSN_PAR_MACLO_A, && case_sem_INSN_PAR_MACLO_A }, 234a5a4af3bSchristos { M32R2F_INSN_WRITE_MACLO_A, && case_sem_INSN_WRITE_MACLO_A }, 235a5a4af3bSchristos { M32R2F_INSN_PAR_MACWHI_A, && case_sem_INSN_PAR_MACWHI_A }, 236a5a4af3bSchristos { M32R2F_INSN_WRITE_MACWHI_A, && case_sem_INSN_WRITE_MACWHI_A }, 237a5a4af3bSchristos { M32R2F_INSN_PAR_MACWLO_A, && case_sem_INSN_PAR_MACWLO_A }, 238a5a4af3bSchristos { M32R2F_INSN_WRITE_MACWLO_A, && case_sem_INSN_WRITE_MACWLO_A }, 239a5a4af3bSchristos { M32R2F_INSN_PAR_MUL, && case_sem_INSN_PAR_MUL }, 240a5a4af3bSchristos { M32R2F_INSN_WRITE_MUL, && case_sem_INSN_WRITE_MUL }, 241a5a4af3bSchristos { M32R2F_INSN_PAR_MULHI_A, && case_sem_INSN_PAR_MULHI_A }, 242a5a4af3bSchristos { M32R2F_INSN_WRITE_MULHI_A, && case_sem_INSN_WRITE_MULHI_A }, 243a5a4af3bSchristos { M32R2F_INSN_PAR_MULLO_A, && case_sem_INSN_PAR_MULLO_A }, 244a5a4af3bSchristos { M32R2F_INSN_WRITE_MULLO_A, && case_sem_INSN_WRITE_MULLO_A }, 245a5a4af3bSchristos { M32R2F_INSN_PAR_MULWHI_A, && case_sem_INSN_PAR_MULWHI_A }, 246a5a4af3bSchristos { M32R2F_INSN_WRITE_MULWHI_A, && case_sem_INSN_WRITE_MULWHI_A }, 247a5a4af3bSchristos { M32R2F_INSN_PAR_MULWLO_A, && case_sem_INSN_PAR_MULWLO_A }, 248a5a4af3bSchristos { M32R2F_INSN_WRITE_MULWLO_A, && case_sem_INSN_WRITE_MULWLO_A }, 249a5a4af3bSchristos { M32R2F_INSN_PAR_MV, && case_sem_INSN_PAR_MV }, 250a5a4af3bSchristos { M32R2F_INSN_WRITE_MV, && case_sem_INSN_WRITE_MV }, 251a5a4af3bSchristos { M32R2F_INSN_PAR_MVFACHI_A, && case_sem_INSN_PAR_MVFACHI_A }, 252a5a4af3bSchristos { M32R2F_INSN_WRITE_MVFACHI_A, && case_sem_INSN_WRITE_MVFACHI_A }, 253a5a4af3bSchristos { M32R2F_INSN_PAR_MVFACLO_A, && case_sem_INSN_PAR_MVFACLO_A }, 254a5a4af3bSchristos { M32R2F_INSN_WRITE_MVFACLO_A, && case_sem_INSN_WRITE_MVFACLO_A }, 255a5a4af3bSchristos { M32R2F_INSN_PAR_MVFACMI_A, && case_sem_INSN_PAR_MVFACMI_A }, 256a5a4af3bSchristos { M32R2F_INSN_WRITE_MVFACMI_A, && case_sem_INSN_WRITE_MVFACMI_A }, 257a5a4af3bSchristos { M32R2F_INSN_PAR_MVFC, && case_sem_INSN_PAR_MVFC }, 258a5a4af3bSchristos { M32R2F_INSN_WRITE_MVFC, && case_sem_INSN_WRITE_MVFC }, 259a5a4af3bSchristos { M32R2F_INSN_PAR_MVTACHI_A, && case_sem_INSN_PAR_MVTACHI_A }, 260a5a4af3bSchristos { M32R2F_INSN_WRITE_MVTACHI_A, && case_sem_INSN_WRITE_MVTACHI_A }, 261a5a4af3bSchristos { M32R2F_INSN_PAR_MVTACLO_A, && case_sem_INSN_PAR_MVTACLO_A }, 262a5a4af3bSchristos { M32R2F_INSN_WRITE_MVTACLO_A, && case_sem_INSN_WRITE_MVTACLO_A }, 263a5a4af3bSchristos { M32R2F_INSN_PAR_MVTC, && case_sem_INSN_PAR_MVTC }, 264a5a4af3bSchristos { M32R2F_INSN_WRITE_MVTC, && case_sem_INSN_WRITE_MVTC }, 265a5a4af3bSchristos { M32R2F_INSN_PAR_NEG, && case_sem_INSN_PAR_NEG }, 266a5a4af3bSchristos { M32R2F_INSN_WRITE_NEG, && case_sem_INSN_WRITE_NEG }, 267a5a4af3bSchristos { M32R2F_INSN_PAR_NOP, && case_sem_INSN_PAR_NOP }, 268a5a4af3bSchristos { M32R2F_INSN_WRITE_NOP, && case_sem_INSN_WRITE_NOP }, 269a5a4af3bSchristos { M32R2F_INSN_PAR_NOT, && case_sem_INSN_PAR_NOT }, 270a5a4af3bSchristos { M32R2F_INSN_WRITE_NOT, && case_sem_INSN_WRITE_NOT }, 271a5a4af3bSchristos { M32R2F_INSN_PAR_RAC_DSI, && case_sem_INSN_PAR_RAC_DSI }, 272a5a4af3bSchristos { M32R2F_INSN_WRITE_RAC_DSI, && case_sem_INSN_WRITE_RAC_DSI }, 273a5a4af3bSchristos { M32R2F_INSN_PAR_RACH_DSI, && case_sem_INSN_PAR_RACH_DSI }, 274a5a4af3bSchristos { M32R2F_INSN_WRITE_RACH_DSI, && case_sem_INSN_WRITE_RACH_DSI }, 275a5a4af3bSchristos { M32R2F_INSN_PAR_RTE, && case_sem_INSN_PAR_RTE }, 276a5a4af3bSchristos { M32R2F_INSN_WRITE_RTE, && case_sem_INSN_WRITE_RTE }, 277a5a4af3bSchristos { M32R2F_INSN_PAR_SLL, && case_sem_INSN_PAR_SLL }, 278a5a4af3bSchristos { M32R2F_INSN_WRITE_SLL, && case_sem_INSN_WRITE_SLL }, 279a5a4af3bSchristos { M32R2F_INSN_PAR_SLLI, && case_sem_INSN_PAR_SLLI }, 280a5a4af3bSchristos { M32R2F_INSN_WRITE_SLLI, && case_sem_INSN_WRITE_SLLI }, 281a5a4af3bSchristos { M32R2F_INSN_PAR_SRA, && case_sem_INSN_PAR_SRA }, 282a5a4af3bSchristos { M32R2F_INSN_WRITE_SRA, && case_sem_INSN_WRITE_SRA }, 283a5a4af3bSchristos { M32R2F_INSN_PAR_SRAI, && case_sem_INSN_PAR_SRAI }, 284a5a4af3bSchristos { M32R2F_INSN_WRITE_SRAI, && case_sem_INSN_WRITE_SRAI }, 285a5a4af3bSchristos { M32R2F_INSN_PAR_SRL, && case_sem_INSN_PAR_SRL }, 286a5a4af3bSchristos { M32R2F_INSN_WRITE_SRL, && case_sem_INSN_WRITE_SRL }, 287a5a4af3bSchristos { M32R2F_INSN_PAR_SRLI, && case_sem_INSN_PAR_SRLI }, 288a5a4af3bSchristos { M32R2F_INSN_WRITE_SRLI, && case_sem_INSN_WRITE_SRLI }, 289a5a4af3bSchristos { M32R2F_INSN_PAR_ST, && case_sem_INSN_PAR_ST }, 290a5a4af3bSchristos { M32R2F_INSN_WRITE_ST, && case_sem_INSN_WRITE_ST }, 291a5a4af3bSchristos { M32R2F_INSN_PAR_STB, && case_sem_INSN_PAR_STB }, 292a5a4af3bSchristos { M32R2F_INSN_WRITE_STB, && case_sem_INSN_WRITE_STB }, 293a5a4af3bSchristos { M32R2F_INSN_PAR_STH, && case_sem_INSN_PAR_STH }, 294a5a4af3bSchristos { M32R2F_INSN_WRITE_STH, && case_sem_INSN_WRITE_STH }, 295a5a4af3bSchristos { M32R2F_INSN_PAR_ST_PLUS, && case_sem_INSN_PAR_ST_PLUS }, 296a5a4af3bSchristos { M32R2F_INSN_WRITE_ST_PLUS, && case_sem_INSN_WRITE_ST_PLUS }, 297a5a4af3bSchristos { M32R2F_INSN_PAR_STH_PLUS, && case_sem_INSN_PAR_STH_PLUS }, 298a5a4af3bSchristos { M32R2F_INSN_WRITE_STH_PLUS, && case_sem_INSN_WRITE_STH_PLUS }, 299a5a4af3bSchristos { M32R2F_INSN_PAR_STB_PLUS, && case_sem_INSN_PAR_STB_PLUS }, 300a5a4af3bSchristos { M32R2F_INSN_WRITE_STB_PLUS, && case_sem_INSN_WRITE_STB_PLUS }, 301a5a4af3bSchristos { M32R2F_INSN_PAR_ST_MINUS, && case_sem_INSN_PAR_ST_MINUS }, 302a5a4af3bSchristos { M32R2F_INSN_WRITE_ST_MINUS, && case_sem_INSN_WRITE_ST_MINUS }, 303a5a4af3bSchristos { M32R2F_INSN_PAR_SUB, && case_sem_INSN_PAR_SUB }, 304a5a4af3bSchristos { M32R2F_INSN_WRITE_SUB, && case_sem_INSN_WRITE_SUB }, 305a5a4af3bSchristos { M32R2F_INSN_PAR_SUBV, && case_sem_INSN_PAR_SUBV }, 306a5a4af3bSchristos { M32R2F_INSN_WRITE_SUBV, && case_sem_INSN_WRITE_SUBV }, 307a5a4af3bSchristos { M32R2F_INSN_PAR_SUBX, && case_sem_INSN_PAR_SUBX }, 308a5a4af3bSchristos { M32R2F_INSN_WRITE_SUBX, && case_sem_INSN_WRITE_SUBX }, 309a5a4af3bSchristos { M32R2F_INSN_PAR_TRAP, && case_sem_INSN_PAR_TRAP }, 310a5a4af3bSchristos { M32R2F_INSN_WRITE_TRAP, && case_sem_INSN_WRITE_TRAP }, 311a5a4af3bSchristos { M32R2F_INSN_PAR_UNLOCK, && case_sem_INSN_PAR_UNLOCK }, 312a5a4af3bSchristos { M32R2F_INSN_WRITE_UNLOCK, && case_sem_INSN_WRITE_UNLOCK }, 313a5a4af3bSchristos { M32R2F_INSN_PAR_PCMPBZ, && case_sem_INSN_PAR_PCMPBZ }, 314a5a4af3bSchristos { M32R2F_INSN_WRITE_PCMPBZ, && case_sem_INSN_WRITE_PCMPBZ }, 315a5a4af3bSchristos { M32R2F_INSN_PAR_SADD, && case_sem_INSN_PAR_SADD }, 316a5a4af3bSchristos { M32R2F_INSN_WRITE_SADD, && case_sem_INSN_WRITE_SADD }, 317a5a4af3bSchristos { M32R2F_INSN_PAR_MACWU1, && case_sem_INSN_PAR_MACWU1 }, 318a5a4af3bSchristos { M32R2F_INSN_WRITE_MACWU1, && case_sem_INSN_WRITE_MACWU1 }, 319a5a4af3bSchristos { M32R2F_INSN_PAR_MSBLO, && case_sem_INSN_PAR_MSBLO }, 320a5a4af3bSchristos { M32R2F_INSN_WRITE_MSBLO, && case_sem_INSN_WRITE_MSBLO }, 321a5a4af3bSchristos { M32R2F_INSN_PAR_MULWU1, && case_sem_INSN_PAR_MULWU1 }, 322a5a4af3bSchristos { M32R2F_INSN_WRITE_MULWU1, && case_sem_INSN_WRITE_MULWU1 }, 323a5a4af3bSchristos { M32R2F_INSN_PAR_MACLH1, && case_sem_INSN_PAR_MACLH1 }, 324a5a4af3bSchristos { M32R2F_INSN_WRITE_MACLH1, && case_sem_INSN_WRITE_MACLH1 }, 325a5a4af3bSchristos { M32R2F_INSN_PAR_SC, && case_sem_INSN_PAR_SC }, 326a5a4af3bSchristos { M32R2F_INSN_WRITE_SC, && case_sem_INSN_WRITE_SC }, 327a5a4af3bSchristos { M32R2F_INSN_PAR_SNC, && case_sem_INSN_PAR_SNC }, 328a5a4af3bSchristos { M32R2F_INSN_WRITE_SNC, && case_sem_INSN_WRITE_SNC }, 329a5a4af3bSchristos { M32R2F_INSN_PAR_CLRPSW, && case_sem_INSN_PAR_CLRPSW }, 330a5a4af3bSchristos { M32R2F_INSN_WRITE_CLRPSW, && case_sem_INSN_WRITE_CLRPSW }, 331a5a4af3bSchristos { M32R2F_INSN_PAR_SETPSW, && case_sem_INSN_PAR_SETPSW }, 332a5a4af3bSchristos { M32R2F_INSN_WRITE_SETPSW, && case_sem_INSN_WRITE_SETPSW }, 333a5a4af3bSchristos { M32R2F_INSN_PAR_BTST, && case_sem_INSN_PAR_BTST }, 334a5a4af3bSchristos { M32R2F_INSN_WRITE_BTST, && case_sem_INSN_WRITE_BTST }, 335a5a4af3bSchristos { 0, 0 } 336a5a4af3bSchristos }; 337a5a4af3bSchristos int i; 338a5a4af3bSchristos 339a5a4af3bSchristos for (i = 0; labels[i].label != 0; ++i) 340a5a4af3bSchristos { 341a5a4af3bSchristos #if FAST_P 342a5a4af3bSchristos CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label; 343a5a4af3bSchristos #else 344a5a4af3bSchristos CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label; 345a5a4af3bSchristos #endif 346a5a4af3bSchristos } 347a5a4af3bSchristos 348a5a4af3bSchristos #undef DEFINE_LABELS 349a5a4af3bSchristos #endif /* DEFINE_LABELS */ 350a5a4af3bSchristos 351a5a4af3bSchristos #ifdef DEFINE_SWITCH 352a5a4af3bSchristos 353a5a4af3bSchristos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn 354a5a4af3bSchristos off frills like tracing and profiling. */ 355a5a4af3bSchristos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something 356a5a4af3bSchristos that can cause it to be optimized out. Another way would be to emit 357a5a4af3bSchristos special handlers into the instruction "stream". */ 358a5a4af3bSchristos 359a5a4af3bSchristos #if FAST_P 360a5a4af3bSchristos #undef CGEN_TRACE_RESULT 361a5a4af3bSchristos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) 362a5a4af3bSchristos #endif 363a5a4af3bSchristos 364a5a4af3bSchristos #undef GET_ATTR 365a5a4af3bSchristos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 366a5a4af3bSchristos 367a5a4af3bSchristos { 368a5a4af3bSchristos 369a5a4af3bSchristos #if WITH_SCACHE_PBB 370a5a4af3bSchristos 371a5a4af3bSchristos /* Branch to next handler without going around main loop. */ 372a5a4af3bSchristos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case 373a5a4af3bSchristos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case) 374a5a4af3bSchristos 375a5a4af3bSchristos #else /* ! WITH_SCACHE_PBB */ 376a5a4af3bSchristos 377a5a4af3bSchristos #define NEXT(vpc) BREAK (sem) 378a5a4af3bSchristos #ifdef __GNUC__ 379a5a4af3bSchristos #if FAST_P 380a5a4af3bSchristos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab) 381a5a4af3bSchristos #else 382a5a4af3bSchristos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab) 383a5a4af3bSchristos #endif 384a5a4af3bSchristos #else 385a5a4af3bSchristos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num) 386a5a4af3bSchristos #endif 387a5a4af3bSchristos 388a5a4af3bSchristos #endif /* ! WITH_SCACHE_PBB */ 389a5a4af3bSchristos 390a5a4af3bSchristos { 391a5a4af3bSchristos 392a5a4af3bSchristos CASE (sem, INSN_X_INVALID) : /* --invalid-- */ 393a5a4af3bSchristos { 394a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 395a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 396a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 397a5a4af3bSchristos int UNUSED written = 0; 398a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 399a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 400a5a4af3bSchristos 401a5a4af3bSchristos { 402a5a4af3bSchristos /* Update the recorded pc in the cpu state struct. 403a5a4af3bSchristos Only necessary for WITH_SCACHE case, but to avoid the 404a5a4af3bSchristos conditional compilation .... */ 405a5a4af3bSchristos SET_H_PC (pc); 406a5a4af3bSchristos /* Virtual insns have zero size. Overwrite vpc with address of next insn 407a5a4af3bSchristos using the default-insn-bitsize spec. When executing insns in parallel 408a5a4af3bSchristos we may want to queue the fault and continue execution. */ 409a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 410a5a4af3bSchristos vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 411a5a4af3bSchristos } 412a5a4af3bSchristos 413a5a4af3bSchristos #undef FLD 414a5a4af3bSchristos } 415a5a4af3bSchristos NEXT (vpc); 416a5a4af3bSchristos 417a5a4af3bSchristos CASE (sem, INSN_X_AFTER) : /* --after-- */ 418a5a4af3bSchristos { 419a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 420a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 421a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 422a5a4af3bSchristos int UNUSED written = 0; 423a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 424a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 425a5a4af3bSchristos 426a5a4af3bSchristos { 427a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F 428a5a4af3bSchristos m32r2f_pbb_after (current_cpu, sem_arg); 429a5a4af3bSchristos #endif 430a5a4af3bSchristos } 431a5a4af3bSchristos 432a5a4af3bSchristos #undef FLD 433a5a4af3bSchristos } 434a5a4af3bSchristos NEXT (vpc); 435a5a4af3bSchristos 436a5a4af3bSchristos CASE (sem, INSN_X_BEFORE) : /* --before-- */ 437a5a4af3bSchristos { 438a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 439a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 440a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 441a5a4af3bSchristos int UNUSED written = 0; 442a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 443a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 444a5a4af3bSchristos 445a5a4af3bSchristos { 446a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F 447a5a4af3bSchristos m32r2f_pbb_before (current_cpu, sem_arg); 448a5a4af3bSchristos #endif 449a5a4af3bSchristos } 450a5a4af3bSchristos 451a5a4af3bSchristos #undef FLD 452a5a4af3bSchristos } 453a5a4af3bSchristos NEXT (vpc); 454a5a4af3bSchristos 455a5a4af3bSchristos CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */ 456a5a4af3bSchristos { 457a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 458a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 459a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 460a5a4af3bSchristos int UNUSED written = 0; 461a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 462a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 463a5a4af3bSchristos 464a5a4af3bSchristos { 465a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F 466a5a4af3bSchristos #ifdef DEFINE_SWITCH 467a5a4af3bSchristos vpc = m32r2f_pbb_cti_chain (current_cpu, sem_arg, 468a5a4af3bSchristos pbb_br_type, pbb_br_npc); 469a5a4af3bSchristos BREAK (sem); 470a5a4af3bSchristos #else 471a5a4af3bSchristos /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 472a5a4af3bSchristos vpc = m32r2f_pbb_cti_chain (current_cpu, sem_arg, 473a5a4af3bSchristos CPU_PBB_BR_TYPE (current_cpu), 474a5a4af3bSchristos CPU_PBB_BR_NPC (current_cpu)); 475a5a4af3bSchristos #endif 476a5a4af3bSchristos #endif 477a5a4af3bSchristos } 478a5a4af3bSchristos 479a5a4af3bSchristos #undef FLD 480a5a4af3bSchristos } 481a5a4af3bSchristos NEXT (vpc); 482a5a4af3bSchristos 483a5a4af3bSchristos CASE (sem, INSN_X_CHAIN) : /* --chain-- */ 484a5a4af3bSchristos { 485a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 486a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 487a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 488a5a4af3bSchristos int UNUSED written = 0; 489a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 490a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 491a5a4af3bSchristos 492a5a4af3bSchristos { 493a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F 494a5a4af3bSchristos vpc = m32r2f_pbb_chain (current_cpu, sem_arg); 495a5a4af3bSchristos #ifdef DEFINE_SWITCH 496a5a4af3bSchristos BREAK (sem); 497a5a4af3bSchristos #endif 498a5a4af3bSchristos #endif 499a5a4af3bSchristos } 500a5a4af3bSchristos 501a5a4af3bSchristos #undef FLD 502a5a4af3bSchristos } 503a5a4af3bSchristos NEXT (vpc); 504a5a4af3bSchristos 505a5a4af3bSchristos CASE (sem, INSN_X_BEGIN) : /* --begin-- */ 506a5a4af3bSchristos { 507a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 508a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 509a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 510a5a4af3bSchristos int UNUSED written = 0; 511a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 512a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 513a5a4af3bSchristos 514a5a4af3bSchristos { 515a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F 516a5a4af3bSchristos #if defined DEFINE_SWITCH || defined FAST_P 517a5a4af3bSchristos /* In the switch case FAST_P is a constant, allowing several optimizations 518a5a4af3bSchristos in any called inline functions. */ 519a5a4af3bSchristos vpc = m32r2f_pbb_begin (current_cpu, FAST_P); 520a5a4af3bSchristos #else 521a5a4af3bSchristos #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 522a5a4af3bSchristos vpc = m32r2f_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 523a5a4af3bSchristos #else 524a5a4af3bSchristos vpc = m32r2f_pbb_begin (current_cpu, 0); 525a5a4af3bSchristos #endif 526a5a4af3bSchristos #endif 527a5a4af3bSchristos #endif 528a5a4af3bSchristos } 529a5a4af3bSchristos 530a5a4af3bSchristos #undef FLD 531a5a4af3bSchristos } 532a5a4af3bSchristos NEXT (vpc); 533a5a4af3bSchristos 534a5a4af3bSchristos CASE (sem, INSN_ADD) : /* add $dr,$sr */ 535a5a4af3bSchristos { 536a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 537a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 538a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 539a5a4af3bSchristos int UNUSED written = 0; 540a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 541a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 542a5a4af3bSchristos 543a5a4af3bSchristos { 544a5a4af3bSchristos SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr)); 545a5a4af3bSchristos * FLD (i_dr) = opval; 546a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 547a5a4af3bSchristos } 548a5a4af3bSchristos 549a5a4af3bSchristos #undef FLD 550a5a4af3bSchristos } 551a5a4af3bSchristos NEXT (vpc); 552a5a4af3bSchristos 553a5a4af3bSchristos CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */ 554a5a4af3bSchristos { 555a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 556a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 557a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 558a5a4af3bSchristos int UNUSED written = 0; 559a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 560a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 561a5a4af3bSchristos 562a5a4af3bSchristos { 563a5a4af3bSchristos SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16)); 564a5a4af3bSchristos * FLD (i_dr) = opval; 565a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 566a5a4af3bSchristos } 567a5a4af3bSchristos 568a5a4af3bSchristos #undef FLD 569a5a4af3bSchristos } 570a5a4af3bSchristos NEXT (vpc); 571a5a4af3bSchristos 572a5a4af3bSchristos CASE (sem, INSN_AND) : /* and $dr,$sr */ 573a5a4af3bSchristos { 574a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 575a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 576a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 577a5a4af3bSchristos int UNUSED written = 0; 578a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 579a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 580a5a4af3bSchristos 581a5a4af3bSchristos { 582a5a4af3bSchristos SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr)); 583a5a4af3bSchristos * FLD (i_dr) = opval; 584a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 585a5a4af3bSchristos } 586a5a4af3bSchristos 587a5a4af3bSchristos #undef FLD 588a5a4af3bSchristos } 589a5a4af3bSchristos NEXT (vpc); 590a5a4af3bSchristos 591a5a4af3bSchristos CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */ 592a5a4af3bSchristos { 593a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 594a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 595a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f 596a5a4af3bSchristos int UNUSED written = 0; 597a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 598a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 599a5a4af3bSchristos 600a5a4af3bSchristos { 601a5a4af3bSchristos SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16)); 602a5a4af3bSchristos * FLD (i_dr) = opval; 603a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 604a5a4af3bSchristos } 605a5a4af3bSchristos 606a5a4af3bSchristos #undef FLD 607a5a4af3bSchristos } 608a5a4af3bSchristos NEXT (vpc); 609a5a4af3bSchristos 610a5a4af3bSchristos CASE (sem, INSN_OR) : /* or $dr,$sr */ 611a5a4af3bSchristos { 612a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 613a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 614a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 615a5a4af3bSchristos int UNUSED written = 0; 616a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 617a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 618a5a4af3bSchristos 619a5a4af3bSchristos { 620a5a4af3bSchristos SI opval = ORSI (* FLD (i_dr), * FLD (i_sr)); 621a5a4af3bSchristos * FLD (i_dr) = opval; 622a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 623a5a4af3bSchristos } 624a5a4af3bSchristos 625a5a4af3bSchristos #undef FLD 626a5a4af3bSchristos } 627a5a4af3bSchristos NEXT (vpc); 628a5a4af3bSchristos 629a5a4af3bSchristos CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */ 630a5a4af3bSchristos { 631a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 632a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 633a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f 634a5a4af3bSchristos int UNUSED written = 0; 635a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 636a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 637a5a4af3bSchristos 638a5a4af3bSchristos { 639a5a4af3bSchristos SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16)); 640a5a4af3bSchristos * FLD (i_dr) = opval; 641a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 642a5a4af3bSchristos } 643a5a4af3bSchristos 644a5a4af3bSchristos #undef FLD 645a5a4af3bSchristos } 646a5a4af3bSchristos NEXT (vpc); 647a5a4af3bSchristos 648a5a4af3bSchristos CASE (sem, INSN_XOR) : /* xor $dr,$sr */ 649a5a4af3bSchristos { 650a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 651a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 652a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 653a5a4af3bSchristos int UNUSED written = 0; 654a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 655a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 656a5a4af3bSchristos 657a5a4af3bSchristos { 658a5a4af3bSchristos SI opval = XORSI (* FLD (i_dr), * FLD (i_sr)); 659a5a4af3bSchristos * FLD (i_dr) = opval; 660a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 661a5a4af3bSchristos } 662a5a4af3bSchristos 663a5a4af3bSchristos #undef FLD 664a5a4af3bSchristos } 665a5a4af3bSchristos NEXT (vpc); 666a5a4af3bSchristos 667a5a4af3bSchristos CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */ 668a5a4af3bSchristos { 669a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 670a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 671a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f 672a5a4af3bSchristos int UNUSED written = 0; 673a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 674a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 675a5a4af3bSchristos 676a5a4af3bSchristos { 677a5a4af3bSchristos SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16)); 678a5a4af3bSchristos * FLD (i_dr) = opval; 679a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 680a5a4af3bSchristos } 681a5a4af3bSchristos 682a5a4af3bSchristos #undef FLD 683a5a4af3bSchristos } 684a5a4af3bSchristos NEXT (vpc); 685a5a4af3bSchristos 686a5a4af3bSchristos CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */ 687a5a4af3bSchristos { 688a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 689a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 690a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 691a5a4af3bSchristos int UNUSED written = 0; 692a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 693a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 694a5a4af3bSchristos 695a5a4af3bSchristos { 696a5a4af3bSchristos SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8)); 697a5a4af3bSchristos * FLD (i_dr) = opval; 698a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 699a5a4af3bSchristos } 700a5a4af3bSchristos 701a5a4af3bSchristos #undef FLD 702a5a4af3bSchristos } 703a5a4af3bSchristos NEXT (vpc); 704a5a4af3bSchristos 705a5a4af3bSchristos CASE (sem, INSN_ADDV) : /* addv $dr,$sr */ 706a5a4af3bSchristos { 707a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 708a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 709a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 710a5a4af3bSchristos int UNUSED written = 0; 711a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 712a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 713a5a4af3bSchristos 714a5a4af3bSchristos { 715a5a4af3bSchristos SI temp0;BI temp1; 716a5a4af3bSchristos temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr)); 717a5a4af3bSchristos temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0); 718a5a4af3bSchristos { 719a5a4af3bSchristos SI opval = temp0; 720a5a4af3bSchristos * FLD (i_dr) = opval; 721a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 722a5a4af3bSchristos } 723a5a4af3bSchristos { 724a5a4af3bSchristos BI opval = temp1; 725a5a4af3bSchristos CPU (h_cond) = opval; 726a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 727a5a4af3bSchristos } 728a5a4af3bSchristos } 729a5a4af3bSchristos 730a5a4af3bSchristos #undef FLD 731a5a4af3bSchristos } 732a5a4af3bSchristos NEXT (vpc); 733a5a4af3bSchristos 734a5a4af3bSchristos CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */ 735a5a4af3bSchristos { 736a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 737a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 738a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 739a5a4af3bSchristos int UNUSED written = 0; 740a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 741a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 742a5a4af3bSchristos 743a5a4af3bSchristos { 744a5a4af3bSchristos SI temp0;BI temp1; 745a5a4af3bSchristos temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16)); 746a5a4af3bSchristos temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0); 747a5a4af3bSchristos { 748a5a4af3bSchristos SI opval = temp0; 749a5a4af3bSchristos * FLD (i_dr) = opval; 750a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 751a5a4af3bSchristos } 752a5a4af3bSchristos { 753a5a4af3bSchristos BI opval = temp1; 754a5a4af3bSchristos CPU (h_cond) = opval; 755a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 756a5a4af3bSchristos } 757a5a4af3bSchristos } 758a5a4af3bSchristos 759a5a4af3bSchristos #undef FLD 760a5a4af3bSchristos } 761a5a4af3bSchristos NEXT (vpc); 762a5a4af3bSchristos 763a5a4af3bSchristos CASE (sem, INSN_ADDX) : /* addx $dr,$sr */ 764a5a4af3bSchristos { 765a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 766a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 767a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 768a5a4af3bSchristos int UNUSED written = 0; 769a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 770a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 771a5a4af3bSchristos 772a5a4af3bSchristos { 773a5a4af3bSchristos SI temp0;BI temp1; 774a5a4af3bSchristos temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 775a5a4af3bSchristos temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 776a5a4af3bSchristos { 777a5a4af3bSchristos SI opval = temp0; 778a5a4af3bSchristos * FLD (i_dr) = opval; 779a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 780a5a4af3bSchristos } 781a5a4af3bSchristos { 782a5a4af3bSchristos BI opval = temp1; 783a5a4af3bSchristos CPU (h_cond) = opval; 784a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 785a5a4af3bSchristos } 786a5a4af3bSchristos } 787a5a4af3bSchristos 788a5a4af3bSchristos #undef FLD 789a5a4af3bSchristos } 790a5a4af3bSchristos NEXT (vpc); 791a5a4af3bSchristos 792a5a4af3bSchristos CASE (sem, INSN_BC8) : /* bc.s $disp8 */ 793a5a4af3bSchristos { 794a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 795a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 796a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 797a5a4af3bSchristos int UNUSED written = 0; 798a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 799a5a4af3bSchristos SEM_BRANCH_INIT 800a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 801a5a4af3bSchristos 802a5a4af3bSchristos if (CPU (h_cond)) { 803a5a4af3bSchristos { 804a5a4af3bSchristos USI opval = FLD (i_disp8); 805a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 806a5a4af3bSchristos written |= (1 << 2); 807a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 808a5a4af3bSchristos } 809a5a4af3bSchristos } 810a5a4af3bSchristos 811a5a4af3bSchristos abuf->written = written; 812a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 813a5a4af3bSchristos #undef FLD 814a5a4af3bSchristos } 815a5a4af3bSchristos NEXT (vpc); 816a5a4af3bSchristos 817a5a4af3bSchristos CASE (sem, INSN_BC24) : /* bc.l $disp24 */ 818a5a4af3bSchristos { 819a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 820a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 821a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 822a5a4af3bSchristos int UNUSED written = 0; 823a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 824a5a4af3bSchristos SEM_BRANCH_INIT 825a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 826a5a4af3bSchristos 827a5a4af3bSchristos if (CPU (h_cond)) { 828a5a4af3bSchristos { 829a5a4af3bSchristos USI opval = FLD (i_disp24); 830a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 831a5a4af3bSchristos written |= (1 << 2); 832a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 833a5a4af3bSchristos } 834a5a4af3bSchristos } 835a5a4af3bSchristos 836a5a4af3bSchristos abuf->written = written; 837a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 838a5a4af3bSchristos #undef FLD 839a5a4af3bSchristos } 840a5a4af3bSchristos NEXT (vpc); 841a5a4af3bSchristos 842a5a4af3bSchristos CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */ 843a5a4af3bSchristos { 844a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 845a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 846a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 847a5a4af3bSchristos int UNUSED written = 0; 848a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 849a5a4af3bSchristos SEM_BRANCH_INIT 850a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 851a5a4af3bSchristos 852a5a4af3bSchristos if (EQSI (* FLD (i_src1), * FLD (i_src2))) { 853a5a4af3bSchristos { 854a5a4af3bSchristos USI opval = FLD (i_disp16); 855a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 856a5a4af3bSchristos written |= (1 << 3); 857a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 858a5a4af3bSchristos } 859a5a4af3bSchristos } 860a5a4af3bSchristos 861a5a4af3bSchristos abuf->written = written; 862a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 863a5a4af3bSchristos #undef FLD 864a5a4af3bSchristos } 865a5a4af3bSchristos NEXT (vpc); 866a5a4af3bSchristos 867a5a4af3bSchristos CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */ 868a5a4af3bSchristos { 869a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 870a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 871a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 872a5a4af3bSchristos int UNUSED written = 0; 873a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 874a5a4af3bSchristos SEM_BRANCH_INIT 875a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 876a5a4af3bSchristos 877a5a4af3bSchristos if (EQSI (* FLD (i_src2), 0)) { 878a5a4af3bSchristos { 879a5a4af3bSchristos USI opval = FLD (i_disp16); 880a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 881a5a4af3bSchristos written |= (1 << 2); 882a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 883a5a4af3bSchristos } 884a5a4af3bSchristos } 885a5a4af3bSchristos 886a5a4af3bSchristos abuf->written = written; 887a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 888a5a4af3bSchristos #undef FLD 889a5a4af3bSchristos } 890a5a4af3bSchristos NEXT (vpc); 891a5a4af3bSchristos 892a5a4af3bSchristos CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */ 893a5a4af3bSchristos { 894a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 895a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 896a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 897a5a4af3bSchristos int UNUSED written = 0; 898a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 899a5a4af3bSchristos SEM_BRANCH_INIT 900a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 901a5a4af3bSchristos 902a5a4af3bSchristos if (GESI (* FLD (i_src2), 0)) { 903a5a4af3bSchristos { 904a5a4af3bSchristos USI opval = FLD (i_disp16); 905a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 906a5a4af3bSchristos written |= (1 << 2); 907a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 908a5a4af3bSchristos } 909a5a4af3bSchristos } 910a5a4af3bSchristos 911a5a4af3bSchristos abuf->written = written; 912a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 913a5a4af3bSchristos #undef FLD 914a5a4af3bSchristos } 915a5a4af3bSchristos NEXT (vpc); 916a5a4af3bSchristos 917a5a4af3bSchristos CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */ 918a5a4af3bSchristos { 919a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 920a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 921a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 922a5a4af3bSchristos int UNUSED written = 0; 923a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 924a5a4af3bSchristos SEM_BRANCH_INIT 925a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 926a5a4af3bSchristos 927a5a4af3bSchristos if (GTSI (* FLD (i_src2), 0)) { 928a5a4af3bSchristos { 929a5a4af3bSchristos USI opval = FLD (i_disp16); 930a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 931a5a4af3bSchristos written |= (1 << 2); 932a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 933a5a4af3bSchristos } 934a5a4af3bSchristos } 935a5a4af3bSchristos 936a5a4af3bSchristos abuf->written = written; 937a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 938a5a4af3bSchristos #undef FLD 939a5a4af3bSchristos } 940a5a4af3bSchristos NEXT (vpc); 941a5a4af3bSchristos 942a5a4af3bSchristos CASE (sem, INSN_BLEZ) : /* blez $src2,$disp16 */ 943a5a4af3bSchristos { 944a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 945a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 946a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 947a5a4af3bSchristos int UNUSED written = 0; 948a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 949a5a4af3bSchristos SEM_BRANCH_INIT 950a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 951a5a4af3bSchristos 952a5a4af3bSchristos if (LESI (* FLD (i_src2), 0)) { 953a5a4af3bSchristos { 954a5a4af3bSchristos USI opval = FLD (i_disp16); 955a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 956a5a4af3bSchristos written |= (1 << 2); 957a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 958a5a4af3bSchristos } 959a5a4af3bSchristos } 960a5a4af3bSchristos 961a5a4af3bSchristos abuf->written = written; 962a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 963a5a4af3bSchristos #undef FLD 964a5a4af3bSchristos } 965a5a4af3bSchristos NEXT (vpc); 966a5a4af3bSchristos 967a5a4af3bSchristos CASE (sem, INSN_BLTZ) : /* bltz $src2,$disp16 */ 968a5a4af3bSchristos { 969a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 970a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 971a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 972a5a4af3bSchristos int UNUSED written = 0; 973a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 974a5a4af3bSchristos SEM_BRANCH_INIT 975a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 976a5a4af3bSchristos 977a5a4af3bSchristos if (LTSI (* FLD (i_src2), 0)) { 978a5a4af3bSchristos { 979a5a4af3bSchristos USI opval = FLD (i_disp16); 980a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 981a5a4af3bSchristos written |= (1 << 2); 982a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 983a5a4af3bSchristos } 984a5a4af3bSchristos } 985a5a4af3bSchristos 986a5a4af3bSchristos abuf->written = written; 987a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 988a5a4af3bSchristos #undef FLD 989a5a4af3bSchristos } 990a5a4af3bSchristos NEXT (vpc); 991a5a4af3bSchristos 992a5a4af3bSchristos CASE (sem, INSN_BNEZ) : /* bnez $src2,$disp16 */ 993a5a4af3bSchristos { 994a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 995a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 996a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 997a5a4af3bSchristos int UNUSED written = 0; 998a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 999a5a4af3bSchristos SEM_BRANCH_INIT 1000a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1001a5a4af3bSchristos 1002a5a4af3bSchristos if (NESI (* FLD (i_src2), 0)) { 1003a5a4af3bSchristos { 1004a5a4af3bSchristos USI opval = FLD (i_disp16); 1005a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1006a5a4af3bSchristos written |= (1 << 2); 1007a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1008a5a4af3bSchristos } 1009a5a4af3bSchristos } 1010a5a4af3bSchristos 1011a5a4af3bSchristos abuf->written = written; 1012a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1013a5a4af3bSchristos #undef FLD 1014a5a4af3bSchristos } 1015a5a4af3bSchristos NEXT (vpc); 1016a5a4af3bSchristos 1017a5a4af3bSchristos CASE (sem, INSN_BL8) : /* bl.s $disp8 */ 1018a5a4af3bSchristos { 1019a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1020a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1021a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1022a5a4af3bSchristos int UNUSED written = 0; 1023a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1024a5a4af3bSchristos SEM_BRANCH_INIT 1025a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1026a5a4af3bSchristos 1027a5a4af3bSchristos { 1028a5a4af3bSchristos { 1029a5a4af3bSchristos SI opval = ADDSI (ANDSI (pc, -4), 4); 1030a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1031a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1032a5a4af3bSchristos } 1033a5a4af3bSchristos { 1034a5a4af3bSchristos USI opval = FLD (i_disp8); 1035a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1036a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1037a5a4af3bSchristos } 1038a5a4af3bSchristos } 1039a5a4af3bSchristos 1040a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1041a5a4af3bSchristos #undef FLD 1042a5a4af3bSchristos } 1043a5a4af3bSchristos NEXT (vpc); 1044a5a4af3bSchristos 1045a5a4af3bSchristos CASE (sem, INSN_BL24) : /* bl.l $disp24 */ 1046a5a4af3bSchristos { 1047a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1048a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1049a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1050a5a4af3bSchristos int UNUSED written = 0; 1051a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1052a5a4af3bSchristos SEM_BRANCH_INIT 1053a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1054a5a4af3bSchristos 1055a5a4af3bSchristos { 1056a5a4af3bSchristos { 1057a5a4af3bSchristos SI opval = ADDSI (pc, 4); 1058a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1059a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1060a5a4af3bSchristos } 1061a5a4af3bSchristos { 1062a5a4af3bSchristos USI opval = FLD (i_disp24); 1063a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1064a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1065a5a4af3bSchristos } 1066a5a4af3bSchristos } 1067a5a4af3bSchristos 1068a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1069a5a4af3bSchristos #undef FLD 1070a5a4af3bSchristos } 1071a5a4af3bSchristos NEXT (vpc); 1072a5a4af3bSchristos 1073a5a4af3bSchristos CASE (sem, INSN_BCL8) : /* bcl.s $disp8 */ 1074a5a4af3bSchristos { 1075a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1076a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1077a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1078a5a4af3bSchristos int UNUSED written = 0; 1079a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1080a5a4af3bSchristos SEM_BRANCH_INIT 1081a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1082a5a4af3bSchristos 1083a5a4af3bSchristos if (CPU (h_cond)) { 1084a5a4af3bSchristos { 1085a5a4af3bSchristos { 1086a5a4af3bSchristos SI opval = ADDSI (ANDSI (pc, -4), 4); 1087a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1088a5a4af3bSchristos written |= (1 << 3); 1089a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1090a5a4af3bSchristos } 1091a5a4af3bSchristos { 1092a5a4af3bSchristos USI opval = FLD (i_disp8); 1093a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1094a5a4af3bSchristos written |= (1 << 4); 1095a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1096a5a4af3bSchristos } 1097a5a4af3bSchristos } 1098a5a4af3bSchristos } 1099a5a4af3bSchristos 1100a5a4af3bSchristos abuf->written = written; 1101a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1102a5a4af3bSchristos #undef FLD 1103a5a4af3bSchristos } 1104a5a4af3bSchristos NEXT (vpc); 1105a5a4af3bSchristos 1106a5a4af3bSchristos CASE (sem, INSN_BCL24) : /* bcl.l $disp24 */ 1107a5a4af3bSchristos { 1108a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1109a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1110a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1111a5a4af3bSchristos int UNUSED written = 0; 1112a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1113a5a4af3bSchristos SEM_BRANCH_INIT 1114a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1115a5a4af3bSchristos 1116a5a4af3bSchristos if (CPU (h_cond)) { 1117a5a4af3bSchristos { 1118a5a4af3bSchristos { 1119a5a4af3bSchristos SI opval = ADDSI (pc, 4); 1120a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1121a5a4af3bSchristos written |= (1 << 3); 1122a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1123a5a4af3bSchristos } 1124a5a4af3bSchristos { 1125a5a4af3bSchristos USI opval = FLD (i_disp24); 1126a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1127a5a4af3bSchristos written |= (1 << 4); 1128a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1129a5a4af3bSchristos } 1130a5a4af3bSchristos } 1131a5a4af3bSchristos } 1132a5a4af3bSchristos 1133a5a4af3bSchristos abuf->written = written; 1134a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1135a5a4af3bSchristos #undef FLD 1136a5a4af3bSchristos } 1137a5a4af3bSchristos NEXT (vpc); 1138a5a4af3bSchristos 1139a5a4af3bSchristos CASE (sem, INSN_BNC8) : /* bnc.s $disp8 */ 1140a5a4af3bSchristos { 1141a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1142a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1143a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1144a5a4af3bSchristos int UNUSED written = 0; 1145a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1146a5a4af3bSchristos SEM_BRANCH_INIT 1147a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1148a5a4af3bSchristos 1149a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 1150a5a4af3bSchristos { 1151a5a4af3bSchristos USI opval = FLD (i_disp8); 1152a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1153a5a4af3bSchristos written |= (1 << 2); 1154a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1155a5a4af3bSchristos } 1156a5a4af3bSchristos } 1157a5a4af3bSchristos 1158a5a4af3bSchristos abuf->written = written; 1159a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1160a5a4af3bSchristos #undef FLD 1161a5a4af3bSchristos } 1162a5a4af3bSchristos NEXT (vpc); 1163a5a4af3bSchristos 1164a5a4af3bSchristos CASE (sem, INSN_BNC24) : /* bnc.l $disp24 */ 1165a5a4af3bSchristos { 1166a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1167a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1168a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1169a5a4af3bSchristos int UNUSED written = 0; 1170a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1171a5a4af3bSchristos SEM_BRANCH_INIT 1172a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1173a5a4af3bSchristos 1174a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 1175a5a4af3bSchristos { 1176a5a4af3bSchristos USI opval = FLD (i_disp24); 1177a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1178a5a4af3bSchristos written |= (1 << 2); 1179a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1180a5a4af3bSchristos } 1181a5a4af3bSchristos } 1182a5a4af3bSchristos 1183a5a4af3bSchristos abuf->written = written; 1184a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1185a5a4af3bSchristos #undef FLD 1186a5a4af3bSchristos } 1187a5a4af3bSchristos NEXT (vpc); 1188a5a4af3bSchristos 1189a5a4af3bSchristos CASE (sem, INSN_BNE) : /* bne $src1,$src2,$disp16 */ 1190a5a4af3bSchristos { 1191a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1192a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1193a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f 1194a5a4af3bSchristos int UNUSED written = 0; 1195a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1196a5a4af3bSchristos SEM_BRANCH_INIT 1197a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1198a5a4af3bSchristos 1199a5a4af3bSchristos if (NESI (* FLD (i_src1), * FLD (i_src2))) { 1200a5a4af3bSchristos { 1201a5a4af3bSchristos USI opval = FLD (i_disp16); 1202a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1203a5a4af3bSchristos written |= (1 << 3); 1204a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1205a5a4af3bSchristos } 1206a5a4af3bSchristos } 1207a5a4af3bSchristos 1208a5a4af3bSchristos abuf->written = written; 1209a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1210a5a4af3bSchristos #undef FLD 1211a5a4af3bSchristos } 1212a5a4af3bSchristos NEXT (vpc); 1213a5a4af3bSchristos 1214a5a4af3bSchristos CASE (sem, INSN_BRA8) : /* bra.s $disp8 */ 1215a5a4af3bSchristos { 1216a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1217a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1218a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1219a5a4af3bSchristos int UNUSED written = 0; 1220a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1221a5a4af3bSchristos SEM_BRANCH_INIT 1222a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1223a5a4af3bSchristos 1224a5a4af3bSchristos { 1225a5a4af3bSchristos USI opval = FLD (i_disp8); 1226a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1227a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1228a5a4af3bSchristos } 1229a5a4af3bSchristos 1230a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1231a5a4af3bSchristos #undef FLD 1232a5a4af3bSchristos } 1233a5a4af3bSchristos NEXT (vpc); 1234a5a4af3bSchristos 1235a5a4af3bSchristos CASE (sem, INSN_BRA24) : /* bra.l $disp24 */ 1236a5a4af3bSchristos { 1237a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1238a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1239a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1240a5a4af3bSchristos int UNUSED written = 0; 1241a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1242a5a4af3bSchristos SEM_BRANCH_INIT 1243a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1244a5a4af3bSchristos 1245a5a4af3bSchristos { 1246a5a4af3bSchristos USI opval = FLD (i_disp24); 1247a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1248a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1249a5a4af3bSchristos } 1250a5a4af3bSchristos 1251a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1252a5a4af3bSchristos #undef FLD 1253a5a4af3bSchristos } 1254a5a4af3bSchristos NEXT (vpc); 1255a5a4af3bSchristos 1256a5a4af3bSchristos CASE (sem, INSN_BNCL8) : /* bncl.s $disp8 */ 1257a5a4af3bSchristos { 1258a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1259a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1260a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 1261a5a4af3bSchristos int UNUSED written = 0; 1262a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1263a5a4af3bSchristos SEM_BRANCH_INIT 1264a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1265a5a4af3bSchristos 1266a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 1267a5a4af3bSchristos { 1268a5a4af3bSchristos { 1269a5a4af3bSchristos SI opval = ADDSI (ANDSI (pc, -4), 4); 1270a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1271a5a4af3bSchristos written |= (1 << 3); 1272a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1273a5a4af3bSchristos } 1274a5a4af3bSchristos { 1275a5a4af3bSchristos USI opval = FLD (i_disp8); 1276a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1277a5a4af3bSchristos written |= (1 << 4); 1278a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1279a5a4af3bSchristos } 1280a5a4af3bSchristos } 1281a5a4af3bSchristos } 1282a5a4af3bSchristos 1283a5a4af3bSchristos abuf->written = written; 1284a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1285a5a4af3bSchristos #undef FLD 1286a5a4af3bSchristos } 1287a5a4af3bSchristos NEXT (vpc); 1288a5a4af3bSchristos 1289a5a4af3bSchristos CASE (sem, INSN_BNCL24) : /* bncl.l $disp24 */ 1290a5a4af3bSchristos { 1291a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1292a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1293a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f 1294a5a4af3bSchristos int UNUSED written = 0; 1295a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1296a5a4af3bSchristos SEM_BRANCH_INIT 1297a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1298a5a4af3bSchristos 1299a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 1300a5a4af3bSchristos { 1301a5a4af3bSchristos { 1302a5a4af3bSchristos SI opval = ADDSI (pc, 4); 1303a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1304a5a4af3bSchristos written |= (1 << 3); 1305a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1306a5a4af3bSchristos } 1307a5a4af3bSchristos { 1308a5a4af3bSchristos USI opval = FLD (i_disp24); 1309a5a4af3bSchristos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1310a5a4af3bSchristos written |= (1 << 4); 1311a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1312a5a4af3bSchristos } 1313a5a4af3bSchristos } 1314a5a4af3bSchristos } 1315a5a4af3bSchristos 1316a5a4af3bSchristos abuf->written = written; 1317a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1318a5a4af3bSchristos #undef FLD 1319a5a4af3bSchristos } 1320a5a4af3bSchristos NEXT (vpc); 1321a5a4af3bSchristos 1322a5a4af3bSchristos CASE (sem, INSN_CMP) : /* cmp $src1,$src2 */ 1323a5a4af3bSchristos { 1324a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1325a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1326a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 1327a5a4af3bSchristos int UNUSED written = 0; 1328a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1329a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1330a5a4af3bSchristos 1331a5a4af3bSchristos { 1332a5a4af3bSchristos BI opval = LTSI (* FLD (i_src1), * FLD (i_src2)); 1333a5a4af3bSchristos CPU (h_cond) = opval; 1334a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 1335a5a4af3bSchristos } 1336a5a4af3bSchristos 1337a5a4af3bSchristos #undef FLD 1338a5a4af3bSchristos } 1339a5a4af3bSchristos NEXT (vpc); 1340a5a4af3bSchristos 1341a5a4af3bSchristos CASE (sem, INSN_CMPI) : /* cmpi $src2,$simm16 */ 1342a5a4af3bSchristos { 1343a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1344a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1345a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 1346a5a4af3bSchristos int UNUSED written = 0; 1347a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1348a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1349a5a4af3bSchristos 1350a5a4af3bSchristos { 1351a5a4af3bSchristos BI opval = LTSI (* FLD (i_src2), FLD (f_simm16)); 1352a5a4af3bSchristos CPU (h_cond) = opval; 1353a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 1354a5a4af3bSchristos } 1355a5a4af3bSchristos 1356a5a4af3bSchristos #undef FLD 1357a5a4af3bSchristos } 1358a5a4af3bSchristos NEXT (vpc); 1359a5a4af3bSchristos 1360a5a4af3bSchristos CASE (sem, INSN_CMPU) : /* cmpu $src1,$src2 */ 1361a5a4af3bSchristos { 1362a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1363a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1364a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 1365a5a4af3bSchristos int UNUSED written = 0; 1366a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1367a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1368a5a4af3bSchristos 1369a5a4af3bSchristos { 1370a5a4af3bSchristos BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2)); 1371a5a4af3bSchristos CPU (h_cond) = opval; 1372a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 1373a5a4af3bSchristos } 1374a5a4af3bSchristos 1375a5a4af3bSchristos #undef FLD 1376a5a4af3bSchristos } 1377a5a4af3bSchristos NEXT (vpc); 1378a5a4af3bSchristos 1379a5a4af3bSchristos CASE (sem, INSN_CMPUI) : /* cmpui $src2,$simm16 */ 1380a5a4af3bSchristos { 1381a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1382a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1383a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 1384a5a4af3bSchristos int UNUSED written = 0; 1385a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1386a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1387a5a4af3bSchristos 1388a5a4af3bSchristos { 1389a5a4af3bSchristos BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16)); 1390a5a4af3bSchristos CPU (h_cond) = opval; 1391a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 1392a5a4af3bSchristos } 1393a5a4af3bSchristos 1394a5a4af3bSchristos #undef FLD 1395a5a4af3bSchristos } 1396a5a4af3bSchristos NEXT (vpc); 1397a5a4af3bSchristos 1398a5a4af3bSchristos CASE (sem, INSN_CMPEQ) : /* cmpeq $src1,$src2 */ 1399a5a4af3bSchristos { 1400a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1401a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1402a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 1403a5a4af3bSchristos int UNUSED written = 0; 1404a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1405a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1406a5a4af3bSchristos 1407a5a4af3bSchristos { 1408a5a4af3bSchristos BI opval = EQSI (* FLD (i_src1), * FLD (i_src2)); 1409a5a4af3bSchristos CPU (h_cond) = opval; 1410a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 1411a5a4af3bSchristos } 1412a5a4af3bSchristos 1413a5a4af3bSchristos #undef FLD 1414a5a4af3bSchristos } 1415a5a4af3bSchristos NEXT (vpc); 1416a5a4af3bSchristos 1417a5a4af3bSchristos CASE (sem, INSN_CMPZ) : /* cmpz $src2 */ 1418a5a4af3bSchristos { 1419a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1420a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1421a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 1422a5a4af3bSchristos int UNUSED written = 0; 1423a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1424a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1425a5a4af3bSchristos 1426a5a4af3bSchristos { 1427a5a4af3bSchristos BI opval = EQSI (* FLD (i_src2), 0); 1428a5a4af3bSchristos CPU (h_cond) = opval; 1429a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 1430a5a4af3bSchristos } 1431a5a4af3bSchristos 1432a5a4af3bSchristos #undef FLD 1433a5a4af3bSchristos } 1434a5a4af3bSchristos NEXT (vpc); 1435a5a4af3bSchristos 1436a5a4af3bSchristos CASE (sem, INSN_DIV) : /* div $dr,$sr */ 1437a5a4af3bSchristos { 1438a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1439a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1440a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1441a5a4af3bSchristos int UNUSED written = 0; 1442a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1443a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1444a5a4af3bSchristos 1445a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1446a5a4af3bSchristos { 1447a5a4af3bSchristos SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr)); 1448a5a4af3bSchristos * FLD (i_dr) = opval; 1449a5a4af3bSchristos written |= (1 << 2); 1450a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1451a5a4af3bSchristos } 1452a5a4af3bSchristos } 1453a5a4af3bSchristos 1454a5a4af3bSchristos abuf->written = written; 1455a5a4af3bSchristos #undef FLD 1456a5a4af3bSchristos } 1457a5a4af3bSchristos NEXT (vpc); 1458a5a4af3bSchristos 1459a5a4af3bSchristos CASE (sem, INSN_DIVU) : /* divu $dr,$sr */ 1460a5a4af3bSchristos { 1461a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1462a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1463a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1464a5a4af3bSchristos int UNUSED written = 0; 1465a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1466a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1467a5a4af3bSchristos 1468a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1469a5a4af3bSchristos { 1470a5a4af3bSchristos SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr)); 1471a5a4af3bSchristos * FLD (i_dr) = opval; 1472a5a4af3bSchristos written |= (1 << 2); 1473a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1474a5a4af3bSchristos } 1475a5a4af3bSchristos } 1476a5a4af3bSchristos 1477a5a4af3bSchristos abuf->written = written; 1478a5a4af3bSchristos #undef FLD 1479a5a4af3bSchristos } 1480a5a4af3bSchristos NEXT (vpc); 1481a5a4af3bSchristos 1482a5a4af3bSchristos CASE (sem, INSN_REM) : /* rem $dr,$sr */ 1483a5a4af3bSchristos { 1484a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1485a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1486a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1487a5a4af3bSchristos int UNUSED written = 0; 1488a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1489a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1490a5a4af3bSchristos 1491a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1492a5a4af3bSchristos { 1493a5a4af3bSchristos SI opval = MODSI (* FLD (i_dr), * FLD (i_sr)); 1494a5a4af3bSchristos * FLD (i_dr) = opval; 1495a5a4af3bSchristos written |= (1 << 2); 1496a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1497a5a4af3bSchristos } 1498a5a4af3bSchristos } 1499a5a4af3bSchristos 1500a5a4af3bSchristos abuf->written = written; 1501a5a4af3bSchristos #undef FLD 1502a5a4af3bSchristos } 1503a5a4af3bSchristos NEXT (vpc); 1504a5a4af3bSchristos 1505a5a4af3bSchristos CASE (sem, INSN_REMU) : /* remu $dr,$sr */ 1506a5a4af3bSchristos { 1507a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1508a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1509a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1510a5a4af3bSchristos int UNUSED written = 0; 1511a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1512a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1513a5a4af3bSchristos 1514a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1515a5a4af3bSchristos { 1516a5a4af3bSchristos SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr)); 1517a5a4af3bSchristos * FLD (i_dr) = opval; 1518a5a4af3bSchristos written |= (1 << 2); 1519a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1520a5a4af3bSchristos } 1521a5a4af3bSchristos } 1522a5a4af3bSchristos 1523a5a4af3bSchristos abuf->written = written; 1524a5a4af3bSchristos #undef FLD 1525a5a4af3bSchristos } 1526a5a4af3bSchristos NEXT (vpc); 1527a5a4af3bSchristos 1528a5a4af3bSchristos CASE (sem, INSN_REMH) : /* remh $dr,$sr */ 1529a5a4af3bSchristos { 1530a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1531a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1532a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1533a5a4af3bSchristos int UNUSED written = 0; 1534a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1535a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1536a5a4af3bSchristos 1537a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1538a5a4af3bSchristos { 1539a5a4af3bSchristos SI opval = MODSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr)); 1540a5a4af3bSchristos * FLD (i_dr) = opval; 1541a5a4af3bSchristos written |= (1 << 2); 1542a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1543a5a4af3bSchristos } 1544a5a4af3bSchristos } 1545a5a4af3bSchristos 1546a5a4af3bSchristos abuf->written = written; 1547a5a4af3bSchristos #undef FLD 1548a5a4af3bSchristos } 1549a5a4af3bSchristos NEXT (vpc); 1550a5a4af3bSchristos 1551a5a4af3bSchristos CASE (sem, INSN_REMUH) : /* remuh $dr,$sr */ 1552a5a4af3bSchristos { 1553a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1554a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1555a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1556a5a4af3bSchristos int UNUSED written = 0; 1557a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1558a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1559a5a4af3bSchristos 1560a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1561a5a4af3bSchristos { 1562a5a4af3bSchristos SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr)); 1563a5a4af3bSchristos * FLD (i_dr) = opval; 1564a5a4af3bSchristos written |= (1 << 2); 1565a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1566a5a4af3bSchristos } 1567a5a4af3bSchristos } 1568a5a4af3bSchristos 1569a5a4af3bSchristos abuf->written = written; 1570a5a4af3bSchristos #undef FLD 1571a5a4af3bSchristos } 1572a5a4af3bSchristos NEXT (vpc); 1573a5a4af3bSchristos 1574a5a4af3bSchristos CASE (sem, INSN_REMB) : /* remb $dr,$sr */ 1575a5a4af3bSchristos { 1576a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1577a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1578a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1579a5a4af3bSchristos int UNUSED written = 0; 1580a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1581a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1582a5a4af3bSchristos 1583a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1584a5a4af3bSchristos { 1585a5a4af3bSchristos SI opval = MODSI (EXTBISI (TRUNCSIBI (* FLD (i_dr))), * FLD (i_sr)); 1586a5a4af3bSchristos * FLD (i_dr) = opval; 1587a5a4af3bSchristos written |= (1 << 2); 1588a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1589a5a4af3bSchristos } 1590a5a4af3bSchristos } 1591a5a4af3bSchristos 1592a5a4af3bSchristos abuf->written = written; 1593a5a4af3bSchristos #undef FLD 1594a5a4af3bSchristos } 1595a5a4af3bSchristos NEXT (vpc); 1596a5a4af3bSchristos 1597a5a4af3bSchristos CASE (sem, INSN_REMUB) : /* remub $dr,$sr */ 1598a5a4af3bSchristos { 1599a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1600a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1601a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1602a5a4af3bSchristos int UNUSED written = 0; 1603a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1604a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1605a5a4af3bSchristos 1606a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1607a5a4af3bSchristos { 1608a5a4af3bSchristos SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr)); 1609a5a4af3bSchristos * FLD (i_dr) = opval; 1610a5a4af3bSchristos written |= (1 << 2); 1611a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1612a5a4af3bSchristos } 1613a5a4af3bSchristos } 1614a5a4af3bSchristos 1615a5a4af3bSchristos abuf->written = written; 1616a5a4af3bSchristos #undef FLD 1617a5a4af3bSchristos } 1618a5a4af3bSchristos NEXT (vpc); 1619a5a4af3bSchristos 1620a5a4af3bSchristos CASE (sem, INSN_DIVUH) : /* divuh $dr,$sr */ 1621a5a4af3bSchristos { 1622a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1623a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1624a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1625a5a4af3bSchristos int UNUSED written = 0; 1626a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1627a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1628a5a4af3bSchristos 1629a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1630a5a4af3bSchristos { 1631a5a4af3bSchristos SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr)); 1632a5a4af3bSchristos * FLD (i_dr) = opval; 1633a5a4af3bSchristos written |= (1 << 2); 1634a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1635a5a4af3bSchristos } 1636a5a4af3bSchristos } 1637a5a4af3bSchristos 1638a5a4af3bSchristos abuf->written = written; 1639a5a4af3bSchristos #undef FLD 1640a5a4af3bSchristos } 1641a5a4af3bSchristos NEXT (vpc); 1642a5a4af3bSchristos 1643a5a4af3bSchristos CASE (sem, INSN_DIVB) : /* divb $dr,$sr */ 1644a5a4af3bSchristos { 1645a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1646a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1647a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1648a5a4af3bSchristos int UNUSED written = 0; 1649a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1650a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1651a5a4af3bSchristos 1652a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1653a5a4af3bSchristos { 1654a5a4af3bSchristos SI opval = DIVSI (EXTBISI (TRUNCSIBI (* FLD (i_dr))), * FLD (i_sr)); 1655a5a4af3bSchristos * FLD (i_dr) = opval; 1656a5a4af3bSchristos written |= (1 << 2); 1657a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1658a5a4af3bSchristos } 1659a5a4af3bSchristos } 1660a5a4af3bSchristos 1661a5a4af3bSchristos abuf->written = written; 1662a5a4af3bSchristos #undef FLD 1663a5a4af3bSchristos } 1664a5a4af3bSchristos NEXT (vpc); 1665a5a4af3bSchristos 1666a5a4af3bSchristos CASE (sem, INSN_DIVUB) : /* divub $dr,$sr */ 1667a5a4af3bSchristos { 1668a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1669a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1670a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1671a5a4af3bSchristos int UNUSED written = 0; 1672a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1673a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1674a5a4af3bSchristos 1675a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1676a5a4af3bSchristos { 1677a5a4af3bSchristos SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr)); 1678a5a4af3bSchristos * FLD (i_dr) = opval; 1679a5a4af3bSchristos written |= (1 << 2); 1680a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1681a5a4af3bSchristos } 1682a5a4af3bSchristos } 1683a5a4af3bSchristos 1684a5a4af3bSchristos abuf->written = written; 1685a5a4af3bSchristos #undef FLD 1686a5a4af3bSchristos } 1687a5a4af3bSchristos NEXT (vpc); 1688a5a4af3bSchristos 1689a5a4af3bSchristos CASE (sem, INSN_DIVH) : /* divh $dr,$sr */ 1690a5a4af3bSchristos { 1691a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1692a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1693a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 1694a5a4af3bSchristos int UNUSED written = 0; 1695a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1696a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1697a5a4af3bSchristos 1698a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) { 1699a5a4af3bSchristos { 1700a5a4af3bSchristos SI opval = DIVSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr)); 1701a5a4af3bSchristos * FLD (i_dr) = opval; 1702a5a4af3bSchristos written |= (1 << 2); 1703a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1704a5a4af3bSchristos } 1705a5a4af3bSchristos } 1706a5a4af3bSchristos 1707a5a4af3bSchristos abuf->written = written; 1708a5a4af3bSchristos #undef FLD 1709a5a4af3bSchristos } 1710a5a4af3bSchristos NEXT (vpc); 1711a5a4af3bSchristos 1712a5a4af3bSchristos CASE (sem, INSN_JC) : /* jc $sr */ 1713a5a4af3bSchristos { 1714a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1715a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1716a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1717a5a4af3bSchristos int UNUSED written = 0; 1718a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1719a5a4af3bSchristos SEM_BRANCH_INIT 1720a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1721a5a4af3bSchristos 1722a5a4af3bSchristos if (CPU (h_cond)) { 1723a5a4af3bSchristos { 1724a5a4af3bSchristos USI opval = ANDSI (* FLD (i_sr), -4); 1725a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1726a5a4af3bSchristos written |= (1 << 2); 1727a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1728a5a4af3bSchristos } 1729a5a4af3bSchristos } 1730a5a4af3bSchristos 1731a5a4af3bSchristos abuf->written = written; 1732a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1733a5a4af3bSchristos #undef FLD 1734a5a4af3bSchristos } 1735a5a4af3bSchristos NEXT (vpc); 1736a5a4af3bSchristos 1737a5a4af3bSchristos CASE (sem, INSN_JNC) : /* jnc $sr */ 1738a5a4af3bSchristos { 1739a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1740a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1741a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1742a5a4af3bSchristos int UNUSED written = 0; 1743a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1744a5a4af3bSchristos SEM_BRANCH_INIT 1745a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1746a5a4af3bSchristos 1747a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 1748a5a4af3bSchristos { 1749a5a4af3bSchristos USI opval = ANDSI (* FLD (i_sr), -4); 1750a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1751a5a4af3bSchristos written |= (1 << 2); 1752a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1753a5a4af3bSchristos } 1754a5a4af3bSchristos } 1755a5a4af3bSchristos 1756a5a4af3bSchristos abuf->written = written; 1757a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1758a5a4af3bSchristos #undef FLD 1759a5a4af3bSchristos } 1760a5a4af3bSchristos NEXT (vpc); 1761a5a4af3bSchristos 1762a5a4af3bSchristos CASE (sem, INSN_JL) : /* jl $sr */ 1763a5a4af3bSchristos { 1764a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1765a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1766a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1767a5a4af3bSchristos int UNUSED written = 0; 1768a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1769a5a4af3bSchristos SEM_BRANCH_INIT 1770a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1771a5a4af3bSchristos 1772a5a4af3bSchristos { 1773a5a4af3bSchristos SI temp0;USI temp1; 1774a5a4af3bSchristos temp0 = ADDSI (ANDSI (pc, -4), 4); 1775a5a4af3bSchristos temp1 = ANDSI (* FLD (i_sr), -4); 1776a5a4af3bSchristos { 1777a5a4af3bSchristos SI opval = temp0; 1778a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = opval; 1779a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1780a5a4af3bSchristos } 1781a5a4af3bSchristos { 1782a5a4af3bSchristos USI opval = temp1; 1783a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1784a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1785a5a4af3bSchristos } 1786a5a4af3bSchristos } 1787a5a4af3bSchristos 1788a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1789a5a4af3bSchristos #undef FLD 1790a5a4af3bSchristos } 1791a5a4af3bSchristos NEXT (vpc); 1792a5a4af3bSchristos 1793a5a4af3bSchristos CASE (sem, INSN_JMP) : /* jmp $sr */ 1794a5a4af3bSchristos { 1795a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1796a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1797a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 1798a5a4af3bSchristos int UNUSED written = 0; 1799a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1800a5a4af3bSchristos SEM_BRANCH_INIT 1801a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1802a5a4af3bSchristos 1803a5a4af3bSchristos { 1804a5a4af3bSchristos USI opval = ANDSI (* FLD (i_sr), -4); 1805a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1806a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1807a5a4af3bSchristos } 1808a5a4af3bSchristos 1809a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 1810a5a4af3bSchristos #undef FLD 1811a5a4af3bSchristos } 1812a5a4af3bSchristos NEXT (vpc); 1813a5a4af3bSchristos 1814a5a4af3bSchristos CASE (sem, INSN_LD) : /* ld $dr,@$sr */ 1815a5a4af3bSchristos { 1816a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1817a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1818a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1819a5a4af3bSchristos int UNUSED written = 0; 1820a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1821a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1822a5a4af3bSchristos 1823a5a4af3bSchristos { 1824a5a4af3bSchristos SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 1825a5a4af3bSchristos * FLD (i_dr) = opval; 1826a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1827a5a4af3bSchristos } 1828a5a4af3bSchristos 1829a5a4af3bSchristos #undef FLD 1830a5a4af3bSchristos } 1831a5a4af3bSchristos NEXT (vpc); 1832a5a4af3bSchristos 1833a5a4af3bSchristos CASE (sem, INSN_LD_D) : /* ld $dr,@($slo16,$sr) */ 1834a5a4af3bSchristos { 1835a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1836a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1837a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1838a5a4af3bSchristos int UNUSED written = 0; 1839a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1840a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1841a5a4af3bSchristos 1842a5a4af3bSchristos { 1843a5a4af3bSchristos SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))); 1844a5a4af3bSchristos * FLD (i_dr) = opval; 1845a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1846a5a4af3bSchristos } 1847a5a4af3bSchristos 1848a5a4af3bSchristos #undef FLD 1849a5a4af3bSchristos } 1850a5a4af3bSchristos NEXT (vpc); 1851a5a4af3bSchristos 1852a5a4af3bSchristos CASE (sem, INSN_LDB) : /* ldb $dr,@$sr */ 1853a5a4af3bSchristos { 1854a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1855a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1856a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1857a5a4af3bSchristos int UNUSED written = 0; 1858a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1859a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1860a5a4af3bSchristos 1861a5a4af3bSchristos { 1862a5a4af3bSchristos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 1863a5a4af3bSchristos * FLD (i_dr) = opval; 1864a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1865a5a4af3bSchristos } 1866a5a4af3bSchristos 1867a5a4af3bSchristos #undef FLD 1868a5a4af3bSchristos } 1869a5a4af3bSchristos NEXT (vpc); 1870a5a4af3bSchristos 1871a5a4af3bSchristos CASE (sem, INSN_LDB_D) : /* ldb $dr,@($slo16,$sr) */ 1872a5a4af3bSchristos { 1873a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1874a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1875a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1876a5a4af3bSchristos int UNUSED written = 0; 1877a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1878a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1879a5a4af3bSchristos 1880a5a4af3bSchristos { 1881a5a4af3bSchristos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1882a5a4af3bSchristos * FLD (i_dr) = opval; 1883a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1884a5a4af3bSchristos } 1885a5a4af3bSchristos 1886a5a4af3bSchristos #undef FLD 1887a5a4af3bSchristos } 1888a5a4af3bSchristos NEXT (vpc); 1889a5a4af3bSchristos 1890a5a4af3bSchristos CASE (sem, INSN_LDH) : /* ldh $dr,@$sr */ 1891a5a4af3bSchristos { 1892a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1893a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1894a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1895a5a4af3bSchristos int UNUSED written = 0; 1896a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1897a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1898a5a4af3bSchristos 1899a5a4af3bSchristos { 1900a5a4af3bSchristos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 1901a5a4af3bSchristos * FLD (i_dr) = opval; 1902a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1903a5a4af3bSchristos } 1904a5a4af3bSchristos 1905a5a4af3bSchristos #undef FLD 1906a5a4af3bSchristos } 1907a5a4af3bSchristos NEXT (vpc); 1908a5a4af3bSchristos 1909a5a4af3bSchristos CASE (sem, INSN_LDH_D) : /* ldh $dr,@($slo16,$sr) */ 1910a5a4af3bSchristos { 1911a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1912a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1913a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1914a5a4af3bSchristos int UNUSED written = 0; 1915a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1916a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1917a5a4af3bSchristos 1918a5a4af3bSchristos { 1919a5a4af3bSchristos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1920a5a4af3bSchristos * FLD (i_dr) = opval; 1921a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1922a5a4af3bSchristos } 1923a5a4af3bSchristos 1924a5a4af3bSchristos #undef FLD 1925a5a4af3bSchristos } 1926a5a4af3bSchristos NEXT (vpc); 1927a5a4af3bSchristos 1928a5a4af3bSchristos CASE (sem, INSN_LDUB) : /* ldub $dr,@$sr */ 1929a5a4af3bSchristos { 1930a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1931a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1932a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1933a5a4af3bSchristos int UNUSED written = 0; 1934a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1935a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1936a5a4af3bSchristos 1937a5a4af3bSchristos { 1938a5a4af3bSchristos SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 1939a5a4af3bSchristos * FLD (i_dr) = opval; 1940a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1941a5a4af3bSchristos } 1942a5a4af3bSchristos 1943a5a4af3bSchristos #undef FLD 1944a5a4af3bSchristos } 1945a5a4af3bSchristos NEXT (vpc); 1946a5a4af3bSchristos 1947a5a4af3bSchristos CASE (sem, INSN_LDUB_D) : /* ldub $dr,@($slo16,$sr) */ 1948a5a4af3bSchristos { 1949a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1950a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1951a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1952a5a4af3bSchristos int UNUSED written = 0; 1953a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1954a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1955a5a4af3bSchristos 1956a5a4af3bSchristos { 1957a5a4af3bSchristos SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1958a5a4af3bSchristos * FLD (i_dr) = opval; 1959a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1960a5a4af3bSchristos } 1961a5a4af3bSchristos 1962a5a4af3bSchristos #undef FLD 1963a5a4af3bSchristos } 1964a5a4af3bSchristos NEXT (vpc); 1965a5a4af3bSchristos 1966a5a4af3bSchristos CASE (sem, INSN_LDUH) : /* lduh $dr,@$sr */ 1967a5a4af3bSchristos { 1968a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1969a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1970a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 1971a5a4af3bSchristos int UNUSED written = 0; 1972a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1973a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1974a5a4af3bSchristos 1975a5a4af3bSchristos { 1976a5a4af3bSchristos SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 1977a5a4af3bSchristos * FLD (i_dr) = opval; 1978a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1979a5a4af3bSchristos } 1980a5a4af3bSchristos 1981a5a4af3bSchristos #undef FLD 1982a5a4af3bSchristos } 1983a5a4af3bSchristos NEXT (vpc); 1984a5a4af3bSchristos 1985a5a4af3bSchristos CASE (sem, INSN_LDUH_D) : /* lduh $dr,@($slo16,$sr) */ 1986a5a4af3bSchristos { 1987a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 1988a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1989a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 1990a5a4af3bSchristos int UNUSED written = 0; 1991a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 1992a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1993a5a4af3bSchristos 1994a5a4af3bSchristos { 1995a5a4af3bSchristos SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1996a5a4af3bSchristos * FLD (i_dr) = opval; 1997a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1998a5a4af3bSchristos } 1999a5a4af3bSchristos 2000a5a4af3bSchristos #undef FLD 2001a5a4af3bSchristos } 2002a5a4af3bSchristos NEXT (vpc); 2003a5a4af3bSchristos 2004a5a4af3bSchristos CASE (sem, INSN_LD_PLUS) : /* ld $dr,@$sr+ */ 2005a5a4af3bSchristos { 2006a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2007a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2008a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2009a5a4af3bSchristos int UNUSED written = 0; 2010a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2011a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2012a5a4af3bSchristos 2013a5a4af3bSchristos { 2014a5a4af3bSchristos SI temp0;SI temp1; 2015a5a4af3bSchristos temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 2016a5a4af3bSchristos temp1 = ADDSI (* FLD (i_sr), 4); 2017a5a4af3bSchristos { 2018a5a4af3bSchristos SI opval = temp0; 2019a5a4af3bSchristos * FLD (i_dr) = opval; 2020a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2021a5a4af3bSchristos } 2022a5a4af3bSchristos { 2023a5a4af3bSchristos SI opval = temp1; 2024a5a4af3bSchristos * FLD (i_sr) = opval; 2025a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2026a5a4af3bSchristos } 2027a5a4af3bSchristos } 2028a5a4af3bSchristos 2029a5a4af3bSchristos #undef FLD 2030a5a4af3bSchristos } 2031a5a4af3bSchristos NEXT (vpc); 2032a5a4af3bSchristos 2033a5a4af3bSchristos CASE (sem, INSN_LD24) : /* ld24 $dr,$uimm24 */ 2034a5a4af3bSchristos { 2035a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2036a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2037a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld24.f 2038a5a4af3bSchristos int UNUSED written = 0; 2039a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2040a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2041a5a4af3bSchristos 2042a5a4af3bSchristos { 2043a5a4af3bSchristos SI opval = FLD (i_uimm24); 2044a5a4af3bSchristos * FLD (i_dr) = opval; 2045a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2046a5a4af3bSchristos } 2047a5a4af3bSchristos 2048a5a4af3bSchristos #undef FLD 2049a5a4af3bSchristos } 2050a5a4af3bSchristos NEXT (vpc); 2051a5a4af3bSchristos 2052a5a4af3bSchristos CASE (sem, INSN_LDI8) : /* ldi8 $dr,$simm8 */ 2053a5a4af3bSchristos { 2054a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2055a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2056a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 2057a5a4af3bSchristos int UNUSED written = 0; 2058a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2059a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2060a5a4af3bSchristos 2061a5a4af3bSchristos { 2062a5a4af3bSchristos SI opval = FLD (f_simm8); 2063a5a4af3bSchristos * FLD (i_dr) = opval; 2064a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2065a5a4af3bSchristos } 2066a5a4af3bSchristos 2067a5a4af3bSchristos #undef FLD 2068a5a4af3bSchristos } 2069a5a4af3bSchristos NEXT (vpc); 2070a5a4af3bSchristos 2071a5a4af3bSchristos CASE (sem, INSN_LDI16) : /* ldi16 $dr,$hash$slo16 */ 2072a5a4af3bSchristos { 2073a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2074a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2075a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 2076a5a4af3bSchristos int UNUSED written = 0; 2077a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2078a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2079a5a4af3bSchristos 2080a5a4af3bSchristos { 2081a5a4af3bSchristos SI opval = FLD (f_simm16); 2082a5a4af3bSchristos * FLD (i_dr) = opval; 2083a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2084a5a4af3bSchristos } 2085a5a4af3bSchristos 2086a5a4af3bSchristos #undef FLD 2087a5a4af3bSchristos } 2088a5a4af3bSchristos NEXT (vpc); 2089a5a4af3bSchristos 2090a5a4af3bSchristos CASE (sem, INSN_LOCK) : /* lock $dr,@$sr */ 2091a5a4af3bSchristos { 2092a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2093a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2094a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2095a5a4af3bSchristos int UNUSED written = 0; 2096a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2097a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2098a5a4af3bSchristos 2099a5a4af3bSchristos { 2100a5a4af3bSchristos { 2101a5a4af3bSchristos BI opval = 1; 2102a5a4af3bSchristos CPU (h_lock) = opval; 2103a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 2104a5a4af3bSchristos } 2105a5a4af3bSchristos { 2106a5a4af3bSchristos SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 2107a5a4af3bSchristos * FLD (i_dr) = opval; 2108a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2109a5a4af3bSchristos } 2110a5a4af3bSchristos } 2111a5a4af3bSchristos 2112a5a4af3bSchristos #undef FLD 2113a5a4af3bSchristos } 2114a5a4af3bSchristos NEXT (vpc); 2115a5a4af3bSchristos 2116a5a4af3bSchristos CASE (sem, INSN_MACHI_A) : /* machi $src1,$src2,$acc */ 2117a5a4af3bSchristos { 2118a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2119a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2120a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2121a5a4af3bSchristos int UNUSED written = 0; 2122a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2123a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2124a5a4af3bSchristos 2125a5a4af3bSchristos { 2126a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8); 2127a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2128a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2129a5a4af3bSchristos } 2130a5a4af3bSchristos 2131a5a4af3bSchristos #undef FLD 2132a5a4af3bSchristos } 2133a5a4af3bSchristos NEXT (vpc); 2134a5a4af3bSchristos 2135a5a4af3bSchristos CASE (sem, INSN_MACLO_A) : /* maclo $src1,$src2,$acc */ 2136a5a4af3bSchristos { 2137a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2138a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2139a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2140a5a4af3bSchristos int UNUSED written = 0; 2141a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2142a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2143a5a4af3bSchristos 2144a5a4af3bSchristos { 2145a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8); 2146a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2147a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2148a5a4af3bSchristos } 2149a5a4af3bSchristos 2150a5a4af3bSchristos #undef FLD 2151a5a4af3bSchristos } 2152a5a4af3bSchristos NEXT (vpc); 2153a5a4af3bSchristos 2154a5a4af3bSchristos CASE (sem, INSN_MACWHI_A) : /* macwhi $src1,$src2,$acc */ 2155a5a4af3bSchristos { 2156a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2157a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2158a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2159a5a4af3bSchristos int UNUSED written = 0; 2160a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2161a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2162a5a4af3bSchristos 2163a5a4af3bSchristos { 2164a5a4af3bSchristos DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))); 2165a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2166a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2167a5a4af3bSchristos } 2168a5a4af3bSchristos 2169a5a4af3bSchristos #undef FLD 2170a5a4af3bSchristos } 2171a5a4af3bSchristos NEXT (vpc); 2172a5a4af3bSchristos 2173a5a4af3bSchristos CASE (sem, INSN_MACWLO_A) : /* macwlo $src1,$src2,$acc */ 2174a5a4af3bSchristos { 2175a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2176a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2177a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2178a5a4af3bSchristos int UNUSED written = 0; 2179a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2180a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2181a5a4af3bSchristos 2182a5a4af3bSchristos { 2183a5a4af3bSchristos DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))); 2184a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2185a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2186a5a4af3bSchristos } 2187a5a4af3bSchristos 2188a5a4af3bSchristos #undef FLD 2189a5a4af3bSchristos } 2190a5a4af3bSchristos NEXT (vpc); 2191a5a4af3bSchristos 2192a5a4af3bSchristos CASE (sem, INSN_MUL) : /* mul $dr,$sr */ 2193a5a4af3bSchristos { 2194a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2195a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2196a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 2197a5a4af3bSchristos int UNUSED written = 0; 2198a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2199a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2200a5a4af3bSchristos 2201a5a4af3bSchristos { 2202a5a4af3bSchristos SI opval = MULSI (* FLD (i_dr), * FLD (i_sr)); 2203a5a4af3bSchristos * FLD (i_dr) = opval; 2204a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2205a5a4af3bSchristos } 2206a5a4af3bSchristos 2207a5a4af3bSchristos #undef FLD 2208a5a4af3bSchristos } 2209a5a4af3bSchristos NEXT (vpc); 2210a5a4af3bSchristos 2211a5a4af3bSchristos CASE (sem, INSN_MULHI_A) : /* mulhi $src1,$src2,$acc */ 2212a5a4af3bSchristos { 2213a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2214a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2215a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2216a5a4af3bSchristos int UNUSED written = 0; 2217a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2218a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2219a5a4af3bSchristos 2220a5a4af3bSchristos { 2221a5a4af3bSchristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16); 2222a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2223a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2224a5a4af3bSchristos } 2225a5a4af3bSchristos 2226a5a4af3bSchristos #undef FLD 2227a5a4af3bSchristos } 2228a5a4af3bSchristos NEXT (vpc); 2229a5a4af3bSchristos 2230a5a4af3bSchristos CASE (sem, INSN_MULLO_A) : /* mullo $src1,$src2,$acc */ 2231a5a4af3bSchristos { 2232a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2233a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2234a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2235a5a4af3bSchristos int UNUSED written = 0; 2236a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2237a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2238a5a4af3bSchristos 2239a5a4af3bSchristos { 2240a5a4af3bSchristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16); 2241a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2242a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2243a5a4af3bSchristos } 2244a5a4af3bSchristos 2245a5a4af3bSchristos #undef FLD 2246a5a4af3bSchristos } 2247a5a4af3bSchristos NEXT (vpc); 2248a5a4af3bSchristos 2249a5a4af3bSchristos CASE (sem, INSN_MULWHI_A) : /* mulwhi $src1,$src2,$acc */ 2250a5a4af3bSchristos { 2251a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2252a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2253a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2254a5a4af3bSchristos int UNUSED written = 0; 2255a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2256a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2257a5a4af3bSchristos 2258a5a4af3bSchristos { 2259a5a4af3bSchristos DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))); 2260a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2261a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2262a5a4af3bSchristos } 2263a5a4af3bSchristos 2264a5a4af3bSchristos #undef FLD 2265a5a4af3bSchristos } 2266a5a4af3bSchristos NEXT (vpc); 2267a5a4af3bSchristos 2268a5a4af3bSchristos CASE (sem, INSN_MULWLO_A) : /* mulwlo $src1,$src2,$acc */ 2269a5a4af3bSchristos { 2270a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2271a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2272a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 2273a5a4af3bSchristos int UNUSED written = 0; 2274a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2275a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2276a5a4af3bSchristos 2277a5a4af3bSchristos { 2278a5a4af3bSchristos DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))); 2279a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), opval); 2280a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2281a5a4af3bSchristos } 2282a5a4af3bSchristos 2283a5a4af3bSchristos #undef FLD 2284a5a4af3bSchristos } 2285a5a4af3bSchristos NEXT (vpc); 2286a5a4af3bSchristos 2287a5a4af3bSchristos CASE (sem, INSN_MV) : /* mv $dr,$sr */ 2288a5a4af3bSchristos { 2289a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2290a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2291a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2292a5a4af3bSchristos int UNUSED written = 0; 2293a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2294a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2295a5a4af3bSchristos 2296a5a4af3bSchristos { 2297a5a4af3bSchristos SI opval = * FLD (i_sr); 2298a5a4af3bSchristos * FLD (i_dr) = opval; 2299a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2300a5a4af3bSchristos } 2301a5a4af3bSchristos 2302a5a4af3bSchristos #undef FLD 2303a5a4af3bSchristos } 2304a5a4af3bSchristos NEXT (vpc); 2305a5a4af3bSchristos 2306a5a4af3bSchristos CASE (sem, INSN_MVFACHI_A) : /* mvfachi $dr,$accs */ 2307a5a4af3bSchristos { 2308a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2309a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2310a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 2311a5a4af3bSchristos int UNUSED written = 0; 2312a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2313a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2314a5a4af3bSchristos 2315a5a4af3bSchristos { 2316a5a4af3bSchristos SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32)); 2317a5a4af3bSchristos * FLD (i_dr) = opval; 2318a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2319a5a4af3bSchristos } 2320a5a4af3bSchristos 2321a5a4af3bSchristos #undef FLD 2322a5a4af3bSchristos } 2323a5a4af3bSchristos NEXT (vpc); 2324a5a4af3bSchristos 2325a5a4af3bSchristos CASE (sem, INSN_MVFACLO_A) : /* mvfaclo $dr,$accs */ 2326a5a4af3bSchristos { 2327a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2328a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2329a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 2330a5a4af3bSchristos int UNUSED written = 0; 2331a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2332a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2333a5a4af3bSchristos 2334a5a4af3bSchristos { 2335a5a4af3bSchristos SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs))); 2336a5a4af3bSchristos * FLD (i_dr) = opval; 2337a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2338a5a4af3bSchristos } 2339a5a4af3bSchristos 2340a5a4af3bSchristos #undef FLD 2341a5a4af3bSchristos } 2342a5a4af3bSchristos NEXT (vpc); 2343a5a4af3bSchristos 2344a5a4af3bSchristos CASE (sem, INSN_MVFACMI_A) : /* mvfacmi $dr,$accs */ 2345a5a4af3bSchristos { 2346a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2347a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2348a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 2349a5a4af3bSchristos int UNUSED written = 0; 2350a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2351a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2352a5a4af3bSchristos 2353a5a4af3bSchristos { 2354a5a4af3bSchristos SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16)); 2355a5a4af3bSchristos * FLD (i_dr) = opval; 2356a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2357a5a4af3bSchristos } 2358a5a4af3bSchristos 2359a5a4af3bSchristos #undef FLD 2360a5a4af3bSchristos } 2361a5a4af3bSchristos NEXT (vpc); 2362a5a4af3bSchristos 2363a5a4af3bSchristos CASE (sem, INSN_MVFC) : /* mvfc $dr,$scr */ 2364a5a4af3bSchristos { 2365a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2366a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2367a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2368a5a4af3bSchristos int UNUSED written = 0; 2369a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2370a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2371a5a4af3bSchristos 2372a5a4af3bSchristos { 2373a5a4af3bSchristos SI opval = GET_H_CR (FLD (f_r2)); 2374a5a4af3bSchristos * FLD (i_dr) = opval; 2375a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2376a5a4af3bSchristos } 2377a5a4af3bSchristos 2378a5a4af3bSchristos #undef FLD 2379a5a4af3bSchristos } 2380a5a4af3bSchristos NEXT (vpc); 2381a5a4af3bSchristos 2382a5a4af3bSchristos CASE (sem, INSN_MVTACHI_A) : /* mvtachi $src1,$accs */ 2383a5a4af3bSchristos { 2384a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2385a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2386a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 2387a5a4af3bSchristos int UNUSED written = 0; 2388a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2389a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2390a5a4af3bSchristos 2391a5a4af3bSchristos { 2392a5a4af3bSchristos DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32)); 2393a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accs), opval); 2394a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2395a5a4af3bSchristos } 2396a5a4af3bSchristos 2397a5a4af3bSchristos #undef FLD 2398a5a4af3bSchristos } 2399a5a4af3bSchristos NEXT (vpc); 2400a5a4af3bSchristos 2401a5a4af3bSchristos CASE (sem, INSN_MVTACLO_A) : /* mvtaclo $src1,$accs */ 2402a5a4af3bSchristos { 2403a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2404a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2405a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 2406a5a4af3bSchristos int UNUSED written = 0; 2407a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2408a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2409a5a4af3bSchristos 2410a5a4af3bSchristos { 2411a5a4af3bSchristos DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1))); 2412a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accs), opval); 2413a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2414a5a4af3bSchristos } 2415a5a4af3bSchristos 2416a5a4af3bSchristos #undef FLD 2417a5a4af3bSchristos } 2418a5a4af3bSchristos NEXT (vpc); 2419a5a4af3bSchristos 2420a5a4af3bSchristos CASE (sem, INSN_MVTC) : /* mvtc $sr,$dcr */ 2421a5a4af3bSchristos { 2422a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2423a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2424a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2425a5a4af3bSchristos int UNUSED written = 0; 2426a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2427a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2428a5a4af3bSchristos 2429a5a4af3bSchristos { 2430a5a4af3bSchristos USI opval = * FLD (i_sr); 2431a5a4af3bSchristos SET_H_CR (FLD (f_r1), opval); 2432a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 2433a5a4af3bSchristos } 2434a5a4af3bSchristos 2435a5a4af3bSchristos #undef FLD 2436a5a4af3bSchristos } 2437a5a4af3bSchristos NEXT (vpc); 2438a5a4af3bSchristos 2439a5a4af3bSchristos CASE (sem, INSN_NEG) : /* neg $dr,$sr */ 2440a5a4af3bSchristos { 2441a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2442a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2443a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2444a5a4af3bSchristos int UNUSED written = 0; 2445a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2446a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2447a5a4af3bSchristos 2448a5a4af3bSchristos { 2449a5a4af3bSchristos SI opval = NEGSI (* FLD (i_sr)); 2450a5a4af3bSchristos * FLD (i_dr) = opval; 2451a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2452a5a4af3bSchristos } 2453a5a4af3bSchristos 2454a5a4af3bSchristos #undef FLD 2455a5a4af3bSchristos } 2456a5a4af3bSchristos NEXT (vpc); 2457a5a4af3bSchristos 2458a5a4af3bSchristos CASE (sem, INSN_NOP) : /* nop */ 2459a5a4af3bSchristos { 2460a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2461a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2462a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 2463a5a4af3bSchristos int UNUSED written = 0; 2464a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2465a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2466a5a4af3bSchristos 2467a5a4af3bSchristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr); 2468a5a4af3bSchristos 2469a5a4af3bSchristos #undef FLD 2470a5a4af3bSchristos } 2471a5a4af3bSchristos NEXT (vpc); 2472a5a4af3bSchristos 2473a5a4af3bSchristos CASE (sem, INSN_NOT) : /* not $dr,$sr */ 2474a5a4af3bSchristos { 2475a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2476a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2477a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 2478a5a4af3bSchristos int UNUSED written = 0; 2479a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2480a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2481a5a4af3bSchristos 2482a5a4af3bSchristos { 2483a5a4af3bSchristos SI opval = INVSI (* FLD (i_sr)); 2484a5a4af3bSchristos * FLD (i_dr) = opval; 2485a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2486a5a4af3bSchristos } 2487a5a4af3bSchristos 2488a5a4af3bSchristos #undef FLD 2489a5a4af3bSchristos } 2490a5a4af3bSchristos NEXT (vpc); 2491a5a4af3bSchristos 2492a5a4af3bSchristos CASE (sem, INSN_RAC_DSI) : /* rac $accd,$accs,$imm1 */ 2493a5a4af3bSchristos { 2494a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2495a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2496a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 2497a5a4af3bSchristos int UNUSED written = 0; 2498a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2499a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2500a5a4af3bSchristos 2501a5a4af3bSchristos { 2502a5a4af3bSchristos DI tmp_tmp1; 2503a5a4af3bSchristos tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1)); 2504a5a4af3bSchristos tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768)); 2505a5a4af3bSchristos { 2506a5a4af3bSchristos DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000))); 2507a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accd), opval); 2508a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2509a5a4af3bSchristos } 2510a5a4af3bSchristos } 2511a5a4af3bSchristos 2512a5a4af3bSchristos #undef FLD 2513a5a4af3bSchristos } 2514a5a4af3bSchristos NEXT (vpc); 2515a5a4af3bSchristos 2516a5a4af3bSchristos CASE (sem, INSN_RACH_DSI) : /* rach $accd,$accs,$imm1 */ 2517a5a4af3bSchristos { 2518a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2519a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2520a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 2521a5a4af3bSchristos int UNUSED written = 0; 2522a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2523a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2524a5a4af3bSchristos 2525a5a4af3bSchristos { 2526a5a4af3bSchristos DI tmp_tmp1; 2527a5a4af3bSchristos tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1)); 2528a5a4af3bSchristos tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000)); 2529a5a4af3bSchristos { 2530a5a4af3bSchristos DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0))); 2531a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accd), opval); 2532a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 2533a5a4af3bSchristos } 2534a5a4af3bSchristos } 2535a5a4af3bSchristos 2536a5a4af3bSchristos #undef FLD 2537a5a4af3bSchristos } 2538a5a4af3bSchristos NEXT (vpc); 2539a5a4af3bSchristos 2540a5a4af3bSchristos CASE (sem, INSN_RTE) : /* rte */ 2541a5a4af3bSchristos { 2542a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2543a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2544a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 2545a5a4af3bSchristos int UNUSED written = 0; 2546a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2547a5a4af3bSchristos SEM_BRANCH_INIT 2548a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2549a5a4af3bSchristos 2550a5a4af3bSchristos { 2551a5a4af3bSchristos { 2552a5a4af3bSchristos USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4); 2553a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 2554a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 2555a5a4af3bSchristos } 2556a5a4af3bSchristos { 2557a5a4af3bSchristos USI opval = GET_H_CR (((UINT) 14)); 2558a5a4af3bSchristos SET_H_CR (((UINT) 6), opval); 2559a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 2560a5a4af3bSchristos } 2561a5a4af3bSchristos { 2562a5a4af3bSchristos UQI opval = CPU (h_bpsw); 2563a5a4af3bSchristos SET_H_PSW (opval); 2564a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 2565a5a4af3bSchristos } 2566a5a4af3bSchristos { 2567a5a4af3bSchristos UQI opval = CPU (h_bbpsw); 2568a5a4af3bSchristos CPU (h_bpsw) = opval; 2569a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 2570a5a4af3bSchristos } 2571a5a4af3bSchristos } 2572a5a4af3bSchristos 2573a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 2574a5a4af3bSchristos #undef FLD 2575a5a4af3bSchristos } 2576a5a4af3bSchristos NEXT (vpc); 2577a5a4af3bSchristos 2578a5a4af3bSchristos CASE (sem, INSN_SETH) : /* seth $dr,$hash$hi16 */ 2579a5a4af3bSchristos { 2580a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2581a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2582a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_seth.f 2583a5a4af3bSchristos int UNUSED written = 0; 2584a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2585a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2586a5a4af3bSchristos 2587a5a4af3bSchristos { 2588a5a4af3bSchristos SI opval = SLLSI (FLD (f_hi16), 16); 2589a5a4af3bSchristos * FLD (i_dr) = opval; 2590a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2591a5a4af3bSchristos } 2592a5a4af3bSchristos 2593a5a4af3bSchristos #undef FLD 2594a5a4af3bSchristos } 2595a5a4af3bSchristos NEXT (vpc); 2596a5a4af3bSchristos 2597a5a4af3bSchristos CASE (sem, INSN_SLL) : /* sll $dr,$sr */ 2598a5a4af3bSchristos { 2599a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2600a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2601a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 2602a5a4af3bSchristos int UNUSED written = 0; 2603a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2604a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2605a5a4af3bSchristos 2606a5a4af3bSchristos { 2607a5a4af3bSchristos SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 2608a5a4af3bSchristos * FLD (i_dr) = opval; 2609a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2610a5a4af3bSchristos } 2611a5a4af3bSchristos 2612a5a4af3bSchristos #undef FLD 2613a5a4af3bSchristos } 2614a5a4af3bSchristos NEXT (vpc); 2615a5a4af3bSchristos 2616a5a4af3bSchristos CASE (sem, INSN_SLL3) : /* sll3 $dr,$sr,$simm16 */ 2617a5a4af3bSchristos { 2618a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2619a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2620a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 2621a5a4af3bSchristos int UNUSED written = 0; 2622a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2623a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2624a5a4af3bSchristos 2625a5a4af3bSchristos { 2626a5a4af3bSchristos SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 2627a5a4af3bSchristos * FLD (i_dr) = opval; 2628a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2629a5a4af3bSchristos } 2630a5a4af3bSchristos 2631a5a4af3bSchristos #undef FLD 2632a5a4af3bSchristos } 2633a5a4af3bSchristos NEXT (vpc); 2634a5a4af3bSchristos 2635a5a4af3bSchristos CASE (sem, INSN_SLLI) : /* slli $dr,$uimm5 */ 2636a5a4af3bSchristos { 2637a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2638a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2639a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 2640a5a4af3bSchristos int UNUSED written = 0; 2641a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2642a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2643a5a4af3bSchristos 2644a5a4af3bSchristos { 2645a5a4af3bSchristos SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5)); 2646a5a4af3bSchristos * FLD (i_dr) = opval; 2647a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2648a5a4af3bSchristos } 2649a5a4af3bSchristos 2650a5a4af3bSchristos #undef FLD 2651a5a4af3bSchristos } 2652a5a4af3bSchristos NEXT (vpc); 2653a5a4af3bSchristos 2654a5a4af3bSchristos CASE (sem, INSN_SRA) : /* sra $dr,$sr */ 2655a5a4af3bSchristos { 2656a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2657a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2658a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 2659a5a4af3bSchristos int UNUSED written = 0; 2660a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2661a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2662a5a4af3bSchristos 2663a5a4af3bSchristos { 2664a5a4af3bSchristos SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 2665a5a4af3bSchristos * FLD (i_dr) = opval; 2666a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2667a5a4af3bSchristos } 2668a5a4af3bSchristos 2669a5a4af3bSchristos #undef FLD 2670a5a4af3bSchristos } 2671a5a4af3bSchristos NEXT (vpc); 2672a5a4af3bSchristos 2673a5a4af3bSchristos CASE (sem, INSN_SRA3) : /* sra3 $dr,$sr,$simm16 */ 2674a5a4af3bSchristos { 2675a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2676a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2677a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 2678a5a4af3bSchristos int UNUSED written = 0; 2679a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2680a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2681a5a4af3bSchristos 2682a5a4af3bSchristos { 2683a5a4af3bSchristos SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 2684a5a4af3bSchristos * FLD (i_dr) = opval; 2685a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2686a5a4af3bSchristos } 2687a5a4af3bSchristos 2688a5a4af3bSchristos #undef FLD 2689a5a4af3bSchristos } 2690a5a4af3bSchristos NEXT (vpc); 2691a5a4af3bSchristos 2692a5a4af3bSchristos CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */ 2693a5a4af3bSchristos { 2694a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2695a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2696a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 2697a5a4af3bSchristos int UNUSED written = 0; 2698a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2699a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2700a5a4af3bSchristos 2701a5a4af3bSchristos { 2702a5a4af3bSchristos SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5)); 2703a5a4af3bSchristos * FLD (i_dr) = opval; 2704a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2705a5a4af3bSchristos } 2706a5a4af3bSchristos 2707a5a4af3bSchristos #undef FLD 2708a5a4af3bSchristos } 2709a5a4af3bSchristos NEXT (vpc); 2710a5a4af3bSchristos 2711a5a4af3bSchristos CASE (sem, INSN_SRL) : /* srl $dr,$sr */ 2712a5a4af3bSchristos { 2713a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2714a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2715a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 2716a5a4af3bSchristos int UNUSED written = 0; 2717a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2718a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2719a5a4af3bSchristos 2720a5a4af3bSchristos { 2721a5a4af3bSchristos SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 2722a5a4af3bSchristos * FLD (i_dr) = opval; 2723a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2724a5a4af3bSchristos } 2725a5a4af3bSchristos 2726a5a4af3bSchristos #undef FLD 2727a5a4af3bSchristos } 2728a5a4af3bSchristos NEXT (vpc); 2729a5a4af3bSchristos 2730a5a4af3bSchristos CASE (sem, INSN_SRL3) : /* srl3 $dr,$sr,$simm16 */ 2731a5a4af3bSchristos { 2732a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2733a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2734a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f 2735a5a4af3bSchristos int UNUSED written = 0; 2736a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2737a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2738a5a4af3bSchristos 2739a5a4af3bSchristos { 2740a5a4af3bSchristos SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 2741a5a4af3bSchristos * FLD (i_dr) = opval; 2742a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2743a5a4af3bSchristos } 2744a5a4af3bSchristos 2745a5a4af3bSchristos #undef FLD 2746a5a4af3bSchristos } 2747a5a4af3bSchristos NEXT (vpc); 2748a5a4af3bSchristos 2749a5a4af3bSchristos CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */ 2750a5a4af3bSchristos { 2751a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2752a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2753a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 2754a5a4af3bSchristos int UNUSED written = 0; 2755a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2756a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2757a5a4af3bSchristos 2758a5a4af3bSchristos { 2759a5a4af3bSchristos SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5)); 2760a5a4af3bSchristos * FLD (i_dr) = opval; 2761a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2762a5a4af3bSchristos } 2763a5a4af3bSchristos 2764a5a4af3bSchristos #undef FLD 2765a5a4af3bSchristos } 2766a5a4af3bSchristos NEXT (vpc); 2767a5a4af3bSchristos 2768a5a4af3bSchristos CASE (sem, INSN_ST) : /* st $src1,@$src2 */ 2769a5a4af3bSchristos { 2770a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2771a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2772a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2773a5a4af3bSchristos int UNUSED written = 0; 2774a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2775a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2776a5a4af3bSchristos 2777a5a4af3bSchristos { 2778a5a4af3bSchristos SI opval = * FLD (i_src1); 2779a5a4af3bSchristos SETMEMSI (current_cpu, pc, * FLD (i_src2), opval); 2780a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2781a5a4af3bSchristos } 2782a5a4af3bSchristos 2783a5a4af3bSchristos #undef FLD 2784a5a4af3bSchristos } 2785a5a4af3bSchristos NEXT (vpc); 2786a5a4af3bSchristos 2787a5a4af3bSchristos CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */ 2788a5a4af3bSchristos { 2789a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2790a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2791a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 2792a5a4af3bSchristos int UNUSED written = 0; 2793a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2794a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2795a5a4af3bSchristos 2796a5a4af3bSchristos { 2797a5a4af3bSchristos SI opval = * FLD (i_src1); 2798a5a4af3bSchristos SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2799a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2800a5a4af3bSchristos } 2801a5a4af3bSchristos 2802a5a4af3bSchristos #undef FLD 2803a5a4af3bSchristos } 2804a5a4af3bSchristos NEXT (vpc); 2805a5a4af3bSchristos 2806a5a4af3bSchristos CASE (sem, INSN_STB) : /* stb $src1,@$src2 */ 2807a5a4af3bSchristos { 2808a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2809a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2810a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2811a5a4af3bSchristos int UNUSED written = 0; 2812a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2813a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2814a5a4af3bSchristos 2815a5a4af3bSchristos { 2816a5a4af3bSchristos QI opval = * FLD (i_src1); 2817a5a4af3bSchristos SETMEMQI (current_cpu, pc, * FLD (i_src2), opval); 2818a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2819a5a4af3bSchristos } 2820a5a4af3bSchristos 2821a5a4af3bSchristos #undef FLD 2822a5a4af3bSchristos } 2823a5a4af3bSchristos NEXT (vpc); 2824a5a4af3bSchristos 2825a5a4af3bSchristos CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */ 2826a5a4af3bSchristos { 2827a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2828a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2829a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 2830a5a4af3bSchristos int UNUSED written = 0; 2831a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2832a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2833a5a4af3bSchristos 2834a5a4af3bSchristos { 2835a5a4af3bSchristos QI opval = * FLD (i_src1); 2836a5a4af3bSchristos SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2837a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2838a5a4af3bSchristos } 2839a5a4af3bSchristos 2840a5a4af3bSchristos #undef FLD 2841a5a4af3bSchristos } 2842a5a4af3bSchristos NEXT (vpc); 2843a5a4af3bSchristos 2844a5a4af3bSchristos CASE (sem, INSN_STH) : /* sth $src1,@$src2 */ 2845a5a4af3bSchristos { 2846a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2847a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2848a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2849a5a4af3bSchristos int UNUSED written = 0; 2850a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2851a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2852a5a4af3bSchristos 2853a5a4af3bSchristos { 2854a5a4af3bSchristos HI opval = * FLD (i_src1); 2855a5a4af3bSchristos SETMEMHI (current_cpu, pc, * FLD (i_src2), opval); 2856a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2857a5a4af3bSchristos } 2858a5a4af3bSchristos 2859a5a4af3bSchristos #undef FLD 2860a5a4af3bSchristos } 2861a5a4af3bSchristos NEXT (vpc); 2862a5a4af3bSchristos 2863a5a4af3bSchristos CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */ 2864a5a4af3bSchristos { 2865a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2866a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2867a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f 2868a5a4af3bSchristos int UNUSED written = 0; 2869a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2870a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2871a5a4af3bSchristos 2872a5a4af3bSchristos { 2873a5a4af3bSchristos HI opval = * FLD (i_src1); 2874a5a4af3bSchristos SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2875a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2876a5a4af3bSchristos } 2877a5a4af3bSchristos 2878a5a4af3bSchristos #undef FLD 2879a5a4af3bSchristos } 2880a5a4af3bSchristos NEXT (vpc); 2881a5a4af3bSchristos 2882a5a4af3bSchristos CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */ 2883a5a4af3bSchristos { 2884a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2885a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2886a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2887a5a4af3bSchristos int UNUSED written = 0; 2888a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2889a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2890a5a4af3bSchristos 2891a5a4af3bSchristos { 2892a5a4af3bSchristos SI tmp_new_src2; 2893a5a4af3bSchristos tmp_new_src2 = ADDSI (* FLD (i_src2), 4); 2894a5a4af3bSchristos { 2895a5a4af3bSchristos SI opval = * FLD (i_src1); 2896a5a4af3bSchristos SETMEMSI (current_cpu, pc, tmp_new_src2, opval); 2897a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2898a5a4af3bSchristos } 2899a5a4af3bSchristos { 2900a5a4af3bSchristos SI opval = tmp_new_src2; 2901a5a4af3bSchristos * FLD (i_src2) = opval; 2902a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2903a5a4af3bSchristos } 2904a5a4af3bSchristos } 2905a5a4af3bSchristos 2906a5a4af3bSchristos #undef FLD 2907a5a4af3bSchristos } 2908a5a4af3bSchristos NEXT (vpc); 2909a5a4af3bSchristos 2910a5a4af3bSchristos CASE (sem, INSN_STH_PLUS) : /* sth $src1,@$src2+ */ 2911a5a4af3bSchristos { 2912a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2913a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2914a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2915a5a4af3bSchristos int UNUSED written = 0; 2916a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2917a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2918a5a4af3bSchristos 2919a5a4af3bSchristos { 2920a5a4af3bSchristos SI tmp_new_src2; 2921a5a4af3bSchristos tmp_new_src2 = * FLD (i_src2); 2922a5a4af3bSchristos { 2923a5a4af3bSchristos HI opval = * FLD (i_src1); 2924a5a4af3bSchristos SETMEMHI (current_cpu, pc, tmp_new_src2, opval); 2925a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2926a5a4af3bSchristos } 2927a5a4af3bSchristos { 2928a5a4af3bSchristos SI opval = ADDSI (tmp_new_src2, 2); 2929a5a4af3bSchristos * FLD (i_src2) = opval; 2930a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2931a5a4af3bSchristos } 2932a5a4af3bSchristos } 2933a5a4af3bSchristos 2934a5a4af3bSchristos #undef FLD 2935a5a4af3bSchristos } 2936a5a4af3bSchristos NEXT (vpc); 2937a5a4af3bSchristos 2938a5a4af3bSchristos CASE (sem, INSN_STB_PLUS) : /* stb $src1,@$src2+ */ 2939a5a4af3bSchristos { 2940a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2941a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2942a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2943a5a4af3bSchristos int UNUSED written = 0; 2944a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2945a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2946a5a4af3bSchristos 2947a5a4af3bSchristos { 2948a5a4af3bSchristos SI tmp_new_src2; 2949a5a4af3bSchristos tmp_new_src2 = * FLD (i_src2); 2950a5a4af3bSchristos { 2951a5a4af3bSchristos QI opval = * FLD (i_src1); 2952a5a4af3bSchristos SETMEMQI (current_cpu, pc, tmp_new_src2, opval); 2953a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2954a5a4af3bSchristos } 2955a5a4af3bSchristos { 2956a5a4af3bSchristos SI opval = ADDSI (tmp_new_src2, 1); 2957a5a4af3bSchristos * FLD (i_src2) = opval; 2958a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2959a5a4af3bSchristos } 2960a5a4af3bSchristos } 2961a5a4af3bSchristos 2962a5a4af3bSchristos #undef FLD 2963a5a4af3bSchristos } 2964a5a4af3bSchristos NEXT (vpc); 2965a5a4af3bSchristos 2966a5a4af3bSchristos CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */ 2967a5a4af3bSchristos { 2968a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2969a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2970a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 2971a5a4af3bSchristos int UNUSED written = 0; 2972a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 2973a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2974a5a4af3bSchristos 2975a5a4af3bSchristos { 2976a5a4af3bSchristos SI tmp_new_src2; 2977a5a4af3bSchristos tmp_new_src2 = SUBSI (* FLD (i_src2), 4); 2978a5a4af3bSchristos { 2979a5a4af3bSchristos SI opval = * FLD (i_src1); 2980a5a4af3bSchristos SETMEMSI (current_cpu, pc, tmp_new_src2, opval); 2981a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2982a5a4af3bSchristos } 2983a5a4af3bSchristos { 2984a5a4af3bSchristos SI opval = tmp_new_src2; 2985a5a4af3bSchristos * FLD (i_src2) = opval; 2986a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2987a5a4af3bSchristos } 2988a5a4af3bSchristos } 2989a5a4af3bSchristos 2990a5a4af3bSchristos #undef FLD 2991a5a4af3bSchristos } 2992a5a4af3bSchristos NEXT (vpc); 2993a5a4af3bSchristos 2994a5a4af3bSchristos CASE (sem, INSN_SUB) : /* sub $dr,$sr */ 2995a5a4af3bSchristos { 2996a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 2997a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2998a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 2999a5a4af3bSchristos int UNUSED written = 0; 3000a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3001a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3002a5a4af3bSchristos 3003a5a4af3bSchristos { 3004a5a4af3bSchristos SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr)); 3005a5a4af3bSchristos * FLD (i_dr) = opval; 3006a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3007a5a4af3bSchristos } 3008a5a4af3bSchristos 3009a5a4af3bSchristos #undef FLD 3010a5a4af3bSchristos } 3011a5a4af3bSchristos NEXT (vpc); 3012a5a4af3bSchristos 3013a5a4af3bSchristos CASE (sem, INSN_SUBV) : /* subv $dr,$sr */ 3014a5a4af3bSchristos { 3015a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3016a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3017a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3018a5a4af3bSchristos int UNUSED written = 0; 3019a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3020a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3021a5a4af3bSchristos 3022a5a4af3bSchristos { 3023a5a4af3bSchristos SI temp0;BI temp1; 3024a5a4af3bSchristos temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr)); 3025a5a4af3bSchristos temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0); 3026a5a4af3bSchristos { 3027a5a4af3bSchristos SI opval = temp0; 3028a5a4af3bSchristos * FLD (i_dr) = opval; 3029a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3030a5a4af3bSchristos } 3031a5a4af3bSchristos { 3032a5a4af3bSchristos BI opval = temp1; 3033a5a4af3bSchristos CPU (h_cond) = opval; 3034a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 3035a5a4af3bSchristos } 3036a5a4af3bSchristos } 3037a5a4af3bSchristos 3038a5a4af3bSchristos #undef FLD 3039a5a4af3bSchristos } 3040a5a4af3bSchristos NEXT (vpc); 3041a5a4af3bSchristos 3042a5a4af3bSchristos CASE (sem, INSN_SUBX) : /* subx $dr,$sr */ 3043a5a4af3bSchristos { 3044a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3045a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3046a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3047a5a4af3bSchristos int UNUSED written = 0; 3048a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3049a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3050a5a4af3bSchristos 3051a5a4af3bSchristos { 3052a5a4af3bSchristos SI temp0;BI temp1; 3053a5a4af3bSchristos temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 3054a5a4af3bSchristos temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 3055a5a4af3bSchristos { 3056a5a4af3bSchristos SI opval = temp0; 3057a5a4af3bSchristos * FLD (i_dr) = opval; 3058a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3059a5a4af3bSchristos } 3060a5a4af3bSchristos { 3061a5a4af3bSchristos BI opval = temp1; 3062a5a4af3bSchristos CPU (h_cond) = opval; 3063a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 3064a5a4af3bSchristos } 3065a5a4af3bSchristos } 3066a5a4af3bSchristos 3067a5a4af3bSchristos #undef FLD 3068a5a4af3bSchristos } 3069a5a4af3bSchristos NEXT (vpc); 3070a5a4af3bSchristos 3071a5a4af3bSchristos CASE (sem, INSN_TRAP) : /* trap $uimm4 */ 3072a5a4af3bSchristos { 3073a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3074a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3075a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f 3076a5a4af3bSchristos int UNUSED written = 0; 3077a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3078a5a4af3bSchristos SEM_BRANCH_INIT 3079a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3080a5a4af3bSchristos 3081a5a4af3bSchristos { 3082a5a4af3bSchristos { 3083a5a4af3bSchristos USI opval = GET_H_CR (((UINT) 6)); 3084a5a4af3bSchristos SET_H_CR (((UINT) 14), opval); 3085a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 3086a5a4af3bSchristos } 3087a5a4af3bSchristos { 3088a5a4af3bSchristos USI opval = ADDSI (pc, 4); 3089a5a4af3bSchristos SET_H_CR (((UINT) 6), opval); 3090a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 3091a5a4af3bSchristos } 3092a5a4af3bSchristos { 3093a5a4af3bSchristos UQI opval = CPU (h_bpsw); 3094a5a4af3bSchristos CPU (h_bbpsw) = opval; 3095a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval); 3096a5a4af3bSchristos } 3097a5a4af3bSchristos { 3098a5a4af3bSchristos UQI opval = GET_H_PSW (); 3099a5a4af3bSchristos CPU (h_bpsw) = opval; 3100a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 3101a5a4af3bSchristos } 3102a5a4af3bSchristos { 3103a5a4af3bSchristos UQI opval = ANDQI (GET_H_PSW (), 128); 3104a5a4af3bSchristos SET_H_PSW (opval); 3105a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 3106a5a4af3bSchristos } 3107a5a4af3bSchristos { 3108a5a4af3bSchristos SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4)); 3109a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 3110a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3111a5a4af3bSchristos } 3112a5a4af3bSchristos } 3113a5a4af3bSchristos 3114a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 3115a5a4af3bSchristos #undef FLD 3116a5a4af3bSchristos } 3117a5a4af3bSchristos NEXT (vpc); 3118a5a4af3bSchristos 3119a5a4af3bSchristos CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */ 3120a5a4af3bSchristos { 3121a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3122a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3123a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 3124a5a4af3bSchristos int UNUSED written = 0; 3125a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3126a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3127a5a4af3bSchristos 3128a5a4af3bSchristos { 3129a5a4af3bSchristos if (CPU (h_lock)) { 3130a5a4af3bSchristos { 3131a5a4af3bSchristos SI opval = * FLD (i_src1); 3132a5a4af3bSchristos SETMEMSI (current_cpu, pc, * FLD (i_src2), opval); 3133a5a4af3bSchristos written |= (1 << 4); 3134a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3135a5a4af3bSchristos } 3136a5a4af3bSchristos } 3137a5a4af3bSchristos { 3138a5a4af3bSchristos BI opval = 0; 3139a5a4af3bSchristos CPU (h_lock) = opval; 3140a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 3141a5a4af3bSchristos } 3142a5a4af3bSchristos } 3143a5a4af3bSchristos 3144a5a4af3bSchristos abuf->written = written; 3145a5a4af3bSchristos #undef FLD 3146a5a4af3bSchristos } 3147a5a4af3bSchristos NEXT (vpc); 3148a5a4af3bSchristos 3149a5a4af3bSchristos CASE (sem, INSN_SATB) : /* satb $dr,$sr */ 3150a5a4af3bSchristos { 3151a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3152a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3153a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 3154a5a4af3bSchristos int UNUSED written = 0; 3155a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3156a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3157a5a4af3bSchristos 3158a5a4af3bSchristos { 3159a5a4af3bSchristos SI opval = (GESI (* FLD (i_sr), 127)) ? (127) : (LESI (* FLD (i_sr), -128)) ? (-128) : (* FLD (i_sr)); 3160a5a4af3bSchristos * FLD (i_dr) = opval; 3161a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3162a5a4af3bSchristos } 3163a5a4af3bSchristos 3164a5a4af3bSchristos #undef FLD 3165a5a4af3bSchristos } 3166a5a4af3bSchristos NEXT (vpc); 3167a5a4af3bSchristos 3168a5a4af3bSchristos CASE (sem, INSN_SATH) : /* sath $dr,$sr */ 3169a5a4af3bSchristos { 3170a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3171a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3172a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 3173a5a4af3bSchristos int UNUSED written = 0; 3174a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3175a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3176a5a4af3bSchristos 3177a5a4af3bSchristos { 3178a5a4af3bSchristos SI opval = (GESI (* FLD (i_sr), 32767)) ? (32767) : (LESI (* FLD (i_sr), -32768)) ? (-32768) : (* FLD (i_sr)); 3179a5a4af3bSchristos * FLD (i_dr) = opval; 3180a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3181a5a4af3bSchristos } 3182a5a4af3bSchristos 3183a5a4af3bSchristos #undef FLD 3184a5a4af3bSchristos } 3185a5a4af3bSchristos NEXT (vpc); 3186a5a4af3bSchristos 3187a5a4af3bSchristos CASE (sem, INSN_SAT) : /* sat $dr,$sr */ 3188a5a4af3bSchristos { 3189a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3190a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3191a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 3192a5a4af3bSchristos int UNUSED written = 0; 3193a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3194a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3195a5a4af3bSchristos 3196a5a4af3bSchristos { 3197a5a4af3bSchristos SI opval = ((CPU (h_cond)) ? (((LTSI (* FLD (i_sr), 0)) ? (2147483647) : (0x80000000))) : (* FLD (i_sr))); 3198a5a4af3bSchristos * FLD (i_dr) = opval; 3199a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3200a5a4af3bSchristos } 3201a5a4af3bSchristos 3202a5a4af3bSchristos #undef FLD 3203a5a4af3bSchristos } 3204a5a4af3bSchristos NEXT (vpc); 3205a5a4af3bSchristos 3206a5a4af3bSchristos CASE (sem, INSN_PCMPBZ) : /* pcmpbz $src2 */ 3207a5a4af3bSchristos { 3208a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3209a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3210a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 3211a5a4af3bSchristos int UNUSED written = 0; 3212a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3213a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3214a5a4af3bSchristos 3215a5a4af3bSchristos { 3216a5a4af3bSchristos BI opval = (EQSI (ANDSI (* FLD (i_src2), 255), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 65280), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 0xff000000), 0)) ? (1) : (0); 3217a5a4af3bSchristos CPU (h_cond) = opval; 3218a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 3219a5a4af3bSchristos } 3220a5a4af3bSchristos 3221a5a4af3bSchristos #undef FLD 3222a5a4af3bSchristos } 3223a5a4af3bSchristos NEXT (vpc); 3224a5a4af3bSchristos 3225a5a4af3bSchristos CASE (sem, INSN_SADD) : /* sadd */ 3226a5a4af3bSchristos { 3227a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3228a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3229a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 3230a5a4af3bSchristos int UNUSED written = 0; 3231a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3232a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3233a5a4af3bSchristos 3234a5a4af3bSchristos { 3235a5a4af3bSchristos DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0))); 3236a5a4af3bSchristos SET_H_ACCUMS (((UINT) 0), opval); 3237a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 3238a5a4af3bSchristos } 3239a5a4af3bSchristos 3240a5a4af3bSchristos #undef FLD 3241a5a4af3bSchristos } 3242a5a4af3bSchristos NEXT (vpc); 3243a5a4af3bSchristos 3244a5a4af3bSchristos CASE (sem, INSN_MACWU1) : /* macwu1 $src1,$src2 */ 3245a5a4af3bSchristos { 3246a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3247a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3248a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 3249a5a4af3bSchristos int UNUSED written = 0; 3250a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3251a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3252a5a4af3bSchristos 3253a5a4af3bSchristos { 3254a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8); 3255a5a4af3bSchristos SET_H_ACCUMS (((UINT) 1), opval); 3256a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 3257a5a4af3bSchristos } 3258a5a4af3bSchristos 3259a5a4af3bSchristos #undef FLD 3260a5a4af3bSchristos } 3261a5a4af3bSchristos NEXT (vpc); 3262a5a4af3bSchristos 3263a5a4af3bSchristos CASE (sem, INSN_MSBLO) : /* msblo $src1,$src2 */ 3264a5a4af3bSchristos { 3265a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3266a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3267a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 3268a5a4af3bSchristos int UNUSED written = 0; 3269a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3270a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3271a5a4af3bSchristos 3272a5a4af3bSchristos { 3273a5a4af3bSchristos DI opval = SRADI (SLLDI (SUBDI (GET_H_ACCUM (), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (* FLD (i_src1))), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 32), 16)), 8), 8); 3274a5a4af3bSchristos SET_H_ACCUM (opval); 3275a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 3276a5a4af3bSchristos } 3277a5a4af3bSchristos 3278a5a4af3bSchristos #undef FLD 3279a5a4af3bSchristos } 3280a5a4af3bSchristos NEXT (vpc); 3281a5a4af3bSchristos 3282a5a4af3bSchristos CASE (sem, INSN_MULWU1) : /* mulwu1 $src1,$src2 */ 3283a5a4af3bSchristos { 3284a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3285a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3286a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 3287a5a4af3bSchristos int UNUSED written = 0; 3288a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3289a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3290a5a4af3bSchristos 3291a5a4af3bSchristos { 3292a5a4af3bSchristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16); 3293a5a4af3bSchristos SET_H_ACCUMS (((UINT) 1), opval); 3294a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 3295a5a4af3bSchristos } 3296a5a4af3bSchristos 3297a5a4af3bSchristos #undef FLD 3298a5a4af3bSchristos } 3299a5a4af3bSchristos NEXT (vpc); 3300a5a4af3bSchristos 3301a5a4af3bSchristos CASE (sem, INSN_MACLH1) : /* maclh1 $src1,$src2 */ 3302a5a4af3bSchristos { 3303a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3304a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3305a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 3306a5a4af3bSchristos int UNUSED written = 0; 3307a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3308a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3309a5a4af3bSchristos 3310a5a4af3bSchristos { 3311a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (* FLD (i_src1))), SRASI (* FLD (i_src2), 16))), 16)), 8), 8); 3312a5a4af3bSchristos SET_H_ACCUMS (((UINT) 1), opval); 3313a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 3314a5a4af3bSchristos } 3315a5a4af3bSchristos 3316a5a4af3bSchristos #undef FLD 3317a5a4af3bSchristos } 3318a5a4af3bSchristos NEXT (vpc); 3319a5a4af3bSchristos 3320a5a4af3bSchristos CASE (sem, INSN_SC) : /* sc */ 3321a5a4af3bSchristos { 3322a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3323a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3324a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 3325a5a4af3bSchristos int UNUSED written = 0; 3326a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3327a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3328a5a4af3bSchristos 3329a5a4af3bSchristos if (ZEXTBISI (CPU (h_cond))) 3330a5a4af3bSchristos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 3331a5a4af3bSchristos 3332a5a4af3bSchristos #undef FLD 3333a5a4af3bSchristos } 3334a5a4af3bSchristos NEXT (vpc); 3335a5a4af3bSchristos 3336a5a4af3bSchristos CASE (sem, INSN_SNC) : /* snc */ 3337a5a4af3bSchristos { 3338a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3339a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3340a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 3341a5a4af3bSchristos int UNUSED written = 0; 3342a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3343a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3344a5a4af3bSchristos 3345a5a4af3bSchristos if (ZEXTBISI (NOTBI (CPU (h_cond)))) 3346a5a4af3bSchristos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 3347a5a4af3bSchristos 3348a5a4af3bSchristos #undef FLD 3349a5a4af3bSchristos } 3350a5a4af3bSchristos NEXT (vpc); 3351a5a4af3bSchristos 3352a5a4af3bSchristos CASE (sem, INSN_CLRPSW) : /* clrpsw $uimm8 */ 3353a5a4af3bSchristos { 3354a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3355a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3356a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 3357a5a4af3bSchristos int UNUSED written = 0; 3358a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3359a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3360a5a4af3bSchristos 3361a5a4af3bSchristos { 3362a5a4af3bSchristos USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280)); 3363a5a4af3bSchristos SET_H_CR (((UINT) 0), opval); 3364a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 3365a5a4af3bSchristos } 3366a5a4af3bSchristos 3367a5a4af3bSchristos #undef FLD 3368a5a4af3bSchristos } 3369a5a4af3bSchristos NEXT (vpc); 3370a5a4af3bSchristos 3371a5a4af3bSchristos CASE (sem, INSN_SETPSW) : /* setpsw $uimm8 */ 3372a5a4af3bSchristos { 3373a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3374a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3375a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 3376a5a4af3bSchristos int UNUSED written = 0; 3377a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3378a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3379a5a4af3bSchristos 3380a5a4af3bSchristos { 3381a5a4af3bSchristos USI opval = FLD (f_uimm8); 3382a5a4af3bSchristos SET_H_CR (((UINT) 0), opval); 3383a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 3384a5a4af3bSchristos } 3385a5a4af3bSchristos 3386a5a4af3bSchristos #undef FLD 3387a5a4af3bSchristos } 3388a5a4af3bSchristos NEXT (vpc); 3389a5a4af3bSchristos 3390a5a4af3bSchristos CASE (sem, INSN_BSET) : /* bset $uimm3,@($slo16,$sr) */ 3391a5a4af3bSchristos { 3392a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3393a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3394a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 3395a5a4af3bSchristos int UNUSED written = 0; 3396a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3397a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3398a5a4af3bSchristos 3399a5a4af3bSchristos { 3400a5a4af3bSchristos QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3)))); 3401a5a4af3bSchristos SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval); 3402a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3403a5a4af3bSchristos } 3404a5a4af3bSchristos 3405a5a4af3bSchristos #undef FLD 3406a5a4af3bSchristos } 3407a5a4af3bSchristos NEXT (vpc); 3408a5a4af3bSchristos 3409a5a4af3bSchristos CASE (sem, INSN_BCLR) : /* bclr $uimm3,@($slo16,$sr) */ 3410a5a4af3bSchristos { 3411a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3412a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3413a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 3414a5a4af3bSchristos int UNUSED written = 0; 3415a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3416a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3417a5a4af3bSchristos 3418a5a4af3bSchristos { 3419a5a4af3bSchristos QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3))))); 3420a5a4af3bSchristos SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval); 3421a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3422a5a4af3bSchristos } 3423a5a4af3bSchristos 3424a5a4af3bSchristos #undef FLD 3425a5a4af3bSchristos } 3426a5a4af3bSchristos NEXT (vpc); 3427a5a4af3bSchristos 3428a5a4af3bSchristos CASE (sem, INSN_BTST) : /* btst $uimm3,$sr */ 3429a5a4af3bSchristos { 3430a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3431a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3432a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 3433a5a4af3bSchristos int UNUSED written = 0; 3434a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3435a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3436a5a4af3bSchristos 3437a5a4af3bSchristos { 3438a5a4af3bSchristos BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1); 3439a5a4af3bSchristos CPU (h_cond) = opval; 3440a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 3441a5a4af3bSchristos } 3442a5a4af3bSchristos 3443a5a4af3bSchristos #undef FLD 3444a5a4af3bSchristos } 3445a5a4af3bSchristos NEXT (vpc); 3446a5a4af3bSchristos 3447a5a4af3bSchristos CASE (sem, INSN_PAR_ADD) : /* add $dr,$sr */ 3448a5a4af3bSchristos { 3449a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3450a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3451a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3452a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3453a5a4af3bSchristos int UNUSED written = 0; 3454a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3455a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3456a5a4af3bSchristos 3457a5a4af3bSchristos { 3458a5a4af3bSchristos SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr)); 3459a5a4af3bSchristos OPRND (dr) = opval; 3460a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3461a5a4af3bSchristos } 3462a5a4af3bSchristos 3463a5a4af3bSchristos #undef OPRND 3464a5a4af3bSchristos #undef FLD 3465a5a4af3bSchristos } 3466a5a4af3bSchristos NEXT (vpc); 3467a5a4af3bSchristos 3468a5a4af3bSchristos CASE (sem, INSN_WRITE_ADD) : /* add $dr,$sr */ 3469a5a4af3bSchristos { 3470a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3471a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3472a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3473a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3474a5a4af3bSchristos int UNUSED written = abuf->written; 3475a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3476a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3477a5a4af3bSchristos 3478a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3479a5a4af3bSchristos 3480a5a4af3bSchristos #undef OPRND 3481a5a4af3bSchristos #undef FLD 3482a5a4af3bSchristos } 3483a5a4af3bSchristos NEXT (vpc); 3484a5a4af3bSchristos 3485a5a4af3bSchristos CASE (sem, INSN_PAR_AND) : /* and $dr,$sr */ 3486a5a4af3bSchristos { 3487a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3488a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3489a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3490a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3491a5a4af3bSchristos int UNUSED written = 0; 3492a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3493a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3494a5a4af3bSchristos 3495a5a4af3bSchristos { 3496a5a4af3bSchristos SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr)); 3497a5a4af3bSchristos OPRND (dr) = opval; 3498a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3499a5a4af3bSchristos } 3500a5a4af3bSchristos 3501a5a4af3bSchristos #undef OPRND 3502a5a4af3bSchristos #undef FLD 3503a5a4af3bSchristos } 3504a5a4af3bSchristos NEXT (vpc); 3505a5a4af3bSchristos 3506a5a4af3bSchristos CASE (sem, INSN_WRITE_AND) : /* and $dr,$sr */ 3507a5a4af3bSchristos { 3508a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3509a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3510a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3511a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3512a5a4af3bSchristos int UNUSED written = abuf->written; 3513a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3514a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3515a5a4af3bSchristos 3516a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3517a5a4af3bSchristos 3518a5a4af3bSchristos #undef OPRND 3519a5a4af3bSchristos #undef FLD 3520a5a4af3bSchristos } 3521a5a4af3bSchristos NEXT (vpc); 3522a5a4af3bSchristos 3523a5a4af3bSchristos CASE (sem, INSN_PAR_OR) : /* or $dr,$sr */ 3524a5a4af3bSchristos { 3525a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3526a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3527a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3528a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3529a5a4af3bSchristos int UNUSED written = 0; 3530a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3531a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3532a5a4af3bSchristos 3533a5a4af3bSchristos { 3534a5a4af3bSchristos SI opval = ORSI (* FLD (i_dr), * FLD (i_sr)); 3535a5a4af3bSchristos OPRND (dr) = opval; 3536a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3537a5a4af3bSchristos } 3538a5a4af3bSchristos 3539a5a4af3bSchristos #undef OPRND 3540a5a4af3bSchristos #undef FLD 3541a5a4af3bSchristos } 3542a5a4af3bSchristos NEXT (vpc); 3543a5a4af3bSchristos 3544a5a4af3bSchristos CASE (sem, INSN_WRITE_OR) : /* or $dr,$sr */ 3545a5a4af3bSchristos { 3546a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3547a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3548a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3549a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3550a5a4af3bSchristos int UNUSED written = abuf->written; 3551a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3552a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3553a5a4af3bSchristos 3554a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3555a5a4af3bSchristos 3556a5a4af3bSchristos #undef OPRND 3557a5a4af3bSchristos #undef FLD 3558a5a4af3bSchristos } 3559a5a4af3bSchristos NEXT (vpc); 3560a5a4af3bSchristos 3561a5a4af3bSchristos CASE (sem, INSN_PAR_XOR) : /* xor $dr,$sr */ 3562a5a4af3bSchristos { 3563a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3564a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3565a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3566a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3567a5a4af3bSchristos int UNUSED written = 0; 3568a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3569a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3570a5a4af3bSchristos 3571a5a4af3bSchristos { 3572a5a4af3bSchristos SI opval = XORSI (* FLD (i_dr), * FLD (i_sr)); 3573a5a4af3bSchristos OPRND (dr) = opval; 3574a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3575a5a4af3bSchristos } 3576a5a4af3bSchristos 3577a5a4af3bSchristos #undef OPRND 3578a5a4af3bSchristos #undef FLD 3579a5a4af3bSchristos } 3580a5a4af3bSchristos NEXT (vpc); 3581a5a4af3bSchristos 3582a5a4af3bSchristos CASE (sem, INSN_WRITE_XOR) : /* xor $dr,$sr */ 3583a5a4af3bSchristos { 3584a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3585a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3586a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3587a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 3588a5a4af3bSchristos int UNUSED written = abuf->written; 3589a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3590a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3591a5a4af3bSchristos 3592a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3593a5a4af3bSchristos 3594a5a4af3bSchristos #undef OPRND 3595a5a4af3bSchristos #undef FLD 3596a5a4af3bSchristos } 3597a5a4af3bSchristos NEXT (vpc); 3598a5a4af3bSchristos 3599a5a4af3bSchristos CASE (sem, INSN_PAR_ADDI) : /* addi $dr,$simm8 */ 3600a5a4af3bSchristos { 3601a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3602a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3603a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 3604a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addi.f 3605a5a4af3bSchristos int UNUSED written = 0; 3606a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3607a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3608a5a4af3bSchristos 3609a5a4af3bSchristos { 3610a5a4af3bSchristos SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8)); 3611a5a4af3bSchristos OPRND (dr) = opval; 3612a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3613a5a4af3bSchristos } 3614a5a4af3bSchristos 3615a5a4af3bSchristos #undef OPRND 3616a5a4af3bSchristos #undef FLD 3617a5a4af3bSchristos } 3618a5a4af3bSchristos NEXT (vpc); 3619a5a4af3bSchristos 3620a5a4af3bSchristos CASE (sem, INSN_WRITE_ADDI) : /* addi $dr,$simm8 */ 3621a5a4af3bSchristos { 3622a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3623a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3624a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 3625a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addi.f 3626a5a4af3bSchristos int UNUSED written = abuf->written; 3627a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3628a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3629a5a4af3bSchristos 3630a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3631a5a4af3bSchristos 3632a5a4af3bSchristos #undef OPRND 3633a5a4af3bSchristos #undef FLD 3634a5a4af3bSchristos } 3635a5a4af3bSchristos NEXT (vpc); 3636a5a4af3bSchristos 3637a5a4af3bSchristos CASE (sem, INSN_PAR_ADDV) : /* addv $dr,$sr */ 3638a5a4af3bSchristos { 3639a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3640a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3641a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3642a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f 3643a5a4af3bSchristos int UNUSED written = 0; 3644a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3645a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3646a5a4af3bSchristos 3647a5a4af3bSchristos { 3648a5a4af3bSchristos SI temp0;BI temp1; 3649a5a4af3bSchristos temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr)); 3650a5a4af3bSchristos temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0); 3651a5a4af3bSchristos { 3652a5a4af3bSchristos SI opval = temp0; 3653a5a4af3bSchristos OPRND (dr) = opval; 3654a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3655a5a4af3bSchristos } 3656a5a4af3bSchristos { 3657a5a4af3bSchristos BI opval = temp1; 3658a5a4af3bSchristos OPRND (condbit) = opval; 3659a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 3660a5a4af3bSchristos } 3661a5a4af3bSchristos } 3662a5a4af3bSchristos 3663a5a4af3bSchristos #undef OPRND 3664a5a4af3bSchristos #undef FLD 3665a5a4af3bSchristos } 3666a5a4af3bSchristos NEXT (vpc); 3667a5a4af3bSchristos 3668a5a4af3bSchristos CASE (sem, INSN_WRITE_ADDV) : /* addv $dr,$sr */ 3669a5a4af3bSchristos { 3670a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3671a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3672a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3673a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f 3674a5a4af3bSchristos int UNUSED written = abuf->written; 3675a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3676a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3677a5a4af3bSchristos 3678a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 3679a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3680a5a4af3bSchristos 3681a5a4af3bSchristos #undef OPRND 3682a5a4af3bSchristos #undef FLD 3683a5a4af3bSchristos } 3684a5a4af3bSchristos NEXT (vpc); 3685a5a4af3bSchristos 3686a5a4af3bSchristos CASE (sem, INSN_PAR_ADDX) : /* addx $dr,$sr */ 3687a5a4af3bSchristos { 3688a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3689a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3690a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3691a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f 3692a5a4af3bSchristos int UNUSED written = 0; 3693a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3694a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3695a5a4af3bSchristos 3696a5a4af3bSchristos { 3697a5a4af3bSchristos SI temp0;BI temp1; 3698a5a4af3bSchristos temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 3699a5a4af3bSchristos temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 3700a5a4af3bSchristos { 3701a5a4af3bSchristos SI opval = temp0; 3702a5a4af3bSchristos OPRND (dr) = opval; 3703a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3704a5a4af3bSchristos } 3705a5a4af3bSchristos { 3706a5a4af3bSchristos BI opval = temp1; 3707a5a4af3bSchristos OPRND (condbit) = opval; 3708a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 3709a5a4af3bSchristos } 3710a5a4af3bSchristos } 3711a5a4af3bSchristos 3712a5a4af3bSchristos #undef OPRND 3713a5a4af3bSchristos #undef FLD 3714a5a4af3bSchristos } 3715a5a4af3bSchristos NEXT (vpc); 3716a5a4af3bSchristos 3717a5a4af3bSchristos CASE (sem, INSN_WRITE_ADDX) : /* addx $dr,$sr */ 3718a5a4af3bSchristos { 3719a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3720a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3721a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 3722a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f 3723a5a4af3bSchristos int UNUSED written = abuf->written; 3724a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3725a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3726a5a4af3bSchristos 3727a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 3728a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 3729a5a4af3bSchristos 3730a5a4af3bSchristos #undef OPRND 3731a5a4af3bSchristos #undef FLD 3732a5a4af3bSchristos } 3733a5a4af3bSchristos NEXT (vpc); 3734a5a4af3bSchristos 3735a5a4af3bSchristos CASE (sem, INSN_PAR_BC8) : /* bc.s $disp8 */ 3736a5a4af3bSchristos { 3737a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3738a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3739a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3740a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f 3741a5a4af3bSchristos int UNUSED written = 0; 3742a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3743a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3744a5a4af3bSchristos 3745a5a4af3bSchristos if (CPU (h_cond)) { 3746a5a4af3bSchristos { 3747a5a4af3bSchristos USI opval = FLD (i_disp8); 3748a5a4af3bSchristos OPRND (pc) = opval; 3749a5a4af3bSchristos written |= (1 << 2); 3750a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3751a5a4af3bSchristos } 3752a5a4af3bSchristos } 3753a5a4af3bSchristos 3754a5a4af3bSchristos abuf->written = written; 3755a5a4af3bSchristos #undef OPRND 3756a5a4af3bSchristos #undef FLD 3757a5a4af3bSchristos } 3758a5a4af3bSchristos NEXT (vpc); 3759a5a4af3bSchristos 3760a5a4af3bSchristos CASE (sem, INSN_WRITE_BC8) : /* bc.s $disp8 */ 3761a5a4af3bSchristos { 3762a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3763a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3764a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3765a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f 3766a5a4af3bSchristos int UNUSED written = abuf->written; 3767a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3768a5a4af3bSchristos SEM_BRANCH_INIT 3769a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3770a5a4af3bSchristos 3771a5a4af3bSchristos if (written & (1 << 2)) 3772a5a4af3bSchristos { 3773a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 3774a5a4af3bSchristos } 3775a5a4af3bSchristos 3776a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 3777a5a4af3bSchristos #undef OPRND 3778a5a4af3bSchristos #undef FLD 3779a5a4af3bSchristos } 3780a5a4af3bSchristos NEXT (vpc); 3781a5a4af3bSchristos 3782a5a4af3bSchristos CASE (sem, INSN_PAR_BL8) : /* bl.s $disp8 */ 3783a5a4af3bSchristos { 3784a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3785a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3786a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3787a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bl8.f 3788a5a4af3bSchristos int UNUSED written = 0; 3789a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3790a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3791a5a4af3bSchristos 3792a5a4af3bSchristos { 3793a5a4af3bSchristos { 3794a5a4af3bSchristos SI opval = ADDSI (ANDSI (pc, -4), 4); 3795a5a4af3bSchristos OPRND (h_gr_SI_14) = opval; 3796a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3797a5a4af3bSchristos } 3798a5a4af3bSchristos { 3799a5a4af3bSchristos USI opval = FLD (i_disp8); 3800a5a4af3bSchristos OPRND (pc) = opval; 3801a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3802a5a4af3bSchristos } 3803a5a4af3bSchristos } 3804a5a4af3bSchristos 3805a5a4af3bSchristos #undef OPRND 3806a5a4af3bSchristos #undef FLD 3807a5a4af3bSchristos } 3808a5a4af3bSchristos NEXT (vpc); 3809a5a4af3bSchristos 3810a5a4af3bSchristos CASE (sem, INSN_WRITE_BL8) : /* bl.s $disp8 */ 3811a5a4af3bSchristos { 3812a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3813a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3814a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3815a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bl8.f 3816a5a4af3bSchristos int UNUSED written = abuf->written; 3817a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3818a5a4af3bSchristos SEM_BRANCH_INIT 3819a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3820a5a4af3bSchristos 3821a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14); 3822a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 3823a5a4af3bSchristos 3824a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 3825a5a4af3bSchristos #undef OPRND 3826a5a4af3bSchristos #undef FLD 3827a5a4af3bSchristos } 3828a5a4af3bSchristos NEXT (vpc); 3829a5a4af3bSchristos 3830a5a4af3bSchristos CASE (sem, INSN_PAR_BCL8) : /* bcl.s $disp8 */ 3831a5a4af3bSchristos { 3832a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3833a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3834a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3835a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f 3836a5a4af3bSchristos int UNUSED written = 0; 3837a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3838a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3839a5a4af3bSchristos 3840a5a4af3bSchristos if (CPU (h_cond)) { 3841a5a4af3bSchristos { 3842a5a4af3bSchristos { 3843a5a4af3bSchristos SI opval = ADDSI (ANDSI (pc, -4), 4); 3844a5a4af3bSchristos OPRND (h_gr_SI_14) = opval; 3845a5a4af3bSchristos written |= (1 << 3); 3846a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3847a5a4af3bSchristos } 3848a5a4af3bSchristos { 3849a5a4af3bSchristos USI opval = FLD (i_disp8); 3850a5a4af3bSchristos OPRND (pc) = opval; 3851a5a4af3bSchristos written |= (1 << 4); 3852a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3853a5a4af3bSchristos } 3854a5a4af3bSchristos } 3855a5a4af3bSchristos } 3856a5a4af3bSchristos 3857a5a4af3bSchristos abuf->written = written; 3858a5a4af3bSchristos #undef OPRND 3859a5a4af3bSchristos #undef FLD 3860a5a4af3bSchristos } 3861a5a4af3bSchristos NEXT (vpc); 3862a5a4af3bSchristos 3863a5a4af3bSchristos CASE (sem, INSN_WRITE_BCL8) : /* bcl.s $disp8 */ 3864a5a4af3bSchristos { 3865a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3866a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3867a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3868a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f 3869a5a4af3bSchristos int UNUSED written = abuf->written; 3870a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3871a5a4af3bSchristos SEM_BRANCH_INIT 3872a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3873a5a4af3bSchristos 3874a5a4af3bSchristos if (written & (1 << 3)) 3875a5a4af3bSchristos { 3876a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14); 3877a5a4af3bSchristos } 3878a5a4af3bSchristos if (written & (1 << 4)) 3879a5a4af3bSchristos { 3880a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 3881a5a4af3bSchristos } 3882a5a4af3bSchristos 3883a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 3884a5a4af3bSchristos #undef OPRND 3885a5a4af3bSchristos #undef FLD 3886a5a4af3bSchristos } 3887a5a4af3bSchristos NEXT (vpc); 3888a5a4af3bSchristos 3889a5a4af3bSchristos CASE (sem, INSN_PAR_BNC8) : /* bnc.s $disp8 */ 3890a5a4af3bSchristos { 3891a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3892a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3893a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3894a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f 3895a5a4af3bSchristos int UNUSED written = 0; 3896a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3897a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3898a5a4af3bSchristos 3899a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 3900a5a4af3bSchristos { 3901a5a4af3bSchristos USI opval = FLD (i_disp8); 3902a5a4af3bSchristos OPRND (pc) = opval; 3903a5a4af3bSchristos written |= (1 << 2); 3904a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3905a5a4af3bSchristos } 3906a5a4af3bSchristos } 3907a5a4af3bSchristos 3908a5a4af3bSchristos abuf->written = written; 3909a5a4af3bSchristos #undef OPRND 3910a5a4af3bSchristos #undef FLD 3911a5a4af3bSchristos } 3912a5a4af3bSchristos NEXT (vpc); 3913a5a4af3bSchristos 3914a5a4af3bSchristos CASE (sem, INSN_WRITE_BNC8) : /* bnc.s $disp8 */ 3915a5a4af3bSchristos { 3916a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3917a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3918a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3919a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f 3920a5a4af3bSchristos int UNUSED written = abuf->written; 3921a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3922a5a4af3bSchristos SEM_BRANCH_INIT 3923a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3924a5a4af3bSchristos 3925a5a4af3bSchristos if (written & (1 << 2)) 3926a5a4af3bSchristos { 3927a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 3928a5a4af3bSchristos } 3929a5a4af3bSchristos 3930a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 3931a5a4af3bSchristos #undef OPRND 3932a5a4af3bSchristos #undef FLD 3933a5a4af3bSchristos } 3934a5a4af3bSchristos NEXT (vpc); 3935a5a4af3bSchristos 3936a5a4af3bSchristos CASE (sem, INSN_PAR_BRA8) : /* bra.s $disp8 */ 3937a5a4af3bSchristos { 3938a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3939a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3940a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3941a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bra8.f 3942a5a4af3bSchristos int UNUSED written = 0; 3943a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3944a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3945a5a4af3bSchristos 3946a5a4af3bSchristos { 3947a5a4af3bSchristos USI opval = FLD (i_disp8); 3948a5a4af3bSchristos OPRND (pc) = opval; 3949a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3950a5a4af3bSchristos } 3951a5a4af3bSchristos 3952a5a4af3bSchristos #undef OPRND 3953a5a4af3bSchristos #undef FLD 3954a5a4af3bSchristos } 3955a5a4af3bSchristos NEXT (vpc); 3956a5a4af3bSchristos 3957a5a4af3bSchristos CASE (sem, INSN_WRITE_BRA8) : /* bra.s $disp8 */ 3958a5a4af3bSchristos { 3959a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3960a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 3961a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3962a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bra8.f 3963a5a4af3bSchristos int UNUSED written = abuf->written; 3964a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3965a5a4af3bSchristos SEM_BRANCH_INIT 3966a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 3967a5a4af3bSchristos 3968a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 3969a5a4af3bSchristos 3970a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 3971a5a4af3bSchristos #undef OPRND 3972a5a4af3bSchristos #undef FLD 3973a5a4af3bSchristos } 3974a5a4af3bSchristos NEXT (vpc); 3975a5a4af3bSchristos 3976a5a4af3bSchristos CASE (sem, INSN_PAR_BNCL8) : /* bncl.s $disp8 */ 3977a5a4af3bSchristos { 3978a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 3979a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3980a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 3981a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f 3982a5a4af3bSchristos int UNUSED written = 0; 3983a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 3984a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 3985a5a4af3bSchristos 3986a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 3987a5a4af3bSchristos { 3988a5a4af3bSchristos { 3989a5a4af3bSchristos SI opval = ADDSI (ANDSI (pc, -4), 4); 3990a5a4af3bSchristos OPRND (h_gr_SI_14) = opval; 3991a5a4af3bSchristos written |= (1 << 3); 3992a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3993a5a4af3bSchristos } 3994a5a4af3bSchristos { 3995a5a4af3bSchristos USI opval = FLD (i_disp8); 3996a5a4af3bSchristos OPRND (pc) = opval; 3997a5a4af3bSchristos written |= (1 << 4); 3998a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3999a5a4af3bSchristos } 4000a5a4af3bSchristos } 4001a5a4af3bSchristos } 4002a5a4af3bSchristos 4003a5a4af3bSchristos abuf->written = written; 4004a5a4af3bSchristos #undef OPRND 4005a5a4af3bSchristos #undef FLD 4006a5a4af3bSchristos } 4007a5a4af3bSchristos NEXT (vpc); 4008a5a4af3bSchristos 4009a5a4af3bSchristos CASE (sem, INSN_WRITE_BNCL8) : /* bncl.s $disp8 */ 4010a5a4af3bSchristos { 4011a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4012a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4013a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f 4014a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f 4015a5a4af3bSchristos int UNUSED written = abuf->written; 4016a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4017a5a4af3bSchristos SEM_BRANCH_INIT 4018a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4019a5a4af3bSchristos 4020a5a4af3bSchristos if (written & (1 << 3)) 4021a5a4af3bSchristos { 4022a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14); 4023a5a4af3bSchristos } 4024a5a4af3bSchristos if (written & (1 << 4)) 4025a5a4af3bSchristos { 4026a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 4027a5a4af3bSchristos } 4028a5a4af3bSchristos 4029a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 4030a5a4af3bSchristos #undef OPRND 4031a5a4af3bSchristos #undef FLD 4032a5a4af3bSchristos } 4033a5a4af3bSchristos NEXT (vpc); 4034a5a4af3bSchristos 4035a5a4af3bSchristos CASE (sem, INSN_PAR_CMP) : /* cmp $src1,$src2 */ 4036a5a4af3bSchristos { 4037a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4038a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4039a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4040a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f 4041a5a4af3bSchristos int UNUSED written = 0; 4042a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4043a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4044a5a4af3bSchristos 4045a5a4af3bSchristos { 4046a5a4af3bSchristos BI opval = LTSI (* FLD (i_src1), * FLD (i_src2)); 4047a5a4af3bSchristos OPRND (condbit) = opval; 4048a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 4049a5a4af3bSchristos } 4050a5a4af3bSchristos 4051a5a4af3bSchristos #undef OPRND 4052a5a4af3bSchristos #undef FLD 4053a5a4af3bSchristos } 4054a5a4af3bSchristos NEXT (vpc); 4055a5a4af3bSchristos 4056a5a4af3bSchristos CASE (sem, INSN_WRITE_CMP) : /* cmp $src1,$src2 */ 4057a5a4af3bSchristos { 4058a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4059a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4060a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4061a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f 4062a5a4af3bSchristos int UNUSED written = abuf->written; 4063a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4064a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4065a5a4af3bSchristos 4066a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 4067a5a4af3bSchristos 4068a5a4af3bSchristos #undef OPRND 4069a5a4af3bSchristos #undef FLD 4070a5a4af3bSchristos } 4071a5a4af3bSchristos NEXT (vpc); 4072a5a4af3bSchristos 4073a5a4af3bSchristos CASE (sem, INSN_PAR_CMPU) : /* cmpu $src1,$src2 */ 4074a5a4af3bSchristos { 4075a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4076a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4077a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4078a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f 4079a5a4af3bSchristos int UNUSED written = 0; 4080a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4081a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4082a5a4af3bSchristos 4083a5a4af3bSchristos { 4084a5a4af3bSchristos BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2)); 4085a5a4af3bSchristos OPRND (condbit) = opval; 4086a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 4087a5a4af3bSchristos } 4088a5a4af3bSchristos 4089a5a4af3bSchristos #undef OPRND 4090a5a4af3bSchristos #undef FLD 4091a5a4af3bSchristos } 4092a5a4af3bSchristos NEXT (vpc); 4093a5a4af3bSchristos 4094a5a4af3bSchristos CASE (sem, INSN_WRITE_CMPU) : /* cmpu $src1,$src2 */ 4095a5a4af3bSchristos { 4096a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4097a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4098a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4099a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f 4100a5a4af3bSchristos int UNUSED written = abuf->written; 4101a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4102a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4103a5a4af3bSchristos 4104a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 4105a5a4af3bSchristos 4106a5a4af3bSchristos #undef OPRND 4107a5a4af3bSchristos #undef FLD 4108a5a4af3bSchristos } 4109a5a4af3bSchristos NEXT (vpc); 4110a5a4af3bSchristos 4111a5a4af3bSchristos CASE (sem, INSN_PAR_CMPEQ) : /* cmpeq $src1,$src2 */ 4112a5a4af3bSchristos { 4113a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4114a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4115a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4116a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f 4117a5a4af3bSchristos int UNUSED written = 0; 4118a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4119a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4120a5a4af3bSchristos 4121a5a4af3bSchristos { 4122a5a4af3bSchristos BI opval = EQSI (* FLD (i_src1), * FLD (i_src2)); 4123a5a4af3bSchristos OPRND (condbit) = opval; 4124a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 4125a5a4af3bSchristos } 4126a5a4af3bSchristos 4127a5a4af3bSchristos #undef OPRND 4128a5a4af3bSchristos #undef FLD 4129a5a4af3bSchristos } 4130a5a4af3bSchristos NEXT (vpc); 4131a5a4af3bSchristos 4132a5a4af3bSchristos CASE (sem, INSN_WRITE_CMPEQ) : /* cmpeq $src1,$src2 */ 4133a5a4af3bSchristos { 4134a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4135a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4136a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4137a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f 4138a5a4af3bSchristos int UNUSED written = abuf->written; 4139a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4140a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4141a5a4af3bSchristos 4142a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 4143a5a4af3bSchristos 4144a5a4af3bSchristos #undef OPRND 4145a5a4af3bSchristos #undef FLD 4146a5a4af3bSchristos } 4147a5a4af3bSchristos NEXT (vpc); 4148a5a4af3bSchristos 4149a5a4af3bSchristos CASE (sem, INSN_PAR_CMPZ) : /* cmpz $src2 */ 4150a5a4af3bSchristos { 4151a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4152a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4153a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4154a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f 4155a5a4af3bSchristos int UNUSED written = 0; 4156a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4157a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4158a5a4af3bSchristos 4159a5a4af3bSchristos { 4160a5a4af3bSchristos BI opval = EQSI (* FLD (i_src2), 0); 4161a5a4af3bSchristos OPRND (condbit) = opval; 4162a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 4163a5a4af3bSchristos } 4164a5a4af3bSchristos 4165a5a4af3bSchristos #undef OPRND 4166a5a4af3bSchristos #undef FLD 4167a5a4af3bSchristos } 4168a5a4af3bSchristos NEXT (vpc); 4169a5a4af3bSchristos 4170a5a4af3bSchristos CASE (sem, INSN_WRITE_CMPZ) : /* cmpz $src2 */ 4171a5a4af3bSchristos { 4172a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4173a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4174a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 4175a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f 4176a5a4af3bSchristos int UNUSED written = abuf->written; 4177a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4178a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4179a5a4af3bSchristos 4180a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 4181a5a4af3bSchristos 4182a5a4af3bSchristos #undef OPRND 4183a5a4af3bSchristos #undef FLD 4184a5a4af3bSchristos } 4185a5a4af3bSchristos NEXT (vpc); 4186a5a4af3bSchristos 4187a5a4af3bSchristos CASE (sem, INSN_PAR_JC) : /* jc $sr */ 4188a5a4af3bSchristos { 4189a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4190a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4191a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4192a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f 4193a5a4af3bSchristos int UNUSED written = 0; 4194a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4195a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4196a5a4af3bSchristos 4197a5a4af3bSchristos if (CPU (h_cond)) { 4198a5a4af3bSchristos { 4199a5a4af3bSchristos USI opval = ANDSI (* FLD (i_sr), -4); 4200a5a4af3bSchristos OPRND (pc) = opval; 4201a5a4af3bSchristos written |= (1 << 2); 4202a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 4203a5a4af3bSchristos } 4204a5a4af3bSchristos } 4205a5a4af3bSchristos 4206a5a4af3bSchristos abuf->written = written; 4207a5a4af3bSchristos #undef OPRND 4208a5a4af3bSchristos #undef FLD 4209a5a4af3bSchristos } 4210a5a4af3bSchristos NEXT (vpc); 4211a5a4af3bSchristos 4212a5a4af3bSchristos CASE (sem, INSN_WRITE_JC) : /* jc $sr */ 4213a5a4af3bSchristos { 4214a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4215a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4216a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4217a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f 4218a5a4af3bSchristos int UNUSED written = abuf->written; 4219a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4220a5a4af3bSchristos SEM_BRANCH_INIT 4221a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4222a5a4af3bSchristos 4223a5a4af3bSchristos if (written & (1 << 2)) 4224a5a4af3bSchristos { 4225a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 4226a5a4af3bSchristos } 4227a5a4af3bSchristos 4228a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 4229a5a4af3bSchristos #undef OPRND 4230a5a4af3bSchristos #undef FLD 4231a5a4af3bSchristos } 4232a5a4af3bSchristos NEXT (vpc); 4233a5a4af3bSchristos 4234a5a4af3bSchristos CASE (sem, INSN_PAR_JNC) : /* jnc $sr */ 4235a5a4af3bSchristos { 4236a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4237a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4238a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4239a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f 4240a5a4af3bSchristos int UNUSED written = 0; 4241a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4242a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4243a5a4af3bSchristos 4244a5a4af3bSchristos if (NOTBI (CPU (h_cond))) { 4245a5a4af3bSchristos { 4246a5a4af3bSchristos USI opval = ANDSI (* FLD (i_sr), -4); 4247a5a4af3bSchristos OPRND (pc) = opval; 4248a5a4af3bSchristos written |= (1 << 2); 4249a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 4250a5a4af3bSchristos } 4251a5a4af3bSchristos } 4252a5a4af3bSchristos 4253a5a4af3bSchristos abuf->written = written; 4254a5a4af3bSchristos #undef OPRND 4255a5a4af3bSchristos #undef FLD 4256a5a4af3bSchristos } 4257a5a4af3bSchristos NEXT (vpc); 4258a5a4af3bSchristos 4259a5a4af3bSchristos CASE (sem, INSN_WRITE_JNC) : /* jnc $sr */ 4260a5a4af3bSchristos { 4261a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4262a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4263a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4264a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f 4265a5a4af3bSchristos int UNUSED written = abuf->written; 4266a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4267a5a4af3bSchristos SEM_BRANCH_INIT 4268a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4269a5a4af3bSchristos 4270a5a4af3bSchristos if (written & (1 << 2)) 4271a5a4af3bSchristos { 4272a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 4273a5a4af3bSchristos } 4274a5a4af3bSchristos 4275a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 4276a5a4af3bSchristos #undef OPRND 4277a5a4af3bSchristos #undef FLD 4278a5a4af3bSchristos } 4279a5a4af3bSchristos NEXT (vpc); 4280a5a4af3bSchristos 4281a5a4af3bSchristos CASE (sem, INSN_PAR_JL) : /* jl $sr */ 4282a5a4af3bSchristos { 4283a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4284a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4285a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4286a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jl.f 4287a5a4af3bSchristos int UNUSED written = 0; 4288a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4289a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4290a5a4af3bSchristos 4291a5a4af3bSchristos { 4292a5a4af3bSchristos SI temp0;USI temp1; 4293a5a4af3bSchristos temp0 = ADDSI (ANDSI (pc, -4), 4); 4294a5a4af3bSchristos temp1 = ANDSI (* FLD (i_sr), -4); 4295a5a4af3bSchristos { 4296a5a4af3bSchristos SI opval = temp0; 4297a5a4af3bSchristos OPRND (h_gr_SI_14) = opval; 4298a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4299a5a4af3bSchristos } 4300a5a4af3bSchristos { 4301a5a4af3bSchristos USI opval = temp1; 4302a5a4af3bSchristos OPRND (pc) = opval; 4303a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 4304a5a4af3bSchristos } 4305a5a4af3bSchristos } 4306a5a4af3bSchristos 4307a5a4af3bSchristos #undef OPRND 4308a5a4af3bSchristos #undef FLD 4309a5a4af3bSchristos } 4310a5a4af3bSchristos NEXT (vpc); 4311a5a4af3bSchristos 4312a5a4af3bSchristos CASE (sem, INSN_WRITE_JL) : /* jl $sr */ 4313a5a4af3bSchristos { 4314a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4315a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4316a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4317a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jl.f 4318a5a4af3bSchristos int UNUSED written = abuf->written; 4319a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4320a5a4af3bSchristos SEM_BRANCH_INIT 4321a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4322a5a4af3bSchristos 4323a5a4af3bSchristos CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14); 4324a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 4325a5a4af3bSchristos 4326a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 4327a5a4af3bSchristos #undef OPRND 4328a5a4af3bSchristos #undef FLD 4329a5a4af3bSchristos } 4330a5a4af3bSchristos NEXT (vpc); 4331a5a4af3bSchristos 4332a5a4af3bSchristos CASE (sem, INSN_PAR_JMP) : /* jmp $sr */ 4333a5a4af3bSchristos { 4334a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4335a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4336a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4337a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jmp.f 4338a5a4af3bSchristos int UNUSED written = 0; 4339a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4340a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4341a5a4af3bSchristos 4342a5a4af3bSchristos { 4343a5a4af3bSchristos USI opval = ANDSI (* FLD (i_sr), -4); 4344a5a4af3bSchristos OPRND (pc) = opval; 4345a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 4346a5a4af3bSchristos } 4347a5a4af3bSchristos 4348a5a4af3bSchristos #undef OPRND 4349a5a4af3bSchristos #undef FLD 4350a5a4af3bSchristos } 4351a5a4af3bSchristos NEXT (vpc); 4352a5a4af3bSchristos 4353a5a4af3bSchristos CASE (sem, INSN_WRITE_JMP) : /* jmp $sr */ 4354a5a4af3bSchristos { 4355a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4356a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4357a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f 4358a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jmp.f 4359a5a4af3bSchristos int UNUSED written = abuf->written; 4360a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4361a5a4af3bSchristos SEM_BRANCH_INIT 4362a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4363a5a4af3bSchristos 4364a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 4365a5a4af3bSchristos 4366a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 4367a5a4af3bSchristos #undef OPRND 4368a5a4af3bSchristos #undef FLD 4369a5a4af3bSchristos } 4370a5a4af3bSchristos NEXT (vpc); 4371a5a4af3bSchristos 4372a5a4af3bSchristos CASE (sem, INSN_PAR_LD) : /* ld $dr,@$sr */ 4373a5a4af3bSchristos { 4374a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4375a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4376a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4377a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld.f 4378a5a4af3bSchristos int UNUSED written = 0; 4379a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4380a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4381a5a4af3bSchristos 4382a5a4af3bSchristos { 4383a5a4af3bSchristos SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 4384a5a4af3bSchristos OPRND (dr) = opval; 4385a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4386a5a4af3bSchristos } 4387a5a4af3bSchristos 4388a5a4af3bSchristos #undef OPRND 4389a5a4af3bSchristos #undef FLD 4390a5a4af3bSchristos } 4391a5a4af3bSchristos NEXT (vpc); 4392a5a4af3bSchristos 4393a5a4af3bSchristos CASE (sem, INSN_WRITE_LD) : /* ld $dr,@$sr */ 4394a5a4af3bSchristos { 4395a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4396a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4397a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4398a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld.f 4399a5a4af3bSchristos int UNUSED written = abuf->written; 4400a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4401a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4402a5a4af3bSchristos 4403a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4404a5a4af3bSchristos 4405a5a4af3bSchristos #undef OPRND 4406a5a4af3bSchristos #undef FLD 4407a5a4af3bSchristos } 4408a5a4af3bSchristos NEXT (vpc); 4409a5a4af3bSchristos 4410a5a4af3bSchristos CASE (sem, INSN_PAR_LDB) : /* ldb $dr,@$sr */ 4411a5a4af3bSchristos { 4412a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4413a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4414a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4415a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f 4416a5a4af3bSchristos int UNUSED written = 0; 4417a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4418a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4419a5a4af3bSchristos 4420a5a4af3bSchristos { 4421a5a4af3bSchristos SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 4422a5a4af3bSchristos OPRND (dr) = opval; 4423a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4424a5a4af3bSchristos } 4425a5a4af3bSchristos 4426a5a4af3bSchristos #undef OPRND 4427a5a4af3bSchristos #undef FLD 4428a5a4af3bSchristos } 4429a5a4af3bSchristos NEXT (vpc); 4430a5a4af3bSchristos 4431a5a4af3bSchristos CASE (sem, INSN_WRITE_LDB) : /* ldb $dr,@$sr */ 4432a5a4af3bSchristos { 4433a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4434a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4435a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4436a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f 4437a5a4af3bSchristos int UNUSED written = abuf->written; 4438a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4439a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4440a5a4af3bSchristos 4441a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4442a5a4af3bSchristos 4443a5a4af3bSchristos #undef OPRND 4444a5a4af3bSchristos #undef FLD 4445a5a4af3bSchristos } 4446a5a4af3bSchristos NEXT (vpc); 4447a5a4af3bSchristos 4448a5a4af3bSchristos CASE (sem, INSN_PAR_LDH) : /* ldh $dr,@$sr */ 4449a5a4af3bSchristos { 4450a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4451a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4452a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4453a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f 4454a5a4af3bSchristos int UNUSED written = 0; 4455a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4456a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4457a5a4af3bSchristos 4458a5a4af3bSchristos { 4459a5a4af3bSchristos SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 4460a5a4af3bSchristos OPRND (dr) = opval; 4461a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4462a5a4af3bSchristos } 4463a5a4af3bSchristos 4464a5a4af3bSchristos #undef OPRND 4465a5a4af3bSchristos #undef FLD 4466a5a4af3bSchristos } 4467a5a4af3bSchristos NEXT (vpc); 4468a5a4af3bSchristos 4469a5a4af3bSchristos CASE (sem, INSN_WRITE_LDH) : /* ldh $dr,@$sr */ 4470a5a4af3bSchristos { 4471a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4472a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4473a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4474a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f 4475a5a4af3bSchristos int UNUSED written = abuf->written; 4476a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4477a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4478a5a4af3bSchristos 4479a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4480a5a4af3bSchristos 4481a5a4af3bSchristos #undef OPRND 4482a5a4af3bSchristos #undef FLD 4483a5a4af3bSchristos } 4484a5a4af3bSchristos NEXT (vpc); 4485a5a4af3bSchristos 4486a5a4af3bSchristos CASE (sem, INSN_PAR_LDUB) : /* ldub $dr,@$sr */ 4487a5a4af3bSchristos { 4488a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4489a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4490a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4491a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f 4492a5a4af3bSchristos int UNUSED written = 0; 4493a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4494a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4495a5a4af3bSchristos 4496a5a4af3bSchristos { 4497a5a4af3bSchristos SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 4498a5a4af3bSchristos OPRND (dr) = opval; 4499a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4500a5a4af3bSchristos } 4501a5a4af3bSchristos 4502a5a4af3bSchristos #undef OPRND 4503a5a4af3bSchristos #undef FLD 4504a5a4af3bSchristos } 4505a5a4af3bSchristos NEXT (vpc); 4506a5a4af3bSchristos 4507a5a4af3bSchristos CASE (sem, INSN_WRITE_LDUB) : /* ldub $dr,@$sr */ 4508a5a4af3bSchristos { 4509a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4510a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4511a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4512a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f 4513a5a4af3bSchristos int UNUSED written = abuf->written; 4514a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4515a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4516a5a4af3bSchristos 4517a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4518a5a4af3bSchristos 4519a5a4af3bSchristos #undef OPRND 4520a5a4af3bSchristos #undef FLD 4521a5a4af3bSchristos } 4522a5a4af3bSchristos NEXT (vpc); 4523a5a4af3bSchristos 4524a5a4af3bSchristos CASE (sem, INSN_PAR_LDUH) : /* lduh $dr,@$sr */ 4525a5a4af3bSchristos { 4526a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4527a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4528a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4529a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f 4530a5a4af3bSchristos int UNUSED written = 0; 4531a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4532a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4533a5a4af3bSchristos 4534a5a4af3bSchristos { 4535a5a4af3bSchristos SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 4536a5a4af3bSchristos OPRND (dr) = opval; 4537a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4538a5a4af3bSchristos } 4539a5a4af3bSchristos 4540a5a4af3bSchristos #undef OPRND 4541a5a4af3bSchristos #undef FLD 4542a5a4af3bSchristos } 4543a5a4af3bSchristos NEXT (vpc); 4544a5a4af3bSchristos 4545a5a4af3bSchristos CASE (sem, INSN_WRITE_LDUH) : /* lduh $dr,@$sr */ 4546a5a4af3bSchristos { 4547a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4548a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4549a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4550a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f 4551a5a4af3bSchristos int UNUSED written = abuf->written; 4552a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4553a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4554a5a4af3bSchristos 4555a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4556a5a4af3bSchristos 4557a5a4af3bSchristos #undef OPRND 4558a5a4af3bSchristos #undef FLD 4559a5a4af3bSchristos } 4560a5a4af3bSchristos NEXT (vpc); 4561a5a4af3bSchristos 4562a5a4af3bSchristos CASE (sem, INSN_PAR_LD_PLUS) : /* ld $dr,@$sr+ */ 4563a5a4af3bSchristos { 4564a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4565a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4566a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4567a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld_plus.f 4568a5a4af3bSchristos int UNUSED written = 0; 4569a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4570a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4571a5a4af3bSchristos 4572a5a4af3bSchristos { 4573a5a4af3bSchristos SI temp0;SI temp1; 4574a5a4af3bSchristos temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 4575a5a4af3bSchristos temp1 = ADDSI (* FLD (i_sr), 4); 4576a5a4af3bSchristos { 4577a5a4af3bSchristos SI opval = temp0; 4578a5a4af3bSchristos OPRND (dr) = opval; 4579a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4580a5a4af3bSchristos } 4581a5a4af3bSchristos { 4582a5a4af3bSchristos SI opval = temp1; 4583a5a4af3bSchristos OPRND (sr) = opval; 4584a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4585a5a4af3bSchristos } 4586a5a4af3bSchristos } 4587a5a4af3bSchristos 4588a5a4af3bSchristos #undef OPRND 4589a5a4af3bSchristos #undef FLD 4590a5a4af3bSchristos } 4591a5a4af3bSchristos NEXT (vpc); 4592a5a4af3bSchristos 4593a5a4af3bSchristos CASE (sem, INSN_WRITE_LD_PLUS) : /* ld $dr,@$sr+ */ 4594a5a4af3bSchristos { 4595a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4596a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4597a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4598a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld_plus.f 4599a5a4af3bSchristos int UNUSED written = abuf->written; 4600a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4601a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4602a5a4af3bSchristos 4603a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4604a5a4af3bSchristos * FLD (i_sr) = OPRND (sr); 4605a5a4af3bSchristos 4606a5a4af3bSchristos #undef OPRND 4607a5a4af3bSchristos #undef FLD 4608a5a4af3bSchristos } 4609a5a4af3bSchristos NEXT (vpc); 4610a5a4af3bSchristos 4611a5a4af3bSchristos CASE (sem, INSN_PAR_LDI8) : /* ldi8 $dr,$simm8 */ 4612a5a4af3bSchristos { 4613a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4614a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4615a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 4616a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldi8.f 4617a5a4af3bSchristos int UNUSED written = 0; 4618a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4619a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4620a5a4af3bSchristos 4621a5a4af3bSchristos { 4622a5a4af3bSchristos SI opval = FLD (f_simm8); 4623a5a4af3bSchristos OPRND (dr) = opval; 4624a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4625a5a4af3bSchristos } 4626a5a4af3bSchristos 4627a5a4af3bSchristos #undef OPRND 4628a5a4af3bSchristos #undef FLD 4629a5a4af3bSchristos } 4630a5a4af3bSchristos NEXT (vpc); 4631a5a4af3bSchristos 4632a5a4af3bSchristos CASE (sem, INSN_WRITE_LDI8) : /* ldi8 $dr,$simm8 */ 4633a5a4af3bSchristos { 4634a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4635a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4636a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f 4637a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldi8.f 4638a5a4af3bSchristos int UNUSED written = abuf->written; 4639a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4640a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4641a5a4af3bSchristos 4642a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4643a5a4af3bSchristos 4644a5a4af3bSchristos #undef OPRND 4645a5a4af3bSchristos #undef FLD 4646a5a4af3bSchristos } 4647a5a4af3bSchristos NEXT (vpc); 4648a5a4af3bSchristos 4649a5a4af3bSchristos CASE (sem, INSN_PAR_LOCK) : /* lock $dr,@$sr */ 4650a5a4af3bSchristos { 4651a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4652a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4653a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4654a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_lock.f 4655a5a4af3bSchristos int UNUSED written = 0; 4656a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4657a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4658a5a4af3bSchristos 4659a5a4af3bSchristos { 4660a5a4af3bSchristos { 4661a5a4af3bSchristos BI opval = 1; 4662a5a4af3bSchristos OPRND (h_lock_BI) = opval; 4663a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 4664a5a4af3bSchristos } 4665a5a4af3bSchristos { 4666a5a4af3bSchristos SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 4667a5a4af3bSchristos OPRND (dr) = opval; 4668a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4669a5a4af3bSchristos } 4670a5a4af3bSchristos } 4671a5a4af3bSchristos 4672a5a4af3bSchristos #undef OPRND 4673a5a4af3bSchristos #undef FLD 4674a5a4af3bSchristos } 4675a5a4af3bSchristos NEXT (vpc); 4676a5a4af3bSchristos 4677a5a4af3bSchristos CASE (sem, INSN_WRITE_LOCK) : /* lock $dr,@$sr */ 4678a5a4af3bSchristos { 4679a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4680a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4681a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 4682a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_lock.f 4683a5a4af3bSchristos int UNUSED written = abuf->written; 4684a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4685a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4686a5a4af3bSchristos 4687a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4688a5a4af3bSchristos CPU (h_lock) = OPRND (h_lock_BI); 4689a5a4af3bSchristos 4690a5a4af3bSchristos #undef OPRND 4691a5a4af3bSchristos #undef FLD 4692a5a4af3bSchristos } 4693a5a4af3bSchristos NEXT (vpc); 4694a5a4af3bSchristos 4695a5a4af3bSchristos CASE (sem, INSN_PAR_MACHI_A) : /* machi $src1,$src2,$acc */ 4696a5a4af3bSchristos { 4697a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4698a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4699a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4700a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4701a5a4af3bSchristos int UNUSED written = 0; 4702a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4703a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4704a5a4af3bSchristos 4705a5a4af3bSchristos { 4706a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8); 4707a5a4af3bSchristos OPRND (acc) = opval; 4708a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4709a5a4af3bSchristos } 4710a5a4af3bSchristos 4711a5a4af3bSchristos #undef OPRND 4712a5a4af3bSchristos #undef FLD 4713a5a4af3bSchristos } 4714a5a4af3bSchristos NEXT (vpc); 4715a5a4af3bSchristos 4716a5a4af3bSchristos CASE (sem, INSN_WRITE_MACHI_A) : /* machi $src1,$src2,$acc */ 4717a5a4af3bSchristos { 4718a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4719a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4720a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4721a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4722a5a4af3bSchristos int UNUSED written = abuf->written; 4723a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4724a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4725a5a4af3bSchristos 4726a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4727a5a4af3bSchristos 4728a5a4af3bSchristos #undef OPRND 4729a5a4af3bSchristos #undef FLD 4730a5a4af3bSchristos } 4731a5a4af3bSchristos NEXT (vpc); 4732a5a4af3bSchristos 4733a5a4af3bSchristos CASE (sem, INSN_PAR_MACLO_A) : /* maclo $src1,$src2,$acc */ 4734a5a4af3bSchristos { 4735a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4736a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4737a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4738a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4739a5a4af3bSchristos int UNUSED written = 0; 4740a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4741a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4742a5a4af3bSchristos 4743a5a4af3bSchristos { 4744a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8); 4745a5a4af3bSchristos OPRND (acc) = opval; 4746a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4747a5a4af3bSchristos } 4748a5a4af3bSchristos 4749a5a4af3bSchristos #undef OPRND 4750a5a4af3bSchristos #undef FLD 4751a5a4af3bSchristos } 4752a5a4af3bSchristos NEXT (vpc); 4753a5a4af3bSchristos 4754a5a4af3bSchristos CASE (sem, INSN_WRITE_MACLO_A) : /* maclo $src1,$src2,$acc */ 4755a5a4af3bSchristos { 4756a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4757a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4758a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4759a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4760a5a4af3bSchristos int UNUSED written = abuf->written; 4761a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4762a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4763a5a4af3bSchristos 4764a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4765a5a4af3bSchristos 4766a5a4af3bSchristos #undef OPRND 4767a5a4af3bSchristos #undef FLD 4768a5a4af3bSchristos } 4769a5a4af3bSchristos NEXT (vpc); 4770a5a4af3bSchristos 4771a5a4af3bSchristos CASE (sem, INSN_PAR_MACWHI_A) : /* macwhi $src1,$src2,$acc */ 4772a5a4af3bSchristos { 4773a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4774a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4775a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4776a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4777a5a4af3bSchristos int UNUSED written = 0; 4778a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4779a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4780a5a4af3bSchristos 4781a5a4af3bSchristos { 4782a5a4af3bSchristos DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))); 4783a5a4af3bSchristos OPRND (acc) = opval; 4784a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4785a5a4af3bSchristos } 4786a5a4af3bSchristos 4787a5a4af3bSchristos #undef OPRND 4788a5a4af3bSchristos #undef FLD 4789a5a4af3bSchristos } 4790a5a4af3bSchristos NEXT (vpc); 4791a5a4af3bSchristos 4792a5a4af3bSchristos CASE (sem, INSN_WRITE_MACWHI_A) : /* macwhi $src1,$src2,$acc */ 4793a5a4af3bSchristos { 4794a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4795a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4796a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4797a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4798a5a4af3bSchristos int UNUSED written = abuf->written; 4799a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4800a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4801a5a4af3bSchristos 4802a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4803a5a4af3bSchristos 4804a5a4af3bSchristos #undef OPRND 4805a5a4af3bSchristos #undef FLD 4806a5a4af3bSchristos } 4807a5a4af3bSchristos NEXT (vpc); 4808a5a4af3bSchristos 4809a5a4af3bSchristos CASE (sem, INSN_PAR_MACWLO_A) : /* macwlo $src1,$src2,$acc */ 4810a5a4af3bSchristos { 4811a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4812a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4813a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4814a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4815a5a4af3bSchristos int UNUSED written = 0; 4816a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4817a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4818a5a4af3bSchristos 4819a5a4af3bSchristos { 4820a5a4af3bSchristos DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))); 4821a5a4af3bSchristos OPRND (acc) = opval; 4822a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4823a5a4af3bSchristos } 4824a5a4af3bSchristos 4825a5a4af3bSchristos #undef OPRND 4826a5a4af3bSchristos #undef FLD 4827a5a4af3bSchristos } 4828a5a4af3bSchristos NEXT (vpc); 4829a5a4af3bSchristos 4830a5a4af3bSchristos CASE (sem, INSN_WRITE_MACWLO_A) : /* macwlo $src1,$src2,$acc */ 4831a5a4af3bSchristos { 4832a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4833a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4834a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4835a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f 4836a5a4af3bSchristos int UNUSED written = abuf->written; 4837a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4838a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4839a5a4af3bSchristos 4840a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4841a5a4af3bSchristos 4842a5a4af3bSchristos #undef OPRND 4843a5a4af3bSchristos #undef FLD 4844a5a4af3bSchristos } 4845a5a4af3bSchristos NEXT (vpc); 4846a5a4af3bSchristos 4847a5a4af3bSchristos CASE (sem, INSN_PAR_MUL) : /* mul $dr,$sr */ 4848a5a4af3bSchristos { 4849a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4850a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4851a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 4852a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 4853a5a4af3bSchristos int UNUSED written = 0; 4854a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4855a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4856a5a4af3bSchristos 4857a5a4af3bSchristos { 4858a5a4af3bSchristos SI opval = MULSI (* FLD (i_dr), * FLD (i_sr)); 4859a5a4af3bSchristos OPRND (dr) = opval; 4860a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 4861a5a4af3bSchristos } 4862a5a4af3bSchristos 4863a5a4af3bSchristos #undef OPRND 4864a5a4af3bSchristos #undef FLD 4865a5a4af3bSchristos } 4866a5a4af3bSchristos NEXT (vpc); 4867a5a4af3bSchristos 4868a5a4af3bSchristos CASE (sem, INSN_WRITE_MUL) : /* mul $dr,$sr */ 4869a5a4af3bSchristos { 4870a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4871a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4872a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 4873a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 4874a5a4af3bSchristos int UNUSED written = abuf->written; 4875a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4876a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4877a5a4af3bSchristos 4878a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 4879a5a4af3bSchristos 4880a5a4af3bSchristos #undef OPRND 4881a5a4af3bSchristos #undef FLD 4882a5a4af3bSchristos } 4883a5a4af3bSchristos NEXT (vpc); 4884a5a4af3bSchristos 4885a5a4af3bSchristos CASE (sem, INSN_PAR_MULHI_A) : /* mulhi $src1,$src2,$acc */ 4886a5a4af3bSchristos { 4887a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4888a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4889a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4890a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 4891a5a4af3bSchristos int UNUSED written = 0; 4892a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4893a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4894a5a4af3bSchristos 4895a5a4af3bSchristos { 4896a5a4af3bSchristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16); 4897a5a4af3bSchristos OPRND (acc) = opval; 4898a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4899a5a4af3bSchristos } 4900a5a4af3bSchristos 4901a5a4af3bSchristos #undef OPRND 4902a5a4af3bSchristos #undef FLD 4903a5a4af3bSchristos } 4904a5a4af3bSchristos NEXT (vpc); 4905a5a4af3bSchristos 4906a5a4af3bSchristos CASE (sem, INSN_WRITE_MULHI_A) : /* mulhi $src1,$src2,$acc */ 4907a5a4af3bSchristos { 4908a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4909a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4910a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4911a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 4912a5a4af3bSchristos int UNUSED written = abuf->written; 4913a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4914a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4915a5a4af3bSchristos 4916a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4917a5a4af3bSchristos 4918a5a4af3bSchristos #undef OPRND 4919a5a4af3bSchristos #undef FLD 4920a5a4af3bSchristos } 4921a5a4af3bSchristos NEXT (vpc); 4922a5a4af3bSchristos 4923a5a4af3bSchristos CASE (sem, INSN_PAR_MULLO_A) : /* mullo $src1,$src2,$acc */ 4924a5a4af3bSchristos { 4925a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4926a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4927a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4928a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 4929a5a4af3bSchristos int UNUSED written = 0; 4930a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4931a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4932a5a4af3bSchristos 4933a5a4af3bSchristos { 4934a5a4af3bSchristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16); 4935a5a4af3bSchristos OPRND (acc) = opval; 4936a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4937a5a4af3bSchristos } 4938a5a4af3bSchristos 4939a5a4af3bSchristos #undef OPRND 4940a5a4af3bSchristos #undef FLD 4941a5a4af3bSchristos } 4942a5a4af3bSchristos NEXT (vpc); 4943a5a4af3bSchristos 4944a5a4af3bSchristos CASE (sem, INSN_WRITE_MULLO_A) : /* mullo $src1,$src2,$acc */ 4945a5a4af3bSchristos { 4946a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4947a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4948a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4949a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 4950a5a4af3bSchristos int UNUSED written = abuf->written; 4951a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4952a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4953a5a4af3bSchristos 4954a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4955a5a4af3bSchristos 4956a5a4af3bSchristos #undef OPRND 4957a5a4af3bSchristos #undef FLD 4958a5a4af3bSchristos } 4959a5a4af3bSchristos NEXT (vpc); 4960a5a4af3bSchristos 4961a5a4af3bSchristos CASE (sem, INSN_PAR_MULWHI_A) : /* mulwhi $src1,$src2,$acc */ 4962a5a4af3bSchristos { 4963a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4964a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4965a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4966a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 4967a5a4af3bSchristos int UNUSED written = 0; 4968a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4969a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 4970a5a4af3bSchristos 4971a5a4af3bSchristos { 4972a5a4af3bSchristos DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))); 4973a5a4af3bSchristos OPRND (acc) = opval; 4974a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 4975a5a4af3bSchristos } 4976a5a4af3bSchristos 4977a5a4af3bSchristos #undef OPRND 4978a5a4af3bSchristos #undef FLD 4979a5a4af3bSchristos } 4980a5a4af3bSchristos NEXT (vpc); 4981a5a4af3bSchristos 4982a5a4af3bSchristos CASE (sem, INSN_WRITE_MULWHI_A) : /* mulwhi $src1,$src2,$acc */ 4983a5a4af3bSchristos { 4984a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 4985a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 4986a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 4987a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 4988a5a4af3bSchristos int UNUSED written = abuf->written; 4989a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 4990a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 4991a5a4af3bSchristos 4992a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 4993a5a4af3bSchristos 4994a5a4af3bSchristos #undef OPRND 4995a5a4af3bSchristos #undef FLD 4996a5a4af3bSchristos } 4997a5a4af3bSchristos NEXT (vpc); 4998a5a4af3bSchristos 4999a5a4af3bSchristos CASE (sem, INSN_PAR_MULWLO_A) : /* mulwlo $src1,$src2,$acc */ 5000a5a4af3bSchristos { 5001a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5002a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5003a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 5004a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 5005a5a4af3bSchristos int UNUSED written = 0; 5006a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5007a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5008a5a4af3bSchristos 5009a5a4af3bSchristos { 5010a5a4af3bSchristos DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))); 5011a5a4af3bSchristos OPRND (acc) = opval; 5012a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 5013a5a4af3bSchristos } 5014a5a4af3bSchristos 5015a5a4af3bSchristos #undef OPRND 5016a5a4af3bSchristos #undef FLD 5017a5a4af3bSchristos } 5018a5a4af3bSchristos NEXT (vpc); 5019a5a4af3bSchristos 5020a5a4af3bSchristos CASE (sem, INSN_WRITE_MULWLO_A) : /* mulwlo $src1,$src2,$acc */ 5021a5a4af3bSchristos { 5022a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5023a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5024a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f 5025a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f 5026a5a4af3bSchristos int UNUSED written = abuf->written; 5027a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5028a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5029a5a4af3bSchristos 5030a5a4af3bSchristos SET_H_ACCUMS (FLD (f_acc), OPRND (acc)); 5031a5a4af3bSchristos 5032a5a4af3bSchristos #undef OPRND 5033a5a4af3bSchristos #undef FLD 5034a5a4af3bSchristos } 5035a5a4af3bSchristos NEXT (vpc); 5036a5a4af3bSchristos 5037a5a4af3bSchristos CASE (sem, INSN_PAR_MV) : /* mv $dr,$sr */ 5038a5a4af3bSchristos { 5039a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5040a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5041a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5042a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f 5043a5a4af3bSchristos int UNUSED written = 0; 5044a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5045a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5046a5a4af3bSchristos 5047a5a4af3bSchristos { 5048a5a4af3bSchristos SI opval = * FLD (i_sr); 5049a5a4af3bSchristos OPRND (dr) = opval; 5050a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5051a5a4af3bSchristos } 5052a5a4af3bSchristos 5053a5a4af3bSchristos #undef OPRND 5054a5a4af3bSchristos #undef FLD 5055a5a4af3bSchristos } 5056a5a4af3bSchristos NEXT (vpc); 5057a5a4af3bSchristos 5058a5a4af3bSchristos CASE (sem, INSN_WRITE_MV) : /* mv $dr,$sr */ 5059a5a4af3bSchristos { 5060a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5061a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5062a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5063a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f 5064a5a4af3bSchristos int UNUSED written = abuf->written; 5065a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5066a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5067a5a4af3bSchristos 5068a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5069a5a4af3bSchristos 5070a5a4af3bSchristos #undef OPRND 5071a5a4af3bSchristos #undef FLD 5072a5a4af3bSchristos } 5073a5a4af3bSchristos NEXT (vpc); 5074a5a4af3bSchristos 5075a5a4af3bSchristos CASE (sem, INSN_PAR_MVFACHI_A) : /* mvfachi $dr,$accs */ 5076a5a4af3bSchristos { 5077a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5078a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5079a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 5080a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f 5081a5a4af3bSchristos int UNUSED written = 0; 5082a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5083a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5084a5a4af3bSchristos 5085a5a4af3bSchristos { 5086a5a4af3bSchristos SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32)); 5087a5a4af3bSchristos OPRND (dr) = opval; 5088a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5089a5a4af3bSchristos } 5090a5a4af3bSchristos 5091a5a4af3bSchristos #undef OPRND 5092a5a4af3bSchristos #undef FLD 5093a5a4af3bSchristos } 5094a5a4af3bSchristos NEXT (vpc); 5095a5a4af3bSchristos 5096a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFACHI_A) : /* mvfachi $dr,$accs */ 5097a5a4af3bSchristos { 5098a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5099a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5100a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 5101a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f 5102a5a4af3bSchristos int UNUSED written = abuf->written; 5103a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5104a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5105a5a4af3bSchristos 5106a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5107a5a4af3bSchristos 5108a5a4af3bSchristos #undef OPRND 5109a5a4af3bSchristos #undef FLD 5110a5a4af3bSchristos } 5111a5a4af3bSchristos NEXT (vpc); 5112a5a4af3bSchristos 5113a5a4af3bSchristos CASE (sem, INSN_PAR_MVFACLO_A) : /* mvfaclo $dr,$accs */ 5114a5a4af3bSchristos { 5115a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5116a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5117a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 5118a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f 5119a5a4af3bSchristos int UNUSED written = 0; 5120a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5121a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5122a5a4af3bSchristos 5123a5a4af3bSchristos { 5124a5a4af3bSchristos SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs))); 5125a5a4af3bSchristos OPRND (dr) = opval; 5126a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5127a5a4af3bSchristos } 5128a5a4af3bSchristos 5129a5a4af3bSchristos #undef OPRND 5130a5a4af3bSchristos #undef FLD 5131a5a4af3bSchristos } 5132a5a4af3bSchristos NEXT (vpc); 5133a5a4af3bSchristos 5134a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFACLO_A) : /* mvfaclo $dr,$accs */ 5135a5a4af3bSchristos { 5136a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5137a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5138a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 5139a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f 5140a5a4af3bSchristos int UNUSED written = abuf->written; 5141a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5142a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5143a5a4af3bSchristos 5144a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5145a5a4af3bSchristos 5146a5a4af3bSchristos #undef OPRND 5147a5a4af3bSchristos #undef FLD 5148a5a4af3bSchristos } 5149a5a4af3bSchristos NEXT (vpc); 5150a5a4af3bSchristos 5151a5a4af3bSchristos CASE (sem, INSN_PAR_MVFACMI_A) : /* mvfacmi $dr,$accs */ 5152a5a4af3bSchristos { 5153a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5154a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5155a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 5156a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f 5157a5a4af3bSchristos int UNUSED written = 0; 5158a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5159a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5160a5a4af3bSchristos 5161a5a4af3bSchristos { 5162a5a4af3bSchristos SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16)); 5163a5a4af3bSchristos OPRND (dr) = opval; 5164a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5165a5a4af3bSchristos } 5166a5a4af3bSchristos 5167a5a4af3bSchristos #undef OPRND 5168a5a4af3bSchristos #undef FLD 5169a5a4af3bSchristos } 5170a5a4af3bSchristos NEXT (vpc); 5171a5a4af3bSchristos 5172a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFACMI_A) : /* mvfacmi $dr,$accs */ 5173a5a4af3bSchristos { 5174a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5175a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5176a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f 5177a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f 5178a5a4af3bSchristos int UNUSED written = abuf->written; 5179a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5180a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5181a5a4af3bSchristos 5182a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5183a5a4af3bSchristos 5184a5a4af3bSchristos #undef OPRND 5185a5a4af3bSchristos #undef FLD 5186a5a4af3bSchristos } 5187a5a4af3bSchristos NEXT (vpc); 5188a5a4af3bSchristos 5189a5a4af3bSchristos CASE (sem, INSN_PAR_MVFC) : /* mvfc $dr,$scr */ 5190a5a4af3bSchristos { 5191a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5192a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5193a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5194a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfc.f 5195a5a4af3bSchristos int UNUSED written = 0; 5196a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5197a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5198a5a4af3bSchristos 5199a5a4af3bSchristos { 5200a5a4af3bSchristos SI opval = GET_H_CR (FLD (f_r2)); 5201a5a4af3bSchristos OPRND (dr) = opval; 5202a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5203a5a4af3bSchristos } 5204a5a4af3bSchristos 5205a5a4af3bSchristos #undef OPRND 5206a5a4af3bSchristos #undef FLD 5207a5a4af3bSchristos } 5208a5a4af3bSchristos NEXT (vpc); 5209a5a4af3bSchristos 5210a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFC) : /* mvfc $dr,$scr */ 5211a5a4af3bSchristos { 5212a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5213a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5214a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5215a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfc.f 5216a5a4af3bSchristos int UNUSED written = abuf->written; 5217a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5218a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5219a5a4af3bSchristos 5220a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5221a5a4af3bSchristos 5222a5a4af3bSchristos #undef OPRND 5223a5a4af3bSchristos #undef FLD 5224a5a4af3bSchristos } 5225a5a4af3bSchristos NEXT (vpc); 5226a5a4af3bSchristos 5227a5a4af3bSchristos CASE (sem, INSN_PAR_MVTACHI_A) : /* mvtachi $src1,$accs */ 5228a5a4af3bSchristos { 5229a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5230a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5231a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 5232a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f 5233a5a4af3bSchristos int UNUSED written = 0; 5234a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5235a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5236a5a4af3bSchristos 5237a5a4af3bSchristos { 5238a5a4af3bSchristos DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32)); 5239a5a4af3bSchristos OPRND (accs) = opval; 5240a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 5241a5a4af3bSchristos } 5242a5a4af3bSchristos 5243a5a4af3bSchristos #undef OPRND 5244a5a4af3bSchristos #undef FLD 5245a5a4af3bSchristos } 5246a5a4af3bSchristos NEXT (vpc); 5247a5a4af3bSchristos 5248a5a4af3bSchristos CASE (sem, INSN_WRITE_MVTACHI_A) : /* mvtachi $src1,$accs */ 5249a5a4af3bSchristos { 5250a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5251a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5252a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 5253a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f 5254a5a4af3bSchristos int UNUSED written = abuf->written; 5255a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5256a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5257a5a4af3bSchristos 5258a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accs), OPRND (accs)); 5259a5a4af3bSchristos 5260a5a4af3bSchristos #undef OPRND 5261a5a4af3bSchristos #undef FLD 5262a5a4af3bSchristos } 5263a5a4af3bSchristos NEXT (vpc); 5264a5a4af3bSchristos 5265a5a4af3bSchristos CASE (sem, INSN_PAR_MVTACLO_A) : /* mvtaclo $src1,$accs */ 5266a5a4af3bSchristos { 5267a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5268a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5269a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 5270a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f 5271a5a4af3bSchristos int UNUSED written = 0; 5272a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5273a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5274a5a4af3bSchristos 5275a5a4af3bSchristos { 5276a5a4af3bSchristos DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1))); 5277a5a4af3bSchristos OPRND (accs) = opval; 5278a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 5279a5a4af3bSchristos } 5280a5a4af3bSchristos 5281a5a4af3bSchristos #undef OPRND 5282a5a4af3bSchristos #undef FLD 5283a5a4af3bSchristos } 5284a5a4af3bSchristos NEXT (vpc); 5285a5a4af3bSchristos 5286a5a4af3bSchristos CASE (sem, INSN_WRITE_MVTACLO_A) : /* mvtaclo $src1,$accs */ 5287a5a4af3bSchristos { 5288a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5289a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5290a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f 5291a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f 5292a5a4af3bSchristos int UNUSED written = abuf->written; 5293a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5294a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5295a5a4af3bSchristos 5296a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accs), OPRND (accs)); 5297a5a4af3bSchristos 5298a5a4af3bSchristos #undef OPRND 5299a5a4af3bSchristos #undef FLD 5300a5a4af3bSchristos } 5301a5a4af3bSchristos NEXT (vpc); 5302a5a4af3bSchristos 5303a5a4af3bSchristos CASE (sem, INSN_PAR_MVTC) : /* mvtc $sr,$dcr */ 5304a5a4af3bSchristos { 5305a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5306a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5307a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5308a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtc.f 5309a5a4af3bSchristos int UNUSED written = 0; 5310a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5311a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5312a5a4af3bSchristos 5313a5a4af3bSchristos { 5314a5a4af3bSchristos USI opval = * FLD (i_sr); 5315a5a4af3bSchristos OPRND (dcr) = opval; 5316a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 5317a5a4af3bSchristos } 5318a5a4af3bSchristos 5319a5a4af3bSchristos #undef OPRND 5320a5a4af3bSchristos #undef FLD 5321a5a4af3bSchristos } 5322a5a4af3bSchristos NEXT (vpc); 5323a5a4af3bSchristos 5324a5a4af3bSchristos CASE (sem, INSN_WRITE_MVTC) : /* mvtc $sr,$dcr */ 5325a5a4af3bSchristos { 5326a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5327a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5328a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5329a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtc.f 5330a5a4af3bSchristos int UNUSED written = abuf->written; 5331a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5332a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5333a5a4af3bSchristos 5334a5a4af3bSchristos SET_H_CR (FLD (f_r1), OPRND (dcr)); 5335a5a4af3bSchristos 5336a5a4af3bSchristos #undef OPRND 5337a5a4af3bSchristos #undef FLD 5338a5a4af3bSchristos } 5339a5a4af3bSchristos NEXT (vpc); 5340a5a4af3bSchristos 5341a5a4af3bSchristos CASE (sem, INSN_PAR_NEG) : /* neg $dr,$sr */ 5342a5a4af3bSchristos { 5343a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5344a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5345a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5346a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f 5347a5a4af3bSchristos int UNUSED written = 0; 5348a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5349a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5350a5a4af3bSchristos 5351a5a4af3bSchristos { 5352a5a4af3bSchristos SI opval = NEGSI (* FLD (i_sr)); 5353a5a4af3bSchristos OPRND (dr) = opval; 5354a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5355a5a4af3bSchristos } 5356a5a4af3bSchristos 5357a5a4af3bSchristos #undef OPRND 5358a5a4af3bSchristos #undef FLD 5359a5a4af3bSchristos } 5360a5a4af3bSchristos NEXT (vpc); 5361a5a4af3bSchristos 5362a5a4af3bSchristos CASE (sem, INSN_WRITE_NEG) : /* neg $dr,$sr */ 5363a5a4af3bSchristos { 5364a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5365a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5366a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5367a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f 5368a5a4af3bSchristos int UNUSED written = abuf->written; 5369a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5370a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5371a5a4af3bSchristos 5372a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5373a5a4af3bSchristos 5374a5a4af3bSchristos #undef OPRND 5375a5a4af3bSchristos #undef FLD 5376a5a4af3bSchristos } 5377a5a4af3bSchristos NEXT (vpc); 5378a5a4af3bSchristos 5379a5a4af3bSchristos CASE (sem, INSN_PAR_NOP) : /* nop */ 5380a5a4af3bSchristos { 5381a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5382a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5383a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 5384a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_nop.f 5385a5a4af3bSchristos int UNUSED written = 0; 5386a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5387a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5388a5a4af3bSchristos 5389a5a4af3bSchristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr); 5390a5a4af3bSchristos 5391a5a4af3bSchristos #undef OPRND 5392a5a4af3bSchristos #undef FLD 5393a5a4af3bSchristos } 5394a5a4af3bSchristos NEXT (vpc); 5395a5a4af3bSchristos 5396a5a4af3bSchristos CASE (sem, INSN_WRITE_NOP) : /* nop */ 5397a5a4af3bSchristos { 5398a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5399a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5400a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 5401a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_nop.f 5402a5a4af3bSchristos int UNUSED written = abuf->written; 5403a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5404a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5405a5a4af3bSchristos 5406a5a4af3bSchristos 5407a5a4af3bSchristos #undef OPRND 5408a5a4af3bSchristos #undef FLD 5409a5a4af3bSchristos } 5410a5a4af3bSchristos NEXT (vpc); 5411a5a4af3bSchristos 5412a5a4af3bSchristos CASE (sem, INSN_PAR_NOT) : /* not $dr,$sr */ 5413a5a4af3bSchristos { 5414a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5415a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5416a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5417a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f 5418a5a4af3bSchristos int UNUSED written = 0; 5419a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5420a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5421a5a4af3bSchristos 5422a5a4af3bSchristos { 5423a5a4af3bSchristos SI opval = INVSI (* FLD (i_sr)); 5424a5a4af3bSchristos OPRND (dr) = opval; 5425a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5426a5a4af3bSchristos } 5427a5a4af3bSchristos 5428a5a4af3bSchristos #undef OPRND 5429a5a4af3bSchristos #undef FLD 5430a5a4af3bSchristos } 5431a5a4af3bSchristos NEXT (vpc); 5432a5a4af3bSchristos 5433a5a4af3bSchristos CASE (sem, INSN_WRITE_NOT) : /* not $dr,$sr */ 5434a5a4af3bSchristos { 5435a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5436a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5437a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f 5438a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f 5439a5a4af3bSchristos int UNUSED written = abuf->written; 5440a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5441a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5442a5a4af3bSchristos 5443a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5444a5a4af3bSchristos 5445a5a4af3bSchristos #undef OPRND 5446a5a4af3bSchristos #undef FLD 5447a5a4af3bSchristos } 5448a5a4af3bSchristos NEXT (vpc); 5449a5a4af3bSchristos 5450a5a4af3bSchristos CASE (sem, INSN_PAR_RAC_DSI) : /* rac $accd,$accs,$imm1 */ 5451a5a4af3bSchristos { 5452a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5453a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5454a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 5455a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f 5456a5a4af3bSchristos int UNUSED written = 0; 5457a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5458a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5459a5a4af3bSchristos 5460a5a4af3bSchristos { 5461a5a4af3bSchristos DI tmp_tmp1; 5462a5a4af3bSchristos tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1)); 5463a5a4af3bSchristos tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768)); 5464a5a4af3bSchristos { 5465a5a4af3bSchristos DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000))); 5466a5a4af3bSchristos OPRND (accd) = opval; 5467a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 5468a5a4af3bSchristos } 5469a5a4af3bSchristos } 5470a5a4af3bSchristos 5471a5a4af3bSchristos #undef OPRND 5472a5a4af3bSchristos #undef FLD 5473a5a4af3bSchristos } 5474a5a4af3bSchristos NEXT (vpc); 5475a5a4af3bSchristos 5476a5a4af3bSchristos CASE (sem, INSN_WRITE_RAC_DSI) : /* rac $accd,$accs,$imm1 */ 5477a5a4af3bSchristos { 5478a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5479a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5480a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 5481a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f 5482a5a4af3bSchristos int UNUSED written = abuf->written; 5483a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5484a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5485a5a4af3bSchristos 5486a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accd), OPRND (accd)); 5487a5a4af3bSchristos 5488a5a4af3bSchristos #undef OPRND 5489a5a4af3bSchristos #undef FLD 5490a5a4af3bSchristos } 5491a5a4af3bSchristos NEXT (vpc); 5492a5a4af3bSchristos 5493a5a4af3bSchristos CASE (sem, INSN_PAR_RACH_DSI) : /* rach $accd,$accs,$imm1 */ 5494a5a4af3bSchristos { 5495a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5496a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5497a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 5498a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f 5499a5a4af3bSchristos int UNUSED written = 0; 5500a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5501a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5502a5a4af3bSchristos 5503a5a4af3bSchristos { 5504a5a4af3bSchristos DI tmp_tmp1; 5505a5a4af3bSchristos tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1)); 5506a5a4af3bSchristos tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000)); 5507a5a4af3bSchristos { 5508a5a4af3bSchristos DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0))); 5509a5a4af3bSchristos OPRND (accd) = opval; 5510a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 5511a5a4af3bSchristos } 5512a5a4af3bSchristos } 5513a5a4af3bSchristos 5514a5a4af3bSchristos #undef OPRND 5515a5a4af3bSchristos #undef FLD 5516a5a4af3bSchristos } 5517a5a4af3bSchristos NEXT (vpc); 5518a5a4af3bSchristos 5519a5a4af3bSchristos CASE (sem, INSN_WRITE_RACH_DSI) : /* rach $accd,$accs,$imm1 */ 5520a5a4af3bSchristos { 5521a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5522a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5523a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f 5524a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f 5525a5a4af3bSchristos int UNUSED written = abuf->written; 5526a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5527a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5528a5a4af3bSchristos 5529a5a4af3bSchristos SET_H_ACCUMS (FLD (f_accd), OPRND (accd)); 5530a5a4af3bSchristos 5531a5a4af3bSchristos #undef OPRND 5532a5a4af3bSchristos #undef FLD 5533a5a4af3bSchristos } 5534a5a4af3bSchristos NEXT (vpc); 5535a5a4af3bSchristos 5536a5a4af3bSchristos CASE (sem, INSN_PAR_RTE) : /* rte */ 5537a5a4af3bSchristos { 5538a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5539a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5540a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 5541a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rte.f 5542a5a4af3bSchristos int UNUSED written = 0; 5543a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5544a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5545a5a4af3bSchristos 5546a5a4af3bSchristos { 5547a5a4af3bSchristos { 5548a5a4af3bSchristos USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4); 5549a5a4af3bSchristos OPRND (pc) = opval; 5550a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 5551a5a4af3bSchristos } 5552a5a4af3bSchristos { 5553a5a4af3bSchristos USI opval = GET_H_CR (((UINT) 14)); 5554a5a4af3bSchristos OPRND (h_cr_USI_6) = opval; 5555a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 5556a5a4af3bSchristos } 5557a5a4af3bSchristos { 5558a5a4af3bSchristos UQI opval = CPU (h_bpsw); 5559a5a4af3bSchristos OPRND (h_psw_UQI) = opval; 5560a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 5561a5a4af3bSchristos } 5562a5a4af3bSchristos { 5563a5a4af3bSchristos UQI opval = CPU (h_bbpsw); 5564a5a4af3bSchristos OPRND (h_bpsw_UQI) = opval; 5565a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 5566a5a4af3bSchristos } 5567a5a4af3bSchristos } 5568a5a4af3bSchristos 5569a5a4af3bSchristos #undef OPRND 5570a5a4af3bSchristos #undef FLD 5571a5a4af3bSchristos } 5572a5a4af3bSchristos NEXT (vpc); 5573a5a4af3bSchristos 5574a5a4af3bSchristos CASE (sem, INSN_WRITE_RTE) : /* rte */ 5575a5a4af3bSchristos { 5576a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5577a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5578a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 5579a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rte.f 5580a5a4af3bSchristos int UNUSED written = abuf->written; 5581a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5582a5a4af3bSchristos SEM_BRANCH_INIT 5583a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5584a5a4af3bSchristos 5585a5a4af3bSchristos CPU (h_bpsw) = OPRND (h_bpsw_UQI); 5586a5a4af3bSchristos SET_H_CR (((UINT) 6), OPRND (h_cr_USI_6)); 5587a5a4af3bSchristos SET_H_PSW (OPRND (h_psw_UQI)); 5588a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 5589a5a4af3bSchristos 5590a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 5591a5a4af3bSchristos #undef OPRND 5592a5a4af3bSchristos #undef FLD 5593a5a4af3bSchristos } 5594a5a4af3bSchristos NEXT (vpc); 5595a5a4af3bSchristos 5596a5a4af3bSchristos CASE (sem, INSN_PAR_SLL) : /* sll $dr,$sr */ 5597a5a4af3bSchristos { 5598a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5599a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5600a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 5601a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 5602a5a4af3bSchristos int UNUSED written = 0; 5603a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5604a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5605a5a4af3bSchristos 5606a5a4af3bSchristos { 5607a5a4af3bSchristos SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 5608a5a4af3bSchristos OPRND (dr) = opval; 5609a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5610a5a4af3bSchristos } 5611a5a4af3bSchristos 5612a5a4af3bSchristos #undef OPRND 5613a5a4af3bSchristos #undef FLD 5614a5a4af3bSchristos } 5615a5a4af3bSchristos NEXT (vpc); 5616a5a4af3bSchristos 5617a5a4af3bSchristos CASE (sem, INSN_WRITE_SLL) : /* sll $dr,$sr */ 5618a5a4af3bSchristos { 5619a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5620a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5621a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 5622a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 5623a5a4af3bSchristos int UNUSED written = abuf->written; 5624a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5625a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5626a5a4af3bSchristos 5627a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5628a5a4af3bSchristos 5629a5a4af3bSchristos #undef OPRND 5630a5a4af3bSchristos #undef FLD 5631a5a4af3bSchristos } 5632a5a4af3bSchristos NEXT (vpc); 5633a5a4af3bSchristos 5634a5a4af3bSchristos CASE (sem, INSN_PAR_SLLI) : /* slli $dr,$uimm5 */ 5635a5a4af3bSchristos { 5636a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5637a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5638a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 5639a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f 5640a5a4af3bSchristos int UNUSED written = 0; 5641a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5642a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5643a5a4af3bSchristos 5644a5a4af3bSchristos { 5645a5a4af3bSchristos SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5)); 5646a5a4af3bSchristos OPRND (dr) = opval; 5647a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5648a5a4af3bSchristos } 5649a5a4af3bSchristos 5650a5a4af3bSchristos #undef OPRND 5651a5a4af3bSchristos #undef FLD 5652a5a4af3bSchristos } 5653a5a4af3bSchristos NEXT (vpc); 5654a5a4af3bSchristos 5655a5a4af3bSchristos CASE (sem, INSN_WRITE_SLLI) : /* slli $dr,$uimm5 */ 5656a5a4af3bSchristos { 5657a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5658a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5659a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 5660a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f 5661a5a4af3bSchristos int UNUSED written = abuf->written; 5662a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5663a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5664a5a4af3bSchristos 5665a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5666a5a4af3bSchristos 5667a5a4af3bSchristos #undef OPRND 5668a5a4af3bSchristos #undef FLD 5669a5a4af3bSchristos } 5670a5a4af3bSchristos NEXT (vpc); 5671a5a4af3bSchristos 5672a5a4af3bSchristos CASE (sem, INSN_PAR_SRA) : /* sra $dr,$sr */ 5673a5a4af3bSchristos { 5674a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5675a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5676a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 5677a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 5678a5a4af3bSchristos int UNUSED written = 0; 5679a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5680a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5681a5a4af3bSchristos 5682a5a4af3bSchristos { 5683a5a4af3bSchristos SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 5684a5a4af3bSchristos OPRND (dr) = opval; 5685a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5686a5a4af3bSchristos } 5687a5a4af3bSchristos 5688a5a4af3bSchristos #undef OPRND 5689a5a4af3bSchristos #undef FLD 5690a5a4af3bSchristos } 5691a5a4af3bSchristos NEXT (vpc); 5692a5a4af3bSchristos 5693a5a4af3bSchristos CASE (sem, INSN_WRITE_SRA) : /* sra $dr,$sr */ 5694a5a4af3bSchristos { 5695a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5696a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5697a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 5698a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 5699a5a4af3bSchristos int UNUSED written = abuf->written; 5700a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5701a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5702a5a4af3bSchristos 5703a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5704a5a4af3bSchristos 5705a5a4af3bSchristos #undef OPRND 5706a5a4af3bSchristos #undef FLD 5707a5a4af3bSchristos } 5708a5a4af3bSchristos NEXT (vpc); 5709a5a4af3bSchristos 5710a5a4af3bSchristos CASE (sem, INSN_PAR_SRAI) : /* srai $dr,$uimm5 */ 5711a5a4af3bSchristos { 5712a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5713a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5714a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 5715a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f 5716a5a4af3bSchristos int UNUSED written = 0; 5717a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5718a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5719a5a4af3bSchristos 5720a5a4af3bSchristos { 5721a5a4af3bSchristos SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5)); 5722a5a4af3bSchristos OPRND (dr) = opval; 5723a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5724a5a4af3bSchristos } 5725a5a4af3bSchristos 5726a5a4af3bSchristos #undef OPRND 5727a5a4af3bSchristos #undef FLD 5728a5a4af3bSchristos } 5729a5a4af3bSchristos NEXT (vpc); 5730a5a4af3bSchristos 5731a5a4af3bSchristos CASE (sem, INSN_WRITE_SRAI) : /* srai $dr,$uimm5 */ 5732a5a4af3bSchristos { 5733a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5734a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5735a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 5736a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f 5737a5a4af3bSchristos int UNUSED written = abuf->written; 5738a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5739a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5740a5a4af3bSchristos 5741a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5742a5a4af3bSchristos 5743a5a4af3bSchristos #undef OPRND 5744a5a4af3bSchristos #undef FLD 5745a5a4af3bSchristos } 5746a5a4af3bSchristos NEXT (vpc); 5747a5a4af3bSchristos 5748a5a4af3bSchristos CASE (sem, INSN_PAR_SRL) : /* srl $dr,$sr */ 5749a5a4af3bSchristos { 5750a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5751a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5752a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 5753a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 5754a5a4af3bSchristos int UNUSED written = 0; 5755a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5756a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5757a5a4af3bSchristos 5758a5a4af3bSchristos { 5759a5a4af3bSchristos SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 5760a5a4af3bSchristos OPRND (dr) = opval; 5761a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5762a5a4af3bSchristos } 5763a5a4af3bSchristos 5764a5a4af3bSchristos #undef OPRND 5765a5a4af3bSchristos #undef FLD 5766a5a4af3bSchristos } 5767a5a4af3bSchristos NEXT (vpc); 5768a5a4af3bSchristos 5769a5a4af3bSchristos CASE (sem, INSN_WRITE_SRL) : /* srl $dr,$sr */ 5770a5a4af3bSchristos { 5771a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5772a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5773a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 5774a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 5775a5a4af3bSchristos int UNUSED written = abuf->written; 5776a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5777a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5778a5a4af3bSchristos 5779a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5780a5a4af3bSchristos 5781a5a4af3bSchristos #undef OPRND 5782a5a4af3bSchristos #undef FLD 5783a5a4af3bSchristos } 5784a5a4af3bSchristos NEXT (vpc); 5785a5a4af3bSchristos 5786a5a4af3bSchristos CASE (sem, INSN_PAR_SRLI) : /* srli $dr,$uimm5 */ 5787a5a4af3bSchristos { 5788a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5789a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5790a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 5791a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f 5792a5a4af3bSchristos int UNUSED written = 0; 5793a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5794a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5795a5a4af3bSchristos 5796a5a4af3bSchristos { 5797a5a4af3bSchristos SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5)); 5798a5a4af3bSchristos OPRND (dr) = opval; 5799a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5800a5a4af3bSchristos } 5801a5a4af3bSchristos 5802a5a4af3bSchristos #undef OPRND 5803a5a4af3bSchristos #undef FLD 5804a5a4af3bSchristos } 5805a5a4af3bSchristos NEXT (vpc); 5806a5a4af3bSchristos 5807a5a4af3bSchristos CASE (sem, INSN_WRITE_SRLI) : /* srli $dr,$uimm5 */ 5808a5a4af3bSchristos { 5809a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5810a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5811a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f 5812a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f 5813a5a4af3bSchristos int UNUSED written = abuf->written; 5814a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5815a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5816a5a4af3bSchristos 5817a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 5818a5a4af3bSchristos 5819a5a4af3bSchristos #undef OPRND 5820a5a4af3bSchristos #undef FLD 5821a5a4af3bSchristos } 5822a5a4af3bSchristos NEXT (vpc); 5823a5a4af3bSchristos 5824a5a4af3bSchristos CASE (sem, INSN_PAR_ST) : /* st $src1,@$src2 */ 5825a5a4af3bSchristos { 5826a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5827a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5828a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5829a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st.f 5830a5a4af3bSchristos int UNUSED written = 0; 5831a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5832a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5833a5a4af3bSchristos 5834a5a4af3bSchristos { 5835a5a4af3bSchristos SI opval = * FLD (i_src1); 5836a5a4af3bSchristos OPRND (h_memory_SI_src2_idx) = * FLD (i_src2); 5837a5a4af3bSchristos OPRND (h_memory_SI_src2) = opval; 5838a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5839a5a4af3bSchristos } 5840a5a4af3bSchristos 5841a5a4af3bSchristos #undef OPRND 5842a5a4af3bSchristos #undef FLD 5843a5a4af3bSchristos } 5844a5a4af3bSchristos NEXT (vpc); 5845a5a4af3bSchristos 5846a5a4af3bSchristos CASE (sem, INSN_WRITE_ST) : /* st $src1,@$src2 */ 5847a5a4af3bSchristos { 5848a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5849a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5850a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5851a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st.f 5852a5a4af3bSchristos int UNUSED written = abuf->written; 5853a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5854a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5855a5a4af3bSchristos 5856a5a4af3bSchristos SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_src2_idx), OPRND (h_memory_SI_src2)); 5857a5a4af3bSchristos 5858a5a4af3bSchristos #undef OPRND 5859a5a4af3bSchristos #undef FLD 5860a5a4af3bSchristos } 5861a5a4af3bSchristos NEXT (vpc); 5862a5a4af3bSchristos 5863a5a4af3bSchristos CASE (sem, INSN_PAR_STB) : /* stb $src1,@$src2 */ 5864a5a4af3bSchristos { 5865a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5866a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5867a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5868a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb.f 5869a5a4af3bSchristos int UNUSED written = 0; 5870a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5871a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5872a5a4af3bSchristos 5873a5a4af3bSchristos { 5874a5a4af3bSchristos QI opval = * FLD (i_src1); 5875a5a4af3bSchristos OPRND (h_memory_QI_src2_idx) = * FLD (i_src2); 5876a5a4af3bSchristos OPRND (h_memory_QI_src2) = opval; 5877a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5878a5a4af3bSchristos } 5879a5a4af3bSchristos 5880a5a4af3bSchristos #undef OPRND 5881a5a4af3bSchristos #undef FLD 5882a5a4af3bSchristos } 5883a5a4af3bSchristos NEXT (vpc); 5884a5a4af3bSchristos 5885a5a4af3bSchristos CASE (sem, INSN_WRITE_STB) : /* stb $src1,@$src2 */ 5886a5a4af3bSchristos { 5887a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5888a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5889a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5890a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb.f 5891a5a4af3bSchristos int UNUSED written = abuf->written; 5892a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5893a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5894a5a4af3bSchristos 5895a5a4af3bSchristos SETMEMQI (current_cpu, pc, OPRND (h_memory_QI_src2_idx), OPRND (h_memory_QI_src2)); 5896a5a4af3bSchristos 5897a5a4af3bSchristos #undef OPRND 5898a5a4af3bSchristos #undef FLD 5899a5a4af3bSchristos } 5900a5a4af3bSchristos NEXT (vpc); 5901a5a4af3bSchristos 5902a5a4af3bSchristos CASE (sem, INSN_PAR_STH) : /* sth $src1,@$src2 */ 5903a5a4af3bSchristos { 5904a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5905a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5906a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5907a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth.f 5908a5a4af3bSchristos int UNUSED written = 0; 5909a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5910a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5911a5a4af3bSchristos 5912a5a4af3bSchristos { 5913a5a4af3bSchristos HI opval = * FLD (i_src1); 5914a5a4af3bSchristos OPRND (h_memory_HI_src2_idx) = * FLD (i_src2); 5915a5a4af3bSchristos OPRND (h_memory_HI_src2) = opval; 5916a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5917a5a4af3bSchristos } 5918a5a4af3bSchristos 5919a5a4af3bSchristos #undef OPRND 5920a5a4af3bSchristos #undef FLD 5921a5a4af3bSchristos } 5922a5a4af3bSchristos NEXT (vpc); 5923a5a4af3bSchristos 5924a5a4af3bSchristos CASE (sem, INSN_WRITE_STH) : /* sth $src1,@$src2 */ 5925a5a4af3bSchristos { 5926a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5927a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5928a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5929a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth.f 5930a5a4af3bSchristos int UNUSED written = abuf->written; 5931a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5932a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5933a5a4af3bSchristos 5934a5a4af3bSchristos SETMEMHI (current_cpu, pc, OPRND (h_memory_HI_src2_idx), OPRND (h_memory_HI_src2)); 5935a5a4af3bSchristos 5936a5a4af3bSchristos #undef OPRND 5937a5a4af3bSchristos #undef FLD 5938a5a4af3bSchristos } 5939a5a4af3bSchristos NEXT (vpc); 5940a5a4af3bSchristos 5941a5a4af3bSchristos CASE (sem, INSN_PAR_ST_PLUS) : /* st $src1,@+$src2 */ 5942a5a4af3bSchristos { 5943a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5944a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5945a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5946a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f 5947a5a4af3bSchristos int UNUSED written = 0; 5948a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5949a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5950a5a4af3bSchristos 5951a5a4af3bSchristos { 5952a5a4af3bSchristos SI tmp_new_src2; 5953a5a4af3bSchristos tmp_new_src2 = ADDSI (* FLD (i_src2), 4); 5954a5a4af3bSchristos { 5955a5a4af3bSchristos SI opval = * FLD (i_src1); 5956a5a4af3bSchristos OPRND (h_memory_SI_new_src2_idx) = tmp_new_src2; 5957a5a4af3bSchristos OPRND (h_memory_SI_new_src2) = opval; 5958a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5959a5a4af3bSchristos } 5960a5a4af3bSchristos { 5961a5a4af3bSchristos SI opval = tmp_new_src2; 5962a5a4af3bSchristos OPRND (src2) = opval; 5963a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 5964a5a4af3bSchristos } 5965a5a4af3bSchristos } 5966a5a4af3bSchristos 5967a5a4af3bSchristos #undef OPRND 5968a5a4af3bSchristos #undef FLD 5969a5a4af3bSchristos } 5970a5a4af3bSchristos NEXT (vpc); 5971a5a4af3bSchristos 5972a5a4af3bSchristos CASE (sem, INSN_WRITE_ST_PLUS) : /* st $src1,@+$src2 */ 5973a5a4af3bSchristos { 5974a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5975a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 5976a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5977a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f 5978a5a4af3bSchristos int UNUSED written = abuf->written; 5979a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5980a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 5981a5a4af3bSchristos 5982a5a4af3bSchristos SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_new_src2_idx), OPRND (h_memory_SI_new_src2)); 5983a5a4af3bSchristos * FLD (i_src2) = OPRND (src2); 5984a5a4af3bSchristos 5985a5a4af3bSchristos #undef OPRND 5986a5a4af3bSchristos #undef FLD 5987a5a4af3bSchristos } 5988a5a4af3bSchristos NEXT (vpc); 5989a5a4af3bSchristos 5990a5a4af3bSchristos CASE (sem, INSN_PAR_STH_PLUS) : /* sth $src1,@$src2+ */ 5991a5a4af3bSchristos { 5992a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 5993a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5994a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 5995a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth_plus.f 5996a5a4af3bSchristos int UNUSED written = 0; 5997a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 5998a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 5999a5a4af3bSchristos 6000a5a4af3bSchristos { 6001a5a4af3bSchristos SI tmp_new_src2; 6002a5a4af3bSchristos tmp_new_src2 = * FLD (i_src2); 6003a5a4af3bSchristos { 6004a5a4af3bSchristos HI opval = * FLD (i_src1); 6005a5a4af3bSchristos OPRND (h_memory_HI_new_src2_idx) = tmp_new_src2; 6006a5a4af3bSchristos OPRND (h_memory_HI_new_src2) = opval; 6007a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 6008a5a4af3bSchristos } 6009a5a4af3bSchristos { 6010a5a4af3bSchristos SI opval = ADDSI (tmp_new_src2, 2); 6011a5a4af3bSchristos OPRND (src2) = opval; 6012a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6013a5a4af3bSchristos } 6014a5a4af3bSchristos } 6015a5a4af3bSchristos 6016a5a4af3bSchristos #undef OPRND 6017a5a4af3bSchristos #undef FLD 6018a5a4af3bSchristos } 6019a5a4af3bSchristos NEXT (vpc); 6020a5a4af3bSchristos 6021a5a4af3bSchristos CASE (sem, INSN_WRITE_STH_PLUS) : /* sth $src1,@$src2+ */ 6022a5a4af3bSchristos { 6023a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6024a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6025a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6026a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth_plus.f 6027a5a4af3bSchristos int UNUSED written = abuf->written; 6028a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6029a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6030a5a4af3bSchristos 6031a5a4af3bSchristos SETMEMHI (current_cpu, pc, OPRND (h_memory_HI_new_src2_idx), OPRND (h_memory_HI_new_src2)); 6032a5a4af3bSchristos * FLD (i_src2) = OPRND (src2); 6033a5a4af3bSchristos 6034a5a4af3bSchristos #undef OPRND 6035a5a4af3bSchristos #undef FLD 6036a5a4af3bSchristos } 6037a5a4af3bSchristos NEXT (vpc); 6038a5a4af3bSchristos 6039a5a4af3bSchristos CASE (sem, INSN_PAR_STB_PLUS) : /* stb $src1,@$src2+ */ 6040a5a4af3bSchristos { 6041a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6042a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6043a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6044a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb_plus.f 6045a5a4af3bSchristos int UNUSED written = 0; 6046a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6047a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6048a5a4af3bSchristos 6049a5a4af3bSchristos { 6050a5a4af3bSchristos SI tmp_new_src2; 6051a5a4af3bSchristos tmp_new_src2 = * FLD (i_src2); 6052a5a4af3bSchristos { 6053a5a4af3bSchristos QI opval = * FLD (i_src1); 6054a5a4af3bSchristos OPRND (h_memory_QI_new_src2_idx) = tmp_new_src2; 6055a5a4af3bSchristos OPRND (h_memory_QI_new_src2) = opval; 6056a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 6057a5a4af3bSchristos } 6058a5a4af3bSchristos { 6059a5a4af3bSchristos SI opval = ADDSI (tmp_new_src2, 1); 6060a5a4af3bSchristos OPRND (src2) = opval; 6061a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6062a5a4af3bSchristos } 6063a5a4af3bSchristos } 6064a5a4af3bSchristos 6065a5a4af3bSchristos #undef OPRND 6066a5a4af3bSchristos #undef FLD 6067a5a4af3bSchristos } 6068a5a4af3bSchristos NEXT (vpc); 6069a5a4af3bSchristos 6070a5a4af3bSchristos CASE (sem, INSN_WRITE_STB_PLUS) : /* stb $src1,@$src2+ */ 6071a5a4af3bSchristos { 6072a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6073a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6074a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6075a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb_plus.f 6076a5a4af3bSchristos int UNUSED written = abuf->written; 6077a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6078a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6079a5a4af3bSchristos 6080a5a4af3bSchristos SETMEMQI (current_cpu, pc, OPRND (h_memory_QI_new_src2_idx), OPRND (h_memory_QI_new_src2)); 6081a5a4af3bSchristos * FLD (i_src2) = OPRND (src2); 6082a5a4af3bSchristos 6083a5a4af3bSchristos #undef OPRND 6084a5a4af3bSchristos #undef FLD 6085a5a4af3bSchristos } 6086a5a4af3bSchristos NEXT (vpc); 6087a5a4af3bSchristos 6088a5a4af3bSchristos CASE (sem, INSN_PAR_ST_MINUS) : /* st $src1,@-$src2 */ 6089a5a4af3bSchristos { 6090a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6091a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6092a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6093a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f 6094a5a4af3bSchristos int UNUSED written = 0; 6095a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6096a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6097a5a4af3bSchristos 6098a5a4af3bSchristos { 6099a5a4af3bSchristos SI tmp_new_src2; 6100a5a4af3bSchristos tmp_new_src2 = SUBSI (* FLD (i_src2), 4); 6101a5a4af3bSchristos { 6102a5a4af3bSchristos SI opval = * FLD (i_src1); 6103a5a4af3bSchristos OPRND (h_memory_SI_new_src2_idx) = tmp_new_src2; 6104a5a4af3bSchristos OPRND (h_memory_SI_new_src2) = opval; 6105a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 6106a5a4af3bSchristos } 6107a5a4af3bSchristos { 6108a5a4af3bSchristos SI opval = tmp_new_src2; 6109a5a4af3bSchristos OPRND (src2) = opval; 6110a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6111a5a4af3bSchristos } 6112a5a4af3bSchristos } 6113a5a4af3bSchristos 6114a5a4af3bSchristos #undef OPRND 6115a5a4af3bSchristos #undef FLD 6116a5a4af3bSchristos } 6117a5a4af3bSchristos NEXT (vpc); 6118a5a4af3bSchristos 6119a5a4af3bSchristos CASE (sem, INSN_WRITE_ST_MINUS) : /* st $src1,@-$src2 */ 6120a5a4af3bSchristos { 6121a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6122a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6123a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6124a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f 6125a5a4af3bSchristos int UNUSED written = abuf->written; 6126a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6127a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6128a5a4af3bSchristos 6129a5a4af3bSchristos SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_new_src2_idx), OPRND (h_memory_SI_new_src2)); 6130a5a4af3bSchristos * FLD (i_src2) = OPRND (src2); 6131a5a4af3bSchristos 6132a5a4af3bSchristos #undef OPRND 6133a5a4af3bSchristos #undef FLD 6134a5a4af3bSchristos } 6135a5a4af3bSchristos NEXT (vpc); 6136a5a4af3bSchristos 6137a5a4af3bSchristos CASE (sem, INSN_PAR_SUB) : /* sub $dr,$sr */ 6138a5a4af3bSchristos { 6139a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6140a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6141a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 6142a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 6143a5a4af3bSchristos int UNUSED written = 0; 6144a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6145a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6146a5a4af3bSchristos 6147a5a4af3bSchristos { 6148a5a4af3bSchristos SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr)); 6149a5a4af3bSchristos OPRND (dr) = opval; 6150a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6151a5a4af3bSchristos } 6152a5a4af3bSchristos 6153a5a4af3bSchristos #undef OPRND 6154a5a4af3bSchristos #undef FLD 6155a5a4af3bSchristos } 6156a5a4af3bSchristos NEXT (vpc); 6157a5a4af3bSchristos 6158a5a4af3bSchristos CASE (sem, INSN_WRITE_SUB) : /* sub $dr,$sr */ 6159a5a4af3bSchristos { 6160a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6161a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6162a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 6163a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f 6164a5a4af3bSchristos int UNUSED written = abuf->written; 6165a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6166a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6167a5a4af3bSchristos 6168a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 6169a5a4af3bSchristos 6170a5a4af3bSchristos #undef OPRND 6171a5a4af3bSchristos #undef FLD 6172a5a4af3bSchristos } 6173a5a4af3bSchristos NEXT (vpc); 6174a5a4af3bSchristos 6175a5a4af3bSchristos CASE (sem, INSN_PAR_SUBV) : /* subv $dr,$sr */ 6176a5a4af3bSchristos { 6177a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6178a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6179a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 6180a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f 6181a5a4af3bSchristos int UNUSED written = 0; 6182a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6183a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6184a5a4af3bSchristos 6185a5a4af3bSchristos { 6186a5a4af3bSchristos SI temp0;BI temp1; 6187a5a4af3bSchristos temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr)); 6188a5a4af3bSchristos temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0); 6189a5a4af3bSchristos { 6190a5a4af3bSchristos SI opval = temp0; 6191a5a4af3bSchristos OPRND (dr) = opval; 6192a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6193a5a4af3bSchristos } 6194a5a4af3bSchristos { 6195a5a4af3bSchristos BI opval = temp1; 6196a5a4af3bSchristos OPRND (condbit) = opval; 6197a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 6198a5a4af3bSchristos } 6199a5a4af3bSchristos } 6200a5a4af3bSchristos 6201a5a4af3bSchristos #undef OPRND 6202a5a4af3bSchristos #undef FLD 6203a5a4af3bSchristos } 6204a5a4af3bSchristos NEXT (vpc); 6205a5a4af3bSchristos 6206a5a4af3bSchristos CASE (sem, INSN_WRITE_SUBV) : /* subv $dr,$sr */ 6207a5a4af3bSchristos { 6208a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6209a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6210a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 6211a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f 6212a5a4af3bSchristos int UNUSED written = abuf->written; 6213a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6214a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6215a5a4af3bSchristos 6216a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 6217a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 6218a5a4af3bSchristos 6219a5a4af3bSchristos #undef OPRND 6220a5a4af3bSchristos #undef FLD 6221a5a4af3bSchristos } 6222a5a4af3bSchristos NEXT (vpc); 6223a5a4af3bSchristos 6224a5a4af3bSchristos CASE (sem, INSN_PAR_SUBX) : /* subx $dr,$sr */ 6225a5a4af3bSchristos { 6226a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6227a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6228a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 6229a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f 6230a5a4af3bSchristos int UNUSED written = 0; 6231a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6232a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6233a5a4af3bSchristos 6234a5a4af3bSchristos { 6235a5a4af3bSchristos SI temp0;BI temp1; 6236a5a4af3bSchristos temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 6237a5a4af3bSchristos temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 6238a5a4af3bSchristos { 6239a5a4af3bSchristos SI opval = temp0; 6240a5a4af3bSchristos OPRND (dr) = opval; 6241a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 6242a5a4af3bSchristos } 6243a5a4af3bSchristos { 6244a5a4af3bSchristos BI opval = temp1; 6245a5a4af3bSchristos OPRND (condbit) = opval; 6246a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 6247a5a4af3bSchristos } 6248a5a4af3bSchristos } 6249a5a4af3bSchristos 6250a5a4af3bSchristos #undef OPRND 6251a5a4af3bSchristos #undef FLD 6252a5a4af3bSchristos } 6253a5a4af3bSchristos NEXT (vpc); 6254a5a4af3bSchristos 6255a5a4af3bSchristos CASE (sem, INSN_WRITE_SUBX) : /* subx $dr,$sr */ 6256a5a4af3bSchristos { 6257a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6258a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6259a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f 6260a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f 6261a5a4af3bSchristos int UNUSED written = abuf->written; 6262a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6263a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6264a5a4af3bSchristos 6265a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 6266a5a4af3bSchristos * FLD (i_dr) = OPRND (dr); 6267a5a4af3bSchristos 6268a5a4af3bSchristos #undef OPRND 6269a5a4af3bSchristos #undef FLD 6270a5a4af3bSchristos } 6271a5a4af3bSchristos NEXT (vpc); 6272a5a4af3bSchristos 6273a5a4af3bSchristos CASE (sem, INSN_PAR_TRAP) : /* trap $uimm4 */ 6274a5a4af3bSchristos { 6275a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6276a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6277a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f 6278a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_trap.f 6279a5a4af3bSchristos int UNUSED written = 0; 6280a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6281a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6282a5a4af3bSchristos 6283a5a4af3bSchristos { 6284a5a4af3bSchristos { 6285a5a4af3bSchristos USI opval = GET_H_CR (((UINT) 6)); 6286a5a4af3bSchristos OPRND (h_cr_USI_14) = opval; 6287a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 6288a5a4af3bSchristos } 6289a5a4af3bSchristos { 6290a5a4af3bSchristos USI opval = ADDSI (pc, 4); 6291a5a4af3bSchristos OPRND (h_cr_USI_6) = opval; 6292a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 6293a5a4af3bSchristos } 6294a5a4af3bSchristos { 6295a5a4af3bSchristos UQI opval = CPU (h_bpsw); 6296a5a4af3bSchristos OPRND (h_bbpsw_UQI) = opval; 6297a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval); 6298a5a4af3bSchristos } 6299a5a4af3bSchristos { 6300a5a4af3bSchristos UQI opval = GET_H_PSW (); 6301a5a4af3bSchristos OPRND (h_bpsw_UQI) = opval; 6302a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 6303a5a4af3bSchristos } 6304a5a4af3bSchristos { 6305a5a4af3bSchristos UQI opval = ANDQI (GET_H_PSW (), 128); 6306a5a4af3bSchristos OPRND (h_psw_UQI) = opval; 6307a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 6308a5a4af3bSchristos } 6309a5a4af3bSchristos { 6310a5a4af3bSchristos SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4)); 6311a5a4af3bSchristos OPRND (pc) = opval; 6312a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 6313a5a4af3bSchristos } 6314a5a4af3bSchristos } 6315a5a4af3bSchristos 6316a5a4af3bSchristos #undef OPRND 6317a5a4af3bSchristos #undef FLD 6318a5a4af3bSchristos } 6319a5a4af3bSchristos NEXT (vpc); 6320a5a4af3bSchristos 6321a5a4af3bSchristos CASE (sem, INSN_WRITE_TRAP) : /* trap $uimm4 */ 6322a5a4af3bSchristos { 6323a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6324a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6325a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f 6326a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_trap.f 6327a5a4af3bSchristos int UNUSED written = abuf->written; 6328a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6329a5a4af3bSchristos SEM_BRANCH_INIT 6330a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6331a5a4af3bSchristos 6332a5a4af3bSchristos CPU (h_bbpsw) = OPRND (h_bbpsw_UQI); 6333a5a4af3bSchristos CPU (h_bpsw) = OPRND (h_bpsw_UQI); 6334a5a4af3bSchristos SET_H_CR (((UINT) 14), OPRND (h_cr_USI_14)); 6335a5a4af3bSchristos SET_H_CR (((UINT) 6), OPRND (h_cr_USI_6)); 6336a5a4af3bSchristos SET_H_PSW (OPRND (h_psw_UQI)); 6337a5a4af3bSchristos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc); 6338a5a4af3bSchristos 6339a5a4af3bSchristos SEM_BRANCH_FINI (vpc); 6340a5a4af3bSchristos #undef OPRND 6341a5a4af3bSchristos #undef FLD 6342a5a4af3bSchristos } 6343a5a4af3bSchristos NEXT (vpc); 6344a5a4af3bSchristos 6345a5a4af3bSchristos CASE (sem, INSN_PAR_UNLOCK) : /* unlock $src1,@$src2 */ 6346a5a4af3bSchristos { 6347a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6348a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6349a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6350a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_unlock.f 6351a5a4af3bSchristos int UNUSED written = 0; 6352a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6353a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6354a5a4af3bSchristos 6355a5a4af3bSchristos { 6356a5a4af3bSchristos if (CPU (h_lock)) { 6357a5a4af3bSchristos { 6358a5a4af3bSchristos SI opval = * FLD (i_src1); 6359a5a4af3bSchristos OPRND (h_memory_SI_src2_idx) = * FLD (i_src2); 6360a5a4af3bSchristos OPRND (h_memory_SI_src2) = opval; 6361a5a4af3bSchristos written |= (1 << 4); 6362a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 6363a5a4af3bSchristos } 6364a5a4af3bSchristos } 6365a5a4af3bSchristos { 6366a5a4af3bSchristos BI opval = 0; 6367a5a4af3bSchristos OPRND (h_lock_BI) = opval; 6368a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 6369a5a4af3bSchristos } 6370a5a4af3bSchristos } 6371a5a4af3bSchristos 6372a5a4af3bSchristos abuf->written = written; 6373a5a4af3bSchristos #undef OPRND 6374a5a4af3bSchristos #undef FLD 6375a5a4af3bSchristos } 6376a5a4af3bSchristos NEXT (vpc); 6377a5a4af3bSchristos 6378a5a4af3bSchristos CASE (sem, INSN_WRITE_UNLOCK) : /* unlock $src1,@$src2 */ 6379a5a4af3bSchristos { 6380a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6381a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6382a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6383a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_unlock.f 6384a5a4af3bSchristos int UNUSED written = abuf->written; 6385a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6386a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6387a5a4af3bSchristos 6388a5a4af3bSchristos CPU (h_lock) = OPRND (h_lock_BI); 6389a5a4af3bSchristos if (written & (1 << 4)) 6390a5a4af3bSchristos { 6391a5a4af3bSchristos SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_src2_idx), OPRND (h_memory_SI_src2)); 6392a5a4af3bSchristos } 6393a5a4af3bSchristos 6394a5a4af3bSchristos #undef OPRND 6395a5a4af3bSchristos #undef FLD 6396a5a4af3bSchristos } 6397a5a4af3bSchristos NEXT (vpc); 6398a5a4af3bSchristos 6399a5a4af3bSchristos CASE (sem, INSN_PAR_PCMPBZ) : /* pcmpbz $src2 */ 6400a5a4af3bSchristos { 6401a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6402a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6403a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6404a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f 6405a5a4af3bSchristos int UNUSED written = 0; 6406a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6407a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6408a5a4af3bSchristos 6409a5a4af3bSchristos { 6410a5a4af3bSchristos BI opval = (EQSI (ANDSI (* FLD (i_src2), 255), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 65280), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 0xff000000), 0)) ? (1) : (0); 6411a5a4af3bSchristos OPRND (condbit) = opval; 6412a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 6413a5a4af3bSchristos } 6414a5a4af3bSchristos 6415a5a4af3bSchristos #undef OPRND 6416a5a4af3bSchristos #undef FLD 6417a5a4af3bSchristos } 6418a5a4af3bSchristos NEXT (vpc); 6419a5a4af3bSchristos 6420a5a4af3bSchristos CASE (sem, INSN_WRITE_PCMPBZ) : /* pcmpbz $src2 */ 6421a5a4af3bSchristos { 6422a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6423a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6424a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6425a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f 6426a5a4af3bSchristos int UNUSED written = abuf->written; 6427a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6428a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6429a5a4af3bSchristos 6430a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 6431a5a4af3bSchristos 6432a5a4af3bSchristos #undef OPRND 6433a5a4af3bSchristos #undef FLD 6434a5a4af3bSchristos } 6435a5a4af3bSchristos NEXT (vpc); 6436a5a4af3bSchristos 6437a5a4af3bSchristos CASE (sem, INSN_PAR_SADD) : /* sadd */ 6438a5a4af3bSchristos { 6439a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6440a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6441a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 6442a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sadd.f 6443a5a4af3bSchristos int UNUSED written = 0; 6444a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6445a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6446a5a4af3bSchristos 6447a5a4af3bSchristos { 6448a5a4af3bSchristos DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0))); 6449a5a4af3bSchristos OPRND (h_accums_DI_0) = opval; 6450a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 6451a5a4af3bSchristos } 6452a5a4af3bSchristos 6453a5a4af3bSchristos #undef OPRND 6454a5a4af3bSchristos #undef FLD 6455a5a4af3bSchristos } 6456a5a4af3bSchristos NEXT (vpc); 6457a5a4af3bSchristos 6458a5a4af3bSchristos CASE (sem, INSN_WRITE_SADD) : /* sadd */ 6459a5a4af3bSchristos { 6460a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6461a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6462a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 6463a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sadd.f 6464a5a4af3bSchristos int UNUSED written = abuf->written; 6465a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6466a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6467a5a4af3bSchristos 6468a5a4af3bSchristos SET_H_ACCUMS (((UINT) 0), OPRND (h_accums_DI_0)); 6469a5a4af3bSchristos 6470a5a4af3bSchristos #undef OPRND 6471a5a4af3bSchristos #undef FLD 6472a5a4af3bSchristos } 6473a5a4af3bSchristos NEXT (vpc); 6474a5a4af3bSchristos 6475a5a4af3bSchristos CASE (sem, INSN_PAR_MACWU1) : /* macwu1 $src1,$src2 */ 6476a5a4af3bSchristos { 6477a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6478a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6479a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6480a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f 6481a5a4af3bSchristos int UNUSED written = 0; 6482a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6483a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6484a5a4af3bSchristos 6485a5a4af3bSchristos { 6486a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8); 6487a5a4af3bSchristos OPRND (h_accums_DI_1) = opval; 6488a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 6489a5a4af3bSchristos } 6490a5a4af3bSchristos 6491a5a4af3bSchristos #undef OPRND 6492a5a4af3bSchristos #undef FLD 6493a5a4af3bSchristos } 6494a5a4af3bSchristos NEXT (vpc); 6495a5a4af3bSchristos 6496a5a4af3bSchristos CASE (sem, INSN_WRITE_MACWU1) : /* macwu1 $src1,$src2 */ 6497a5a4af3bSchristos { 6498a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6499a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6500a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6501a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f 6502a5a4af3bSchristos int UNUSED written = abuf->written; 6503a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6504a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6505a5a4af3bSchristos 6506a5a4af3bSchristos SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1)); 6507a5a4af3bSchristos 6508a5a4af3bSchristos #undef OPRND 6509a5a4af3bSchristos #undef FLD 6510a5a4af3bSchristos } 6511a5a4af3bSchristos NEXT (vpc); 6512a5a4af3bSchristos 6513a5a4af3bSchristos CASE (sem, INSN_PAR_MSBLO) : /* msblo $src1,$src2 */ 6514a5a4af3bSchristos { 6515a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6516a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6517a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6518a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_msblo.f 6519a5a4af3bSchristos int UNUSED written = 0; 6520a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6521a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6522a5a4af3bSchristos 6523a5a4af3bSchristos { 6524a5a4af3bSchristos DI opval = SRADI (SLLDI (SUBDI (GET_H_ACCUM (), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (* FLD (i_src1))), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 32), 16)), 8), 8); 6525a5a4af3bSchristos OPRND (accum) = opval; 6526a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 6527a5a4af3bSchristos } 6528a5a4af3bSchristos 6529a5a4af3bSchristos #undef OPRND 6530a5a4af3bSchristos #undef FLD 6531a5a4af3bSchristos } 6532a5a4af3bSchristos NEXT (vpc); 6533a5a4af3bSchristos 6534a5a4af3bSchristos CASE (sem, INSN_WRITE_MSBLO) : /* msblo $src1,$src2 */ 6535a5a4af3bSchristos { 6536a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6537a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6538a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6539a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_msblo.f 6540a5a4af3bSchristos int UNUSED written = abuf->written; 6541a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6542a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6543a5a4af3bSchristos 6544a5a4af3bSchristos SET_H_ACCUM (OPRND (accum)); 6545a5a4af3bSchristos 6546a5a4af3bSchristos #undef OPRND 6547a5a4af3bSchristos #undef FLD 6548a5a4af3bSchristos } 6549a5a4af3bSchristos NEXT (vpc); 6550a5a4af3bSchristos 6551a5a4af3bSchristos CASE (sem, INSN_PAR_MULWU1) : /* mulwu1 $src1,$src2 */ 6552a5a4af3bSchristos { 6553a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6554a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6555a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6556a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulwu1.f 6557a5a4af3bSchristos int UNUSED written = 0; 6558a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6559a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6560a5a4af3bSchristos 6561a5a4af3bSchristos { 6562a5a4af3bSchristos DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16); 6563a5a4af3bSchristos OPRND (h_accums_DI_1) = opval; 6564a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 6565a5a4af3bSchristos } 6566a5a4af3bSchristos 6567a5a4af3bSchristos #undef OPRND 6568a5a4af3bSchristos #undef FLD 6569a5a4af3bSchristos } 6570a5a4af3bSchristos NEXT (vpc); 6571a5a4af3bSchristos 6572a5a4af3bSchristos CASE (sem, INSN_WRITE_MULWU1) : /* mulwu1 $src1,$src2 */ 6573a5a4af3bSchristos { 6574a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6575a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6576a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6577a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulwu1.f 6578a5a4af3bSchristos int UNUSED written = abuf->written; 6579a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6580a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6581a5a4af3bSchristos 6582a5a4af3bSchristos SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1)); 6583a5a4af3bSchristos 6584a5a4af3bSchristos #undef OPRND 6585a5a4af3bSchristos #undef FLD 6586a5a4af3bSchristos } 6587a5a4af3bSchristos NEXT (vpc); 6588a5a4af3bSchristos 6589a5a4af3bSchristos CASE (sem, INSN_PAR_MACLH1) : /* maclh1 $src1,$src2 */ 6590a5a4af3bSchristos { 6591a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6592a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6593a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6594a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f 6595a5a4af3bSchristos int UNUSED written = 0; 6596a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6597a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6598a5a4af3bSchristos 6599a5a4af3bSchristos { 6600a5a4af3bSchristos DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (* FLD (i_src1))), SRASI (* FLD (i_src2), 16))), 16)), 8), 8); 6601a5a4af3bSchristos OPRND (h_accums_DI_1) = opval; 6602a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval); 6603a5a4af3bSchristos } 6604a5a4af3bSchristos 6605a5a4af3bSchristos #undef OPRND 6606a5a4af3bSchristos #undef FLD 6607a5a4af3bSchristos } 6608a5a4af3bSchristos NEXT (vpc); 6609a5a4af3bSchristos 6610a5a4af3bSchristos CASE (sem, INSN_WRITE_MACLH1) : /* maclh1 $src1,$src2 */ 6611a5a4af3bSchristos { 6612a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6613a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6614a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f 6615a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f 6616a5a4af3bSchristos int UNUSED written = abuf->written; 6617a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6618a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6619a5a4af3bSchristos 6620a5a4af3bSchristos SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1)); 6621a5a4af3bSchristos 6622a5a4af3bSchristos #undef OPRND 6623a5a4af3bSchristos #undef FLD 6624a5a4af3bSchristos } 6625a5a4af3bSchristos NEXT (vpc); 6626a5a4af3bSchristos 6627a5a4af3bSchristos CASE (sem, INSN_PAR_SC) : /* sc */ 6628a5a4af3bSchristos { 6629a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6630a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6631a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 6632a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f 6633a5a4af3bSchristos int UNUSED written = 0; 6634a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6635a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6636a5a4af3bSchristos 6637a5a4af3bSchristos if (ZEXTBISI (CPU (h_cond))) 6638a5a4af3bSchristos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 6639a5a4af3bSchristos 6640a5a4af3bSchristos #undef OPRND 6641a5a4af3bSchristos #undef FLD 6642a5a4af3bSchristos } 6643a5a4af3bSchristos NEXT (vpc); 6644a5a4af3bSchristos 6645a5a4af3bSchristos CASE (sem, INSN_WRITE_SC) : /* sc */ 6646a5a4af3bSchristos { 6647a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6648a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6649a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 6650a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f 6651a5a4af3bSchristos int UNUSED written = abuf->written; 6652a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6653a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6654a5a4af3bSchristos 6655a5a4af3bSchristos 6656a5a4af3bSchristos #undef OPRND 6657a5a4af3bSchristos #undef FLD 6658a5a4af3bSchristos } 6659a5a4af3bSchristos NEXT (vpc); 6660a5a4af3bSchristos 6661a5a4af3bSchristos CASE (sem, INSN_PAR_SNC) : /* snc */ 6662a5a4af3bSchristos { 6663a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6664a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6665a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 6666a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f 6667a5a4af3bSchristos int UNUSED written = 0; 6668a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6669a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6670a5a4af3bSchristos 6671a5a4af3bSchristos if (ZEXTBISI (NOTBI (CPU (h_cond)))) 6672a5a4af3bSchristos SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 6673a5a4af3bSchristos 6674a5a4af3bSchristos #undef OPRND 6675a5a4af3bSchristos #undef FLD 6676a5a4af3bSchristos } 6677a5a4af3bSchristos NEXT (vpc); 6678a5a4af3bSchristos 6679a5a4af3bSchristos CASE (sem, INSN_WRITE_SNC) : /* snc */ 6680a5a4af3bSchristos { 6681a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6682a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6683a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f 6684a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f 6685a5a4af3bSchristos int UNUSED written = abuf->written; 6686a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6687a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6688a5a4af3bSchristos 6689a5a4af3bSchristos 6690a5a4af3bSchristos #undef OPRND 6691a5a4af3bSchristos #undef FLD 6692a5a4af3bSchristos } 6693a5a4af3bSchristos NEXT (vpc); 6694a5a4af3bSchristos 6695a5a4af3bSchristos CASE (sem, INSN_PAR_CLRPSW) : /* clrpsw $uimm8 */ 6696a5a4af3bSchristos { 6697a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6698a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6699a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 6700a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_clrpsw.f 6701a5a4af3bSchristos int UNUSED written = 0; 6702a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6703a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6704a5a4af3bSchristos 6705a5a4af3bSchristos { 6706a5a4af3bSchristos USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280)); 6707a5a4af3bSchristos OPRND (h_cr_USI_0) = opval; 6708a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 6709a5a4af3bSchristos } 6710a5a4af3bSchristos 6711a5a4af3bSchristos #undef OPRND 6712a5a4af3bSchristos #undef FLD 6713a5a4af3bSchristos } 6714a5a4af3bSchristos NEXT (vpc); 6715a5a4af3bSchristos 6716a5a4af3bSchristos CASE (sem, INSN_WRITE_CLRPSW) : /* clrpsw $uimm8 */ 6717a5a4af3bSchristos { 6718a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6719a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6720a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 6721a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_clrpsw.f 6722a5a4af3bSchristos int UNUSED written = abuf->written; 6723a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6724a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6725a5a4af3bSchristos 6726a5a4af3bSchristos SET_H_CR (((UINT) 0), OPRND (h_cr_USI_0)); 6727a5a4af3bSchristos 6728a5a4af3bSchristos #undef OPRND 6729a5a4af3bSchristos #undef FLD 6730a5a4af3bSchristos } 6731a5a4af3bSchristos NEXT (vpc); 6732a5a4af3bSchristos 6733a5a4af3bSchristos CASE (sem, INSN_PAR_SETPSW) : /* setpsw $uimm8 */ 6734a5a4af3bSchristos { 6735a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6736a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6737a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 6738a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_setpsw.f 6739a5a4af3bSchristos int UNUSED written = 0; 6740a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6741a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6742a5a4af3bSchristos 6743a5a4af3bSchristos { 6744a5a4af3bSchristos USI opval = FLD (f_uimm8); 6745a5a4af3bSchristos OPRND (h_cr_USI_0) = opval; 6746a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 6747a5a4af3bSchristos } 6748a5a4af3bSchristos 6749a5a4af3bSchristos #undef OPRND 6750a5a4af3bSchristos #undef FLD 6751a5a4af3bSchristos } 6752a5a4af3bSchristos NEXT (vpc); 6753a5a4af3bSchristos 6754a5a4af3bSchristos CASE (sem, INSN_WRITE_SETPSW) : /* setpsw $uimm8 */ 6755a5a4af3bSchristos { 6756a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6757a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6758a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f 6759a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_setpsw.f 6760a5a4af3bSchristos int UNUSED written = abuf->written; 6761a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6762a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6763a5a4af3bSchristos 6764a5a4af3bSchristos SET_H_CR (((UINT) 0), OPRND (h_cr_USI_0)); 6765a5a4af3bSchristos 6766a5a4af3bSchristos #undef OPRND 6767a5a4af3bSchristos #undef FLD 6768a5a4af3bSchristos } 6769a5a4af3bSchristos NEXT (vpc); 6770a5a4af3bSchristos 6771a5a4af3bSchristos CASE (sem, INSN_PAR_BTST) : /* btst $uimm3,$sr */ 6772a5a4af3bSchristos { 6773a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6774a5a4af3bSchristos ARGBUF *abuf = SEM_ARGBUF (sem_arg); 6775a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 6776a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_btst.f 6777a5a4af3bSchristos int UNUSED written = 0; 6778a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6779a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 6780a5a4af3bSchristos 6781a5a4af3bSchristos { 6782a5a4af3bSchristos BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1); 6783a5a4af3bSchristos OPRND (condbit) = opval; 6784a5a4af3bSchristos CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 6785a5a4af3bSchristos } 6786a5a4af3bSchristos 6787a5a4af3bSchristos #undef OPRND 6788a5a4af3bSchristos #undef FLD 6789a5a4af3bSchristos } 6790a5a4af3bSchristos NEXT (vpc); 6791a5a4af3bSchristos 6792a5a4af3bSchristos CASE (sem, INSN_WRITE_BTST) : /* btst $uimm3,$sr */ 6793a5a4af3bSchristos { 6794a5a4af3bSchristos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc); 6795a5a4af3bSchristos const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf; 6796a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f 6797a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_btst.f 6798a5a4af3bSchristos int UNUSED written = abuf->written; 6799a5a4af3bSchristos IADDR UNUSED pc = abuf->addr; 6800a5a4af3bSchristos vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 6801a5a4af3bSchristos 6802a5a4af3bSchristos CPU (h_cond) = OPRND (condbit); 6803a5a4af3bSchristos 6804a5a4af3bSchristos #undef OPRND 6805a5a4af3bSchristos #undef FLD 6806a5a4af3bSchristos } 6807a5a4af3bSchristos NEXT (vpc); 6808a5a4af3bSchristos 6809a5a4af3bSchristos 6810a5a4af3bSchristos } 6811a5a4af3bSchristos ENDSWITCH (sem) /* End of semantic switch. */ 6812a5a4af3bSchristos 6813a5a4af3bSchristos /* At this point `vpc' contains the next insn to execute. */ 6814a5a4af3bSchristos } 6815a5a4af3bSchristos 6816a5a4af3bSchristos #undef DEFINE_SWITCH 6817a5a4af3bSchristos #endif /* DEFINE_SWITCH */ 6818