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