166e63ce3Schristos /* Simulator instruction semantics for m32r2f.
266e63ce3Schristos 
366e63ce3Schristos THIS FILE IS MACHINE GENERATED WITH CGEN.
466e63ce3Schristos 
5*1424dfb3Schristos Copyright 1996-2020 Free Software Foundation, Inc.
666e63ce3Schristos 
766e63ce3Schristos This file is part of the GNU simulators.
866e63ce3Schristos 
966e63ce3Schristos    This file is free software; you can redistribute it and/or modify
1066e63ce3Schristos    it under the terms of the GNU General Public License as published by
1166e63ce3Schristos    the Free Software Foundation; either version 3, or (at your option)
1266e63ce3Schristos    any later version.
1366e63ce3Schristos 
1466e63ce3Schristos    It is distributed in the hope that it will be useful, but WITHOUT
1566e63ce3Schristos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1666e63ce3Schristos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
1766e63ce3Schristos    License for more details.
1866e63ce3Schristos 
1966e63ce3Schristos    You should have received a copy of the GNU General Public License along
2048596154Schristos    with this program; if not, see <http://www.gnu.org/licenses/>.
2166e63ce3Schristos 
2266e63ce3Schristos */
2366e63ce3Schristos 
2466e63ce3Schristos #ifdef DEFINE_LABELS
2566e63ce3Schristos 
2666e63ce3Schristos   /* The labels have the case they have because the enum of insn types
2766e63ce3Schristos      is all uppercase and in the non-stdc case the insn symbol is built
2866e63ce3Schristos      into the enum name.  */
2966e63ce3Schristos 
3066e63ce3Schristos   static struct {
3166e63ce3Schristos     int index;
3266e63ce3Schristos     void *label;
3366e63ce3Schristos   } labels[] = {
3466e63ce3Schristos     { M32R2F_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
3566e63ce3Schristos     { M32R2F_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
3666e63ce3Schristos     { M32R2F_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
3766e63ce3Schristos     { M32R2F_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
3866e63ce3Schristos     { M32R2F_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
3966e63ce3Schristos     { M32R2F_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
4066e63ce3Schristos     { M32R2F_INSN_ADD, && case_sem_INSN_ADD },
4166e63ce3Schristos     { M32R2F_INSN_ADD3, && case_sem_INSN_ADD3 },
4266e63ce3Schristos     { M32R2F_INSN_AND, && case_sem_INSN_AND },
4366e63ce3Schristos     { M32R2F_INSN_AND3, && case_sem_INSN_AND3 },
4466e63ce3Schristos     { M32R2F_INSN_OR, && case_sem_INSN_OR },
4566e63ce3Schristos     { M32R2F_INSN_OR3, && case_sem_INSN_OR3 },
4666e63ce3Schristos     { M32R2F_INSN_XOR, && case_sem_INSN_XOR },
4766e63ce3Schristos     { M32R2F_INSN_XOR3, && case_sem_INSN_XOR3 },
4866e63ce3Schristos     { M32R2F_INSN_ADDI, && case_sem_INSN_ADDI },
4966e63ce3Schristos     { M32R2F_INSN_ADDV, && case_sem_INSN_ADDV },
5066e63ce3Schristos     { M32R2F_INSN_ADDV3, && case_sem_INSN_ADDV3 },
5166e63ce3Schristos     { M32R2F_INSN_ADDX, && case_sem_INSN_ADDX },
5266e63ce3Schristos     { M32R2F_INSN_BC8, && case_sem_INSN_BC8 },
5366e63ce3Schristos     { M32R2F_INSN_BC24, && case_sem_INSN_BC24 },
5466e63ce3Schristos     { M32R2F_INSN_BEQ, && case_sem_INSN_BEQ },
5566e63ce3Schristos     { M32R2F_INSN_BEQZ, && case_sem_INSN_BEQZ },
5666e63ce3Schristos     { M32R2F_INSN_BGEZ, && case_sem_INSN_BGEZ },
5766e63ce3Schristos     { M32R2F_INSN_BGTZ, && case_sem_INSN_BGTZ },
5866e63ce3Schristos     { M32R2F_INSN_BLEZ, && case_sem_INSN_BLEZ },
5966e63ce3Schristos     { M32R2F_INSN_BLTZ, && case_sem_INSN_BLTZ },
6066e63ce3Schristos     { M32R2F_INSN_BNEZ, && case_sem_INSN_BNEZ },
6166e63ce3Schristos     { M32R2F_INSN_BL8, && case_sem_INSN_BL8 },
6266e63ce3Schristos     { M32R2F_INSN_BL24, && case_sem_INSN_BL24 },
6366e63ce3Schristos     { M32R2F_INSN_BCL8, && case_sem_INSN_BCL8 },
6466e63ce3Schristos     { M32R2F_INSN_BCL24, && case_sem_INSN_BCL24 },
6566e63ce3Schristos     { M32R2F_INSN_BNC8, && case_sem_INSN_BNC8 },
6666e63ce3Schristos     { M32R2F_INSN_BNC24, && case_sem_INSN_BNC24 },
6766e63ce3Schristos     { M32R2F_INSN_BNE, && case_sem_INSN_BNE },
6866e63ce3Schristos     { M32R2F_INSN_BRA8, && case_sem_INSN_BRA8 },
6966e63ce3Schristos     { M32R2F_INSN_BRA24, && case_sem_INSN_BRA24 },
7066e63ce3Schristos     { M32R2F_INSN_BNCL8, && case_sem_INSN_BNCL8 },
7166e63ce3Schristos     { M32R2F_INSN_BNCL24, && case_sem_INSN_BNCL24 },
7266e63ce3Schristos     { M32R2F_INSN_CMP, && case_sem_INSN_CMP },
7366e63ce3Schristos     { M32R2F_INSN_CMPI, && case_sem_INSN_CMPI },
7466e63ce3Schristos     { M32R2F_INSN_CMPU, && case_sem_INSN_CMPU },
7566e63ce3Schristos     { M32R2F_INSN_CMPUI, && case_sem_INSN_CMPUI },
7666e63ce3Schristos     { M32R2F_INSN_CMPEQ, && case_sem_INSN_CMPEQ },
7766e63ce3Schristos     { M32R2F_INSN_CMPZ, && case_sem_INSN_CMPZ },
7866e63ce3Schristos     { M32R2F_INSN_DIV, && case_sem_INSN_DIV },
7966e63ce3Schristos     { M32R2F_INSN_DIVU, && case_sem_INSN_DIVU },
8066e63ce3Schristos     { M32R2F_INSN_REM, && case_sem_INSN_REM },
8166e63ce3Schristos     { M32R2F_INSN_REMU, && case_sem_INSN_REMU },
8266e63ce3Schristos     { M32R2F_INSN_REMH, && case_sem_INSN_REMH },
8366e63ce3Schristos     { M32R2F_INSN_REMUH, && case_sem_INSN_REMUH },
8466e63ce3Schristos     { M32R2F_INSN_REMB, && case_sem_INSN_REMB },
8566e63ce3Schristos     { M32R2F_INSN_REMUB, && case_sem_INSN_REMUB },
8666e63ce3Schristos     { M32R2F_INSN_DIVUH, && case_sem_INSN_DIVUH },
8766e63ce3Schristos     { M32R2F_INSN_DIVB, && case_sem_INSN_DIVB },
8866e63ce3Schristos     { M32R2F_INSN_DIVUB, && case_sem_INSN_DIVUB },
8966e63ce3Schristos     { M32R2F_INSN_DIVH, && case_sem_INSN_DIVH },
9066e63ce3Schristos     { M32R2F_INSN_JC, && case_sem_INSN_JC },
9166e63ce3Schristos     { M32R2F_INSN_JNC, && case_sem_INSN_JNC },
9266e63ce3Schristos     { M32R2F_INSN_JL, && case_sem_INSN_JL },
9366e63ce3Schristos     { M32R2F_INSN_JMP, && case_sem_INSN_JMP },
9466e63ce3Schristos     { M32R2F_INSN_LD, && case_sem_INSN_LD },
9566e63ce3Schristos     { M32R2F_INSN_LD_D, && case_sem_INSN_LD_D },
9666e63ce3Schristos     { M32R2F_INSN_LDB, && case_sem_INSN_LDB },
9766e63ce3Schristos     { M32R2F_INSN_LDB_D, && case_sem_INSN_LDB_D },
9866e63ce3Schristos     { M32R2F_INSN_LDH, && case_sem_INSN_LDH },
9966e63ce3Schristos     { M32R2F_INSN_LDH_D, && case_sem_INSN_LDH_D },
10066e63ce3Schristos     { M32R2F_INSN_LDUB, && case_sem_INSN_LDUB },
10166e63ce3Schristos     { M32R2F_INSN_LDUB_D, && case_sem_INSN_LDUB_D },
10266e63ce3Schristos     { M32R2F_INSN_LDUH, && case_sem_INSN_LDUH },
10366e63ce3Schristos     { M32R2F_INSN_LDUH_D, && case_sem_INSN_LDUH_D },
10466e63ce3Schristos     { M32R2F_INSN_LD_PLUS, && case_sem_INSN_LD_PLUS },
10566e63ce3Schristos     { M32R2F_INSN_LD24, && case_sem_INSN_LD24 },
10666e63ce3Schristos     { M32R2F_INSN_LDI8, && case_sem_INSN_LDI8 },
10766e63ce3Schristos     { M32R2F_INSN_LDI16, && case_sem_INSN_LDI16 },
10866e63ce3Schristos     { M32R2F_INSN_LOCK, && case_sem_INSN_LOCK },
10966e63ce3Schristos     { M32R2F_INSN_MACHI_A, && case_sem_INSN_MACHI_A },
11066e63ce3Schristos     { M32R2F_INSN_MACLO_A, && case_sem_INSN_MACLO_A },
11166e63ce3Schristos     { M32R2F_INSN_MACWHI_A, && case_sem_INSN_MACWHI_A },
11266e63ce3Schristos     { M32R2F_INSN_MACWLO_A, && case_sem_INSN_MACWLO_A },
11366e63ce3Schristos     { M32R2F_INSN_MUL, && case_sem_INSN_MUL },
11466e63ce3Schristos     { M32R2F_INSN_MULHI_A, && case_sem_INSN_MULHI_A },
11566e63ce3Schristos     { M32R2F_INSN_MULLO_A, && case_sem_INSN_MULLO_A },
11666e63ce3Schristos     { M32R2F_INSN_MULWHI_A, && case_sem_INSN_MULWHI_A },
11766e63ce3Schristos     { M32R2F_INSN_MULWLO_A, && case_sem_INSN_MULWLO_A },
11866e63ce3Schristos     { M32R2F_INSN_MV, && case_sem_INSN_MV },
11966e63ce3Schristos     { M32R2F_INSN_MVFACHI_A, && case_sem_INSN_MVFACHI_A },
12066e63ce3Schristos     { M32R2F_INSN_MVFACLO_A, && case_sem_INSN_MVFACLO_A },
12166e63ce3Schristos     { M32R2F_INSN_MVFACMI_A, && case_sem_INSN_MVFACMI_A },
12266e63ce3Schristos     { M32R2F_INSN_MVFC, && case_sem_INSN_MVFC },
12366e63ce3Schristos     { M32R2F_INSN_MVTACHI_A, && case_sem_INSN_MVTACHI_A },
12466e63ce3Schristos     { M32R2F_INSN_MVTACLO_A, && case_sem_INSN_MVTACLO_A },
12566e63ce3Schristos     { M32R2F_INSN_MVTC, && case_sem_INSN_MVTC },
12666e63ce3Schristos     { M32R2F_INSN_NEG, && case_sem_INSN_NEG },
12766e63ce3Schristos     { M32R2F_INSN_NOP, && case_sem_INSN_NOP },
12866e63ce3Schristos     { M32R2F_INSN_NOT, && case_sem_INSN_NOT },
12966e63ce3Schristos     { M32R2F_INSN_RAC_DSI, && case_sem_INSN_RAC_DSI },
13066e63ce3Schristos     { M32R2F_INSN_RACH_DSI, && case_sem_INSN_RACH_DSI },
13166e63ce3Schristos     { M32R2F_INSN_RTE, && case_sem_INSN_RTE },
13266e63ce3Schristos     { M32R2F_INSN_SETH, && case_sem_INSN_SETH },
13366e63ce3Schristos     { M32R2F_INSN_SLL, && case_sem_INSN_SLL },
13466e63ce3Schristos     { M32R2F_INSN_SLL3, && case_sem_INSN_SLL3 },
13566e63ce3Schristos     { M32R2F_INSN_SLLI, && case_sem_INSN_SLLI },
13666e63ce3Schristos     { M32R2F_INSN_SRA, && case_sem_INSN_SRA },
13766e63ce3Schristos     { M32R2F_INSN_SRA3, && case_sem_INSN_SRA3 },
13866e63ce3Schristos     { M32R2F_INSN_SRAI, && case_sem_INSN_SRAI },
13966e63ce3Schristos     { M32R2F_INSN_SRL, && case_sem_INSN_SRL },
14066e63ce3Schristos     { M32R2F_INSN_SRL3, && case_sem_INSN_SRL3 },
14166e63ce3Schristos     { M32R2F_INSN_SRLI, && case_sem_INSN_SRLI },
14266e63ce3Schristos     { M32R2F_INSN_ST, && case_sem_INSN_ST },
14366e63ce3Schristos     { M32R2F_INSN_ST_D, && case_sem_INSN_ST_D },
14466e63ce3Schristos     { M32R2F_INSN_STB, && case_sem_INSN_STB },
14566e63ce3Schristos     { M32R2F_INSN_STB_D, && case_sem_INSN_STB_D },
14666e63ce3Schristos     { M32R2F_INSN_STH, && case_sem_INSN_STH },
14766e63ce3Schristos     { M32R2F_INSN_STH_D, && case_sem_INSN_STH_D },
14866e63ce3Schristos     { M32R2F_INSN_ST_PLUS, && case_sem_INSN_ST_PLUS },
14966e63ce3Schristos     { M32R2F_INSN_STH_PLUS, && case_sem_INSN_STH_PLUS },
15066e63ce3Schristos     { M32R2F_INSN_STB_PLUS, && case_sem_INSN_STB_PLUS },
15166e63ce3Schristos     { M32R2F_INSN_ST_MINUS, && case_sem_INSN_ST_MINUS },
15266e63ce3Schristos     { M32R2F_INSN_SUB, && case_sem_INSN_SUB },
15366e63ce3Schristos     { M32R2F_INSN_SUBV, && case_sem_INSN_SUBV },
15466e63ce3Schristos     { M32R2F_INSN_SUBX, && case_sem_INSN_SUBX },
15566e63ce3Schristos     { M32R2F_INSN_TRAP, && case_sem_INSN_TRAP },
15666e63ce3Schristos     { M32R2F_INSN_UNLOCK, && case_sem_INSN_UNLOCK },
15766e63ce3Schristos     { M32R2F_INSN_SATB, && case_sem_INSN_SATB },
15866e63ce3Schristos     { M32R2F_INSN_SATH, && case_sem_INSN_SATH },
15966e63ce3Schristos     { M32R2F_INSN_SAT, && case_sem_INSN_SAT },
16066e63ce3Schristos     { M32R2F_INSN_PCMPBZ, && case_sem_INSN_PCMPBZ },
16166e63ce3Schristos     { M32R2F_INSN_SADD, && case_sem_INSN_SADD },
16266e63ce3Schristos     { M32R2F_INSN_MACWU1, && case_sem_INSN_MACWU1 },
16366e63ce3Schristos     { M32R2F_INSN_MSBLO, && case_sem_INSN_MSBLO },
16466e63ce3Schristos     { M32R2F_INSN_MULWU1, && case_sem_INSN_MULWU1 },
16566e63ce3Schristos     { M32R2F_INSN_MACLH1, && case_sem_INSN_MACLH1 },
16666e63ce3Schristos     { M32R2F_INSN_SC, && case_sem_INSN_SC },
16766e63ce3Schristos     { M32R2F_INSN_SNC, && case_sem_INSN_SNC },
16866e63ce3Schristos     { M32R2F_INSN_CLRPSW, && case_sem_INSN_CLRPSW },
16966e63ce3Schristos     { M32R2F_INSN_SETPSW, && case_sem_INSN_SETPSW },
17066e63ce3Schristos     { M32R2F_INSN_BSET, && case_sem_INSN_BSET },
17166e63ce3Schristos     { M32R2F_INSN_BCLR, && case_sem_INSN_BCLR },
17266e63ce3Schristos     { M32R2F_INSN_BTST, && case_sem_INSN_BTST },
17366e63ce3Schristos     { M32R2F_INSN_PAR_ADD, && case_sem_INSN_PAR_ADD },
17466e63ce3Schristos     { M32R2F_INSN_WRITE_ADD, && case_sem_INSN_WRITE_ADD },
17566e63ce3Schristos     { M32R2F_INSN_PAR_AND, && case_sem_INSN_PAR_AND },
17666e63ce3Schristos     { M32R2F_INSN_WRITE_AND, && case_sem_INSN_WRITE_AND },
17766e63ce3Schristos     { M32R2F_INSN_PAR_OR, && case_sem_INSN_PAR_OR },
17866e63ce3Schristos     { M32R2F_INSN_WRITE_OR, && case_sem_INSN_WRITE_OR },
17966e63ce3Schristos     { M32R2F_INSN_PAR_XOR, && case_sem_INSN_PAR_XOR },
18066e63ce3Schristos     { M32R2F_INSN_WRITE_XOR, && case_sem_INSN_WRITE_XOR },
18166e63ce3Schristos     { M32R2F_INSN_PAR_ADDI, && case_sem_INSN_PAR_ADDI },
18266e63ce3Schristos     { M32R2F_INSN_WRITE_ADDI, && case_sem_INSN_WRITE_ADDI },
18366e63ce3Schristos     { M32R2F_INSN_PAR_ADDV, && case_sem_INSN_PAR_ADDV },
18466e63ce3Schristos     { M32R2F_INSN_WRITE_ADDV, && case_sem_INSN_WRITE_ADDV },
18566e63ce3Schristos     { M32R2F_INSN_PAR_ADDX, && case_sem_INSN_PAR_ADDX },
18666e63ce3Schristos     { M32R2F_INSN_WRITE_ADDX, && case_sem_INSN_WRITE_ADDX },
18766e63ce3Schristos     { M32R2F_INSN_PAR_BC8, && case_sem_INSN_PAR_BC8 },
18866e63ce3Schristos     { M32R2F_INSN_WRITE_BC8, && case_sem_INSN_WRITE_BC8 },
18966e63ce3Schristos     { M32R2F_INSN_PAR_BL8, && case_sem_INSN_PAR_BL8 },
19066e63ce3Schristos     { M32R2F_INSN_WRITE_BL8, && case_sem_INSN_WRITE_BL8 },
19166e63ce3Schristos     { M32R2F_INSN_PAR_BCL8, && case_sem_INSN_PAR_BCL8 },
19266e63ce3Schristos     { M32R2F_INSN_WRITE_BCL8, && case_sem_INSN_WRITE_BCL8 },
19366e63ce3Schristos     { M32R2F_INSN_PAR_BNC8, && case_sem_INSN_PAR_BNC8 },
19466e63ce3Schristos     { M32R2F_INSN_WRITE_BNC8, && case_sem_INSN_WRITE_BNC8 },
19566e63ce3Schristos     { M32R2F_INSN_PAR_BRA8, && case_sem_INSN_PAR_BRA8 },
19666e63ce3Schristos     { M32R2F_INSN_WRITE_BRA8, && case_sem_INSN_WRITE_BRA8 },
19766e63ce3Schristos     { M32R2F_INSN_PAR_BNCL8, && case_sem_INSN_PAR_BNCL8 },
19866e63ce3Schristos     { M32R2F_INSN_WRITE_BNCL8, && case_sem_INSN_WRITE_BNCL8 },
19966e63ce3Schristos     { M32R2F_INSN_PAR_CMP, && case_sem_INSN_PAR_CMP },
20066e63ce3Schristos     { M32R2F_INSN_WRITE_CMP, && case_sem_INSN_WRITE_CMP },
20166e63ce3Schristos     { M32R2F_INSN_PAR_CMPU, && case_sem_INSN_PAR_CMPU },
20266e63ce3Schristos     { M32R2F_INSN_WRITE_CMPU, && case_sem_INSN_WRITE_CMPU },
20366e63ce3Schristos     { M32R2F_INSN_PAR_CMPEQ, && case_sem_INSN_PAR_CMPEQ },
20466e63ce3Schristos     { M32R2F_INSN_WRITE_CMPEQ, && case_sem_INSN_WRITE_CMPEQ },
20566e63ce3Schristos     { M32R2F_INSN_PAR_CMPZ, && case_sem_INSN_PAR_CMPZ },
20666e63ce3Schristos     { M32R2F_INSN_WRITE_CMPZ, && case_sem_INSN_WRITE_CMPZ },
20766e63ce3Schristos     { M32R2F_INSN_PAR_JC, && case_sem_INSN_PAR_JC },
20866e63ce3Schristos     { M32R2F_INSN_WRITE_JC, && case_sem_INSN_WRITE_JC },
20966e63ce3Schristos     { M32R2F_INSN_PAR_JNC, && case_sem_INSN_PAR_JNC },
21066e63ce3Schristos     { M32R2F_INSN_WRITE_JNC, && case_sem_INSN_WRITE_JNC },
21166e63ce3Schristos     { M32R2F_INSN_PAR_JL, && case_sem_INSN_PAR_JL },
21266e63ce3Schristos     { M32R2F_INSN_WRITE_JL, && case_sem_INSN_WRITE_JL },
21366e63ce3Schristos     { M32R2F_INSN_PAR_JMP, && case_sem_INSN_PAR_JMP },
21466e63ce3Schristos     { M32R2F_INSN_WRITE_JMP, && case_sem_INSN_WRITE_JMP },
21566e63ce3Schristos     { M32R2F_INSN_PAR_LD, && case_sem_INSN_PAR_LD },
21666e63ce3Schristos     { M32R2F_INSN_WRITE_LD, && case_sem_INSN_WRITE_LD },
21766e63ce3Schristos     { M32R2F_INSN_PAR_LDB, && case_sem_INSN_PAR_LDB },
21866e63ce3Schristos     { M32R2F_INSN_WRITE_LDB, && case_sem_INSN_WRITE_LDB },
21966e63ce3Schristos     { M32R2F_INSN_PAR_LDH, && case_sem_INSN_PAR_LDH },
22066e63ce3Schristos     { M32R2F_INSN_WRITE_LDH, && case_sem_INSN_WRITE_LDH },
22166e63ce3Schristos     { M32R2F_INSN_PAR_LDUB, && case_sem_INSN_PAR_LDUB },
22266e63ce3Schristos     { M32R2F_INSN_WRITE_LDUB, && case_sem_INSN_WRITE_LDUB },
22366e63ce3Schristos     { M32R2F_INSN_PAR_LDUH, && case_sem_INSN_PAR_LDUH },
22466e63ce3Schristos     { M32R2F_INSN_WRITE_LDUH, && case_sem_INSN_WRITE_LDUH },
22566e63ce3Schristos     { M32R2F_INSN_PAR_LD_PLUS, && case_sem_INSN_PAR_LD_PLUS },
22666e63ce3Schristos     { M32R2F_INSN_WRITE_LD_PLUS, && case_sem_INSN_WRITE_LD_PLUS },
22766e63ce3Schristos     { M32R2F_INSN_PAR_LDI8, && case_sem_INSN_PAR_LDI8 },
22866e63ce3Schristos     { M32R2F_INSN_WRITE_LDI8, && case_sem_INSN_WRITE_LDI8 },
22966e63ce3Schristos     { M32R2F_INSN_PAR_LOCK, && case_sem_INSN_PAR_LOCK },
23066e63ce3Schristos     { M32R2F_INSN_WRITE_LOCK, && case_sem_INSN_WRITE_LOCK },
23166e63ce3Schristos     { M32R2F_INSN_PAR_MACHI_A, && case_sem_INSN_PAR_MACHI_A },
23266e63ce3Schristos     { M32R2F_INSN_WRITE_MACHI_A, && case_sem_INSN_WRITE_MACHI_A },
23366e63ce3Schristos     { M32R2F_INSN_PAR_MACLO_A, && case_sem_INSN_PAR_MACLO_A },
23466e63ce3Schristos     { M32R2F_INSN_WRITE_MACLO_A, && case_sem_INSN_WRITE_MACLO_A },
23566e63ce3Schristos     { M32R2F_INSN_PAR_MACWHI_A, && case_sem_INSN_PAR_MACWHI_A },
23666e63ce3Schristos     { M32R2F_INSN_WRITE_MACWHI_A, && case_sem_INSN_WRITE_MACWHI_A },
23766e63ce3Schristos     { M32R2F_INSN_PAR_MACWLO_A, && case_sem_INSN_PAR_MACWLO_A },
23866e63ce3Schristos     { M32R2F_INSN_WRITE_MACWLO_A, && case_sem_INSN_WRITE_MACWLO_A },
23966e63ce3Schristos     { M32R2F_INSN_PAR_MUL, && case_sem_INSN_PAR_MUL },
24066e63ce3Schristos     { M32R2F_INSN_WRITE_MUL, && case_sem_INSN_WRITE_MUL },
24166e63ce3Schristos     { M32R2F_INSN_PAR_MULHI_A, && case_sem_INSN_PAR_MULHI_A },
24266e63ce3Schristos     { M32R2F_INSN_WRITE_MULHI_A, && case_sem_INSN_WRITE_MULHI_A },
24366e63ce3Schristos     { M32R2F_INSN_PAR_MULLO_A, && case_sem_INSN_PAR_MULLO_A },
24466e63ce3Schristos     { M32R2F_INSN_WRITE_MULLO_A, && case_sem_INSN_WRITE_MULLO_A },
24566e63ce3Schristos     { M32R2F_INSN_PAR_MULWHI_A, && case_sem_INSN_PAR_MULWHI_A },
24666e63ce3Schristos     { M32R2F_INSN_WRITE_MULWHI_A, && case_sem_INSN_WRITE_MULWHI_A },
24766e63ce3Schristos     { M32R2F_INSN_PAR_MULWLO_A, && case_sem_INSN_PAR_MULWLO_A },
24866e63ce3Schristos     { M32R2F_INSN_WRITE_MULWLO_A, && case_sem_INSN_WRITE_MULWLO_A },
24966e63ce3Schristos     { M32R2F_INSN_PAR_MV, && case_sem_INSN_PAR_MV },
25066e63ce3Schristos     { M32R2F_INSN_WRITE_MV, && case_sem_INSN_WRITE_MV },
25166e63ce3Schristos     { M32R2F_INSN_PAR_MVFACHI_A, && case_sem_INSN_PAR_MVFACHI_A },
25266e63ce3Schristos     { M32R2F_INSN_WRITE_MVFACHI_A, && case_sem_INSN_WRITE_MVFACHI_A },
25366e63ce3Schristos     { M32R2F_INSN_PAR_MVFACLO_A, && case_sem_INSN_PAR_MVFACLO_A },
25466e63ce3Schristos     { M32R2F_INSN_WRITE_MVFACLO_A, && case_sem_INSN_WRITE_MVFACLO_A },
25566e63ce3Schristos     { M32R2F_INSN_PAR_MVFACMI_A, && case_sem_INSN_PAR_MVFACMI_A },
25666e63ce3Schristos     { M32R2F_INSN_WRITE_MVFACMI_A, && case_sem_INSN_WRITE_MVFACMI_A },
25766e63ce3Schristos     { M32R2F_INSN_PAR_MVFC, && case_sem_INSN_PAR_MVFC },
25866e63ce3Schristos     { M32R2F_INSN_WRITE_MVFC, && case_sem_INSN_WRITE_MVFC },
25966e63ce3Schristos     { M32R2F_INSN_PAR_MVTACHI_A, && case_sem_INSN_PAR_MVTACHI_A },
26066e63ce3Schristos     { M32R2F_INSN_WRITE_MVTACHI_A, && case_sem_INSN_WRITE_MVTACHI_A },
26166e63ce3Schristos     { M32R2F_INSN_PAR_MVTACLO_A, && case_sem_INSN_PAR_MVTACLO_A },
26266e63ce3Schristos     { M32R2F_INSN_WRITE_MVTACLO_A, && case_sem_INSN_WRITE_MVTACLO_A },
26366e63ce3Schristos     { M32R2F_INSN_PAR_MVTC, && case_sem_INSN_PAR_MVTC },
26466e63ce3Schristos     { M32R2F_INSN_WRITE_MVTC, && case_sem_INSN_WRITE_MVTC },
26566e63ce3Schristos     { M32R2F_INSN_PAR_NEG, && case_sem_INSN_PAR_NEG },
26666e63ce3Schristos     { M32R2F_INSN_WRITE_NEG, && case_sem_INSN_WRITE_NEG },
26766e63ce3Schristos     { M32R2F_INSN_PAR_NOP, && case_sem_INSN_PAR_NOP },
26866e63ce3Schristos     { M32R2F_INSN_WRITE_NOP, && case_sem_INSN_WRITE_NOP },
26966e63ce3Schristos     { M32R2F_INSN_PAR_NOT, && case_sem_INSN_PAR_NOT },
27066e63ce3Schristos     { M32R2F_INSN_WRITE_NOT, && case_sem_INSN_WRITE_NOT },
27166e63ce3Schristos     { M32R2F_INSN_PAR_RAC_DSI, && case_sem_INSN_PAR_RAC_DSI },
27266e63ce3Schristos     { M32R2F_INSN_WRITE_RAC_DSI, && case_sem_INSN_WRITE_RAC_DSI },
27366e63ce3Schristos     { M32R2F_INSN_PAR_RACH_DSI, && case_sem_INSN_PAR_RACH_DSI },
27466e63ce3Schristos     { M32R2F_INSN_WRITE_RACH_DSI, && case_sem_INSN_WRITE_RACH_DSI },
27566e63ce3Schristos     { M32R2F_INSN_PAR_RTE, && case_sem_INSN_PAR_RTE },
27666e63ce3Schristos     { M32R2F_INSN_WRITE_RTE, && case_sem_INSN_WRITE_RTE },
27766e63ce3Schristos     { M32R2F_INSN_PAR_SLL, && case_sem_INSN_PAR_SLL },
27866e63ce3Schristos     { M32R2F_INSN_WRITE_SLL, && case_sem_INSN_WRITE_SLL },
27966e63ce3Schristos     { M32R2F_INSN_PAR_SLLI, && case_sem_INSN_PAR_SLLI },
28066e63ce3Schristos     { M32R2F_INSN_WRITE_SLLI, && case_sem_INSN_WRITE_SLLI },
28166e63ce3Schristos     { M32R2F_INSN_PAR_SRA, && case_sem_INSN_PAR_SRA },
28266e63ce3Schristos     { M32R2F_INSN_WRITE_SRA, && case_sem_INSN_WRITE_SRA },
28366e63ce3Schristos     { M32R2F_INSN_PAR_SRAI, && case_sem_INSN_PAR_SRAI },
28466e63ce3Schristos     { M32R2F_INSN_WRITE_SRAI, && case_sem_INSN_WRITE_SRAI },
28566e63ce3Schristos     { M32R2F_INSN_PAR_SRL, && case_sem_INSN_PAR_SRL },
28666e63ce3Schristos     { M32R2F_INSN_WRITE_SRL, && case_sem_INSN_WRITE_SRL },
28766e63ce3Schristos     { M32R2F_INSN_PAR_SRLI, && case_sem_INSN_PAR_SRLI },
28866e63ce3Schristos     { M32R2F_INSN_WRITE_SRLI, && case_sem_INSN_WRITE_SRLI },
28966e63ce3Schristos     { M32R2F_INSN_PAR_ST, && case_sem_INSN_PAR_ST },
29066e63ce3Schristos     { M32R2F_INSN_WRITE_ST, && case_sem_INSN_WRITE_ST },
29166e63ce3Schristos     { M32R2F_INSN_PAR_STB, && case_sem_INSN_PAR_STB },
29266e63ce3Schristos     { M32R2F_INSN_WRITE_STB, && case_sem_INSN_WRITE_STB },
29366e63ce3Schristos     { M32R2F_INSN_PAR_STH, && case_sem_INSN_PAR_STH },
29466e63ce3Schristos     { M32R2F_INSN_WRITE_STH, && case_sem_INSN_WRITE_STH },
29566e63ce3Schristos     { M32R2F_INSN_PAR_ST_PLUS, && case_sem_INSN_PAR_ST_PLUS },
29666e63ce3Schristos     { M32R2F_INSN_WRITE_ST_PLUS, && case_sem_INSN_WRITE_ST_PLUS },
29766e63ce3Schristos     { M32R2F_INSN_PAR_STH_PLUS, && case_sem_INSN_PAR_STH_PLUS },
29866e63ce3Schristos     { M32R2F_INSN_WRITE_STH_PLUS, && case_sem_INSN_WRITE_STH_PLUS },
29966e63ce3Schristos     { M32R2F_INSN_PAR_STB_PLUS, && case_sem_INSN_PAR_STB_PLUS },
30066e63ce3Schristos     { M32R2F_INSN_WRITE_STB_PLUS, && case_sem_INSN_WRITE_STB_PLUS },
30166e63ce3Schristos     { M32R2F_INSN_PAR_ST_MINUS, && case_sem_INSN_PAR_ST_MINUS },
30266e63ce3Schristos     { M32R2F_INSN_WRITE_ST_MINUS, && case_sem_INSN_WRITE_ST_MINUS },
30366e63ce3Schristos     { M32R2F_INSN_PAR_SUB, && case_sem_INSN_PAR_SUB },
30466e63ce3Schristos     { M32R2F_INSN_WRITE_SUB, && case_sem_INSN_WRITE_SUB },
30566e63ce3Schristos     { M32R2F_INSN_PAR_SUBV, && case_sem_INSN_PAR_SUBV },
30666e63ce3Schristos     { M32R2F_INSN_WRITE_SUBV, && case_sem_INSN_WRITE_SUBV },
30766e63ce3Schristos     { M32R2F_INSN_PAR_SUBX, && case_sem_INSN_PAR_SUBX },
30866e63ce3Schristos     { M32R2F_INSN_WRITE_SUBX, && case_sem_INSN_WRITE_SUBX },
30966e63ce3Schristos     { M32R2F_INSN_PAR_TRAP, && case_sem_INSN_PAR_TRAP },
31066e63ce3Schristos     { M32R2F_INSN_WRITE_TRAP, && case_sem_INSN_WRITE_TRAP },
31166e63ce3Schristos     { M32R2F_INSN_PAR_UNLOCK, && case_sem_INSN_PAR_UNLOCK },
31266e63ce3Schristos     { M32R2F_INSN_WRITE_UNLOCK, && case_sem_INSN_WRITE_UNLOCK },
31366e63ce3Schristos     { M32R2F_INSN_PAR_PCMPBZ, && case_sem_INSN_PAR_PCMPBZ },
31466e63ce3Schristos     { M32R2F_INSN_WRITE_PCMPBZ, && case_sem_INSN_WRITE_PCMPBZ },
31566e63ce3Schristos     { M32R2F_INSN_PAR_SADD, && case_sem_INSN_PAR_SADD },
31666e63ce3Schristos     { M32R2F_INSN_WRITE_SADD, && case_sem_INSN_WRITE_SADD },
31766e63ce3Schristos     { M32R2F_INSN_PAR_MACWU1, && case_sem_INSN_PAR_MACWU1 },
31866e63ce3Schristos     { M32R2F_INSN_WRITE_MACWU1, && case_sem_INSN_WRITE_MACWU1 },
31966e63ce3Schristos     { M32R2F_INSN_PAR_MSBLO, && case_sem_INSN_PAR_MSBLO },
32066e63ce3Schristos     { M32R2F_INSN_WRITE_MSBLO, && case_sem_INSN_WRITE_MSBLO },
32166e63ce3Schristos     { M32R2F_INSN_PAR_MULWU1, && case_sem_INSN_PAR_MULWU1 },
32266e63ce3Schristos     { M32R2F_INSN_WRITE_MULWU1, && case_sem_INSN_WRITE_MULWU1 },
32366e63ce3Schristos     { M32R2F_INSN_PAR_MACLH1, && case_sem_INSN_PAR_MACLH1 },
32466e63ce3Schristos     { M32R2F_INSN_WRITE_MACLH1, && case_sem_INSN_WRITE_MACLH1 },
32566e63ce3Schristos     { M32R2F_INSN_PAR_SC, && case_sem_INSN_PAR_SC },
32666e63ce3Schristos     { M32R2F_INSN_WRITE_SC, && case_sem_INSN_WRITE_SC },
32766e63ce3Schristos     { M32R2F_INSN_PAR_SNC, && case_sem_INSN_PAR_SNC },
32866e63ce3Schristos     { M32R2F_INSN_WRITE_SNC, && case_sem_INSN_WRITE_SNC },
32966e63ce3Schristos     { M32R2F_INSN_PAR_CLRPSW, && case_sem_INSN_PAR_CLRPSW },
33066e63ce3Schristos     { M32R2F_INSN_WRITE_CLRPSW, && case_sem_INSN_WRITE_CLRPSW },
33166e63ce3Schristos     { M32R2F_INSN_PAR_SETPSW, && case_sem_INSN_PAR_SETPSW },
33266e63ce3Schristos     { M32R2F_INSN_WRITE_SETPSW, && case_sem_INSN_WRITE_SETPSW },
33366e63ce3Schristos     { M32R2F_INSN_PAR_BTST, && case_sem_INSN_PAR_BTST },
33466e63ce3Schristos     { M32R2F_INSN_WRITE_BTST, && case_sem_INSN_WRITE_BTST },
33566e63ce3Schristos     { 0, 0 }
33666e63ce3Schristos   };
33766e63ce3Schristos   int i;
33866e63ce3Schristos 
33966e63ce3Schristos   for (i = 0; labels[i].label != 0; ++i)
34066e63ce3Schristos     {
34166e63ce3Schristos #if FAST_P
34266e63ce3Schristos       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
34366e63ce3Schristos #else
34466e63ce3Schristos       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
34566e63ce3Schristos #endif
34666e63ce3Schristos     }
34766e63ce3Schristos 
34866e63ce3Schristos #undef DEFINE_LABELS
34966e63ce3Schristos #endif /* DEFINE_LABELS */
35066e63ce3Schristos 
35166e63ce3Schristos #ifdef DEFINE_SWITCH
35266e63ce3Schristos 
35366e63ce3Schristos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
35466e63ce3Schristos    off frills like tracing and profiling.  */
355ed6a76a9Schristos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
35666e63ce3Schristos    that can cause it to be optimized out.  Another way would be to emit
35766e63ce3Schristos    special handlers into the instruction "stream".  */
35866e63ce3Schristos 
35966e63ce3Schristos #if FAST_P
360ed6a76a9Schristos #undef CGEN_TRACE_RESULT
361ed6a76a9Schristos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
36266e63ce3Schristos #endif
36366e63ce3Schristos 
36466e63ce3Schristos #undef GET_ATTR
36566e63ce3Schristos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
36666e63ce3Schristos 
36766e63ce3Schristos {
36866e63ce3Schristos 
36966e63ce3Schristos #if WITH_SCACHE_PBB
37066e63ce3Schristos 
37166e63ce3Schristos /* Branch to next handler without going around main loop.  */
37266e63ce3Schristos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
37366e63ce3Schristos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
37466e63ce3Schristos 
37566e63ce3Schristos #else /* ! WITH_SCACHE_PBB */
37666e63ce3Schristos 
37766e63ce3Schristos #define NEXT(vpc) BREAK (sem)
37866e63ce3Schristos #ifdef __GNUC__
37966e63ce3Schristos #if FAST_P
38066e63ce3Schristos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
38166e63ce3Schristos #else
38266e63ce3Schristos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
38366e63ce3Schristos #endif
38466e63ce3Schristos #else
38566e63ce3Schristos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
38666e63ce3Schristos #endif
38766e63ce3Schristos 
38866e63ce3Schristos #endif /* ! WITH_SCACHE_PBB */
38966e63ce3Schristos 
39066e63ce3Schristos     {
39166e63ce3Schristos 
CASE(sem,INSN_X_INVALID)39266e63ce3Schristos   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
39366e63ce3Schristos {
39466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
39566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
39666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
39766e63ce3Schristos   int UNUSED written = 0;
39866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
39966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
40066e63ce3Schristos 
40166e63ce3Schristos   {
40266e63ce3Schristos     /* Update the recorded pc in the cpu state struct.
40366e63ce3Schristos        Only necessary for WITH_SCACHE case, but to avoid the
40466e63ce3Schristos        conditional compilation ....  */
40566e63ce3Schristos     SET_H_PC (pc);
40666e63ce3Schristos     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
40766e63ce3Schristos        using the default-insn-bitsize spec.  When executing insns in parallel
40866e63ce3Schristos        we may want to queue the fault and continue execution.  */
40966e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
41066e63ce3Schristos     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
41166e63ce3Schristos   }
41266e63ce3Schristos 
41366e63ce3Schristos #undef FLD
41466e63ce3Schristos }
41566e63ce3Schristos   NEXT (vpc);
41666e63ce3Schristos 
CASE(sem,INSN_X_AFTER)41766e63ce3Schristos   CASE (sem, INSN_X_AFTER) : /* --after-- */
41866e63ce3Schristos {
41966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
42066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
42166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
42266e63ce3Schristos   int UNUSED written = 0;
42366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
42466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
42566e63ce3Schristos 
42666e63ce3Schristos   {
42766e63ce3Schristos #if WITH_SCACHE_PBB_M32R2F
42866e63ce3Schristos     m32r2f_pbb_after (current_cpu, sem_arg);
42966e63ce3Schristos #endif
43066e63ce3Schristos   }
43166e63ce3Schristos 
43266e63ce3Schristos #undef FLD
43366e63ce3Schristos }
43466e63ce3Schristos   NEXT (vpc);
43566e63ce3Schristos 
CASE(sem,INSN_X_BEFORE)43666e63ce3Schristos   CASE (sem, INSN_X_BEFORE) : /* --before-- */
43766e63ce3Schristos {
43866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
43966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
44066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
44166e63ce3Schristos   int UNUSED written = 0;
44266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
44366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
44466e63ce3Schristos 
44566e63ce3Schristos   {
44666e63ce3Schristos #if WITH_SCACHE_PBB_M32R2F
44766e63ce3Schristos     m32r2f_pbb_before (current_cpu, sem_arg);
44866e63ce3Schristos #endif
44966e63ce3Schristos   }
45066e63ce3Schristos 
45166e63ce3Schristos #undef FLD
45266e63ce3Schristos }
45366e63ce3Schristos   NEXT (vpc);
45466e63ce3Schristos 
CASE(sem,INSN_X_CTI_CHAIN)45566e63ce3Schristos   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
45666e63ce3Schristos {
45766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
45866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
45966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
46066e63ce3Schristos   int UNUSED written = 0;
46166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
46266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
46366e63ce3Schristos 
46466e63ce3Schristos   {
46566e63ce3Schristos #if WITH_SCACHE_PBB_M32R2F
46666e63ce3Schristos #ifdef DEFINE_SWITCH
46766e63ce3Schristos     vpc = m32r2f_pbb_cti_chain (current_cpu, sem_arg,
46866e63ce3Schristos 			       pbb_br_type, pbb_br_npc);
46966e63ce3Schristos     BREAK (sem);
47066e63ce3Schristos #else
47166e63ce3Schristos     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
47266e63ce3Schristos     vpc = m32r2f_pbb_cti_chain (current_cpu, sem_arg,
47366e63ce3Schristos 			       CPU_PBB_BR_TYPE (current_cpu),
47466e63ce3Schristos 			       CPU_PBB_BR_NPC (current_cpu));
47566e63ce3Schristos #endif
47666e63ce3Schristos #endif
47766e63ce3Schristos   }
47866e63ce3Schristos 
47966e63ce3Schristos #undef FLD
48066e63ce3Schristos }
48166e63ce3Schristos   NEXT (vpc);
48266e63ce3Schristos 
CASE(sem,INSN_X_CHAIN)48366e63ce3Schristos   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
48466e63ce3Schristos {
48566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
48666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
48766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
48866e63ce3Schristos   int UNUSED written = 0;
48966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
49066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
49166e63ce3Schristos 
49266e63ce3Schristos   {
49366e63ce3Schristos #if WITH_SCACHE_PBB_M32R2F
49466e63ce3Schristos     vpc = m32r2f_pbb_chain (current_cpu, sem_arg);
49566e63ce3Schristos #ifdef DEFINE_SWITCH
49666e63ce3Schristos     BREAK (sem);
49766e63ce3Schristos #endif
49866e63ce3Schristos #endif
49966e63ce3Schristos   }
50066e63ce3Schristos 
50166e63ce3Schristos #undef FLD
50266e63ce3Schristos }
50366e63ce3Schristos   NEXT (vpc);
50466e63ce3Schristos 
CASE(sem,INSN_X_BEGIN)50566e63ce3Schristos   CASE (sem, INSN_X_BEGIN) : /* --begin-- */
50666e63ce3Schristos {
50766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
50866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
50966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
51066e63ce3Schristos   int UNUSED written = 0;
51166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
51266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
51366e63ce3Schristos 
51466e63ce3Schristos   {
51566e63ce3Schristos #if WITH_SCACHE_PBB_M32R2F
51666e63ce3Schristos #if defined DEFINE_SWITCH || defined FAST_P
51766e63ce3Schristos     /* In the switch case FAST_P is a constant, allowing several optimizations
51866e63ce3Schristos        in any called inline functions.  */
51966e63ce3Schristos     vpc = m32r2f_pbb_begin (current_cpu, FAST_P);
52066e63ce3Schristos #else
52166e63ce3Schristos #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
52266e63ce3Schristos     vpc = m32r2f_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
52366e63ce3Schristos #else
52466e63ce3Schristos     vpc = m32r2f_pbb_begin (current_cpu, 0);
52566e63ce3Schristos #endif
52666e63ce3Schristos #endif
52766e63ce3Schristos #endif
52866e63ce3Schristos   }
52966e63ce3Schristos 
53066e63ce3Schristos #undef FLD
53166e63ce3Schristos }
53266e63ce3Schristos   NEXT (vpc);
53366e63ce3Schristos 
CASE(sem,INSN_ADD)53466e63ce3Schristos   CASE (sem, INSN_ADD) : /* add $dr,$sr */
53566e63ce3Schristos {
53666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
53766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
53866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
53966e63ce3Schristos   int UNUSED written = 0;
54066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
54166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
54266e63ce3Schristos 
54366e63ce3Schristos   {
54466e63ce3Schristos     SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
54566e63ce3Schristos     * FLD (i_dr) = opval;
546ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
54766e63ce3Schristos   }
54866e63ce3Schristos 
54966e63ce3Schristos #undef FLD
55066e63ce3Schristos }
55166e63ce3Schristos   NEXT (vpc);
55266e63ce3Schristos 
CASE(sem,INSN_ADD3)55366e63ce3Schristos   CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */
55466e63ce3Schristos {
55566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
55666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
55766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
55866e63ce3Schristos   int UNUSED written = 0;
55966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
56066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
56166e63ce3Schristos 
56266e63ce3Schristos   {
56366e63ce3Schristos     SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
56466e63ce3Schristos     * FLD (i_dr) = opval;
565ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
56666e63ce3Schristos   }
56766e63ce3Schristos 
56866e63ce3Schristos #undef FLD
56966e63ce3Schristos }
57066e63ce3Schristos   NEXT (vpc);
57166e63ce3Schristos 
CASE(sem,INSN_AND)57266e63ce3Schristos   CASE (sem, INSN_AND) : /* and $dr,$sr */
57366e63ce3Schristos {
57466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
57566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
57666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
57766e63ce3Schristos   int UNUSED written = 0;
57866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
57966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
58066e63ce3Schristos 
58166e63ce3Schristos   {
58266e63ce3Schristos     SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
58366e63ce3Schristos     * FLD (i_dr) = opval;
584ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
58566e63ce3Schristos   }
58666e63ce3Schristos 
58766e63ce3Schristos #undef FLD
58866e63ce3Schristos }
58966e63ce3Schristos   NEXT (vpc);
59066e63ce3Schristos 
CASE(sem,INSN_AND3)59166e63ce3Schristos   CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */
59266e63ce3Schristos {
59366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
59466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
59566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_and3.f
59666e63ce3Schristos   int UNUSED written = 0;
59766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
59866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
59966e63ce3Schristos 
60066e63ce3Schristos   {
60166e63ce3Schristos     SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
60266e63ce3Schristos     * FLD (i_dr) = opval;
603ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
60466e63ce3Schristos   }
60566e63ce3Schristos 
60666e63ce3Schristos #undef FLD
60766e63ce3Schristos }
60866e63ce3Schristos   NEXT (vpc);
60966e63ce3Schristos 
CASE(sem,INSN_OR)61066e63ce3Schristos   CASE (sem, INSN_OR) : /* or $dr,$sr */
61166e63ce3Schristos {
61266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
61366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
61466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
61566e63ce3Schristos   int UNUSED written = 0;
61666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
61766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
61866e63ce3Schristos 
61966e63ce3Schristos   {
62066e63ce3Schristos     SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
62166e63ce3Schristos     * FLD (i_dr) = opval;
622ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
62366e63ce3Schristos   }
62466e63ce3Schristos 
62566e63ce3Schristos #undef FLD
62666e63ce3Schristos }
62766e63ce3Schristos   NEXT (vpc);
62866e63ce3Schristos 
CASE(sem,INSN_OR3)62966e63ce3Schristos   CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */
63066e63ce3Schristos {
63166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
63266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
63366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_and3.f
63466e63ce3Schristos   int UNUSED written = 0;
63566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
63666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
63766e63ce3Schristos 
63866e63ce3Schristos   {
63966e63ce3Schristos     SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
64066e63ce3Schristos     * FLD (i_dr) = opval;
641ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
64266e63ce3Schristos   }
64366e63ce3Schristos 
64466e63ce3Schristos #undef FLD
64566e63ce3Schristos }
64666e63ce3Schristos   NEXT (vpc);
64766e63ce3Schristos 
CASE(sem,INSN_XOR)64866e63ce3Schristos   CASE (sem, INSN_XOR) : /* xor $dr,$sr */
64966e63ce3Schristos {
65066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
65166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
65266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
65366e63ce3Schristos   int UNUSED written = 0;
65466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
65566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
65666e63ce3Schristos 
65766e63ce3Schristos   {
65866e63ce3Schristos     SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
65966e63ce3Schristos     * FLD (i_dr) = opval;
660ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
66166e63ce3Schristos   }
66266e63ce3Schristos 
66366e63ce3Schristos #undef FLD
66466e63ce3Schristos }
66566e63ce3Schristos   NEXT (vpc);
66666e63ce3Schristos 
CASE(sem,INSN_XOR3)66766e63ce3Schristos   CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */
66866e63ce3Schristos {
66966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
67066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
67166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_and3.f
67266e63ce3Schristos   int UNUSED written = 0;
67366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
67466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
67566e63ce3Schristos 
67666e63ce3Schristos   {
67766e63ce3Schristos     SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
67866e63ce3Schristos     * FLD (i_dr) = opval;
679ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
68066e63ce3Schristos   }
68166e63ce3Schristos 
68266e63ce3Schristos #undef FLD
68366e63ce3Schristos }
68466e63ce3Schristos   NEXT (vpc);
68566e63ce3Schristos 
CASE(sem,INSN_ADDI)68666e63ce3Schristos   CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */
68766e63ce3Schristos {
68866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
68966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
69066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_addi.f
69166e63ce3Schristos   int UNUSED written = 0;
69266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
69366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
69466e63ce3Schristos 
69566e63ce3Schristos   {
69666e63ce3Schristos     SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
69766e63ce3Schristos     * FLD (i_dr) = opval;
698ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
69966e63ce3Schristos   }
70066e63ce3Schristos 
70166e63ce3Schristos #undef FLD
70266e63ce3Schristos }
70366e63ce3Schristos   NEXT (vpc);
70466e63ce3Schristos 
CASE(sem,INSN_ADDV)70566e63ce3Schristos   CASE (sem, INSN_ADDV) : /* addv $dr,$sr */
70666e63ce3Schristos {
70766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
70866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
70966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
71066e63ce3Schristos   int UNUSED written = 0;
71166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
71266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
71366e63ce3Schristos 
71466e63ce3Schristos {
71566e63ce3Schristos   SI temp0;BI temp1;
71666e63ce3Schristos   temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
71766e63ce3Schristos   temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
71866e63ce3Schristos   {
71966e63ce3Schristos     SI opval = temp0;
72066e63ce3Schristos     * FLD (i_dr) = opval;
721ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
72266e63ce3Schristos   }
72366e63ce3Schristos   {
72466e63ce3Schristos     BI opval = temp1;
72566e63ce3Schristos     CPU (h_cond) = opval;
726ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
72766e63ce3Schristos   }
72866e63ce3Schristos }
72966e63ce3Schristos 
73066e63ce3Schristos #undef FLD
73166e63ce3Schristos }
73266e63ce3Schristos   NEXT (vpc);
73366e63ce3Schristos 
CASE(sem,INSN_ADDV3)73466e63ce3Schristos   CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */
73566e63ce3Schristos {
73666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
73766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
73866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
73966e63ce3Schristos   int UNUSED written = 0;
74066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
74166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
74266e63ce3Schristos 
74366e63ce3Schristos {
74466e63ce3Schristos   SI temp0;BI temp1;
74566e63ce3Schristos   temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
74666e63ce3Schristos   temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
74766e63ce3Schristos   {
74866e63ce3Schristos     SI opval = temp0;
74966e63ce3Schristos     * FLD (i_dr) = opval;
750ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
75166e63ce3Schristos   }
75266e63ce3Schristos   {
75366e63ce3Schristos     BI opval = temp1;
75466e63ce3Schristos     CPU (h_cond) = opval;
755ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
75666e63ce3Schristos   }
75766e63ce3Schristos }
75866e63ce3Schristos 
75966e63ce3Schristos #undef FLD
76066e63ce3Schristos }
76166e63ce3Schristos   NEXT (vpc);
76266e63ce3Schristos 
CASE(sem,INSN_ADDX)76366e63ce3Schristos   CASE (sem, INSN_ADDX) : /* addx $dr,$sr */
76466e63ce3Schristos {
76566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
76666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
76766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
76866e63ce3Schristos   int UNUSED written = 0;
76966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
77066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
77166e63ce3Schristos 
77266e63ce3Schristos {
77366e63ce3Schristos   SI temp0;BI temp1;
77466e63ce3Schristos   temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
77566e63ce3Schristos   temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
77666e63ce3Schristos   {
77766e63ce3Schristos     SI opval = temp0;
77866e63ce3Schristos     * FLD (i_dr) = opval;
779ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
78066e63ce3Schristos   }
78166e63ce3Schristos   {
78266e63ce3Schristos     BI opval = temp1;
78366e63ce3Schristos     CPU (h_cond) = opval;
784ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
78566e63ce3Schristos   }
78666e63ce3Schristos }
78766e63ce3Schristos 
78866e63ce3Schristos #undef FLD
78966e63ce3Schristos }
79066e63ce3Schristos   NEXT (vpc);
79166e63ce3Schristos 
CASE(sem,INSN_BC8)79266e63ce3Schristos   CASE (sem, INSN_BC8) : /* bc.s $disp8 */
79366e63ce3Schristos {
79466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
79566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
79666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
79766e63ce3Schristos   int UNUSED written = 0;
79866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
79966e63ce3Schristos   SEM_BRANCH_INIT
80066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
80166e63ce3Schristos 
80266e63ce3Schristos if (CPU (h_cond)) {
80366e63ce3Schristos   {
80466e63ce3Schristos     USI opval = FLD (i_disp8);
80566e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
80666e63ce3Schristos     written |= (1 << 2);
807ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
80866e63ce3Schristos   }
80966e63ce3Schristos }
81066e63ce3Schristos 
81166e63ce3Schristos   abuf->written = written;
81266e63ce3Schristos   SEM_BRANCH_FINI (vpc);
81366e63ce3Schristos #undef FLD
81466e63ce3Schristos }
81566e63ce3Schristos   NEXT (vpc);
81666e63ce3Schristos 
CASE(sem,INSN_BC24)81766e63ce3Schristos   CASE (sem, INSN_BC24) : /* bc.l $disp24 */
81866e63ce3Schristos {
81966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
82066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
82166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl24.f
82266e63ce3Schristos   int UNUSED written = 0;
82366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
82466e63ce3Schristos   SEM_BRANCH_INIT
82566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
82666e63ce3Schristos 
82766e63ce3Schristos if (CPU (h_cond)) {
82866e63ce3Schristos   {
82966e63ce3Schristos     USI opval = FLD (i_disp24);
83066e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
83166e63ce3Schristos     written |= (1 << 2);
832ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
83366e63ce3Schristos   }
83466e63ce3Schristos }
83566e63ce3Schristos 
83666e63ce3Schristos   abuf->written = written;
83766e63ce3Schristos   SEM_BRANCH_FINI (vpc);
83866e63ce3Schristos #undef FLD
83966e63ce3Schristos }
84066e63ce3Schristos   NEXT (vpc);
84166e63ce3Schristos 
CASE(sem,INSN_BEQ)84266e63ce3Schristos   CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */
84366e63ce3Schristos {
84466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
84566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
84666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
84766e63ce3Schristos   int UNUSED written = 0;
84866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
84966e63ce3Schristos   SEM_BRANCH_INIT
85066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
85166e63ce3Schristos 
85266e63ce3Schristos if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
85366e63ce3Schristos   {
85466e63ce3Schristos     USI opval = FLD (i_disp16);
85566e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
85666e63ce3Schristos     written |= (1 << 3);
857ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
85866e63ce3Schristos   }
85966e63ce3Schristos }
86066e63ce3Schristos 
86166e63ce3Schristos   abuf->written = written;
86266e63ce3Schristos   SEM_BRANCH_FINI (vpc);
86366e63ce3Schristos #undef FLD
86466e63ce3Schristos }
86566e63ce3Schristos   NEXT (vpc);
86666e63ce3Schristos 
CASE(sem,INSN_BEQZ)86766e63ce3Schristos   CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */
86866e63ce3Schristos {
86966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
87066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
87166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
87266e63ce3Schristos   int UNUSED written = 0;
87366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
87466e63ce3Schristos   SEM_BRANCH_INIT
87566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
87666e63ce3Schristos 
87766e63ce3Schristos if (EQSI (* FLD (i_src2), 0)) {
87866e63ce3Schristos   {
87966e63ce3Schristos     USI opval = FLD (i_disp16);
88066e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
88166e63ce3Schristos     written |= (1 << 2);
882ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
88366e63ce3Schristos   }
88466e63ce3Schristos }
88566e63ce3Schristos 
88666e63ce3Schristos   abuf->written = written;
88766e63ce3Schristos   SEM_BRANCH_FINI (vpc);
88866e63ce3Schristos #undef FLD
88966e63ce3Schristos }
89066e63ce3Schristos   NEXT (vpc);
89166e63ce3Schristos 
CASE(sem,INSN_BGEZ)89266e63ce3Schristos   CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */
89366e63ce3Schristos {
89466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
89566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
89666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
89766e63ce3Schristos   int UNUSED written = 0;
89866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
89966e63ce3Schristos   SEM_BRANCH_INIT
90066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
90166e63ce3Schristos 
90266e63ce3Schristos if (GESI (* FLD (i_src2), 0)) {
90366e63ce3Schristos   {
90466e63ce3Schristos     USI opval = FLD (i_disp16);
90566e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
90666e63ce3Schristos     written |= (1 << 2);
907ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
90866e63ce3Schristos   }
90966e63ce3Schristos }
91066e63ce3Schristos 
91166e63ce3Schristos   abuf->written = written;
91266e63ce3Schristos   SEM_BRANCH_FINI (vpc);
91366e63ce3Schristos #undef FLD
91466e63ce3Schristos }
91566e63ce3Schristos   NEXT (vpc);
91666e63ce3Schristos 
CASE(sem,INSN_BGTZ)91766e63ce3Schristos   CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */
91866e63ce3Schristos {
91966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
92066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
92166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
92266e63ce3Schristos   int UNUSED written = 0;
92366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
92466e63ce3Schristos   SEM_BRANCH_INIT
92566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
92666e63ce3Schristos 
92766e63ce3Schristos if (GTSI (* FLD (i_src2), 0)) {
92866e63ce3Schristos   {
92966e63ce3Schristos     USI opval = FLD (i_disp16);
93066e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
93166e63ce3Schristos     written |= (1 << 2);
932ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
93366e63ce3Schristos   }
93466e63ce3Schristos }
93566e63ce3Schristos 
93666e63ce3Schristos   abuf->written = written;
93766e63ce3Schristos   SEM_BRANCH_FINI (vpc);
93866e63ce3Schristos #undef FLD
93966e63ce3Schristos }
94066e63ce3Schristos   NEXT (vpc);
94166e63ce3Schristos 
CASE(sem,INSN_BLEZ)94266e63ce3Schristos   CASE (sem, INSN_BLEZ) : /* blez $src2,$disp16 */
94366e63ce3Schristos {
94466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
94566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
94666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
94766e63ce3Schristos   int UNUSED written = 0;
94866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
94966e63ce3Schristos   SEM_BRANCH_INIT
95066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
95166e63ce3Schristos 
95266e63ce3Schristos if (LESI (* FLD (i_src2), 0)) {
95366e63ce3Schristos   {
95466e63ce3Schristos     USI opval = FLD (i_disp16);
95566e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
95666e63ce3Schristos     written |= (1 << 2);
957ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
95866e63ce3Schristos   }
95966e63ce3Schristos }
96066e63ce3Schristos 
96166e63ce3Schristos   abuf->written = written;
96266e63ce3Schristos   SEM_BRANCH_FINI (vpc);
96366e63ce3Schristos #undef FLD
96466e63ce3Schristos }
96566e63ce3Schristos   NEXT (vpc);
96666e63ce3Schristos 
CASE(sem,INSN_BLTZ)96766e63ce3Schristos   CASE (sem, INSN_BLTZ) : /* bltz $src2,$disp16 */
96866e63ce3Schristos {
96966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
97066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
97166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
97266e63ce3Schristos   int UNUSED written = 0;
97366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
97466e63ce3Schristos   SEM_BRANCH_INIT
97566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
97666e63ce3Schristos 
97766e63ce3Schristos if (LTSI (* FLD (i_src2), 0)) {
97866e63ce3Schristos   {
97966e63ce3Schristos     USI opval = FLD (i_disp16);
98066e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
98166e63ce3Schristos     written |= (1 << 2);
982ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
98366e63ce3Schristos   }
98466e63ce3Schristos }
98566e63ce3Schristos 
98666e63ce3Schristos   abuf->written = written;
98766e63ce3Schristos   SEM_BRANCH_FINI (vpc);
98866e63ce3Schristos #undef FLD
98966e63ce3Schristos }
99066e63ce3Schristos   NEXT (vpc);
99166e63ce3Schristos 
CASE(sem,INSN_BNEZ)99266e63ce3Schristos   CASE (sem, INSN_BNEZ) : /* bnez $src2,$disp16 */
99366e63ce3Schristos {
99466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
99566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
99666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
99766e63ce3Schristos   int UNUSED written = 0;
99866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
99966e63ce3Schristos   SEM_BRANCH_INIT
100066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
100166e63ce3Schristos 
100266e63ce3Schristos if (NESI (* FLD (i_src2), 0)) {
100366e63ce3Schristos   {
100466e63ce3Schristos     USI opval = FLD (i_disp16);
100566e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
100666e63ce3Schristos     written |= (1 << 2);
1007ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
100866e63ce3Schristos   }
100966e63ce3Schristos }
101066e63ce3Schristos 
101166e63ce3Schristos   abuf->written = written;
101266e63ce3Schristos   SEM_BRANCH_FINI (vpc);
101366e63ce3Schristos #undef FLD
101466e63ce3Schristos }
101566e63ce3Schristos   NEXT (vpc);
101666e63ce3Schristos 
CASE(sem,INSN_BL8)101766e63ce3Schristos   CASE (sem, INSN_BL8) : /* bl.s $disp8 */
101866e63ce3Schristos {
101966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
102066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
102166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
102266e63ce3Schristos   int UNUSED written = 0;
102366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
102466e63ce3Schristos   SEM_BRANCH_INIT
102566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
102666e63ce3Schristos 
102766e63ce3Schristos {
102866e63ce3Schristos   {
102966e63ce3Schristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
103066e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
1031ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
103266e63ce3Schristos   }
103366e63ce3Schristos   {
103466e63ce3Schristos     USI opval = FLD (i_disp8);
103566e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1036ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
103766e63ce3Schristos   }
103866e63ce3Schristos }
103966e63ce3Schristos 
104066e63ce3Schristos   SEM_BRANCH_FINI (vpc);
104166e63ce3Schristos #undef FLD
104266e63ce3Schristos }
104366e63ce3Schristos   NEXT (vpc);
104466e63ce3Schristos 
CASE(sem,INSN_BL24)104566e63ce3Schristos   CASE (sem, INSN_BL24) : /* bl.l $disp24 */
104666e63ce3Schristos {
104766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
104866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
104966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl24.f
105066e63ce3Schristos   int UNUSED written = 0;
105166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
105266e63ce3Schristos   SEM_BRANCH_INIT
105366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
105466e63ce3Schristos 
105566e63ce3Schristos {
105666e63ce3Schristos   {
105766e63ce3Schristos     SI opval = ADDSI (pc, 4);
105866e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
1059ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
106066e63ce3Schristos   }
106166e63ce3Schristos   {
106266e63ce3Schristos     USI opval = FLD (i_disp24);
106366e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1064ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
106566e63ce3Schristos   }
106666e63ce3Schristos }
106766e63ce3Schristos 
106866e63ce3Schristos   SEM_BRANCH_FINI (vpc);
106966e63ce3Schristos #undef FLD
107066e63ce3Schristos }
107166e63ce3Schristos   NEXT (vpc);
107266e63ce3Schristos 
CASE(sem,INSN_BCL8)107366e63ce3Schristos   CASE (sem, INSN_BCL8) : /* bcl.s $disp8 */
107466e63ce3Schristos {
107566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
107666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
107766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
107866e63ce3Schristos   int UNUSED written = 0;
107966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
108066e63ce3Schristos   SEM_BRANCH_INIT
108166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
108266e63ce3Schristos 
108366e63ce3Schristos if (CPU (h_cond)) {
108466e63ce3Schristos {
108566e63ce3Schristos   {
108666e63ce3Schristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
108766e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
108866e63ce3Schristos     written |= (1 << 3);
1089ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
109066e63ce3Schristos   }
109166e63ce3Schristos   {
109266e63ce3Schristos     USI opval = FLD (i_disp8);
109366e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
109466e63ce3Schristos     written |= (1 << 4);
1095ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
109666e63ce3Schristos   }
109766e63ce3Schristos }
109866e63ce3Schristos }
109966e63ce3Schristos 
110066e63ce3Schristos   abuf->written = written;
110166e63ce3Schristos   SEM_BRANCH_FINI (vpc);
110266e63ce3Schristos #undef FLD
110366e63ce3Schristos }
110466e63ce3Schristos   NEXT (vpc);
110566e63ce3Schristos 
CASE(sem,INSN_BCL24)110666e63ce3Schristos   CASE (sem, INSN_BCL24) : /* bcl.l $disp24 */
110766e63ce3Schristos {
110866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
110966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
111066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl24.f
111166e63ce3Schristos   int UNUSED written = 0;
111266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
111366e63ce3Schristos   SEM_BRANCH_INIT
111466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
111566e63ce3Schristos 
111666e63ce3Schristos if (CPU (h_cond)) {
111766e63ce3Schristos {
111866e63ce3Schristos   {
111966e63ce3Schristos     SI opval = ADDSI (pc, 4);
112066e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
112166e63ce3Schristos     written |= (1 << 3);
1122ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
112366e63ce3Schristos   }
112466e63ce3Schristos   {
112566e63ce3Schristos     USI opval = FLD (i_disp24);
112666e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
112766e63ce3Schristos     written |= (1 << 4);
1128ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
112966e63ce3Schristos   }
113066e63ce3Schristos }
113166e63ce3Schristos }
113266e63ce3Schristos 
113366e63ce3Schristos   abuf->written = written;
113466e63ce3Schristos   SEM_BRANCH_FINI (vpc);
113566e63ce3Schristos #undef FLD
113666e63ce3Schristos }
113766e63ce3Schristos   NEXT (vpc);
113866e63ce3Schristos 
CASE(sem,INSN_BNC8)113966e63ce3Schristos   CASE (sem, INSN_BNC8) : /* bnc.s $disp8 */
114066e63ce3Schristos {
114166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
114266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
114366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
114466e63ce3Schristos   int UNUSED written = 0;
114566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
114666e63ce3Schristos   SEM_BRANCH_INIT
114766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
114866e63ce3Schristos 
114966e63ce3Schristos if (NOTBI (CPU (h_cond))) {
115066e63ce3Schristos   {
115166e63ce3Schristos     USI opval = FLD (i_disp8);
115266e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
115366e63ce3Schristos     written |= (1 << 2);
1154ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
115566e63ce3Schristos   }
115666e63ce3Schristos }
115766e63ce3Schristos 
115866e63ce3Schristos   abuf->written = written;
115966e63ce3Schristos   SEM_BRANCH_FINI (vpc);
116066e63ce3Schristos #undef FLD
116166e63ce3Schristos }
116266e63ce3Schristos   NEXT (vpc);
116366e63ce3Schristos 
CASE(sem,INSN_BNC24)116466e63ce3Schristos   CASE (sem, INSN_BNC24) : /* bnc.l $disp24 */
116566e63ce3Schristos {
116666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
116766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
116866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl24.f
116966e63ce3Schristos   int UNUSED written = 0;
117066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
117166e63ce3Schristos   SEM_BRANCH_INIT
117266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
117366e63ce3Schristos 
117466e63ce3Schristos if (NOTBI (CPU (h_cond))) {
117566e63ce3Schristos   {
117666e63ce3Schristos     USI opval = FLD (i_disp24);
117766e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
117866e63ce3Schristos     written |= (1 << 2);
1179ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
118066e63ce3Schristos   }
118166e63ce3Schristos }
118266e63ce3Schristos 
118366e63ce3Schristos   abuf->written = written;
118466e63ce3Schristos   SEM_BRANCH_FINI (vpc);
118566e63ce3Schristos #undef FLD
118666e63ce3Schristos }
118766e63ce3Schristos   NEXT (vpc);
118866e63ce3Schristos 
CASE(sem,INSN_BNE)118966e63ce3Schristos   CASE (sem, INSN_BNE) : /* bne $src1,$src2,$disp16 */
119066e63ce3Schristos {
119166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
119266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
119366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_beq.f
119466e63ce3Schristos   int UNUSED written = 0;
119566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
119666e63ce3Schristos   SEM_BRANCH_INIT
119766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
119866e63ce3Schristos 
119966e63ce3Schristos if (NESI (* FLD (i_src1), * FLD (i_src2))) {
120066e63ce3Schristos   {
120166e63ce3Schristos     USI opval = FLD (i_disp16);
120266e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
120366e63ce3Schristos     written |= (1 << 3);
1204ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
120566e63ce3Schristos   }
120666e63ce3Schristos }
120766e63ce3Schristos 
120866e63ce3Schristos   abuf->written = written;
120966e63ce3Schristos   SEM_BRANCH_FINI (vpc);
121066e63ce3Schristos #undef FLD
121166e63ce3Schristos }
121266e63ce3Schristos   NEXT (vpc);
121366e63ce3Schristos 
CASE(sem,INSN_BRA8)121466e63ce3Schristos   CASE (sem, INSN_BRA8) : /* bra.s $disp8 */
121566e63ce3Schristos {
121666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
121766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
121866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
121966e63ce3Schristos   int UNUSED written = 0;
122066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
122166e63ce3Schristos   SEM_BRANCH_INIT
122266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
122366e63ce3Schristos 
122466e63ce3Schristos   {
122566e63ce3Schristos     USI opval = FLD (i_disp8);
122666e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1227ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
122866e63ce3Schristos   }
122966e63ce3Schristos 
123066e63ce3Schristos   SEM_BRANCH_FINI (vpc);
123166e63ce3Schristos #undef FLD
123266e63ce3Schristos }
123366e63ce3Schristos   NEXT (vpc);
123466e63ce3Schristos 
CASE(sem,INSN_BRA24)123566e63ce3Schristos   CASE (sem, INSN_BRA24) : /* bra.l $disp24 */
123666e63ce3Schristos {
123766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
123866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
123966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl24.f
124066e63ce3Schristos   int UNUSED written = 0;
124166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
124266e63ce3Schristos   SEM_BRANCH_INIT
124366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
124466e63ce3Schristos 
124566e63ce3Schristos   {
124666e63ce3Schristos     USI opval = FLD (i_disp24);
124766e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1248ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
124966e63ce3Schristos   }
125066e63ce3Schristos 
125166e63ce3Schristos   SEM_BRANCH_FINI (vpc);
125266e63ce3Schristos #undef FLD
125366e63ce3Schristos }
125466e63ce3Schristos   NEXT (vpc);
125566e63ce3Schristos 
CASE(sem,INSN_BNCL8)125666e63ce3Schristos   CASE (sem, INSN_BNCL8) : /* bncl.s $disp8 */
125766e63ce3Schristos {
125866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
125966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
126066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
126166e63ce3Schristos   int UNUSED written = 0;
126266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
126366e63ce3Schristos   SEM_BRANCH_INIT
126466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
126566e63ce3Schristos 
126666e63ce3Schristos if (NOTBI (CPU (h_cond))) {
126766e63ce3Schristos {
126866e63ce3Schristos   {
126966e63ce3Schristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
127066e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
127166e63ce3Schristos     written |= (1 << 3);
1272ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
127366e63ce3Schristos   }
127466e63ce3Schristos   {
127566e63ce3Schristos     USI opval = FLD (i_disp8);
127666e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
127766e63ce3Schristos     written |= (1 << 4);
1278ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
127966e63ce3Schristos   }
128066e63ce3Schristos }
128166e63ce3Schristos }
128266e63ce3Schristos 
128366e63ce3Schristos   abuf->written = written;
128466e63ce3Schristos   SEM_BRANCH_FINI (vpc);
128566e63ce3Schristos #undef FLD
128666e63ce3Schristos }
128766e63ce3Schristos   NEXT (vpc);
128866e63ce3Schristos 
CASE(sem,INSN_BNCL24)128966e63ce3Schristos   CASE (sem, INSN_BNCL24) : /* bncl.l $disp24 */
129066e63ce3Schristos {
129166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
129266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
129366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl24.f
129466e63ce3Schristos   int UNUSED written = 0;
129566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
129666e63ce3Schristos   SEM_BRANCH_INIT
129766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
129866e63ce3Schristos 
129966e63ce3Schristos if (NOTBI (CPU (h_cond))) {
130066e63ce3Schristos {
130166e63ce3Schristos   {
130266e63ce3Schristos     SI opval = ADDSI (pc, 4);
130366e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
130466e63ce3Schristos     written |= (1 << 3);
1305ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
130666e63ce3Schristos   }
130766e63ce3Schristos   {
130866e63ce3Schristos     USI opval = FLD (i_disp24);
130966e63ce3Schristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
131066e63ce3Schristos     written |= (1 << 4);
1311ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
131266e63ce3Schristos   }
131366e63ce3Schristos }
131466e63ce3Schristos }
131566e63ce3Schristos 
131666e63ce3Schristos   abuf->written = written;
131766e63ce3Schristos   SEM_BRANCH_FINI (vpc);
131866e63ce3Schristos #undef FLD
131966e63ce3Schristos }
132066e63ce3Schristos   NEXT (vpc);
132166e63ce3Schristos 
CASE(sem,INSN_CMP)132266e63ce3Schristos   CASE (sem, INSN_CMP) : /* cmp $src1,$src2 */
132366e63ce3Schristos {
132466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
132566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
132666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
132766e63ce3Schristos   int UNUSED written = 0;
132866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
132966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
133066e63ce3Schristos 
133166e63ce3Schristos   {
133266e63ce3Schristos     BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
133366e63ce3Schristos     CPU (h_cond) = opval;
1334ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
133566e63ce3Schristos   }
133666e63ce3Schristos 
133766e63ce3Schristos #undef FLD
133866e63ce3Schristos }
133966e63ce3Schristos   NEXT (vpc);
134066e63ce3Schristos 
CASE(sem,INSN_CMPI)134166e63ce3Schristos   CASE (sem, INSN_CMPI) : /* cmpi $src2,$simm16 */
134266e63ce3Schristos {
134366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
134466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
134566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
134666e63ce3Schristos   int UNUSED written = 0;
134766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
134866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
134966e63ce3Schristos 
135066e63ce3Schristos   {
135166e63ce3Schristos     BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
135266e63ce3Schristos     CPU (h_cond) = opval;
1353ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
135466e63ce3Schristos   }
135566e63ce3Schristos 
135666e63ce3Schristos #undef FLD
135766e63ce3Schristos }
135866e63ce3Schristos   NEXT (vpc);
135966e63ce3Schristos 
CASE(sem,INSN_CMPU)136066e63ce3Schristos   CASE (sem, INSN_CMPU) : /* cmpu $src1,$src2 */
136166e63ce3Schristos {
136266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
136366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
136466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
136566e63ce3Schristos   int UNUSED written = 0;
136666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
136766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
136866e63ce3Schristos 
136966e63ce3Schristos   {
137066e63ce3Schristos     BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
137166e63ce3Schristos     CPU (h_cond) = opval;
1372ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
137366e63ce3Schristos   }
137466e63ce3Schristos 
137566e63ce3Schristos #undef FLD
137666e63ce3Schristos }
137766e63ce3Schristos   NEXT (vpc);
137866e63ce3Schristos 
CASE(sem,INSN_CMPUI)137966e63ce3Schristos   CASE (sem, INSN_CMPUI) : /* cmpui $src2,$simm16 */
138066e63ce3Schristos {
138166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
138266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
138366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
138466e63ce3Schristos   int UNUSED written = 0;
138566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
138666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
138766e63ce3Schristos 
138866e63ce3Schristos   {
138966e63ce3Schristos     BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
139066e63ce3Schristos     CPU (h_cond) = opval;
1391ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
139266e63ce3Schristos   }
139366e63ce3Schristos 
139466e63ce3Schristos #undef FLD
139566e63ce3Schristos }
139666e63ce3Schristos   NEXT (vpc);
139766e63ce3Schristos 
CASE(sem,INSN_CMPEQ)139866e63ce3Schristos   CASE (sem, INSN_CMPEQ) : /* cmpeq $src1,$src2 */
139966e63ce3Schristos {
140066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
140166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
140266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
140366e63ce3Schristos   int UNUSED written = 0;
140466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
140566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
140666e63ce3Schristos 
140766e63ce3Schristos   {
140866e63ce3Schristos     BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
140966e63ce3Schristos     CPU (h_cond) = opval;
1410ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
141166e63ce3Schristos   }
141266e63ce3Schristos 
141366e63ce3Schristos #undef FLD
141466e63ce3Schristos }
141566e63ce3Schristos   NEXT (vpc);
141666e63ce3Schristos 
CASE(sem,INSN_CMPZ)141766e63ce3Schristos   CASE (sem, INSN_CMPZ) : /* cmpz $src2 */
141866e63ce3Schristos {
141966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
142066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
142166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
142266e63ce3Schristos   int UNUSED written = 0;
142366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
142466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
142566e63ce3Schristos 
142666e63ce3Schristos   {
142766e63ce3Schristos     BI opval = EQSI (* FLD (i_src2), 0);
142866e63ce3Schristos     CPU (h_cond) = opval;
1429ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
143066e63ce3Schristos   }
143166e63ce3Schristos 
143266e63ce3Schristos #undef FLD
143366e63ce3Schristos }
143466e63ce3Schristos   NEXT (vpc);
143566e63ce3Schristos 
CASE(sem,INSN_DIV)143666e63ce3Schristos   CASE (sem, INSN_DIV) : /* div $dr,$sr */
143766e63ce3Schristos {
143866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
143966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
144066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
144166e63ce3Schristos   int UNUSED written = 0;
144266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
144366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
144466e63ce3Schristos 
144566e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
144666e63ce3Schristos   {
144766e63ce3Schristos     SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
144866e63ce3Schristos     * FLD (i_dr) = opval;
144966e63ce3Schristos     written |= (1 << 2);
1450ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
145166e63ce3Schristos   }
145266e63ce3Schristos }
145366e63ce3Schristos 
145466e63ce3Schristos   abuf->written = written;
145566e63ce3Schristos #undef FLD
145666e63ce3Schristos }
145766e63ce3Schristos   NEXT (vpc);
145866e63ce3Schristos 
CASE(sem,INSN_DIVU)145966e63ce3Schristos   CASE (sem, INSN_DIVU) : /* divu $dr,$sr */
146066e63ce3Schristos {
146166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
146266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
146366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
146466e63ce3Schristos   int UNUSED written = 0;
146566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
146666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
146766e63ce3Schristos 
146866e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
146966e63ce3Schristos   {
147066e63ce3Schristos     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
147166e63ce3Schristos     * FLD (i_dr) = opval;
147266e63ce3Schristos     written |= (1 << 2);
1473ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
147466e63ce3Schristos   }
147566e63ce3Schristos }
147666e63ce3Schristos 
147766e63ce3Schristos   abuf->written = written;
147866e63ce3Schristos #undef FLD
147966e63ce3Schristos }
148066e63ce3Schristos   NEXT (vpc);
148166e63ce3Schristos 
CASE(sem,INSN_REM)148266e63ce3Schristos   CASE (sem, INSN_REM) : /* rem $dr,$sr */
148366e63ce3Schristos {
148466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
148566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
148666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
148766e63ce3Schristos   int UNUSED written = 0;
148866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
148966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
149066e63ce3Schristos 
149166e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
149266e63ce3Schristos   {
149366e63ce3Schristos     SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
149466e63ce3Schristos     * FLD (i_dr) = opval;
149566e63ce3Schristos     written |= (1 << 2);
1496ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
149766e63ce3Schristos   }
149866e63ce3Schristos }
149966e63ce3Schristos 
150066e63ce3Schristos   abuf->written = written;
150166e63ce3Schristos #undef FLD
150266e63ce3Schristos }
150366e63ce3Schristos   NEXT (vpc);
150466e63ce3Schristos 
CASE(sem,INSN_REMU)150566e63ce3Schristos   CASE (sem, INSN_REMU) : /* remu $dr,$sr */
150666e63ce3Schristos {
150766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
150866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
150966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
151066e63ce3Schristos   int UNUSED written = 0;
151166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
151266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
151366e63ce3Schristos 
151466e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
151566e63ce3Schristos   {
151666e63ce3Schristos     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
151766e63ce3Schristos     * FLD (i_dr) = opval;
151866e63ce3Schristos     written |= (1 << 2);
1519ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
152066e63ce3Schristos   }
152166e63ce3Schristos }
152266e63ce3Schristos 
152366e63ce3Schristos   abuf->written = written;
152466e63ce3Schristos #undef FLD
152566e63ce3Schristos }
152666e63ce3Schristos   NEXT (vpc);
152766e63ce3Schristos 
CASE(sem,INSN_REMH)152866e63ce3Schristos   CASE (sem, INSN_REMH) : /* remh $dr,$sr */
152966e63ce3Schristos {
153066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
153166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
153266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
153366e63ce3Schristos   int UNUSED written = 0;
153466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
153566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
153666e63ce3Schristos 
153766e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
153866e63ce3Schristos   {
153966e63ce3Schristos     SI opval = MODSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr));
154066e63ce3Schristos     * FLD (i_dr) = opval;
154166e63ce3Schristos     written |= (1 << 2);
1542ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
154366e63ce3Schristos   }
154466e63ce3Schristos }
154566e63ce3Schristos 
154666e63ce3Schristos   abuf->written = written;
154766e63ce3Schristos #undef FLD
154866e63ce3Schristos }
154966e63ce3Schristos   NEXT (vpc);
155066e63ce3Schristos 
CASE(sem,INSN_REMUH)155166e63ce3Schristos   CASE (sem, INSN_REMUH) : /* remuh $dr,$sr */
155266e63ce3Schristos {
155366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
155466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
155566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
155666e63ce3Schristos   int UNUSED written = 0;
155766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
155866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
155966e63ce3Schristos 
156066e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
156166e63ce3Schristos   {
156266e63ce3Schristos     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
156366e63ce3Schristos     * FLD (i_dr) = opval;
156466e63ce3Schristos     written |= (1 << 2);
1565ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
156666e63ce3Schristos   }
156766e63ce3Schristos }
156866e63ce3Schristos 
156966e63ce3Schristos   abuf->written = written;
157066e63ce3Schristos #undef FLD
157166e63ce3Schristos }
157266e63ce3Schristos   NEXT (vpc);
157366e63ce3Schristos 
CASE(sem,INSN_REMB)157466e63ce3Schristos   CASE (sem, INSN_REMB) : /* remb $dr,$sr */
157566e63ce3Schristos {
157666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
157766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
157866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
157966e63ce3Schristos   int UNUSED written = 0;
158066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
158166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
158266e63ce3Schristos 
158366e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
158466e63ce3Schristos   {
158566e63ce3Schristos     SI opval = MODSI (EXTBISI (TRUNCSIBI (* FLD (i_dr))), * FLD (i_sr));
158666e63ce3Schristos     * FLD (i_dr) = opval;
158766e63ce3Schristos     written |= (1 << 2);
1588ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
158966e63ce3Schristos   }
159066e63ce3Schristos }
159166e63ce3Schristos 
159266e63ce3Schristos   abuf->written = written;
159366e63ce3Schristos #undef FLD
159466e63ce3Schristos }
159566e63ce3Schristos   NEXT (vpc);
159666e63ce3Schristos 
CASE(sem,INSN_REMUB)159766e63ce3Schristos   CASE (sem, INSN_REMUB) : /* remub $dr,$sr */
159866e63ce3Schristos {
159966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
160066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
160166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
160266e63ce3Schristos   int UNUSED written = 0;
160366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
160466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
160566e63ce3Schristos 
160666e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
160766e63ce3Schristos   {
160866e63ce3Schristos     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
160966e63ce3Schristos     * FLD (i_dr) = opval;
161066e63ce3Schristos     written |= (1 << 2);
1611ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
161266e63ce3Schristos   }
161366e63ce3Schristos }
161466e63ce3Schristos 
161566e63ce3Schristos   abuf->written = written;
161666e63ce3Schristos #undef FLD
161766e63ce3Schristos }
161866e63ce3Schristos   NEXT (vpc);
161966e63ce3Schristos 
CASE(sem,INSN_DIVUH)162066e63ce3Schristos   CASE (sem, INSN_DIVUH) : /* divuh $dr,$sr */
162166e63ce3Schristos {
162266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
162366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
162466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
162566e63ce3Schristos   int UNUSED written = 0;
162666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
162766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
162866e63ce3Schristos 
162966e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
163066e63ce3Schristos   {
163166e63ce3Schristos     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
163266e63ce3Schristos     * FLD (i_dr) = opval;
163366e63ce3Schristos     written |= (1 << 2);
1634ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
163566e63ce3Schristos   }
163666e63ce3Schristos }
163766e63ce3Schristos 
163866e63ce3Schristos   abuf->written = written;
163966e63ce3Schristos #undef FLD
164066e63ce3Schristos }
164166e63ce3Schristos   NEXT (vpc);
164266e63ce3Schristos 
CASE(sem,INSN_DIVB)164366e63ce3Schristos   CASE (sem, INSN_DIVB) : /* divb $dr,$sr */
164466e63ce3Schristos {
164566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
164666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
164766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
164866e63ce3Schristos   int UNUSED written = 0;
164966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
165066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
165166e63ce3Schristos 
165266e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
165366e63ce3Schristos   {
165466e63ce3Schristos     SI opval = DIVSI (EXTBISI (TRUNCSIBI (* FLD (i_dr))), * FLD (i_sr));
165566e63ce3Schristos     * FLD (i_dr) = opval;
165666e63ce3Schristos     written |= (1 << 2);
1657ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
165866e63ce3Schristos   }
165966e63ce3Schristos }
166066e63ce3Schristos 
166166e63ce3Schristos   abuf->written = written;
166266e63ce3Schristos #undef FLD
166366e63ce3Schristos }
166466e63ce3Schristos   NEXT (vpc);
166566e63ce3Schristos 
CASE(sem,INSN_DIVUB)166666e63ce3Schristos   CASE (sem, INSN_DIVUB) : /* divub $dr,$sr */
166766e63ce3Schristos {
166866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
166966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
167066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
167166e63ce3Schristos   int UNUSED written = 0;
167266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
167366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
167466e63ce3Schristos 
167566e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
167666e63ce3Schristos   {
167766e63ce3Schristos     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
167866e63ce3Schristos     * FLD (i_dr) = opval;
167966e63ce3Schristos     written |= (1 << 2);
1680ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
168166e63ce3Schristos   }
168266e63ce3Schristos }
168366e63ce3Schristos 
168466e63ce3Schristos   abuf->written = written;
168566e63ce3Schristos #undef FLD
168666e63ce3Schristos }
168766e63ce3Schristos   NEXT (vpc);
168866e63ce3Schristos 
CASE(sem,INSN_DIVH)168966e63ce3Schristos   CASE (sem, INSN_DIVH) : /* divh $dr,$sr */
169066e63ce3Schristos {
169166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
169266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
169366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
169466e63ce3Schristos   int UNUSED written = 0;
169566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
169666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
169766e63ce3Schristos 
169866e63ce3Schristos if (NESI (* FLD (i_sr), 0)) {
169966e63ce3Schristos   {
170066e63ce3Schristos     SI opval = DIVSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr));
170166e63ce3Schristos     * FLD (i_dr) = opval;
170266e63ce3Schristos     written |= (1 << 2);
1703ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
170466e63ce3Schristos   }
170566e63ce3Schristos }
170666e63ce3Schristos 
170766e63ce3Schristos   abuf->written = written;
170866e63ce3Schristos #undef FLD
170966e63ce3Schristos }
171066e63ce3Schristos   NEXT (vpc);
171166e63ce3Schristos 
CASE(sem,INSN_JC)171266e63ce3Schristos   CASE (sem, INSN_JC) : /* jc $sr */
171366e63ce3Schristos {
171466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
171566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
171666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
171766e63ce3Schristos   int UNUSED written = 0;
171866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
171966e63ce3Schristos   SEM_BRANCH_INIT
172066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
172166e63ce3Schristos 
172266e63ce3Schristos if (CPU (h_cond)) {
172366e63ce3Schristos   {
172466e63ce3Schristos     USI opval = ANDSI (* FLD (i_sr), -4);
172566e63ce3Schristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
172666e63ce3Schristos     written |= (1 << 2);
1727ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
172866e63ce3Schristos   }
172966e63ce3Schristos }
173066e63ce3Schristos 
173166e63ce3Schristos   abuf->written = written;
173266e63ce3Schristos   SEM_BRANCH_FINI (vpc);
173366e63ce3Schristos #undef FLD
173466e63ce3Schristos }
173566e63ce3Schristos   NEXT (vpc);
173666e63ce3Schristos 
CASE(sem,INSN_JNC)173766e63ce3Schristos   CASE (sem, INSN_JNC) : /* jnc $sr */
173866e63ce3Schristos {
173966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
174066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
174166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
174266e63ce3Schristos   int UNUSED written = 0;
174366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
174466e63ce3Schristos   SEM_BRANCH_INIT
174566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
174666e63ce3Schristos 
174766e63ce3Schristos if (NOTBI (CPU (h_cond))) {
174866e63ce3Schristos   {
174966e63ce3Schristos     USI opval = ANDSI (* FLD (i_sr), -4);
175066e63ce3Schristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
175166e63ce3Schristos     written |= (1 << 2);
1752ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
175366e63ce3Schristos   }
175466e63ce3Schristos }
175566e63ce3Schristos 
175666e63ce3Schristos   abuf->written = written;
175766e63ce3Schristos   SEM_BRANCH_FINI (vpc);
175866e63ce3Schristos #undef FLD
175966e63ce3Schristos }
176066e63ce3Schristos   NEXT (vpc);
176166e63ce3Schristos 
CASE(sem,INSN_JL)176266e63ce3Schristos   CASE (sem, INSN_JL) : /* jl $sr */
176366e63ce3Schristos {
176466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
176566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
176666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
176766e63ce3Schristos   int UNUSED written = 0;
176866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
176966e63ce3Schristos   SEM_BRANCH_INIT
177066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
177166e63ce3Schristos 
177266e63ce3Schristos {
177366e63ce3Schristos   SI temp0;USI temp1;
177466e63ce3Schristos   temp0 = ADDSI (ANDSI (pc, -4), 4);
177566e63ce3Schristos   temp1 = ANDSI (* FLD (i_sr), -4);
177666e63ce3Schristos   {
177766e63ce3Schristos     SI opval = temp0;
177866e63ce3Schristos     CPU (h_gr[((UINT) 14)]) = opval;
1779ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
178066e63ce3Schristos   }
178166e63ce3Schristos   {
178266e63ce3Schristos     USI opval = temp1;
178366e63ce3Schristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1784ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
178566e63ce3Schristos   }
178666e63ce3Schristos }
178766e63ce3Schristos 
178866e63ce3Schristos   SEM_BRANCH_FINI (vpc);
178966e63ce3Schristos #undef FLD
179066e63ce3Schristos }
179166e63ce3Schristos   NEXT (vpc);
179266e63ce3Schristos 
CASE(sem,INSN_JMP)179366e63ce3Schristos   CASE (sem, INSN_JMP) : /* jmp $sr */
179466e63ce3Schristos {
179566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
179666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
179766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
179866e63ce3Schristos   int UNUSED written = 0;
179966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
180066e63ce3Schristos   SEM_BRANCH_INIT
180166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
180266e63ce3Schristos 
180366e63ce3Schristos   {
180466e63ce3Schristos     USI opval = ANDSI (* FLD (i_sr), -4);
180566e63ce3Schristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1806ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
180766e63ce3Schristos   }
180866e63ce3Schristos 
180966e63ce3Schristos   SEM_BRANCH_FINI (vpc);
181066e63ce3Schristos #undef FLD
181166e63ce3Schristos }
181266e63ce3Schristos   NEXT (vpc);
181366e63ce3Schristos 
CASE(sem,INSN_LD)181466e63ce3Schristos   CASE (sem, INSN_LD) : /* ld $dr,@$sr */
181566e63ce3Schristos {
181666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
181766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
181866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
181966e63ce3Schristos   int UNUSED written = 0;
182066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
182166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
182266e63ce3Schristos 
182366e63ce3Schristos   {
182466e63ce3Schristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
182566e63ce3Schristos     * FLD (i_dr) = opval;
1826ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
182766e63ce3Schristos   }
182866e63ce3Schristos 
182966e63ce3Schristos #undef FLD
183066e63ce3Schristos }
183166e63ce3Schristos   NEXT (vpc);
183266e63ce3Schristos 
CASE(sem,INSN_LD_D)183366e63ce3Schristos   CASE (sem, INSN_LD_D) : /* ld $dr,@($slo16,$sr) */
183466e63ce3Schristos {
183566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
183666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
183766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
183866e63ce3Schristos   int UNUSED written = 0;
183966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
184066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
184166e63ce3Schristos 
184266e63ce3Schristos   {
184366e63ce3Schristos     SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
184466e63ce3Schristos     * FLD (i_dr) = opval;
1845ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
184666e63ce3Schristos   }
184766e63ce3Schristos 
184866e63ce3Schristos #undef FLD
184966e63ce3Schristos }
185066e63ce3Schristos   NEXT (vpc);
185166e63ce3Schristos 
CASE(sem,INSN_LDB)185266e63ce3Schristos   CASE (sem, INSN_LDB) : /* ldb $dr,@$sr */
185366e63ce3Schristos {
185466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
185566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
185666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
185766e63ce3Schristos   int UNUSED written = 0;
185866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
185966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
186066e63ce3Schristos 
186166e63ce3Schristos   {
186266e63ce3Schristos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
186366e63ce3Schristos     * FLD (i_dr) = opval;
1864ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
186566e63ce3Schristos   }
186666e63ce3Schristos 
186766e63ce3Schristos #undef FLD
186866e63ce3Schristos }
186966e63ce3Schristos   NEXT (vpc);
187066e63ce3Schristos 
CASE(sem,INSN_LDB_D)187166e63ce3Schristos   CASE (sem, INSN_LDB_D) : /* ldb $dr,@($slo16,$sr) */
187266e63ce3Schristos {
187366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
187466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
187566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
187666e63ce3Schristos   int UNUSED written = 0;
187766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
187866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
187966e63ce3Schristos 
188066e63ce3Schristos   {
188166e63ce3Schristos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
188266e63ce3Schristos     * FLD (i_dr) = opval;
1883ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
188466e63ce3Schristos   }
188566e63ce3Schristos 
188666e63ce3Schristos #undef FLD
188766e63ce3Schristos }
188866e63ce3Schristos   NEXT (vpc);
188966e63ce3Schristos 
CASE(sem,INSN_LDH)189066e63ce3Schristos   CASE (sem, INSN_LDH) : /* ldh $dr,@$sr */
189166e63ce3Schristos {
189266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
189366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
189466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
189566e63ce3Schristos   int UNUSED written = 0;
189666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
189766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
189866e63ce3Schristos 
189966e63ce3Schristos   {
190066e63ce3Schristos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
190166e63ce3Schristos     * FLD (i_dr) = opval;
1902ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
190366e63ce3Schristos   }
190466e63ce3Schristos 
190566e63ce3Schristos #undef FLD
190666e63ce3Schristos }
190766e63ce3Schristos   NEXT (vpc);
190866e63ce3Schristos 
CASE(sem,INSN_LDH_D)190966e63ce3Schristos   CASE (sem, INSN_LDH_D) : /* ldh $dr,@($slo16,$sr) */
191066e63ce3Schristos {
191166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
191266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
191366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
191466e63ce3Schristos   int UNUSED written = 0;
191566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
191666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
191766e63ce3Schristos 
191866e63ce3Schristos   {
191966e63ce3Schristos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
192066e63ce3Schristos     * FLD (i_dr) = opval;
1921ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
192266e63ce3Schristos   }
192366e63ce3Schristos 
192466e63ce3Schristos #undef FLD
192566e63ce3Schristos }
192666e63ce3Schristos   NEXT (vpc);
192766e63ce3Schristos 
CASE(sem,INSN_LDUB)192866e63ce3Schristos   CASE (sem, INSN_LDUB) : /* ldub $dr,@$sr */
192966e63ce3Schristos {
193066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
193166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
193266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
193366e63ce3Schristos   int UNUSED written = 0;
193466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
193566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
193666e63ce3Schristos 
193766e63ce3Schristos   {
193866e63ce3Schristos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
193966e63ce3Schristos     * FLD (i_dr) = opval;
1940ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
194166e63ce3Schristos   }
194266e63ce3Schristos 
194366e63ce3Schristos #undef FLD
194466e63ce3Schristos }
194566e63ce3Schristos   NEXT (vpc);
194666e63ce3Schristos 
CASE(sem,INSN_LDUB_D)194766e63ce3Schristos   CASE (sem, INSN_LDUB_D) : /* ldub $dr,@($slo16,$sr) */
194866e63ce3Schristos {
194966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
195066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
195166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
195266e63ce3Schristos   int UNUSED written = 0;
195366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
195466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
195566e63ce3Schristos 
195666e63ce3Schristos   {
195766e63ce3Schristos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
195866e63ce3Schristos     * FLD (i_dr) = opval;
1959ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
196066e63ce3Schristos   }
196166e63ce3Schristos 
196266e63ce3Schristos #undef FLD
196366e63ce3Schristos }
196466e63ce3Schristos   NEXT (vpc);
196566e63ce3Schristos 
CASE(sem,INSN_LDUH)196666e63ce3Schristos   CASE (sem, INSN_LDUH) : /* lduh $dr,@$sr */
196766e63ce3Schristos {
196866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
196966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
197066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
197166e63ce3Schristos   int UNUSED written = 0;
197266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
197366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
197466e63ce3Schristos 
197566e63ce3Schristos   {
197666e63ce3Schristos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
197766e63ce3Schristos     * FLD (i_dr) = opval;
1978ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
197966e63ce3Schristos   }
198066e63ce3Schristos 
198166e63ce3Schristos #undef FLD
198266e63ce3Schristos }
198366e63ce3Schristos   NEXT (vpc);
198466e63ce3Schristos 
CASE(sem,INSN_LDUH_D)198566e63ce3Schristos   CASE (sem, INSN_LDUH_D) : /* lduh $dr,@($slo16,$sr) */
198666e63ce3Schristos {
198766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
198866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
198966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
199066e63ce3Schristos   int UNUSED written = 0;
199166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
199266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
199366e63ce3Schristos 
199466e63ce3Schristos   {
199566e63ce3Schristos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
199666e63ce3Schristos     * FLD (i_dr) = opval;
1997ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
199866e63ce3Schristos   }
199966e63ce3Schristos 
200066e63ce3Schristos #undef FLD
200166e63ce3Schristos }
200266e63ce3Schristos   NEXT (vpc);
200366e63ce3Schristos 
CASE(sem,INSN_LD_PLUS)200466e63ce3Schristos   CASE (sem, INSN_LD_PLUS) : /* ld $dr,@$sr+ */
200566e63ce3Schristos {
200666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
200766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
200866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
200966e63ce3Schristos   int UNUSED written = 0;
201066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
201166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
201266e63ce3Schristos 
201366e63ce3Schristos {
201466e63ce3Schristos   SI temp0;SI temp1;
201566e63ce3Schristos   temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
201666e63ce3Schristos   temp1 = ADDSI (* FLD (i_sr), 4);
201766e63ce3Schristos   {
201866e63ce3Schristos     SI opval = temp0;
201966e63ce3Schristos     * FLD (i_dr) = opval;
2020ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
202166e63ce3Schristos   }
202266e63ce3Schristos   {
202366e63ce3Schristos     SI opval = temp1;
202466e63ce3Schristos     * FLD (i_sr) = opval;
2025ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
202666e63ce3Schristos   }
202766e63ce3Schristos }
202866e63ce3Schristos 
202966e63ce3Schristos #undef FLD
203066e63ce3Schristos }
203166e63ce3Schristos   NEXT (vpc);
203266e63ce3Schristos 
CASE(sem,INSN_LD24)203366e63ce3Schristos   CASE (sem, INSN_LD24) : /* ld24 $dr,$uimm24 */
203466e63ce3Schristos {
203566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
203666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
203766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld24.f
203866e63ce3Schristos   int UNUSED written = 0;
203966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
204066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
204166e63ce3Schristos 
204266e63ce3Schristos   {
204366e63ce3Schristos     SI opval = FLD (i_uimm24);
204466e63ce3Schristos     * FLD (i_dr) = opval;
2045ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
204666e63ce3Schristos   }
204766e63ce3Schristos 
204866e63ce3Schristos #undef FLD
204966e63ce3Schristos }
205066e63ce3Schristos   NEXT (vpc);
205166e63ce3Schristos 
CASE(sem,INSN_LDI8)205266e63ce3Schristos   CASE (sem, INSN_LDI8) : /* ldi8 $dr,$simm8 */
205366e63ce3Schristos {
205466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
205566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
205666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_addi.f
205766e63ce3Schristos   int UNUSED written = 0;
205866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
205966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
206066e63ce3Schristos 
206166e63ce3Schristos   {
206266e63ce3Schristos     SI opval = FLD (f_simm8);
206366e63ce3Schristos     * FLD (i_dr) = opval;
2064ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
206566e63ce3Schristos   }
206666e63ce3Schristos 
206766e63ce3Schristos #undef FLD
206866e63ce3Schristos }
206966e63ce3Schristos   NEXT (vpc);
207066e63ce3Schristos 
CASE(sem,INSN_LDI16)207166e63ce3Schristos   CASE (sem, INSN_LDI16) : /* ldi16 $dr,$hash$slo16 */
207266e63ce3Schristos {
207366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
207466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
207566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
207666e63ce3Schristos   int UNUSED written = 0;
207766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
207866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
207966e63ce3Schristos 
208066e63ce3Schristos   {
208166e63ce3Schristos     SI opval = FLD (f_simm16);
208266e63ce3Schristos     * FLD (i_dr) = opval;
2083ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
208466e63ce3Schristos   }
208566e63ce3Schristos 
208666e63ce3Schristos #undef FLD
208766e63ce3Schristos }
208866e63ce3Schristos   NEXT (vpc);
208966e63ce3Schristos 
CASE(sem,INSN_LOCK)209066e63ce3Schristos   CASE (sem, INSN_LOCK) : /* lock $dr,@$sr */
209166e63ce3Schristos {
209266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
209366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
209466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
209566e63ce3Schristos   int UNUSED written = 0;
209666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
209766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
209866e63ce3Schristos 
209966e63ce3Schristos {
210066e63ce3Schristos   {
210166e63ce3Schristos     BI opval = 1;
210266e63ce3Schristos     CPU (h_lock) = opval;
2103ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
210466e63ce3Schristos   }
210566e63ce3Schristos   {
210666e63ce3Schristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
210766e63ce3Schristos     * FLD (i_dr) = opval;
2108ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
210966e63ce3Schristos   }
211066e63ce3Schristos }
211166e63ce3Schristos 
211266e63ce3Schristos #undef FLD
211366e63ce3Schristos }
211466e63ce3Schristos   NEXT (vpc);
211566e63ce3Schristos 
CASE(sem,INSN_MACHI_A)211666e63ce3Schristos   CASE (sem, INSN_MACHI_A) : /* machi $src1,$src2,$acc */
211766e63ce3Schristos {
211866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
211966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
212066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
212166e63ce3Schristos   int UNUSED written = 0;
212266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
212366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
212466e63ce3Schristos 
212566e63ce3Schristos   {
212666e63ce3Schristos     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);
212766e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2128ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
212966e63ce3Schristos   }
213066e63ce3Schristos 
213166e63ce3Schristos #undef FLD
213266e63ce3Schristos }
213366e63ce3Schristos   NEXT (vpc);
213466e63ce3Schristos 
CASE(sem,INSN_MACLO_A)213566e63ce3Schristos   CASE (sem, INSN_MACLO_A) : /* maclo $src1,$src2,$acc */
213666e63ce3Schristos {
213766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
213866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
213966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
214066e63ce3Schristos   int UNUSED written = 0;
214166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
214266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
214366e63ce3Schristos 
214466e63ce3Schristos   {
214566e63ce3Schristos     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);
214666e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2147ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
214866e63ce3Schristos   }
214966e63ce3Schristos 
215066e63ce3Schristos #undef FLD
215166e63ce3Schristos }
215266e63ce3Schristos   NEXT (vpc);
215366e63ce3Schristos 
CASE(sem,INSN_MACWHI_A)215466e63ce3Schristos   CASE (sem, INSN_MACWHI_A) : /* macwhi $src1,$src2,$acc */
215566e63ce3Schristos {
215666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
215766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
215866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
215966e63ce3Schristos   int UNUSED written = 0;
216066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
216166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
216266e63ce3Schristos 
216366e63ce3Schristos   {
216466e63ce3Schristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))));
216566e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2166ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
216766e63ce3Schristos   }
216866e63ce3Schristos 
216966e63ce3Schristos #undef FLD
217066e63ce3Schristos }
217166e63ce3Schristos   NEXT (vpc);
217266e63ce3Schristos 
CASE(sem,INSN_MACWLO_A)217366e63ce3Schristos   CASE (sem, INSN_MACWLO_A) : /* macwlo $src1,$src2,$acc */
217466e63ce3Schristos {
217566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
217666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
217766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
217866e63ce3Schristos   int UNUSED written = 0;
217966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
218066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
218166e63ce3Schristos 
218266e63ce3Schristos   {
218366e63ce3Schristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))));
218466e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2185ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
218666e63ce3Schristos   }
218766e63ce3Schristos 
218866e63ce3Schristos #undef FLD
218966e63ce3Schristos }
219066e63ce3Schristos   NEXT (vpc);
219166e63ce3Schristos 
CASE(sem,INSN_MUL)219266e63ce3Schristos   CASE (sem, INSN_MUL) : /* mul $dr,$sr */
219366e63ce3Schristos {
219466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
219566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
219666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
219766e63ce3Schristos   int UNUSED written = 0;
219866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
219966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
220066e63ce3Schristos 
220166e63ce3Schristos   {
220266e63ce3Schristos     SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
220366e63ce3Schristos     * FLD (i_dr) = opval;
2204ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
220566e63ce3Schristos   }
220666e63ce3Schristos 
220766e63ce3Schristos #undef FLD
220866e63ce3Schristos }
220966e63ce3Schristos   NEXT (vpc);
221066e63ce3Schristos 
CASE(sem,INSN_MULHI_A)221166e63ce3Schristos   CASE (sem, INSN_MULHI_A) : /* mulhi $src1,$src2,$acc */
221266e63ce3Schristos {
221366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
221466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
221566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
221666e63ce3Schristos   int UNUSED written = 0;
221766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
221866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
221966e63ce3Schristos 
222066e63ce3Schristos   {
222166e63ce3Schristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
222266e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2223ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
222466e63ce3Schristos   }
222566e63ce3Schristos 
222666e63ce3Schristos #undef FLD
222766e63ce3Schristos }
222866e63ce3Schristos   NEXT (vpc);
222966e63ce3Schristos 
CASE(sem,INSN_MULLO_A)223066e63ce3Schristos   CASE (sem, INSN_MULLO_A) : /* mullo $src1,$src2,$acc */
223166e63ce3Schristos {
223266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
223366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
223466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
223566e63ce3Schristos   int UNUSED written = 0;
223666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
223766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
223866e63ce3Schristos 
223966e63ce3Schristos   {
224066e63ce3Schristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
224166e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2242ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
224366e63ce3Schristos   }
224466e63ce3Schristos 
224566e63ce3Schristos #undef FLD
224666e63ce3Schristos }
224766e63ce3Schristos   NEXT (vpc);
224866e63ce3Schristos 
CASE(sem,INSN_MULWHI_A)224966e63ce3Schristos   CASE (sem, INSN_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
225066e63ce3Schristos {
225166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
225266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
225366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
225466e63ce3Schristos   int UNUSED written = 0;
225566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
225666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
225766e63ce3Schristos 
225866e63ce3Schristos   {
225966e63ce3Schristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))));
226066e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2261ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
226266e63ce3Schristos   }
226366e63ce3Schristos 
226466e63ce3Schristos #undef FLD
226566e63ce3Schristos }
226666e63ce3Schristos   NEXT (vpc);
226766e63ce3Schristos 
CASE(sem,INSN_MULWLO_A)226866e63ce3Schristos   CASE (sem, INSN_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
226966e63ce3Schristos {
227066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
227166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
227266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
227366e63ce3Schristos   int UNUSED written = 0;
227466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
227566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
227666e63ce3Schristos 
227766e63ce3Schristos   {
227866e63ce3Schristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))));
227966e63ce3Schristos     SET_H_ACCUMS (FLD (f_acc), opval);
2280ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
228166e63ce3Schristos   }
228266e63ce3Schristos 
228366e63ce3Schristos #undef FLD
228466e63ce3Schristos }
228566e63ce3Schristos   NEXT (vpc);
228666e63ce3Schristos 
CASE(sem,INSN_MV)228766e63ce3Schristos   CASE (sem, INSN_MV) : /* mv $dr,$sr */
228866e63ce3Schristos {
228966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
229066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
229166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
229266e63ce3Schristos   int UNUSED written = 0;
229366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
229466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
229566e63ce3Schristos 
229666e63ce3Schristos   {
229766e63ce3Schristos     SI opval = * FLD (i_sr);
229866e63ce3Schristos     * FLD (i_dr) = opval;
2299ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
230066e63ce3Schristos   }
230166e63ce3Schristos 
230266e63ce3Schristos #undef FLD
230366e63ce3Schristos }
230466e63ce3Schristos   NEXT (vpc);
230566e63ce3Schristos 
CASE(sem,INSN_MVFACHI_A)230666e63ce3Schristos   CASE (sem, INSN_MVFACHI_A) : /* mvfachi $dr,$accs */
230766e63ce3Schristos {
230866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
230966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
231066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
231166e63ce3Schristos   int UNUSED written = 0;
231266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
231366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
231466e63ce3Schristos 
231566e63ce3Schristos   {
231666e63ce3Schristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
231766e63ce3Schristos     * FLD (i_dr) = opval;
2318ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
231966e63ce3Schristos   }
232066e63ce3Schristos 
232166e63ce3Schristos #undef FLD
232266e63ce3Schristos }
232366e63ce3Schristos   NEXT (vpc);
232466e63ce3Schristos 
CASE(sem,INSN_MVFACLO_A)232566e63ce3Schristos   CASE (sem, INSN_MVFACLO_A) : /* mvfaclo $dr,$accs */
232666e63ce3Schristos {
232766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
232866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
232966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
233066e63ce3Schristos   int UNUSED written = 0;
233166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
233266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
233366e63ce3Schristos 
233466e63ce3Schristos   {
233566e63ce3Schristos     SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
233666e63ce3Schristos     * FLD (i_dr) = opval;
2337ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
233866e63ce3Schristos   }
233966e63ce3Schristos 
234066e63ce3Schristos #undef FLD
234166e63ce3Schristos }
234266e63ce3Schristos   NEXT (vpc);
234366e63ce3Schristos 
CASE(sem,INSN_MVFACMI_A)234466e63ce3Schristos   CASE (sem, INSN_MVFACMI_A) : /* mvfacmi $dr,$accs */
234566e63ce3Schristos {
234666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
234766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
234866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
234966e63ce3Schristos   int UNUSED written = 0;
235066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
235166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
235266e63ce3Schristos 
235366e63ce3Schristos   {
235466e63ce3Schristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
235566e63ce3Schristos     * FLD (i_dr) = opval;
2356ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
235766e63ce3Schristos   }
235866e63ce3Schristos 
235966e63ce3Schristos #undef FLD
236066e63ce3Schristos }
236166e63ce3Schristos   NEXT (vpc);
236266e63ce3Schristos 
CASE(sem,INSN_MVFC)236366e63ce3Schristos   CASE (sem, INSN_MVFC) : /* mvfc $dr,$scr */
236466e63ce3Schristos {
236566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
236666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
236766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
236866e63ce3Schristos   int UNUSED written = 0;
236966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
237066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
237166e63ce3Schristos 
237266e63ce3Schristos   {
237366e63ce3Schristos     SI opval = GET_H_CR (FLD (f_r2));
237466e63ce3Schristos     * FLD (i_dr) = opval;
2375ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
237666e63ce3Schristos   }
237766e63ce3Schristos 
237866e63ce3Schristos #undef FLD
237966e63ce3Schristos }
238066e63ce3Schristos   NEXT (vpc);
238166e63ce3Schristos 
CASE(sem,INSN_MVTACHI_A)238266e63ce3Schristos   CASE (sem, INSN_MVTACHI_A) : /* mvtachi $src1,$accs */
238366e63ce3Schristos {
238466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
238566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
238666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
238766e63ce3Schristos   int UNUSED written = 0;
238866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
238966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
239066e63ce3Schristos 
239166e63ce3Schristos   {
239266e63ce3Schristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
239366e63ce3Schristos     SET_H_ACCUMS (FLD (f_accs), opval);
2394ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
239566e63ce3Schristos   }
239666e63ce3Schristos 
239766e63ce3Schristos #undef FLD
239866e63ce3Schristos }
239966e63ce3Schristos   NEXT (vpc);
240066e63ce3Schristos 
CASE(sem,INSN_MVTACLO_A)240166e63ce3Schristos   CASE (sem, INSN_MVTACLO_A) : /* mvtaclo $src1,$accs */
240266e63ce3Schristos {
240366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
240466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
240566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
240666e63ce3Schristos   int UNUSED written = 0;
240766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
240866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
240966e63ce3Schristos 
241066e63ce3Schristos   {
241166e63ce3Schristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
241266e63ce3Schristos     SET_H_ACCUMS (FLD (f_accs), opval);
2413ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
241466e63ce3Schristos   }
241566e63ce3Schristos 
241666e63ce3Schristos #undef FLD
241766e63ce3Schristos }
241866e63ce3Schristos   NEXT (vpc);
241966e63ce3Schristos 
CASE(sem,INSN_MVTC)242066e63ce3Schristos   CASE (sem, INSN_MVTC) : /* mvtc $sr,$dcr */
242166e63ce3Schristos {
242266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
242366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
242466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
242566e63ce3Schristos   int UNUSED written = 0;
242666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
242766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
242866e63ce3Schristos 
242966e63ce3Schristos   {
243066e63ce3Schristos     USI opval = * FLD (i_sr);
243166e63ce3Schristos     SET_H_CR (FLD (f_r1), opval);
2432ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
243366e63ce3Schristos   }
243466e63ce3Schristos 
243566e63ce3Schristos #undef FLD
243666e63ce3Schristos }
243766e63ce3Schristos   NEXT (vpc);
243866e63ce3Schristos 
CASE(sem,INSN_NEG)243966e63ce3Schristos   CASE (sem, INSN_NEG) : /* neg $dr,$sr */
244066e63ce3Schristos {
244166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
244266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
244366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
244466e63ce3Schristos   int UNUSED written = 0;
244566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
244666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
244766e63ce3Schristos 
244866e63ce3Schristos   {
244966e63ce3Schristos     SI opval = NEGSI (* FLD (i_sr));
245066e63ce3Schristos     * FLD (i_dr) = opval;
2451ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
245266e63ce3Schristos   }
245366e63ce3Schristos 
245466e63ce3Schristos #undef FLD
245566e63ce3Schristos }
245666e63ce3Schristos   NEXT (vpc);
245766e63ce3Schristos 
CASE(sem,INSN_NOP)245866e63ce3Schristos   CASE (sem, INSN_NOP) : /* nop */
245966e63ce3Schristos {
246066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
246166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
246266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
246366e63ce3Schristos   int UNUSED written = 0;
246466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
246566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
246666e63ce3Schristos 
246766e63ce3Schristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
246866e63ce3Schristos 
246966e63ce3Schristos #undef FLD
247066e63ce3Schristos }
247166e63ce3Schristos   NEXT (vpc);
247266e63ce3Schristos 
CASE(sem,INSN_NOT)247366e63ce3Schristos   CASE (sem, INSN_NOT) : /* not $dr,$sr */
247466e63ce3Schristos {
247566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
247666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
247766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
247866e63ce3Schristos   int UNUSED written = 0;
247966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
248066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
248166e63ce3Schristos 
248266e63ce3Schristos   {
248366e63ce3Schristos     SI opval = INVSI (* FLD (i_sr));
248466e63ce3Schristos     * FLD (i_dr) = opval;
2485ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
248666e63ce3Schristos   }
248766e63ce3Schristos 
248866e63ce3Schristos #undef FLD
248966e63ce3Schristos }
249066e63ce3Schristos   NEXT (vpc);
249166e63ce3Schristos 
CASE(sem,INSN_RAC_DSI)249266e63ce3Schristos   CASE (sem, INSN_RAC_DSI) : /* rac $accd,$accs,$imm1 */
249366e63ce3Schristos {
249466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
249566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
249666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
249766e63ce3Schristos   int UNUSED written = 0;
249866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
249966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
250066e63ce3Schristos 
250166e63ce3Schristos {
250266e63ce3Schristos   DI tmp_tmp1;
250366e63ce3Schristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
250466e63ce3Schristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
250566e63ce3Schristos   {
250666e63ce3Schristos     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)));
250766e63ce3Schristos     SET_H_ACCUMS (FLD (f_accd), opval);
2508ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
250966e63ce3Schristos   }
251066e63ce3Schristos }
251166e63ce3Schristos 
251266e63ce3Schristos #undef FLD
251366e63ce3Schristos }
251466e63ce3Schristos   NEXT (vpc);
251566e63ce3Schristos 
CASE(sem,INSN_RACH_DSI)251666e63ce3Schristos   CASE (sem, INSN_RACH_DSI) : /* rach $accd,$accs,$imm1 */
251766e63ce3Schristos {
251866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
251966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
252066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
252166e63ce3Schristos   int UNUSED written = 0;
252266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
252366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
252466e63ce3Schristos 
252566e63ce3Schristos {
252666e63ce3Schristos   DI tmp_tmp1;
252766e63ce3Schristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
252866e63ce3Schristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
252966e63ce3Schristos   {
253066e63ce3Schristos     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)));
253166e63ce3Schristos     SET_H_ACCUMS (FLD (f_accd), opval);
2532ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
253366e63ce3Schristos   }
253466e63ce3Schristos }
253566e63ce3Schristos 
253666e63ce3Schristos #undef FLD
253766e63ce3Schristos }
253866e63ce3Schristos   NEXT (vpc);
253966e63ce3Schristos 
CASE(sem,INSN_RTE)254066e63ce3Schristos   CASE (sem, INSN_RTE) : /* rte */
254166e63ce3Schristos {
254266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
254366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
254466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
254566e63ce3Schristos   int UNUSED written = 0;
254666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
254766e63ce3Schristos   SEM_BRANCH_INIT
254866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
254966e63ce3Schristos 
255066e63ce3Schristos {
255166e63ce3Schristos   {
255266e63ce3Schristos     USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
255366e63ce3Schristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2554ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
255566e63ce3Schristos   }
255666e63ce3Schristos   {
255766e63ce3Schristos     USI opval = GET_H_CR (((UINT) 14));
255866e63ce3Schristos     SET_H_CR (((UINT) 6), opval);
2559ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
256066e63ce3Schristos   }
256166e63ce3Schristos   {
256266e63ce3Schristos     UQI opval = CPU (h_bpsw);
256366e63ce3Schristos     SET_H_PSW (opval);
2564ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
256566e63ce3Schristos   }
256666e63ce3Schristos   {
256766e63ce3Schristos     UQI opval = CPU (h_bbpsw);
256866e63ce3Schristos     CPU (h_bpsw) = opval;
2569ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
257066e63ce3Schristos   }
257166e63ce3Schristos }
257266e63ce3Schristos 
257366e63ce3Schristos   SEM_BRANCH_FINI (vpc);
257466e63ce3Schristos #undef FLD
257566e63ce3Schristos }
257666e63ce3Schristos   NEXT (vpc);
257766e63ce3Schristos 
CASE(sem,INSN_SETH)257866e63ce3Schristos   CASE (sem, INSN_SETH) : /* seth $dr,$hash$hi16 */
257966e63ce3Schristos {
258066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
258166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
258266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_seth.f
258366e63ce3Schristos   int UNUSED written = 0;
258466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
258566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
258666e63ce3Schristos 
258766e63ce3Schristos   {
258866e63ce3Schristos     SI opval = SLLSI (FLD (f_hi16), 16);
258966e63ce3Schristos     * FLD (i_dr) = opval;
2590ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
259166e63ce3Schristos   }
259266e63ce3Schristos 
259366e63ce3Schristos #undef FLD
259466e63ce3Schristos }
259566e63ce3Schristos   NEXT (vpc);
259666e63ce3Schristos 
CASE(sem,INSN_SLL)259766e63ce3Schristos   CASE (sem, INSN_SLL) : /* sll $dr,$sr */
259866e63ce3Schristos {
259966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
260066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
260166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
260266e63ce3Schristos   int UNUSED written = 0;
260366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
260466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
260566e63ce3Schristos 
260666e63ce3Schristos   {
260766e63ce3Schristos     SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
260866e63ce3Schristos     * FLD (i_dr) = opval;
2609ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
261066e63ce3Schristos   }
261166e63ce3Schristos 
261266e63ce3Schristos #undef FLD
261366e63ce3Schristos }
261466e63ce3Schristos   NEXT (vpc);
261566e63ce3Schristos 
CASE(sem,INSN_SLL3)261666e63ce3Schristos   CASE (sem, INSN_SLL3) : /* sll3 $dr,$sr,$simm16 */
261766e63ce3Schristos {
261866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
261966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
262066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
262166e63ce3Schristos   int UNUSED written = 0;
262266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
262366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
262466e63ce3Schristos 
262566e63ce3Schristos   {
262666e63ce3Schristos     SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
262766e63ce3Schristos     * FLD (i_dr) = opval;
2628ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
262966e63ce3Schristos   }
263066e63ce3Schristos 
263166e63ce3Schristos #undef FLD
263266e63ce3Schristos }
263366e63ce3Schristos   NEXT (vpc);
263466e63ce3Schristos 
CASE(sem,INSN_SLLI)263566e63ce3Schristos   CASE (sem, INSN_SLLI) : /* slli $dr,$uimm5 */
263666e63ce3Schristos {
263766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
263866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
263966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
264066e63ce3Schristos   int UNUSED written = 0;
264166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
264266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
264366e63ce3Schristos 
264466e63ce3Schristos   {
264566e63ce3Schristos     SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
264666e63ce3Schristos     * FLD (i_dr) = opval;
2647ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
264866e63ce3Schristos   }
264966e63ce3Schristos 
265066e63ce3Schristos #undef FLD
265166e63ce3Schristos }
265266e63ce3Schristos   NEXT (vpc);
265366e63ce3Schristos 
CASE(sem,INSN_SRA)265466e63ce3Schristos   CASE (sem, INSN_SRA) : /* sra $dr,$sr */
265566e63ce3Schristos {
265666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
265766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
265866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
265966e63ce3Schristos   int UNUSED written = 0;
266066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
266166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
266266e63ce3Schristos 
266366e63ce3Schristos   {
266466e63ce3Schristos     SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
266566e63ce3Schristos     * FLD (i_dr) = opval;
2666ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
266766e63ce3Schristos   }
266866e63ce3Schristos 
266966e63ce3Schristos #undef FLD
267066e63ce3Schristos }
267166e63ce3Schristos   NEXT (vpc);
267266e63ce3Schristos 
CASE(sem,INSN_SRA3)267366e63ce3Schristos   CASE (sem, INSN_SRA3) : /* sra3 $dr,$sr,$simm16 */
267466e63ce3Schristos {
267566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
267666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
267766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
267866e63ce3Schristos   int UNUSED written = 0;
267966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
268066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
268166e63ce3Schristos 
268266e63ce3Schristos   {
268366e63ce3Schristos     SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
268466e63ce3Schristos     * FLD (i_dr) = opval;
2685ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
268666e63ce3Schristos   }
268766e63ce3Schristos 
268866e63ce3Schristos #undef FLD
268966e63ce3Schristos }
269066e63ce3Schristos   NEXT (vpc);
269166e63ce3Schristos 
CASE(sem,INSN_SRAI)269266e63ce3Schristos   CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */
269366e63ce3Schristos {
269466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
269566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
269666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
269766e63ce3Schristos   int UNUSED written = 0;
269866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
269966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
270066e63ce3Schristos 
270166e63ce3Schristos   {
270266e63ce3Schristos     SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
270366e63ce3Schristos     * FLD (i_dr) = opval;
2704ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
270566e63ce3Schristos   }
270666e63ce3Schristos 
270766e63ce3Schristos #undef FLD
270866e63ce3Schristos }
270966e63ce3Schristos   NEXT (vpc);
271066e63ce3Schristos 
CASE(sem,INSN_SRL)271166e63ce3Schristos   CASE (sem, INSN_SRL) : /* srl $dr,$sr */
271266e63ce3Schristos {
271366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
271466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
271566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
271666e63ce3Schristos   int UNUSED written = 0;
271766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
271866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
271966e63ce3Schristos 
272066e63ce3Schristos   {
272166e63ce3Schristos     SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
272266e63ce3Schristos     * FLD (i_dr) = opval;
2723ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
272466e63ce3Schristos   }
272566e63ce3Schristos 
272666e63ce3Schristos #undef FLD
272766e63ce3Schristos }
272866e63ce3Schristos   NEXT (vpc);
272966e63ce3Schristos 
CASE(sem,INSN_SRL3)273066e63ce3Schristos   CASE (sem, INSN_SRL3) : /* srl3 $dr,$sr,$simm16 */
273166e63ce3Schristos {
273266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
273366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
273466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add3.f
273566e63ce3Schristos   int UNUSED written = 0;
273666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
273766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
273866e63ce3Schristos 
273966e63ce3Schristos   {
274066e63ce3Schristos     SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
274166e63ce3Schristos     * FLD (i_dr) = opval;
2742ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
274366e63ce3Schristos   }
274466e63ce3Schristos 
274566e63ce3Schristos #undef FLD
274666e63ce3Schristos }
274766e63ce3Schristos   NEXT (vpc);
274866e63ce3Schristos 
CASE(sem,INSN_SRLI)274966e63ce3Schristos   CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */
275066e63ce3Schristos {
275166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
275266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
275366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
275466e63ce3Schristos   int UNUSED written = 0;
275566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
275666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
275766e63ce3Schristos 
275866e63ce3Schristos   {
275966e63ce3Schristos     SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
276066e63ce3Schristos     * FLD (i_dr) = opval;
2761ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
276266e63ce3Schristos   }
276366e63ce3Schristos 
276466e63ce3Schristos #undef FLD
276566e63ce3Schristos }
276666e63ce3Schristos   NEXT (vpc);
276766e63ce3Schristos 
CASE(sem,INSN_ST)276866e63ce3Schristos   CASE (sem, INSN_ST) : /* st $src1,@$src2 */
276966e63ce3Schristos {
277066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
277166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
277266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
277366e63ce3Schristos   int UNUSED written = 0;
277466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
277566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
277666e63ce3Schristos 
277766e63ce3Schristos   {
277866e63ce3Schristos     SI opval = * FLD (i_src1);
277966e63ce3Schristos     SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2780ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
278166e63ce3Schristos   }
278266e63ce3Schristos 
278366e63ce3Schristos #undef FLD
278466e63ce3Schristos }
278566e63ce3Schristos   NEXT (vpc);
278666e63ce3Schristos 
CASE(sem,INSN_ST_D)278766e63ce3Schristos   CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */
278866e63ce3Schristos {
278966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
279066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
279166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
279266e63ce3Schristos   int UNUSED written = 0;
279366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
279466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
279566e63ce3Schristos 
279666e63ce3Schristos   {
279766e63ce3Schristos     SI opval = * FLD (i_src1);
279866e63ce3Schristos     SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2799ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
280066e63ce3Schristos   }
280166e63ce3Schristos 
280266e63ce3Schristos #undef FLD
280366e63ce3Schristos }
280466e63ce3Schristos   NEXT (vpc);
280566e63ce3Schristos 
CASE(sem,INSN_STB)280666e63ce3Schristos   CASE (sem, INSN_STB) : /* stb $src1,@$src2 */
280766e63ce3Schristos {
280866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
280966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
281066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
281166e63ce3Schristos   int UNUSED written = 0;
281266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
281366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
281466e63ce3Schristos 
281566e63ce3Schristos   {
281666e63ce3Schristos     QI opval = * FLD (i_src1);
281766e63ce3Schristos     SETMEMQI (current_cpu, pc, * FLD (i_src2), opval);
2818ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
281966e63ce3Schristos   }
282066e63ce3Schristos 
282166e63ce3Schristos #undef FLD
282266e63ce3Schristos }
282366e63ce3Schristos   NEXT (vpc);
282466e63ce3Schristos 
CASE(sem,INSN_STB_D)282566e63ce3Schristos   CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */
282666e63ce3Schristos {
282766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
282866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
282966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
283066e63ce3Schristos   int UNUSED written = 0;
283166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
283266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
283366e63ce3Schristos 
283466e63ce3Schristos   {
283566e63ce3Schristos     QI opval = * FLD (i_src1);
283666e63ce3Schristos     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2837ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
283866e63ce3Schristos   }
283966e63ce3Schristos 
284066e63ce3Schristos #undef FLD
284166e63ce3Schristos }
284266e63ce3Schristos   NEXT (vpc);
284366e63ce3Schristos 
CASE(sem,INSN_STH)284466e63ce3Schristos   CASE (sem, INSN_STH) : /* sth $src1,@$src2 */
284566e63ce3Schristos {
284666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
284766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
284866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
284966e63ce3Schristos   int UNUSED written = 0;
285066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
285166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
285266e63ce3Schristos 
285366e63ce3Schristos   {
285466e63ce3Schristos     HI opval = * FLD (i_src1);
285566e63ce3Schristos     SETMEMHI (current_cpu, pc, * FLD (i_src2), opval);
2856ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
285766e63ce3Schristos   }
285866e63ce3Schristos 
285966e63ce3Schristos #undef FLD
286066e63ce3Schristos }
286166e63ce3Schristos   NEXT (vpc);
286266e63ce3Schristos 
CASE(sem,INSN_STH_D)286366e63ce3Schristos   CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */
286466e63ce3Schristos {
286566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
286666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
286766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_d.f
286866e63ce3Schristos   int UNUSED written = 0;
286966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
287066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
287166e63ce3Schristos 
287266e63ce3Schristos   {
287366e63ce3Schristos     HI opval = * FLD (i_src1);
287466e63ce3Schristos     SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2875ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
287666e63ce3Schristos   }
287766e63ce3Schristos 
287866e63ce3Schristos #undef FLD
287966e63ce3Schristos }
288066e63ce3Schristos   NEXT (vpc);
288166e63ce3Schristos 
CASE(sem,INSN_ST_PLUS)288266e63ce3Schristos   CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */
288366e63ce3Schristos {
288466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
288566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
288666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
288766e63ce3Schristos   int UNUSED written = 0;
288866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
288966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
289066e63ce3Schristos 
289166e63ce3Schristos {
289266e63ce3Schristos   SI tmp_new_src2;
289366e63ce3Schristos   tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
289466e63ce3Schristos   {
289566e63ce3Schristos     SI opval = * FLD (i_src1);
289666e63ce3Schristos     SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2897ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
289866e63ce3Schristos   }
289966e63ce3Schristos   {
290066e63ce3Schristos     SI opval = tmp_new_src2;
290166e63ce3Schristos     * FLD (i_src2) = opval;
2902ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
290366e63ce3Schristos   }
290466e63ce3Schristos }
290566e63ce3Schristos 
290666e63ce3Schristos #undef FLD
290766e63ce3Schristos }
290866e63ce3Schristos   NEXT (vpc);
290966e63ce3Schristos 
CASE(sem,INSN_STH_PLUS)291066e63ce3Schristos   CASE (sem, INSN_STH_PLUS) : /* sth $src1,@$src2+ */
291166e63ce3Schristos {
291266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
291366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
291466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
291566e63ce3Schristos   int UNUSED written = 0;
291666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
291766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
291866e63ce3Schristos 
291966e63ce3Schristos {
292066e63ce3Schristos   SI tmp_new_src2;
292166e63ce3Schristos   tmp_new_src2 = * FLD (i_src2);
292266e63ce3Schristos   {
292366e63ce3Schristos     HI opval = * FLD (i_src1);
292466e63ce3Schristos     SETMEMHI (current_cpu, pc, tmp_new_src2, opval);
2925ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
292666e63ce3Schristos   }
292766e63ce3Schristos   {
292866e63ce3Schristos     SI opval = ADDSI (tmp_new_src2, 2);
292966e63ce3Schristos     * FLD (i_src2) = opval;
2930ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
293166e63ce3Schristos   }
293266e63ce3Schristos }
293366e63ce3Schristos 
293466e63ce3Schristos #undef FLD
293566e63ce3Schristos }
293666e63ce3Schristos   NEXT (vpc);
293766e63ce3Schristos 
CASE(sem,INSN_STB_PLUS)293866e63ce3Schristos   CASE (sem, INSN_STB_PLUS) : /* stb $src1,@$src2+ */
293966e63ce3Schristos {
294066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
294166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
294266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
294366e63ce3Schristos   int UNUSED written = 0;
294466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
294566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
294666e63ce3Schristos 
294766e63ce3Schristos {
294866e63ce3Schristos   SI tmp_new_src2;
294966e63ce3Schristos   tmp_new_src2 = * FLD (i_src2);
295066e63ce3Schristos   {
295166e63ce3Schristos     QI opval = * FLD (i_src1);
295266e63ce3Schristos     SETMEMQI (current_cpu, pc, tmp_new_src2, opval);
2953ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
295466e63ce3Schristos   }
295566e63ce3Schristos   {
295666e63ce3Schristos     SI opval = ADDSI (tmp_new_src2, 1);
295766e63ce3Schristos     * FLD (i_src2) = opval;
2958ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
295966e63ce3Schristos   }
296066e63ce3Schristos }
296166e63ce3Schristos 
296266e63ce3Schristos #undef FLD
296366e63ce3Schristos }
296466e63ce3Schristos   NEXT (vpc);
296566e63ce3Schristos 
CASE(sem,INSN_ST_MINUS)296666e63ce3Schristos   CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */
296766e63ce3Schristos {
296866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
296966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
297066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
297166e63ce3Schristos   int UNUSED written = 0;
297266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
297366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
297466e63ce3Schristos 
297566e63ce3Schristos {
297666e63ce3Schristos   SI tmp_new_src2;
297766e63ce3Schristos   tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
297866e63ce3Schristos   {
297966e63ce3Schristos     SI opval = * FLD (i_src1);
298066e63ce3Schristos     SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2981ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
298266e63ce3Schristos   }
298366e63ce3Schristos   {
298466e63ce3Schristos     SI opval = tmp_new_src2;
298566e63ce3Schristos     * FLD (i_src2) = opval;
2986ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
298766e63ce3Schristos   }
298866e63ce3Schristos }
298966e63ce3Schristos 
299066e63ce3Schristos #undef FLD
299166e63ce3Schristos }
299266e63ce3Schristos   NEXT (vpc);
299366e63ce3Schristos 
CASE(sem,INSN_SUB)299466e63ce3Schristos   CASE (sem, INSN_SUB) : /* sub $dr,$sr */
299566e63ce3Schristos {
299666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
299766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
299866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
299966e63ce3Schristos   int UNUSED written = 0;
300066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
300166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
300266e63ce3Schristos 
300366e63ce3Schristos   {
300466e63ce3Schristos     SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
300566e63ce3Schristos     * FLD (i_dr) = opval;
3006ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
300766e63ce3Schristos   }
300866e63ce3Schristos 
300966e63ce3Schristos #undef FLD
301066e63ce3Schristos }
301166e63ce3Schristos   NEXT (vpc);
301266e63ce3Schristos 
CASE(sem,INSN_SUBV)301366e63ce3Schristos   CASE (sem, INSN_SUBV) : /* subv $dr,$sr */
301466e63ce3Schristos {
301566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
301666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
301766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
301866e63ce3Schristos   int UNUSED written = 0;
301966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
302066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
302166e63ce3Schristos 
302266e63ce3Schristos {
302366e63ce3Schristos   SI temp0;BI temp1;
302466e63ce3Schristos   temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
302566e63ce3Schristos   temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
302666e63ce3Schristos   {
302766e63ce3Schristos     SI opval = temp0;
302866e63ce3Schristos     * FLD (i_dr) = opval;
3029ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
303066e63ce3Schristos   }
303166e63ce3Schristos   {
303266e63ce3Schristos     BI opval = temp1;
303366e63ce3Schristos     CPU (h_cond) = opval;
3034ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
303566e63ce3Schristos   }
303666e63ce3Schristos }
303766e63ce3Schristos 
303866e63ce3Schristos #undef FLD
303966e63ce3Schristos }
304066e63ce3Schristos   NEXT (vpc);
304166e63ce3Schristos 
CASE(sem,INSN_SUBX)304266e63ce3Schristos   CASE (sem, INSN_SUBX) : /* subx $dr,$sr */
304366e63ce3Schristos {
304466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
304566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
304666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
304766e63ce3Schristos   int UNUSED written = 0;
304866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
304966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
305066e63ce3Schristos 
305166e63ce3Schristos {
305266e63ce3Schristos   SI temp0;BI temp1;
305366e63ce3Schristos   temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
305466e63ce3Schristos   temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
305566e63ce3Schristos   {
305666e63ce3Schristos     SI opval = temp0;
305766e63ce3Schristos     * FLD (i_dr) = opval;
3058ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
305966e63ce3Schristos   }
306066e63ce3Schristos   {
306166e63ce3Schristos     BI opval = temp1;
306266e63ce3Schristos     CPU (h_cond) = opval;
3063ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
306466e63ce3Schristos   }
306566e63ce3Schristos }
306666e63ce3Schristos 
306766e63ce3Schristos #undef FLD
306866e63ce3Schristos }
306966e63ce3Schristos   NEXT (vpc);
307066e63ce3Schristos 
CASE(sem,INSN_TRAP)307166e63ce3Schristos   CASE (sem, INSN_TRAP) : /* trap $uimm4 */
307266e63ce3Schristos {
307366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
307466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
307566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_trap.f
307666e63ce3Schristos   int UNUSED written = 0;
307766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
307866e63ce3Schristos   SEM_BRANCH_INIT
307966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
308066e63ce3Schristos 
308166e63ce3Schristos {
308266e63ce3Schristos   {
308366e63ce3Schristos     USI opval = GET_H_CR (((UINT) 6));
308466e63ce3Schristos     SET_H_CR (((UINT) 14), opval);
3085ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
308666e63ce3Schristos   }
308766e63ce3Schristos   {
308866e63ce3Schristos     USI opval = ADDSI (pc, 4);
308966e63ce3Schristos     SET_H_CR (((UINT) 6), opval);
3090ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
309166e63ce3Schristos   }
309266e63ce3Schristos   {
309366e63ce3Schristos     UQI opval = CPU (h_bpsw);
309466e63ce3Schristos     CPU (h_bbpsw) = opval;
3095ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
309666e63ce3Schristos   }
309766e63ce3Schristos   {
309866e63ce3Schristos     UQI opval = GET_H_PSW ();
309966e63ce3Schristos     CPU (h_bpsw) = opval;
3100ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
310166e63ce3Schristos   }
310266e63ce3Schristos   {
310366e63ce3Schristos     UQI opval = ANDQI (GET_H_PSW (), 128);
310466e63ce3Schristos     SET_H_PSW (opval);
3105ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
310666e63ce3Schristos   }
310766e63ce3Schristos   {
310866e63ce3Schristos     SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
310966e63ce3Schristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3110ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
311166e63ce3Schristos   }
311266e63ce3Schristos }
311366e63ce3Schristos 
311466e63ce3Schristos   SEM_BRANCH_FINI (vpc);
311566e63ce3Schristos #undef FLD
311666e63ce3Schristos }
311766e63ce3Schristos   NEXT (vpc);
311866e63ce3Schristos 
CASE(sem,INSN_UNLOCK)311966e63ce3Schristos   CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */
312066e63ce3Schristos {
312166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
312266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
312366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
312466e63ce3Schristos   int UNUSED written = 0;
312566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
312666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
312766e63ce3Schristos 
312866e63ce3Schristos {
312966e63ce3Schristos if (CPU (h_lock)) {
313066e63ce3Schristos   {
313166e63ce3Schristos     SI opval = * FLD (i_src1);
313266e63ce3Schristos     SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
313366e63ce3Schristos     written |= (1 << 4);
3134ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
313566e63ce3Schristos   }
313666e63ce3Schristos }
313766e63ce3Schristos   {
313866e63ce3Schristos     BI opval = 0;
313966e63ce3Schristos     CPU (h_lock) = opval;
3140ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
314166e63ce3Schristos   }
314266e63ce3Schristos }
314366e63ce3Schristos 
314466e63ce3Schristos   abuf->written = written;
314566e63ce3Schristos #undef FLD
314666e63ce3Schristos }
314766e63ce3Schristos   NEXT (vpc);
314866e63ce3Schristos 
CASE(sem,INSN_SATB)314966e63ce3Schristos   CASE (sem, INSN_SATB) : /* satb $dr,$sr */
315066e63ce3Schristos {
315166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
315266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
315366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
315466e63ce3Schristos   int UNUSED written = 0;
315566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
315666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
315766e63ce3Schristos 
315866e63ce3Schristos   {
315966e63ce3Schristos     SI opval = (GESI (* FLD (i_sr), 127)) ? (127) : (LESI (* FLD (i_sr), -128)) ? (-128) : (* FLD (i_sr));
316066e63ce3Schristos     * FLD (i_dr) = opval;
3161ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
316266e63ce3Schristos   }
316366e63ce3Schristos 
316466e63ce3Schristos #undef FLD
316566e63ce3Schristos }
316666e63ce3Schristos   NEXT (vpc);
316766e63ce3Schristos 
CASE(sem,INSN_SATH)316866e63ce3Schristos   CASE (sem, INSN_SATH) : /* sath $dr,$sr */
316966e63ce3Schristos {
317066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
317166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
317266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
317366e63ce3Schristos   int UNUSED written = 0;
317466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
317566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
317666e63ce3Schristos 
317766e63ce3Schristos   {
317866e63ce3Schristos     SI opval = (GESI (* FLD (i_sr), 32767)) ? (32767) : (LESI (* FLD (i_sr), -32768)) ? (-32768) : (* FLD (i_sr));
317966e63ce3Schristos     * FLD (i_dr) = opval;
3180ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
318166e63ce3Schristos   }
318266e63ce3Schristos 
318366e63ce3Schristos #undef FLD
318466e63ce3Schristos }
318566e63ce3Schristos   NEXT (vpc);
318666e63ce3Schristos 
CASE(sem,INSN_SAT)318766e63ce3Schristos   CASE (sem, INSN_SAT) : /* sat $dr,$sr */
318866e63ce3Schristos {
318966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
319066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
319166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
319266e63ce3Schristos   int UNUSED written = 0;
319366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
319466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
319566e63ce3Schristos 
319666e63ce3Schristos   {
319766e63ce3Schristos     SI opval = ((CPU (h_cond)) ? (((LTSI (* FLD (i_sr), 0)) ? (2147483647) : (0x80000000))) : (* FLD (i_sr)));
319866e63ce3Schristos     * FLD (i_dr) = opval;
3199ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
320066e63ce3Schristos   }
320166e63ce3Schristos 
320266e63ce3Schristos #undef FLD
320366e63ce3Schristos }
320466e63ce3Schristos   NEXT (vpc);
320566e63ce3Schristos 
CASE(sem,INSN_PCMPBZ)320666e63ce3Schristos   CASE (sem, INSN_PCMPBZ) : /* pcmpbz $src2 */
320766e63ce3Schristos {
320866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
320966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
321066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
321166e63ce3Schristos   int UNUSED written = 0;
321266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
321366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
321466e63ce3Schristos 
321566e63ce3Schristos   {
321666e63ce3Schristos     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);
321766e63ce3Schristos     CPU (h_cond) = opval;
3218ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
321966e63ce3Schristos   }
322066e63ce3Schristos 
322166e63ce3Schristos #undef FLD
322266e63ce3Schristos }
322366e63ce3Schristos   NEXT (vpc);
322466e63ce3Schristos 
CASE(sem,INSN_SADD)322566e63ce3Schristos   CASE (sem, INSN_SADD) : /* sadd */
322666e63ce3Schristos {
322766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
322866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
322966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
323066e63ce3Schristos   int UNUSED written = 0;
323166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
323266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
323366e63ce3Schristos 
323466e63ce3Schristos   {
323566e63ce3Schristos     DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0)));
323666e63ce3Schristos     SET_H_ACCUMS (((UINT) 0), opval);
3237ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
323866e63ce3Schristos   }
323966e63ce3Schristos 
324066e63ce3Schristos #undef FLD
324166e63ce3Schristos }
324266e63ce3Schristos   NEXT (vpc);
324366e63ce3Schristos 
CASE(sem,INSN_MACWU1)324466e63ce3Schristos   CASE (sem, INSN_MACWU1) : /* macwu1 $src1,$src2 */
324566e63ce3Schristos {
324666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
324766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
324866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
324966e63ce3Schristos   int UNUSED written = 0;
325066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
325166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
325266e63ce3Schristos 
325366e63ce3Schristos   {
325466e63ce3Schristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8);
325566e63ce3Schristos     SET_H_ACCUMS (((UINT) 1), opval);
3256ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
325766e63ce3Schristos   }
325866e63ce3Schristos 
325966e63ce3Schristos #undef FLD
326066e63ce3Schristos }
326166e63ce3Schristos   NEXT (vpc);
326266e63ce3Schristos 
CASE(sem,INSN_MSBLO)326366e63ce3Schristos   CASE (sem, INSN_MSBLO) : /* msblo $src1,$src2 */
326466e63ce3Schristos {
326566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
326666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
326766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
326866e63ce3Schristos   int UNUSED written = 0;
326966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
327066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
327166e63ce3Schristos 
327266e63ce3Schristos   {
327366e63ce3Schristos     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);
327466e63ce3Schristos     SET_H_ACCUM (opval);
3275ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
327666e63ce3Schristos   }
327766e63ce3Schristos 
327866e63ce3Schristos #undef FLD
327966e63ce3Schristos }
328066e63ce3Schristos   NEXT (vpc);
328166e63ce3Schristos 
CASE(sem,INSN_MULWU1)328266e63ce3Schristos   CASE (sem, INSN_MULWU1) : /* mulwu1 $src1,$src2 */
328366e63ce3Schristos {
328466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
328566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
328666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
328766e63ce3Schristos   int UNUSED written = 0;
328866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
328966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
329066e63ce3Schristos 
329166e63ce3Schristos   {
329266e63ce3Schristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16);
329366e63ce3Schristos     SET_H_ACCUMS (((UINT) 1), opval);
3294ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
329566e63ce3Schristos   }
329666e63ce3Schristos 
329766e63ce3Schristos #undef FLD
329866e63ce3Schristos }
329966e63ce3Schristos   NEXT (vpc);
330066e63ce3Schristos 
CASE(sem,INSN_MACLH1)330166e63ce3Schristos   CASE (sem, INSN_MACLH1) : /* maclh1 $src1,$src2 */
330266e63ce3Schristos {
330366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
330466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
330566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
330666e63ce3Schristos   int UNUSED written = 0;
330766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
330866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
330966e63ce3Schristos 
331066e63ce3Schristos   {
331166e63ce3Schristos     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);
331266e63ce3Schristos     SET_H_ACCUMS (((UINT) 1), opval);
3313ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
331466e63ce3Schristos   }
331566e63ce3Schristos 
331666e63ce3Schristos #undef FLD
331766e63ce3Schristos }
331866e63ce3Schristos   NEXT (vpc);
331966e63ce3Schristos 
CASE(sem,INSN_SC)332066e63ce3Schristos   CASE (sem, INSN_SC) : /* sc */
332166e63ce3Schristos {
332266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
332366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
332466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
332566e63ce3Schristos   int UNUSED written = 0;
332666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
332766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
332866e63ce3Schristos 
332966e63ce3Schristos if (ZEXTBISI (CPU (h_cond)))
333066e63ce3Schristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
333166e63ce3Schristos 
333266e63ce3Schristos #undef FLD
333366e63ce3Schristos }
333466e63ce3Schristos   NEXT (vpc);
333566e63ce3Schristos 
CASE(sem,INSN_SNC)333666e63ce3Schristos   CASE (sem, INSN_SNC) : /* snc */
333766e63ce3Schristos {
333866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
333966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
334066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
334166e63ce3Schristos   int UNUSED written = 0;
334266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
334366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
334466e63ce3Schristos 
334566e63ce3Schristos if (ZEXTBISI (NOTBI (CPU (h_cond))))
334666e63ce3Schristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
334766e63ce3Schristos 
334866e63ce3Schristos #undef FLD
334966e63ce3Schristos }
335066e63ce3Schristos   NEXT (vpc);
335166e63ce3Schristos 
CASE(sem,INSN_CLRPSW)335266e63ce3Schristos   CASE (sem, INSN_CLRPSW) : /* clrpsw $uimm8 */
335366e63ce3Schristos {
335466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
335566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
335666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
335766e63ce3Schristos   int UNUSED written = 0;
335866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
335966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
336066e63ce3Schristos 
336166e63ce3Schristos   {
336266e63ce3Schristos     USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280));
336366e63ce3Schristos     SET_H_CR (((UINT) 0), opval);
3364ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
336566e63ce3Schristos   }
336666e63ce3Schristos 
336766e63ce3Schristos #undef FLD
336866e63ce3Schristos }
336966e63ce3Schristos   NEXT (vpc);
337066e63ce3Schristos 
CASE(sem,INSN_SETPSW)337166e63ce3Schristos   CASE (sem, INSN_SETPSW) : /* setpsw $uimm8 */
337266e63ce3Schristos {
337366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
337466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
337566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
337666e63ce3Schristos   int UNUSED written = 0;
337766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
337866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
337966e63ce3Schristos 
338066e63ce3Schristos   {
338166e63ce3Schristos     USI opval = FLD (f_uimm8);
338266e63ce3Schristos     SET_H_CR (((UINT) 0), opval);
3383ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
338466e63ce3Schristos   }
338566e63ce3Schristos 
338666e63ce3Schristos #undef FLD
338766e63ce3Schristos }
338866e63ce3Schristos   NEXT (vpc);
338966e63ce3Schristos 
CASE(sem,INSN_BSET)339066e63ce3Schristos   CASE (sem, INSN_BSET) : /* bset $uimm3,@($slo16,$sr) */
339166e63ce3Schristos {
339266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
339366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
339466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bset.f
339566e63ce3Schristos   int UNUSED written = 0;
339666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
339766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
339866e63ce3Schristos 
339966e63ce3Schristos   {
340066e63ce3Schristos     QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3))));
340166e63ce3Schristos     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
3402ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
340366e63ce3Schristos   }
340466e63ce3Schristos 
340566e63ce3Schristos #undef FLD
340666e63ce3Schristos }
340766e63ce3Schristos   NEXT (vpc);
340866e63ce3Schristos 
CASE(sem,INSN_BCLR)340966e63ce3Schristos   CASE (sem, INSN_BCLR) : /* bclr $uimm3,@($slo16,$sr) */
341066e63ce3Schristos {
341166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
341266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
341366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bset.f
341466e63ce3Schristos   int UNUSED written = 0;
341566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
341666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
341766e63ce3Schristos 
341866e63ce3Schristos   {
341966e63ce3Schristos     QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3)))));
342066e63ce3Schristos     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
3421ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
342266e63ce3Schristos   }
342366e63ce3Schristos 
342466e63ce3Schristos #undef FLD
342566e63ce3Schristos }
342666e63ce3Schristos   NEXT (vpc);
342766e63ce3Schristos 
CASE(sem,INSN_BTST)342866e63ce3Schristos   CASE (sem, INSN_BTST) : /* btst $uimm3,$sr */
342966e63ce3Schristos {
343066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
343166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
343266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bset.f
343366e63ce3Schristos   int UNUSED written = 0;
343466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
343566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
343666e63ce3Schristos 
343766e63ce3Schristos   {
343866e63ce3Schristos     BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
343966e63ce3Schristos     CPU (h_cond) = opval;
3440ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
344166e63ce3Schristos   }
344266e63ce3Schristos 
344366e63ce3Schristos #undef FLD
344466e63ce3Schristos }
344566e63ce3Schristos   NEXT (vpc);
344666e63ce3Schristos 
CASE(sem,INSN_PAR_ADD)344766e63ce3Schristos   CASE (sem, INSN_PAR_ADD) : /* add $dr,$sr */
344866e63ce3Schristos {
344966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
345066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
345166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
345266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
345366e63ce3Schristos   int UNUSED written = 0;
345466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
345566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
345666e63ce3Schristos 
345766e63ce3Schristos   {
345866e63ce3Schristos     SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
345966e63ce3Schristos     OPRND (dr) = opval;
3460ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
346166e63ce3Schristos   }
346266e63ce3Schristos 
346366e63ce3Schristos #undef OPRND
346466e63ce3Schristos #undef FLD
346566e63ce3Schristos }
346666e63ce3Schristos   NEXT (vpc);
346766e63ce3Schristos 
CASE(sem,INSN_WRITE_ADD)346866e63ce3Schristos CASE (sem, INSN_WRITE_ADD) : /* add $dr,$sr */
346966e63ce3Schristos   {
347066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
347166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
347266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
347366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
347466e63ce3Schristos     int UNUSED written = abuf->written;
347566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
347666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
347766e63ce3Schristos 
347866e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
347966e63ce3Schristos 
348066e63ce3Schristos #undef OPRND
348166e63ce3Schristos #undef FLD
348266e63ce3Schristos   }
348366e63ce3Schristos   NEXT (vpc);
348466e63ce3Schristos 
CASE(sem,INSN_PAR_AND)348566e63ce3Schristos   CASE (sem, INSN_PAR_AND) : /* and $dr,$sr */
348666e63ce3Schristos {
348766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
348866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
348966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
349066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
349166e63ce3Schristos   int UNUSED written = 0;
349266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
349366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
349466e63ce3Schristos 
349566e63ce3Schristos   {
349666e63ce3Schristos     SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
349766e63ce3Schristos     OPRND (dr) = opval;
3498ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
349966e63ce3Schristos   }
350066e63ce3Schristos 
350166e63ce3Schristos #undef OPRND
350266e63ce3Schristos #undef FLD
350366e63ce3Schristos }
350466e63ce3Schristos   NEXT (vpc);
350566e63ce3Schristos 
CASE(sem,INSN_WRITE_AND)350666e63ce3Schristos CASE (sem, INSN_WRITE_AND) : /* and $dr,$sr */
350766e63ce3Schristos   {
350866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
350966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
351066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
351166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
351266e63ce3Schristos     int UNUSED written = abuf->written;
351366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
351466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
351566e63ce3Schristos 
351666e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
351766e63ce3Schristos 
351866e63ce3Schristos #undef OPRND
351966e63ce3Schristos #undef FLD
352066e63ce3Schristos   }
352166e63ce3Schristos   NEXT (vpc);
352266e63ce3Schristos 
CASE(sem,INSN_PAR_OR)352366e63ce3Schristos   CASE (sem, INSN_PAR_OR) : /* or $dr,$sr */
352466e63ce3Schristos {
352566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
352666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
352766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
352866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
352966e63ce3Schristos   int UNUSED written = 0;
353066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
353166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
353266e63ce3Schristos 
353366e63ce3Schristos   {
353466e63ce3Schristos     SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
353566e63ce3Schristos     OPRND (dr) = opval;
3536ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
353766e63ce3Schristos   }
353866e63ce3Schristos 
353966e63ce3Schristos #undef OPRND
354066e63ce3Schristos #undef FLD
354166e63ce3Schristos }
354266e63ce3Schristos   NEXT (vpc);
354366e63ce3Schristos 
CASE(sem,INSN_WRITE_OR)354466e63ce3Schristos CASE (sem, INSN_WRITE_OR) : /* or $dr,$sr */
354566e63ce3Schristos   {
354666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
354766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
354866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
354966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
355066e63ce3Schristos     int UNUSED written = abuf->written;
355166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
355266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
355366e63ce3Schristos 
355466e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
355566e63ce3Schristos 
355666e63ce3Schristos #undef OPRND
355766e63ce3Schristos #undef FLD
355866e63ce3Schristos   }
355966e63ce3Schristos   NEXT (vpc);
356066e63ce3Schristos 
CASE(sem,INSN_PAR_XOR)356166e63ce3Schristos   CASE (sem, INSN_PAR_XOR) : /* xor $dr,$sr */
356266e63ce3Schristos {
356366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
356466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
356566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
356666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
356766e63ce3Schristos   int UNUSED written = 0;
356866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
356966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
357066e63ce3Schristos 
357166e63ce3Schristos   {
357266e63ce3Schristos     SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
357366e63ce3Schristos     OPRND (dr) = opval;
3574ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
357566e63ce3Schristos   }
357666e63ce3Schristos 
357766e63ce3Schristos #undef OPRND
357866e63ce3Schristos #undef FLD
357966e63ce3Schristos }
358066e63ce3Schristos   NEXT (vpc);
358166e63ce3Schristos 
CASE(sem,INSN_WRITE_XOR)358266e63ce3Schristos CASE (sem, INSN_WRITE_XOR) : /* xor $dr,$sr */
358366e63ce3Schristos   {
358466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
358566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
358666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
358766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
358866e63ce3Schristos     int UNUSED written = abuf->written;
358966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
359066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
359166e63ce3Schristos 
359266e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
359366e63ce3Schristos 
359466e63ce3Schristos #undef OPRND
359566e63ce3Schristos #undef FLD
359666e63ce3Schristos   }
359766e63ce3Schristos   NEXT (vpc);
359866e63ce3Schristos 
CASE(sem,INSN_PAR_ADDI)359966e63ce3Schristos   CASE (sem, INSN_PAR_ADDI) : /* addi $dr,$simm8 */
360066e63ce3Schristos {
360166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
360266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
360366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_addi.f
360466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addi.f
360566e63ce3Schristos   int UNUSED written = 0;
360666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
360766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
360866e63ce3Schristos 
360966e63ce3Schristos   {
361066e63ce3Schristos     SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
361166e63ce3Schristos     OPRND (dr) = opval;
3612ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
361366e63ce3Schristos   }
361466e63ce3Schristos 
361566e63ce3Schristos #undef OPRND
361666e63ce3Schristos #undef FLD
361766e63ce3Schristos }
361866e63ce3Schristos   NEXT (vpc);
361966e63ce3Schristos 
CASE(sem,INSN_WRITE_ADDI)362066e63ce3Schristos CASE (sem, INSN_WRITE_ADDI) : /* addi $dr,$simm8 */
362166e63ce3Schristos   {
362266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
362366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
362466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_addi.f
362566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addi.f
362666e63ce3Schristos     int UNUSED written = abuf->written;
362766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
362866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
362966e63ce3Schristos 
363066e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
363166e63ce3Schristos 
363266e63ce3Schristos #undef OPRND
363366e63ce3Schristos #undef FLD
363466e63ce3Schristos   }
363566e63ce3Schristos   NEXT (vpc);
363666e63ce3Schristos 
CASE(sem,INSN_PAR_ADDV)363766e63ce3Schristos   CASE (sem, INSN_PAR_ADDV) : /* addv $dr,$sr */
363866e63ce3Schristos {
363966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
364066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
364166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
364266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addv.f
364366e63ce3Schristos   int UNUSED written = 0;
364466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
364566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
364666e63ce3Schristos 
364766e63ce3Schristos {
364866e63ce3Schristos   SI temp0;BI temp1;
364966e63ce3Schristos   temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
365066e63ce3Schristos   temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
365166e63ce3Schristos   {
365266e63ce3Schristos     SI opval = temp0;
365366e63ce3Schristos     OPRND (dr) = opval;
3654ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
365566e63ce3Schristos   }
365666e63ce3Schristos   {
365766e63ce3Schristos     BI opval = temp1;
365866e63ce3Schristos     OPRND (condbit) = opval;
3659ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
366066e63ce3Schristos   }
366166e63ce3Schristos }
366266e63ce3Schristos 
366366e63ce3Schristos #undef OPRND
366466e63ce3Schristos #undef FLD
366566e63ce3Schristos }
366666e63ce3Schristos   NEXT (vpc);
366766e63ce3Schristos 
CASE(sem,INSN_WRITE_ADDV)366866e63ce3Schristos CASE (sem, INSN_WRITE_ADDV) : /* addv $dr,$sr */
366966e63ce3Schristos   {
367066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
367166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
367266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
367366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addv.f
367466e63ce3Schristos     int UNUSED written = abuf->written;
367566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
367666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
367766e63ce3Schristos 
367866e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
367966e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
368066e63ce3Schristos 
368166e63ce3Schristos #undef OPRND
368266e63ce3Schristos #undef FLD
368366e63ce3Schristos   }
368466e63ce3Schristos   NEXT (vpc);
368566e63ce3Schristos 
CASE(sem,INSN_PAR_ADDX)368666e63ce3Schristos   CASE (sem, INSN_PAR_ADDX) : /* addx $dr,$sr */
368766e63ce3Schristos {
368866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
368966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
369066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
369166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addx.f
369266e63ce3Schristos   int UNUSED written = 0;
369366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
369466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
369566e63ce3Schristos 
369666e63ce3Schristos {
369766e63ce3Schristos   SI temp0;BI temp1;
369866e63ce3Schristos   temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
369966e63ce3Schristos   temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
370066e63ce3Schristos   {
370166e63ce3Schristos     SI opval = temp0;
370266e63ce3Schristos     OPRND (dr) = opval;
3703ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
370466e63ce3Schristos   }
370566e63ce3Schristos   {
370666e63ce3Schristos     BI opval = temp1;
370766e63ce3Schristos     OPRND (condbit) = opval;
3708ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
370966e63ce3Schristos   }
371066e63ce3Schristos }
371166e63ce3Schristos 
371266e63ce3Schristos #undef OPRND
371366e63ce3Schristos #undef FLD
371466e63ce3Schristos }
371566e63ce3Schristos   NEXT (vpc);
371666e63ce3Schristos 
CASE(sem,INSN_WRITE_ADDX)371766e63ce3Schristos CASE (sem, INSN_WRITE_ADDX) : /* addx $dr,$sr */
371866e63ce3Schristos   {
371966e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
372066e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
372166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
372266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addx.f
372366e63ce3Schristos     int UNUSED written = abuf->written;
372466e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
372566e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
372666e63ce3Schristos 
372766e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
372866e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
372966e63ce3Schristos 
373066e63ce3Schristos #undef OPRND
373166e63ce3Schristos #undef FLD
373266e63ce3Schristos   }
373366e63ce3Schristos   NEXT (vpc);
373466e63ce3Schristos 
CASE(sem,INSN_PAR_BC8)373566e63ce3Schristos   CASE (sem, INSN_PAR_BC8) : /* bc.s $disp8 */
373666e63ce3Schristos {
373766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
373866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
373966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
374066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
374166e63ce3Schristos   int UNUSED written = 0;
374266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
374366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
374466e63ce3Schristos 
374566e63ce3Schristos if (CPU (h_cond)) {
374666e63ce3Schristos   {
374766e63ce3Schristos     USI opval = FLD (i_disp8);
374866e63ce3Schristos     OPRND (pc) = opval;
374966e63ce3Schristos     written |= (1 << 2);
3750ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
375166e63ce3Schristos   }
375266e63ce3Schristos }
375366e63ce3Schristos 
375466e63ce3Schristos   abuf->written = written;
375566e63ce3Schristos #undef OPRND
375666e63ce3Schristos #undef FLD
375766e63ce3Schristos }
375866e63ce3Schristos   NEXT (vpc);
375966e63ce3Schristos 
CASE(sem,INSN_WRITE_BC8)376066e63ce3Schristos CASE (sem, INSN_WRITE_BC8) : /* bc.s $disp8 */
376166e63ce3Schristos   {
376266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
376366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
376466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
376566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
376666e63ce3Schristos     int UNUSED written = abuf->written;
376766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
376866e63ce3Schristos     SEM_BRANCH_INIT
376966e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
377066e63ce3Schristos 
377166e63ce3Schristos   if (written & (1 << 2))
377266e63ce3Schristos     {
377366e63ce3Schristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
377466e63ce3Schristos     }
377566e63ce3Schristos 
377666e63ce3Schristos   SEM_BRANCH_FINI (vpc);
377766e63ce3Schristos #undef OPRND
377866e63ce3Schristos #undef FLD
377966e63ce3Schristos   }
378066e63ce3Schristos   NEXT (vpc);
378166e63ce3Schristos 
CASE(sem,INSN_PAR_BL8)378266e63ce3Schristos   CASE (sem, INSN_PAR_BL8) : /* bl.s $disp8 */
378366e63ce3Schristos {
378466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
378566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
378666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
378766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bl8.f
378866e63ce3Schristos   int UNUSED written = 0;
378966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
379066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
379166e63ce3Schristos 
379266e63ce3Schristos {
379366e63ce3Schristos   {
379466e63ce3Schristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
379566e63ce3Schristos     OPRND (h_gr_SI_14) = opval;
3796ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
379766e63ce3Schristos   }
379866e63ce3Schristos   {
379966e63ce3Schristos     USI opval = FLD (i_disp8);
380066e63ce3Schristos     OPRND (pc) = opval;
3801ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
380266e63ce3Schristos   }
380366e63ce3Schristos }
380466e63ce3Schristos 
380566e63ce3Schristos #undef OPRND
380666e63ce3Schristos #undef FLD
380766e63ce3Schristos }
380866e63ce3Schristos   NEXT (vpc);
380966e63ce3Schristos 
CASE(sem,INSN_WRITE_BL8)381066e63ce3Schristos CASE (sem, INSN_WRITE_BL8) : /* bl.s $disp8 */
381166e63ce3Schristos   {
381266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
381366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
381466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
381566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bl8.f
381666e63ce3Schristos     int UNUSED written = abuf->written;
381766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
381866e63ce3Schristos     SEM_BRANCH_INIT
381966e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
382066e63ce3Schristos 
382166e63ce3Schristos   CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
382266e63ce3Schristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
382366e63ce3Schristos 
382466e63ce3Schristos   SEM_BRANCH_FINI (vpc);
382566e63ce3Schristos #undef OPRND
382666e63ce3Schristos #undef FLD
382766e63ce3Schristos   }
382866e63ce3Schristos   NEXT (vpc);
382966e63ce3Schristos 
CASE(sem,INSN_PAR_BCL8)383066e63ce3Schristos   CASE (sem, INSN_PAR_BCL8) : /* bcl.s $disp8 */
383166e63ce3Schristos {
383266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
383366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
383466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
383566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
383666e63ce3Schristos   int UNUSED written = 0;
383766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
383866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
383966e63ce3Schristos 
384066e63ce3Schristos if (CPU (h_cond)) {
384166e63ce3Schristos {
384266e63ce3Schristos   {
384366e63ce3Schristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
384466e63ce3Schristos     OPRND (h_gr_SI_14) = opval;
384566e63ce3Schristos     written |= (1 << 3);
3846ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
384766e63ce3Schristos   }
384866e63ce3Schristos   {
384966e63ce3Schristos     USI opval = FLD (i_disp8);
385066e63ce3Schristos     OPRND (pc) = opval;
385166e63ce3Schristos     written |= (1 << 4);
3852ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
385366e63ce3Schristos   }
385466e63ce3Schristos }
385566e63ce3Schristos }
385666e63ce3Schristos 
385766e63ce3Schristos   abuf->written = written;
385866e63ce3Schristos #undef OPRND
385966e63ce3Schristos #undef FLD
386066e63ce3Schristos }
386166e63ce3Schristos   NEXT (vpc);
386266e63ce3Schristos 
CASE(sem,INSN_WRITE_BCL8)386366e63ce3Schristos CASE (sem, INSN_WRITE_BCL8) : /* bcl.s $disp8 */
386466e63ce3Schristos   {
386566e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
386666e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
386766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
386866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
386966e63ce3Schristos     int UNUSED written = abuf->written;
387066e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
387166e63ce3Schristos     SEM_BRANCH_INIT
387266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
387366e63ce3Schristos 
387466e63ce3Schristos   if (written & (1 << 3))
387566e63ce3Schristos     {
387666e63ce3Schristos       CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
387766e63ce3Schristos     }
387866e63ce3Schristos   if (written & (1 << 4))
387966e63ce3Schristos     {
388066e63ce3Schristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
388166e63ce3Schristos     }
388266e63ce3Schristos 
388366e63ce3Schristos   SEM_BRANCH_FINI (vpc);
388466e63ce3Schristos #undef OPRND
388566e63ce3Schristos #undef FLD
388666e63ce3Schristos   }
388766e63ce3Schristos   NEXT (vpc);
388866e63ce3Schristos 
CASE(sem,INSN_PAR_BNC8)388966e63ce3Schristos   CASE (sem, INSN_PAR_BNC8) : /* bnc.s $disp8 */
389066e63ce3Schristos {
389166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
389266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
389366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
389466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
389566e63ce3Schristos   int UNUSED written = 0;
389666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
389766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
389866e63ce3Schristos 
389966e63ce3Schristos if (NOTBI (CPU (h_cond))) {
390066e63ce3Schristos   {
390166e63ce3Schristos     USI opval = FLD (i_disp8);
390266e63ce3Schristos     OPRND (pc) = opval;
390366e63ce3Schristos     written |= (1 << 2);
3904ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
390566e63ce3Schristos   }
390666e63ce3Schristos }
390766e63ce3Schristos 
390866e63ce3Schristos   abuf->written = written;
390966e63ce3Schristos #undef OPRND
391066e63ce3Schristos #undef FLD
391166e63ce3Schristos }
391266e63ce3Schristos   NEXT (vpc);
391366e63ce3Schristos 
CASE(sem,INSN_WRITE_BNC8)391466e63ce3Schristos CASE (sem, INSN_WRITE_BNC8) : /* bnc.s $disp8 */
391566e63ce3Schristos   {
391666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
391766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
391866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
391966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
392066e63ce3Schristos     int UNUSED written = abuf->written;
392166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
392266e63ce3Schristos     SEM_BRANCH_INIT
392366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
392466e63ce3Schristos 
392566e63ce3Schristos   if (written & (1 << 2))
392666e63ce3Schristos     {
392766e63ce3Schristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
392866e63ce3Schristos     }
392966e63ce3Schristos 
393066e63ce3Schristos   SEM_BRANCH_FINI (vpc);
393166e63ce3Schristos #undef OPRND
393266e63ce3Schristos #undef FLD
393366e63ce3Schristos   }
393466e63ce3Schristos   NEXT (vpc);
393566e63ce3Schristos 
CASE(sem,INSN_PAR_BRA8)393666e63ce3Schristos   CASE (sem, INSN_PAR_BRA8) : /* bra.s $disp8 */
393766e63ce3Schristos {
393866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
393966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
394066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
394166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bra8.f
394266e63ce3Schristos   int UNUSED written = 0;
394366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
394466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
394566e63ce3Schristos 
394666e63ce3Schristos   {
394766e63ce3Schristos     USI opval = FLD (i_disp8);
394866e63ce3Schristos     OPRND (pc) = opval;
3949ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
395066e63ce3Schristos   }
395166e63ce3Schristos 
395266e63ce3Schristos #undef OPRND
395366e63ce3Schristos #undef FLD
395466e63ce3Schristos }
395566e63ce3Schristos   NEXT (vpc);
395666e63ce3Schristos 
CASE(sem,INSN_WRITE_BRA8)395766e63ce3Schristos CASE (sem, INSN_WRITE_BRA8) : /* bra.s $disp8 */
395866e63ce3Schristos   {
395966e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
396066e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
396166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
396266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bra8.f
396366e63ce3Schristos     int UNUSED written = abuf->written;
396466e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
396566e63ce3Schristos     SEM_BRANCH_INIT
396666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
396766e63ce3Schristos 
396866e63ce3Schristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
396966e63ce3Schristos 
397066e63ce3Schristos   SEM_BRANCH_FINI (vpc);
397166e63ce3Schristos #undef OPRND
397266e63ce3Schristos #undef FLD
397366e63ce3Schristos   }
397466e63ce3Schristos   NEXT (vpc);
397566e63ce3Schristos 
CASE(sem,INSN_PAR_BNCL8)397666e63ce3Schristos   CASE (sem, INSN_PAR_BNCL8) : /* bncl.s $disp8 */
397766e63ce3Schristos {
397866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
397966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
398066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
398166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
398266e63ce3Schristos   int UNUSED written = 0;
398366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
398466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
398566e63ce3Schristos 
398666e63ce3Schristos if (NOTBI (CPU (h_cond))) {
398766e63ce3Schristos {
398866e63ce3Schristos   {
398966e63ce3Schristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
399066e63ce3Schristos     OPRND (h_gr_SI_14) = opval;
399166e63ce3Schristos     written |= (1 << 3);
3992ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
399366e63ce3Schristos   }
399466e63ce3Schristos   {
399566e63ce3Schristos     USI opval = FLD (i_disp8);
399666e63ce3Schristos     OPRND (pc) = opval;
399766e63ce3Schristos     written |= (1 << 4);
3998ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
399966e63ce3Schristos   }
400066e63ce3Schristos }
400166e63ce3Schristos }
400266e63ce3Schristos 
400366e63ce3Schristos   abuf->written = written;
400466e63ce3Schristos #undef OPRND
400566e63ce3Schristos #undef FLD
400666e63ce3Schristos }
400766e63ce3Schristos   NEXT (vpc);
400866e63ce3Schristos 
CASE(sem,INSN_WRITE_BNCL8)400966e63ce3Schristos CASE (sem, INSN_WRITE_BNCL8) : /* bncl.s $disp8 */
401066e63ce3Schristos   {
401166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
401266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
401366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bl8.f
401466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
401566e63ce3Schristos     int UNUSED written = abuf->written;
401666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
401766e63ce3Schristos     SEM_BRANCH_INIT
401866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
401966e63ce3Schristos 
402066e63ce3Schristos   if (written & (1 << 3))
402166e63ce3Schristos     {
402266e63ce3Schristos       CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
402366e63ce3Schristos     }
402466e63ce3Schristos   if (written & (1 << 4))
402566e63ce3Schristos     {
402666e63ce3Schristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
402766e63ce3Schristos     }
402866e63ce3Schristos 
402966e63ce3Schristos   SEM_BRANCH_FINI (vpc);
403066e63ce3Schristos #undef OPRND
403166e63ce3Schristos #undef FLD
403266e63ce3Schristos   }
403366e63ce3Schristos   NEXT (vpc);
403466e63ce3Schristos 
CASE(sem,INSN_PAR_CMP)403566e63ce3Schristos   CASE (sem, INSN_PAR_CMP) : /* cmp $src1,$src2 */
403666e63ce3Schristos {
403766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
403866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
403966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
404066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
404166e63ce3Schristos   int UNUSED written = 0;
404266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
404366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
404466e63ce3Schristos 
404566e63ce3Schristos   {
404666e63ce3Schristos     BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
404766e63ce3Schristos     OPRND (condbit) = opval;
4048ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
404966e63ce3Schristos   }
405066e63ce3Schristos 
405166e63ce3Schristos #undef OPRND
405266e63ce3Schristos #undef FLD
405366e63ce3Schristos }
405466e63ce3Schristos   NEXT (vpc);
405566e63ce3Schristos 
CASE(sem,INSN_WRITE_CMP)405666e63ce3Schristos CASE (sem, INSN_WRITE_CMP) : /* cmp $src1,$src2 */
405766e63ce3Schristos   {
405866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
405966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
406066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
406166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
406266e63ce3Schristos     int UNUSED written = abuf->written;
406366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
406466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
406566e63ce3Schristos 
406666e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
406766e63ce3Schristos 
406866e63ce3Schristos #undef OPRND
406966e63ce3Schristos #undef FLD
407066e63ce3Schristos   }
407166e63ce3Schristos   NEXT (vpc);
407266e63ce3Schristos 
CASE(sem,INSN_PAR_CMPU)407366e63ce3Schristos   CASE (sem, INSN_PAR_CMPU) : /* cmpu $src1,$src2 */
407466e63ce3Schristos {
407566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
407666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
407766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
407866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
407966e63ce3Schristos   int UNUSED written = 0;
408066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
408166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
408266e63ce3Schristos 
408366e63ce3Schristos   {
408466e63ce3Schristos     BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
408566e63ce3Schristos     OPRND (condbit) = opval;
4086ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
408766e63ce3Schristos   }
408866e63ce3Schristos 
408966e63ce3Schristos #undef OPRND
409066e63ce3Schristos #undef FLD
409166e63ce3Schristos }
409266e63ce3Schristos   NEXT (vpc);
409366e63ce3Schristos 
CASE(sem,INSN_WRITE_CMPU)409466e63ce3Schristos CASE (sem, INSN_WRITE_CMPU) : /* cmpu $src1,$src2 */
409566e63ce3Schristos   {
409666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
409766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
409866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
409966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
410066e63ce3Schristos     int UNUSED written = abuf->written;
410166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
410266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
410366e63ce3Schristos 
410466e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
410566e63ce3Schristos 
410666e63ce3Schristos #undef OPRND
410766e63ce3Schristos #undef FLD
410866e63ce3Schristos   }
410966e63ce3Schristos   NEXT (vpc);
411066e63ce3Schristos 
CASE(sem,INSN_PAR_CMPEQ)411166e63ce3Schristos   CASE (sem, INSN_PAR_CMPEQ) : /* cmpeq $src1,$src2 */
411266e63ce3Schristos {
411366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
411466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
411566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
411666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
411766e63ce3Schristos   int UNUSED written = 0;
411866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
411966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
412066e63ce3Schristos 
412166e63ce3Schristos   {
412266e63ce3Schristos     BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
412366e63ce3Schristos     OPRND (condbit) = opval;
4124ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
412566e63ce3Schristos   }
412666e63ce3Schristos 
412766e63ce3Schristos #undef OPRND
412866e63ce3Schristos #undef FLD
412966e63ce3Schristos }
413066e63ce3Schristos   NEXT (vpc);
413166e63ce3Schristos 
CASE(sem,INSN_WRITE_CMPEQ)413266e63ce3Schristos CASE (sem, INSN_WRITE_CMPEQ) : /* cmpeq $src1,$src2 */
413366e63ce3Schristos   {
413466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
413566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
413666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
413766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
413866e63ce3Schristos     int UNUSED written = abuf->written;
413966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
414066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
414166e63ce3Schristos 
414266e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
414366e63ce3Schristos 
414466e63ce3Schristos #undef OPRND
414566e63ce3Schristos #undef FLD
414666e63ce3Schristos   }
414766e63ce3Schristos   NEXT (vpc);
414866e63ce3Schristos 
CASE(sem,INSN_PAR_CMPZ)414966e63ce3Schristos   CASE (sem, INSN_PAR_CMPZ) : /* cmpz $src2 */
415066e63ce3Schristos {
415166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
415266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
415366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
415466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
415566e63ce3Schristos   int UNUSED written = 0;
415666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
415766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
415866e63ce3Schristos 
415966e63ce3Schristos   {
416066e63ce3Schristos     BI opval = EQSI (* FLD (i_src2), 0);
416166e63ce3Schristos     OPRND (condbit) = opval;
4162ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
416366e63ce3Schristos   }
416466e63ce3Schristos 
416566e63ce3Schristos #undef OPRND
416666e63ce3Schristos #undef FLD
416766e63ce3Schristos }
416866e63ce3Schristos   NEXT (vpc);
416966e63ce3Schristos 
CASE(sem,INSN_WRITE_CMPZ)417066e63ce3Schristos CASE (sem, INSN_WRITE_CMPZ) : /* cmpz $src2 */
417166e63ce3Schristos   {
417266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
417366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
417466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
417566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
417666e63ce3Schristos     int UNUSED written = abuf->written;
417766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
417866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
417966e63ce3Schristos 
418066e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
418166e63ce3Schristos 
418266e63ce3Schristos #undef OPRND
418366e63ce3Schristos #undef FLD
418466e63ce3Schristos   }
418566e63ce3Schristos   NEXT (vpc);
418666e63ce3Schristos 
CASE(sem,INSN_PAR_JC)418766e63ce3Schristos   CASE (sem, INSN_PAR_JC) : /* jc $sr */
418866e63ce3Schristos {
418966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
419066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
419166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
419266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jc.f
419366e63ce3Schristos   int UNUSED written = 0;
419466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
419566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
419666e63ce3Schristos 
419766e63ce3Schristos if (CPU (h_cond)) {
419866e63ce3Schristos   {
419966e63ce3Schristos     USI opval = ANDSI (* FLD (i_sr), -4);
420066e63ce3Schristos     OPRND (pc) = opval;
420166e63ce3Schristos     written |= (1 << 2);
4202ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
420366e63ce3Schristos   }
420466e63ce3Schristos }
420566e63ce3Schristos 
420666e63ce3Schristos   abuf->written = written;
420766e63ce3Schristos #undef OPRND
420866e63ce3Schristos #undef FLD
420966e63ce3Schristos }
421066e63ce3Schristos   NEXT (vpc);
421166e63ce3Schristos 
CASE(sem,INSN_WRITE_JC)421266e63ce3Schristos CASE (sem, INSN_WRITE_JC) : /* jc $sr */
421366e63ce3Schristos   {
421466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
421566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
421666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
421766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jc.f
421866e63ce3Schristos     int UNUSED written = abuf->written;
421966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
422066e63ce3Schristos     SEM_BRANCH_INIT
422166e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
422266e63ce3Schristos 
422366e63ce3Schristos   if (written & (1 << 2))
422466e63ce3Schristos     {
422566e63ce3Schristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
422666e63ce3Schristos     }
422766e63ce3Schristos 
422866e63ce3Schristos   SEM_BRANCH_FINI (vpc);
422966e63ce3Schristos #undef OPRND
423066e63ce3Schristos #undef FLD
423166e63ce3Schristos   }
423266e63ce3Schristos   NEXT (vpc);
423366e63ce3Schristos 
CASE(sem,INSN_PAR_JNC)423466e63ce3Schristos   CASE (sem, INSN_PAR_JNC) : /* jnc $sr */
423566e63ce3Schristos {
423666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
423766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
423866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
423966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jc.f
424066e63ce3Schristos   int UNUSED written = 0;
424166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
424266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
424366e63ce3Schristos 
424466e63ce3Schristos if (NOTBI (CPU (h_cond))) {
424566e63ce3Schristos   {
424666e63ce3Schristos     USI opval = ANDSI (* FLD (i_sr), -4);
424766e63ce3Schristos     OPRND (pc) = opval;
424866e63ce3Schristos     written |= (1 << 2);
4249ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
425066e63ce3Schristos   }
425166e63ce3Schristos }
425266e63ce3Schristos 
425366e63ce3Schristos   abuf->written = written;
425466e63ce3Schristos #undef OPRND
425566e63ce3Schristos #undef FLD
425666e63ce3Schristos }
425766e63ce3Schristos   NEXT (vpc);
425866e63ce3Schristos 
CASE(sem,INSN_WRITE_JNC)425966e63ce3Schristos CASE (sem, INSN_WRITE_JNC) : /* jnc $sr */
426066e63ce3Schristos   {
426166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
426266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
426366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
426466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jc.f
426566e63ce3Schristos     int UNUSED written = abuf->written;
426666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
426766e63ce3Schristos     SEM_BRANCH_INIT
426866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
426966e63ce3Schristos 
427066e63ce3Schristos   if (written & (1 << 2))
427166e63ce3Schristos     {
427266e63ce3Schristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
427366e63ce3Schristos     }
427466e63ce3Schristos 
427566e63ce3Schristos   SEM_BRANCH_FINI (vpc);
427666e63ce3Schristos #undef OPRND
427766e63ce3Schristos #undef FLD
427866e63ce3Schristos   }
427966e63ce3Schristos   NEXT (vpc);
428066e63ce3Schristos 
CASE(sem,INSN_PAR_JL)428166e63ce3Schristos   CASE (sem, INSN_PAR_JL) : /* jl $sr */
428266e63ce3Schristos {
428366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
428466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
428566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
428666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jl.f
428766e63ce3Schristos   int UNUSED written = 0;
428866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
428966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
429066e63ce3Schristos 
429166e63ce3Schristos {
429266e63ce3Schristos   SI temp0;USI temp1;
429366e63ce3Schristos   temp0 = ADDSI (ANDSI (pc, -4), 4);
429466e63ce3Schristos   temp1 = ANDSI (* FLD (i_sr), -4);
429566e63ce3Schristos   {
429666e63ce3Schristos     SI opval = temp0;
429766e63ce3Schristos     OPRND (h_gr_SI_14) = opval;
4298ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
429966e63ce3Schristos   }
430066e63ce3Schristos   {
430166e63ce3Schristos     USI opval = temp1;
430266e63ce3Schristos     OPRND (pc) = opval;
4303ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
430466e63ce3Schristos   }
430566e63ce3Schristos }
430666e63ce3Schristos 
430766e63ce3Schristos #undef OPRND
430866e63ce3Schristos #undef FLD
430966e63ce3Schristos }
431066e63ce3Schristos   NEXT (vpc);
431166e63ce3Schristos 
CASE(sem,INSN_WRITE_JL)431266e63ce3Schristos CASE (sem, INSN_WRITE_JL) : /* jl $sr */
431366e63ce3Schristos   {
431466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
431566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
431666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
431766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jl.f
431866e63ce3Schristos     int UNUSED written = abuf->written;
431966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
432066e63ce3Schristos     SEM_BRANCH_INIT
432166e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
432266e63ce3Schristos 
432366e63ce3Schristos   CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
432466e63ce3Schristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
432566e63ce3Schristos 
432666e63ce3Schristos   SEM_BRANCH_FINI (vpc);
432766e63ce3Schristos #undef OPRND
432866e63ce3Schristos #undef FLD
432966e63ce3Schristos   }
433066e63ce3Schristos   NEXT (vpc);
433166e63ce3Schristos 
CASE(sem,INSN_PAR_JMP)433266e63ce3Schristos   CASE (sem, INSN_PAR_JMP) : /* jmp $sr */
433366e63ce3Schristos {
433466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
433566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
433666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
433766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jmp.f
433866e63ce3Schristos   int UNUSED written = 0;
433966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
434066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
434166e63ce3Schristos 
434266e63ce3Schristos   {
434366e63ce3Schristos     USI opval = ANDSI (* FLD (i_sr), -4);
434466e63ce3Schristos     OPRND (pc) = opval;
4345ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
434666e63ce3Schristos   }
434766e63ce3Schristos 
434866e63ce3Schristos #undef OPRND
434966e63ce3Schristos #undef FLD
435066e63ce3Schristos }
435166e63ce3Schristos   NEXT (vpc);
435266e63ce3Schristos 
CASE(sem,INSN_WRITE_JMP)435366e63ce3Schristos CASE (sem, INSN_WRITE_JMP) : /* jmp $sr */
435466e63ce3Schristos   {
435566e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
435666e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
435766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_jl.f
435866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_jmp.f
435966e63ce3Schristos     int UNUSED written = abuf->written;
436066e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
436166e63ce3Schristos     SEM_BRANCH_INIT
436266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
436366e63ce3Schristos 
436466e63ce3Schristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
436566e63ce3Schristos 
436666e63ce3Schristos   SEM_BRANCH_FINI (vpc);
436766e63ce3Schristos #undef OPRND
436866e63ce3Schristos #undef FLD
436966e63ce3Schristos   }
437066e63ce3Schristos   NEXT (vpc);
437166e63ce3Schristos 
CASE(sem,INSN_PAR_LD)437266e63ce3Schristos   CASE (sem, INSN_PAR_LD) : /* ld $dr,@$sr */
437366e63ce3Schristos {
437466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
437566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
437666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
437766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ld.f
437866e63ce3Schristos   int UNUSED written = 0;
437966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
438066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
438166e63ce3Schristos 
438266e63ce3Schristos   {
438366e63ce3Schristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
438466e63ce3Schristos     OPRND (dr) = opval;
4385ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
438666e63ce3Schristos   }
438766e63ce3Schristos 
438866e63ce3Schristos #undef OPRND
438966e63ce3Schristos #undef FLD
439066e63ce3Schristos }
439166e63ce3Schristos   NEXT (vpc);
439266e63ce3Schristos 
CASE(sem,INSN_WRITE_LD)439366e63ce3Schristos CASE (sem, INSN_WRITE_LD) : /* ld $dr,@$sr */
439466e63ce3Schristos   {
439566e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
439666e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
439766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
439866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ld.f
439966e63ce3Schristos     int UNUSED written = abuf->written;
440066e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
440166e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
440266e63ce3Schristos 
440366e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
440466e63ce3Schristos 
440566e63ce3Schristos #undef OPRND
440666e63ce3Schristos #undef FLD
440766e63ce3Schristos   }
440866e63ce3Schristos   NEXT (vpc);
440966e63ce3Schristos 
CASE(sem,INSN_PAR_LDB)441066e63ce3Schristos   CASE (sem, INSN_PAR_LDB) : /* ldb $dr,@$sr */
441166e63ce3Schristos {
441266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
441366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
441466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
441566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
441666e63ce3Schristos   int UNUSED written = 0;
441766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
441866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
441966e63ce3Schristos 
442066e63ce3Schristos   {
442166e63ce3Schristos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
442266e63ce3Schristos     OPRND (dr) = opval;
4423ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
442466e63ce3Schristos   }
442566e63ce3Schristos 
442666e63ce3Schristos #undef OPRND
442766e63ce3Schristos #undef FLD
442866e63ce3Schristos }
442966e63ce3Schristos   NEXT (vpc);
443066e63ce3Schristos 
CASE(sem,INSN_WRITE_LDB)443166e63ce3Schristos CASE (sem, INSN_WRITE_LDB) : /* ldb $dr,@$sr */
443266e63ce3Schristos   {
443366e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
443466e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
443566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
443666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
443766e63ce3Schristos     int UNUSED written = abuf->written;
443866e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
443966e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
444066e63ce3Schristos 
444166e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
444266e63ce3Schristos 
444366e63ce3Schristos #undef OPRND
444466e63ce3Schristos #undef FLD
444566e63ce3Schristos   }
444666e63ce3Schristos   NEXT (vpc);
444766e63ce3Schristos 
CASE(sem,INSN_PAR_LDH)444866e63ce3Schristos   CASE (sem, INSN_PAR_LDH) : /* ldh $dr,@$sr */
444966e63ce3Schristos {
445066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
445166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
445266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
445366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
445466e63ce3Schristos   int UNUSED written = 0;
445566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
445666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
445766e63ce3Schristos 
445866e63ce3Schristos   {
445966e63ce3Schristos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
446066e63ce3Schristos     OPRND (dr) = opval;
4461ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
446266e63ce3Schristos   }
446366e63ce3Schristos 
446466e63ce3Schristos #undef OPRND
446566e63ce3Schristos #undef FLD
446666e63ce3Schristos }
446766e63ce3Schristos   NEXT (vpc);
446866e63ce3Schristos 
CASE(sem,INSN_WRITE_LDH)446966e63ce3Schristos CASE (sem, INSN_WRITE_LDH) : /* ldh $dr,@$sr */
447066e63ce3Schristos   {
447166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
447266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
447366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
447466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
447566e63ce3Schristos     int UNUSED written = abuf->written;
447666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
447766e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
447866e63ce3Schristos 
447966e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
448066e63ce3Schristos 
448166e63ce3Schristos #undef OPRND
448266e63ce3Schristos #undef FLD
448366e63ce3Schristos   }
448466e63ce3Schristos   NEXT (vpc);
448566e63ce3Schristos 
CASE(sem,INSN_PAR_LDUB)448666e63ce3Schristos   CASE (sem, INSN_PAR_LDUB) : /* ldub $dr,@$sr */
448766e63ce3Schristos {
448866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
448966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
449066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
449166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
449266e63ce3Schristos   int UNUSED written = 0;
449366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
449466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
449566e63ce3Schristos 
449666e63ce3Schristos   {
449766e63ce3Schristos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
449866e63ce3Schristos     OPRND (dr) = opval;
4499ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
450066e63ce3Schristos   }
450166e63ce3Schristos 
450266e63ce3Schristos #undef OPRND
450366e63ce3Schristos #undef FLD
450466e63ce3Schristos }
450566e63ce3Schristos   NEXT (vpc);
450666e63ce3Schristos 
CASE(sem,INSN_WRITE_LDUB)450766e63ce3Schristos CASE (sem, INSN_WRITE_LDUB) : /* ldub $dr,@$sr */
450866e63ce3Schristos   {
450966e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
451066e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
451166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
451266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
451366e63ce3Schristos     int UNUSED written = abuf->written;
451466e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
451566e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
451666e63ce3Schristos 
451766e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
451866e63ce3Schristos 
451966e63ce3Schristos #undef OPRND
452066e63ce3Schristos #undef FLD
452166e63ce3Schristos   }
452266e63ce3Schristos   NEXT (vpc);
452366e63ce3Schristos 
CASE(sem,INSN_PAR_LDUH)452466e63ce3Schristos   CASE (sem, INSN_PAR_LDUH) : /* lduh $dr,@$sr */
452566e63ce3Schristos {
452666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
452766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
452866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
452966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
453066e63ce3Schristos   int UNUSED written = 0;
453166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
453266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
453366e63ce3Schristos 
453466e63ce3Schristos   {
453566e63ce3Schristos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
453666e63ce3Schristos     OPRND (dr) = opval;
4537ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
453866e63ce3Schristos   }
453966e63ce3Schristos 
454066e63ce3Schristos #undef OPRND
454166e63ce3Schristos #undef FLD
454266e63ce3Schristos }
454366e63ce3Schristos   NEXT (vpc);
454466e63ce3Schristos 
CASE(sem,INSN_WRITE_LDUH)454566e63ce3Schristos CASE (sem, INSN_WRITE_LDUH) : /* lduh $dr,@$sr */
454666e63ce3Schristos   {
454766e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
454866e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
454966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
455066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
455166e63ce3Schristos     int UNUSED written = abuf->written;
455266e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
455366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
455466e63ce3Schristos 
455566e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
455666e63ce3Schristos 
455766e63ce3Schristos #undef OPRND
455866e63ce3Schristos #undef FLD
455966e63ce3Schristos   }
456066e63ce3Schristos   NEXT (vpc);
456166e63ce3Schristos 
CASE(sem,INSN_PAR_LD_PLUS)456266e63ce3Schristos   CASE (sem, INSN_PAR_LD_PLUS) : /* ld $dr,@$sr+ */
456366e63ce3Schristos {
456466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
456566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
456666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
456766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ld_plus.f
456866e63ce3Schristos   int UNUSED written = 0;
456966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
457066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
457166e63ce3Schristos 
457266e63ce3Schristos {
457366e63ce3Schristos   SI temp0;SI temp1;
457466e63ce3Schristos   temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
457566e63ce3Schristos   temp1 = ADDSI (* FLD (i_sr), 4);
457666e63ce3Schristos   {
457766e63ce3Schristos     SI opval = temp0;
457866e63ce3Schristos     OPRND (dr) = opval;
4579ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
458066e63ce3Schristos   }
458166e63ce3Schristos   {
458266e63ce3Schristos     SI opval = temp1;
458366e63ce3Schristos     OPRND (sr) = opval;
4584ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
458566e63ce3Schristos   }
458666e63ce3Schristos }
458766e63ce3Schristos 
458866e63ce3Schristos #undef OPRND
458966e63ce3Schristos #undef FLD
459066e63ce3Schristos }
459166e63ce3Schristos   NEXT (vpc);
459266e63ce3Schristos 
CASE(sem,INSN_WRITE_LD_PLUS)459366e63ce3Schristos CASE (sem, INSN_WRITE_LD_PLUS) : /* ld $dr,@$sr+ */
459466e63ce3Schristos   {
459566e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
459666e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
459766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
459866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ld_plus.f
459966e63ce3Schristos     int UNUSED written = abuf->written;
460066e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
460166e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
460266e63ce3Schristos 
460366e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
460466e63ce3Schristos   * FLD (i_sr) = OPRND (sr);
460566e63ce3Schristos 
460666e63ce3Schristos #undef OPRND
460766e63ce3Schristos #undef FLD
460866e63ce3Schristos   }
460966e63ce3Schristos   NEXT (vpc);
461066e63ce3Schristos 
CASE(sem,INSN_PAR_LDI8)461166e63ce3Schristos   CASE (sem, INSN_PAR_LDI8) : /* ldi8 $dr,$simm8 */
461266e63ce3Schristos {
461366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
461466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
461566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_addi.f
461666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldi8.f
461766e63ce3Schristos   int UNUSED written = 0;
461866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
461966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
462066e63ce3Schristos 
462166e63ce3Schristos   {
462266e63ce3Schristos     SI opval = FLD (f_simm8);
462366e63ce3Schristos     OPRND (dr) = opval;
4624ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
462566e63ce3Schristos   }
462666e63ce3Schristos 
462766e63ce3Schristos #undef OPRND
462866e63ce3Schristos #undef FLD
462966e63ce3Schristos }
463066e63ce3Schristos   NEXT (vpc);
463166e63ce3Schristos 
CASE(sem,INSN_WRITE_LDI8)463266e63ce3Schristos CASE (sem, INSN_WRITE_LDI8) : /* ldi8 $dr,$simm8 */
463366e63ce3Schristos   {
463466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
463566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
463666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_addi.f
463766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_ldi8.f
463866e63ce3Schristos     int UNUSED written = abuf->written;
463966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
464066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
464166e63ce3Schristos 
464266e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
464366e63ce3Schristos 
464466e63ce3Schristos #undef OPRND
464566e63ce3Schristos #undef FLD
464666e63ce3Schristos   }
464766e63ce3Schristos   NEXT (vpc);
464866e63ce3Schristos 
CASE(sem,INSN_PAR_LOCK)464966e63ce3Schristos   CASE (sem, INSN_PAR_LOCK) : /* lock $dr,@$sr */
465066e63ce3Schristos {
465166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
465266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
465366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
465466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_lock.f
465566e63ce3Schristos   int UNUSED written = 0;
465666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
465766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
465866e63ce3Schristos 
465966e63ce3Schristos {
466066e63ce3Schristos   {
466166e63ce3Schristos     BI opval = 1;
466266e63ce3Schristos     OPRND (h_lock_BI) = opval;
4663ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
466466e63ce3Schristos   }
466566e63ce3Schristos   {
466666e63ce3Schristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
466766e63ce3Schristos     OPRND (dr) = opval;
4668ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
466966e63ce3Schristos   }
467066e63ce3Schristos }
467166e63ce3Schristos 
467266e63ce3Schristos #undef OPRND
467366e63ce3Schristos #undef FLD
467466e63ce3Schristos }
467566e63ce3Schristos   NEXT (vpc);
467666e63ce3Schristos 
CASE(sem,INSN_WRITE_LOCK)467766e63ce3Schristos CASE (sem, INSN_WRITE_LOCK) : /* lock $dr,@$sr */
467866e63ce3Schristos   {
467966e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
468066e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
468166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
468266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_lock.f
468366e63ce3Schristos     int UNUSED written = abuf->written;
468466e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
468566e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
468666e63ce3Schristos 
468766e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
468866e63ce3Schristos   CPU (h_lock) = OPRND (h_lock_BI);
468966e63ce3Schristos 
469066e63ce3Schristos #undef OPRND
469166e63ce3Schristos #undef FLD
469266e63ce3Schristos   }
469366e63ce3Schristos   NEXT (vpc);
469466e63ce3Schristos 
CASE(sem,INSN_PAR_MACHI_A)469566e63ce3Schristos   CASE (sem, INSN_PAR_MACHI_A) : /* machi $src1,$src2,$acc */
469666e63ce3Schristos {
469766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
469866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
469966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
470066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
470166e63ce3Schristos   int UNUSED written = 0;
470266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
470366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
470466e63ce3Schristos 
470566e63ce3Schristos   {
470666e63ce3Schristos     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);
470766e63ce3Schristos     OPRND (acc) = opval;
4708ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
470966e63ce3Schristos   }
471066e63ce3Schristos 
471166e63ce3Schristos #undef OPRND
471266e63ce3Schristos #undef FLD
471366e63ce3Schristos }
471466e63ce3Schristos   NEXT (vpc);
471566e63ce3Schristos 
CASE(sem,INSN_WRITE_MACHI_A)471666e63ce3Schristos CASE (sem, INSN_WRITE_MACHI_A) : /* machi $src1,$src2,$acc */
471766e63ce3Schristos   {
471866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
471966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
472066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
472166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
472266e63ce3Schristos     int UNUSED written = abuf->written;
472366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
472466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
472566e63ce3Schristos 
472666e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
472766e63ce3Schristos 
472866e63ce3Schristos #undef OPRND
472966e63ce3Schristos #undef FLD
473066e63ce3Schristos   }
473166e63ce3Schristos   NEXT (vpc);
473266e63ce3Schristos 
CASE(sem,INSN_PAR_MACLO_A)473366e63ce3Schristos   CASE (sem, INSN_PAR_MACLO_A) : /* maclo $src1,$src2,$acc */
473466e63ce3Schristos {
473566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
473666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
473766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
473866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
473966e63ce3Schristos   int UNUSED written = 0;
474066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
474166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
474266e63ce3Schristos 
474366e63ce3Schristos   {
474466e63ce3Schristos     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);
474566e63ce3Schristos     OPRND (acc) = opval;
4746ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
474766e63ce3Schristos   }
474866e63ce3Schristos 
474966e63ce3Schristos #undef OPRND
475066e63ce3Schristos #undef FLD
475166e63ce3Schristos }
475266e63ce3Schristos   NEXT (vpc);
475366e63ce3Schristos 
CASE(sem,INSN_WRITE_MACLO_A)475466e63ce3Schristos CASE (sem, INSN_WRITE_MACLO_A) : /* maclo $src1,$src2,$acc */
475566e63ce3Schristos   {
475666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
475766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
475866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
475966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
476066e63ce3Schristos     int UNUSED written = abuf->written;
476166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
476266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
476366e63ce3Schristos 
476466e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
476566e63ce3Schristos 
476666e63ce3Schristos #undef OPRND
476766e63ce3Schristos #undef FLD
476866e63ce3Schristos   }
476966e63ce3Schristos   NEXT (vpc);
477066e63ce3Schristos 
CASE(sem,INSN_PAR_MACWHI_A)477166e63ce3Schristos   CASE (sem, INSN_PAR_MACWHI_A) : /* macwhi $src1,$src2,$acc */
477266e63ce3Schristos {
477366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
477466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
477566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
477666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
477766e63ce3Schristos   int UNUSED written = 0;
477866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
477966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
478066e63ce3Schristos 
478166e63ce3Schristos   {
478266e63ce3Schristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))));
478366e63ce3Schristos     OPRND (acc) = opval;
4784ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
478566e63ce3Schristos   }
478666e63ce3Schristos 
478766e63ce3Schristos #undef OPRND
478866e63ce3Schristos #undef FLD
478966e63ce3Schristos }
479066e63ce3Schristos   NEXT (vpc);
479166e63ce3Schristos 
CASE(sem,INSN_WRITE_MACWHI_A)479266e63ce3Schristos CASE (sem, INSN_WRITE_MACWHI_A) : /* macwhi $src1,$src2,$acc */
479366e63ce3Schristos   {
479466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
479566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
479666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
479766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
479866e63ce3Schristos     int UNUSED written = abuf->written;
479966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
480066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
480166e63ce3Schristos 
480266e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
480366e63ce3Schristos 
480466e63ce3Schristos #undef OPRND
480566e63ce3Schristos #undef FLD
480666e63ce3Schristos   }
480766e63ce3Schristos   NEXT (vpc);
480866e63ce3Schristos 
CASE(sem,INSN_PAR_MACWLO_A)480966e63ce3Schristos   CASE (sem, INSN_PAR_MACWLO_A) : /* macwlo $src1,$src2,$acc */
481066e63ce3Schristos {
481166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
481266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
481366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
481466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
481566e63ce3Schristos   int UNUSED written = 0;
481666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
481766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
481866e63ce3Schristos 
481966e63ce3Schristos   {
482066e63ce3Schristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))));
482166e63ce3Schristos     OPRND (acc) = opval;
4822ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
482366e63ce3Schristos   }
482466e63ce3Schristos 
482566e63ce3Schristos #undef OPRND
482666e63ce3Schristos #undef FLD
482766e63ce3Schristos }
482866e63ce3Schristos   NEXT (vpc);
482966e63ce3Schristos 
CASE(sem,INSN_WRITE_MACWLO_A)483066e63ce3Schristos CASE (sem, INSN_WRITE_MACWLO_A) : /* macwlo $src1,$src2,$acc */
483166e63ce3Schristos   {
483266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
483366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
483466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
483566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
483666e63ce3Schristos     int UNUSED written = abuf->written;
483766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
483866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
483966e63ce3Schristos 
484066e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
484166e63ce3Schristos 
484266e63ce3Schristos #undef OPRND
484366e63ce3Schristos #undef FLD
484466e63ce3Schristos   }
484566e63ce3Schristos   NEXT (vpc);
484666e63ce3Schristos 
CASE(sem,INSN_PAR_MUL)484766e63ce3Schristos   CASE (sem, INSN_PAR_MUL) : /* mul $dr,$sr */
484866e63ce3Schristos {
484966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
485066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
485166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
485266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
485366e63ce3Schristos   int UNUSED written = 0;
485466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
485566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
485666e63ce3Schristos 
485766e63ce3Schristos   {
485866e63ce3Schristos     SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
485966e63ce3Schristos     OPRND (dr) = opval;
4860ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
486166e63ce3Schristos   }
486266e63ce3Schristos 
486366e63ce3Schristos #undef OPRND
486466e63ce3Schristos #undef FLD
486566e63ce3Schristos }
486666e63ce3Schristos   NEXT (vpc);
486766e63ce3Schristos 
CASE(sem,INSN_WRITE_MUL)486866e63ce3Schristos CASE (sem, INSN_WRITE_MUL) : /* mul $dr,$sr */
486966e63ce3Schristos   {
487066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
487166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
487266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
487366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
487466e63ce3Schristos     int UNUSED written = abuf->written;
487566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
487666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
487766e63ce3Schristos 
487866e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
487966e63ce3Schristos 
488066e63ce3Schristos #undef OPRND
488166e63ce3Schristos #undef FLD
488266e63ce3Schristos   }
488366e63ce3Schristos   NEXT (vpc);
488466e63ce3Schristos 
CASE(sem,INSN_PAR_MULHI_A)488566e63ce3Schristos   CASE (sem, INSN_PAR_MULHI_A) : /* mulhi $src1,$src2,$acc */
488666e63ce3Schristos {
488766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
488866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
488966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
489066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
489166e63ce3Schristos   int UNUSED written = 0;
489266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
489366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
489466e63ce3Schristos 
489566e63ce3Schristos   {
489666e63ce3Schristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
489766e63ce3Schristos     OPRND (acc) = opval;
4898ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
489966e63ce3Schristos   }
490066e63ce3Schristos 
490166e63ce3Schristos #undef OPRND
490266e63ce3Schristos #undef FLD
490366e63ce3Schristos }
490466e63ce3Schristos   NEXT (vpc);
490566e63ce3Schristos 
CASE(sem,INSN_WRITE_MULHI_A)490666e63ce3Schristos CASE (sem, INSN_WRITE_MULHI_A) : /* mulhi $src1,$src2,$acc */
490766e63ce3Schristos   {
490866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
490966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
491066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
491166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
491266e63ce3Schristos     int UNUSED written = abuf->written;
491366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
491466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
491566e63ce3Schristos 
491666e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
491766e63ce3Schristos 
491866e63ce3Schristos #undef OPRND
491966e63ce3Schristos #undef FLD
492066e63ce3Schristos   }
492166e63ce3Schristos   NEXT (vpc);
492266e63ce3Schristos 
CASE(sem,INSN_PAR_MULLO_A)492366e63ce3Schristos   CASE (sem, INSN_PAR_MULLO_A) : /* mullo $src1,$src2,$acc */
492466e63ce3Schristos {
492566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
492666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
492766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
492866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
492966e63ce3Schristos   int UNUSED written = 0;
493066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
493166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
493266e63ce3Schristos 
493366e63ce3Schristos   {
493466e63ce3Schristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
493566e63ce3Schristos     OPRND (acc) = opval;
4936ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
493766e63ce3Schristos   }
493866e63ce3Schristos 
493966e63ce3Schristos #undef OPRND
494066e63ce3Schristos #undef FLD
494166e63ce3Schristos }
494266e63ce3Schristos   NEXT (vpc);
494366e63ce3Schristos 
CASE(sem,INSN_WRITE_MULLO_A)494466e63ce3Schristos CASE (sem, INSN_WRITE_MULLO_A) : /* mullo $src1,$src2,$acc */
494566e63ce3Schristos   {
494666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
494766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
494866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
494966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
495066e63ce3Schristos     int UNUSED written = abuf->written;
495166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
495266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
495366e63ce3Schristos 
495466e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
495566e63ce3Schristos 
495666e63ce3Schristos #undef OPRND
495766e63ce3Schristos #undef FLD
495866e63ce3Schristos   }
495966e63ce3Schristos   NEXT (vpc);
496066e63ce3Schristos 
CASE(sem,INSN_PAR_MULWHI_A)496166e63ce3Schristos   CASE (sem, INSN_PAR_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
496266e63ce3Schristos {
496366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
496466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
496566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
496666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
496766e63ce3Schristos   int UNUSED written = 0;
496866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
496966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
497066e63ce3Schristos 
497166e63ce3Schristos   {
497266e63ce3Schristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))));
497366e63ce3Schristos     OPRND (acc) = opval;
4974ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
497566e63ce3Schristos   }
497666e63ce3Schristos 
497766e63ce3Schristos #undef OPRND
497866e63ce3Schristos #undef FLD
497966e63ce3Schristos }
498066e63ce3Schristos   NEXT (vpc);
498166e63ce3Schristos 
CASE(sem,INSN_WRITE_MULWHI_A)498266e63ce3Schristos CASE (sem, INSN_WRITE_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
498366e63ce3Schristos   {
498466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
498566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
498666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
498766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
498866e63ce3Schristos     int UNUSED written = abuf->written;
498966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
499066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
499166e63ce3Schristos 
499266e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
499366e63ce3Schristos 
499466e63ce3Schristos #undef OPRND
499566e63ce3Schristos #undef FLD
499666e63ce3Schristos   }
499766e63ce3Schristos   NEXT (vpc);
499866e63ce3Schristos 
CASE(sem,INSN_PAR_MULWLO_A)499966e63ce3Schristos   CASE (sem, INSN_PAR_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
500066e63ce3Schristos {
500166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
500266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
500366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
500466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
500566e63ce3Schristos   int UNUSED written = 0;
500666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
500766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
500866e63ce3Schristos 
500966e63ce3Schristos   {
501066e63ce3Schristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))));
501166e63ce3Schristos     OPRND (acc) = opval;
5012ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
501366e63ce3Schristos   }
501466e63ce3Schristos 
501566e63ce3Schristos #undef OPRND
501666e63ce3Schristos #undef FLD
501766e63ce3Schristos }
501866e63ce3Schristos   NEXT (vpc);
501966e63ce3Schristos 
CASE(sem,INSN_WRITE_MULWLO_A)502066e63ce3Schristos CASE (sem, INSN_WRITE_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
502166e63ce3Schristos   {
502266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
502366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
502466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_machi_a.f
502566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
502666e63ce3Schristos     int UNUSED written = abuf->written;
502766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
502866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
502966e63ce3Schristos 
503066e63ce3Schristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
503166e63ce3Schristos 
503266e63ce3Schristos #undef OPRND
503366e63ce3Schristos #undef FLD
503466e63ce3Schristos   }
503566e63ce3Schristos   NEXT (vpc);
503666e63ce3Schristos 
CASE(sem,INSN_PAR_MV)503766e63ce3Schristos   CASE (sem, INSN_PAR_MV) : /* mv $dr,$sr */
503866e63ce3Schristos {
503966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
504066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
504166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
504266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mv.f
504366e63ce3Schristos   int UNUSED written = 0;
504466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
504566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
504666e63ce3Schristos 
504766e63ce3Schristos   {
504866e63ce3Schristos     SI opval = * FLD (i_sr);
504966e63ce3Schristos     OPRND (dr) = opval;
5050ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
505166e63ce3Schristos   }
505266e63ce3Schristos 
505366e63ce3Schristos #undef OPRND
505466e63ce3Schristos #undef FLD
505566e63ce3Schristos }
505666e63ce3Schristos   NEXT (vpc);
505766e63ce3Schristos 
CASE(sem,INSN_WRITE_MV)505866e63ce3Schristos CASE (sem, INSN_WRITE_MV) : /* mv $dr,$sr */
505966e63ce3Schristos   {
506066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
506166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
506266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
506366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mv.f
506466e63ce3Schristos     int UNUSED written = abuf->written;
506566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
506666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
506766e63ce3Schristos 
506866e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
506966e63ce3Schristos 
507066e63ce3Schristos #undef OPRND
507166e63ce3Schristos #undef FLD
507266e63ce3Schristos   }
507366e63ce3Schristos   NEXT (vpc);
507466e63ce3Schristos 
CASE(sem,INSN_PAR_MVFACHI_A)507566e63ce3Schristos   CASE (sem, INSN_PAR_MVFACHI_A) : /* mvfachi $dr,$accs */
507666e63ce3Schristos {
507766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
507866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
507966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
508066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
508166e63ce3Schristos   int UNUSED written = 0;
508266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
508366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
508466e63ce3Schristos 
508566e63ce3Schristos   {
508666e63ce3Schristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
508766e63ce3Schristos     OPRND (dr) = opval;
5088ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
508966e63ce3Schristos   }
509066e63ce3Schristos 
509166e63ce3Schristos #undef OPRND
509266e63ce3Schristos #undef FLD
509366e63ce3Schristos }
509466e63ce3Schristos   NEXT (vpc);
509566e63ce3Schristos 
CASE(sem,INSN_WRITE_MVFACHI_A)509666e63ce3Schristos CASE (sem, INSN_WRITE_MVFACHI_A) : /* mvfachi $dr,$accs */
509766e63ce3Schristos   {
509866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
509966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
510066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
510166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
510266e63ce3Schristos     int UNUSED written = abuf->written;
510366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
510466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
510566e63ce3Schristos 
510666e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
510766e63ce3Schristos 
510866e63ce3Schristos #undef OPRND
510966e63ce3Schristos #undef FLD
511066e63ce3Schristos   }
511166e63ce3Schristos   NEXT (vpc);
511266e63ce3Schristos 
CASE(sem,INSN_PAR_MVFACLO_A)511366e63ce3Schristos   CASE (sem, INSN_PAR_MVFACLO_A) : /* mvfaclo $dr,$accs */
511466e63ce3Schristos {
511566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
511666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
511766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
511866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
511966e63ce3Schristos   int UNUSED written = 0;
512066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
512166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
512266e63ce3Schristos 
512366e63ce3Schristos   {
512466e63ce3Schristos     SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
512566e63ce3Schristos     OPRND (dr) = opval;
5126ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
512766e63ce3Schristos   }
512866e63ce3Schristos 
512966e63ce3Schristos #undef OPRND
513066e63ce3Schristos #undef FLD
513166e63ce3Schristos }
513266e63ce3Schristos   NEXT (vpc);
513366e63ce3Schristos 
CASE(sem,INSN_WRITE_MVFACLO_A)513466e63ce3Schristos CASE (sem, INSN_WRITE_MVFACLO_A) : /* mvfaclo $dr,$accs */
513566e63ce3Schristos   {
513666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
513766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
513866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
513966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
514066e63ce3Schristos     int UNUSED written = abuf->written;
514166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
514266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
514366e63ce3Schristos 
514466e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
514566e63ce3Schristos 
514666e63ce3Schristos #undef OPRND
514766e63ce3Schristos #undef FLD
514866e63ce3Schristos   }
514966e63ce3Schristos   NEXT (vpc);
515066e63ce3Schristos 
CASE(sem,INSN_PAR_MVFACMI_A)515166e63ce3Schristos   CASE (sem, INSN_PAR_MVFACMI_A) : /* mvfacmi $dr,$accs */
515266e63ce3Schristos {
515366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
515466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
515566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
515666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
515766e63ce3Schristos   int UNUSED written = 0;
515866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
515966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
516066e63ce3Schristos 
516166e63ce3Schristos   {
516266e63ce3Schristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
516366e63ce3Schristos     OPRND (dr) = opval;
5164ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
516566e63ce3Schristos   }
516666e63ce3Schristos 
516766e63ce3Schristos #undef OPRND
516866e63ce3Schristos #undef FLD
516966e63ce3Schristos }
517066e63ce3Schristos   NEXT (vpc);
517166e63ce3Schristos 
CASE(sem,INSN_WRITE_MVFACMI_A)517266e63ce3Schristos CASE (sem, INSN_WRITE_MVFACMI_A) : /* mvfacmi $dr,$accs */
517366e63ce3Schristos   {
517466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
517566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
517666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
517766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
517866e63ce3Schristos     int UNUSED written = abuf->written;
517966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
518066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
518166e63ce3Schristos 
518266e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
518366e63ce3Schristos 
518466e63ce3Schristos #undef OPRND
518566e63ce3Schristos #undef FLD
518666e63ce3Schristos   }
518766e63ce3Schristos   NEXT (vpc);
518866e63ce3Schristos 
CASE(sem,INSN_PAR_MVFC)518966e63ce3Schristos   CASE (sem, INSN_PAR_MVFC) : /* mvfc $dr,$scr */
519066e63ce3Schristos {
519166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
519266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
519366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
519466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfc.f
519566e63ce3Schristos   int UNUSED written = 0;
519666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
519766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
519866e63ce3Schristos 
519966e63ce3Schristos   {
520066e63ce3Schristos     SI opval = GET_H_CR (FLD (f_r2));
520166e63ce3Schristos     OPRND (dr) = opval;
5202ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
520366e63ce3Schristos   }
520466e63ce3Schristos 
520566e63ce3Schristos #undef OPRND
520666e63ce3Schristos #undef FLD
520766e63ce3Schristos }
520866e63ce3Schristos   NEXT (vpc);
520966e63ce3Schristos 
CASE(sem,INSN_WRITE_MVFC)521066e63ce3Schristos CASE (sem, INSN_WRITE_MVFC) : /* mvfc $dr,$scr */
521166e63ce3Schristos   {
521266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
521366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
521466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
521566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvfc.f
521666e63ce3Schristos     int UNUSED written = abuf->written;
521766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
521866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
521966e63ce3Schristos 
522066e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
522166e63ce3Schristos 
522266e63ce3Schristos #undef OPRND
522366e63ce3Schristos #undef FLD
522466e63ce3Schristos   }
522566e63ce3Schristos   NEXT (vpc);
522666e63ce3Schristos 
CASE(sem,INSN_PAR_MVTACHI_A)522766e63ce3Schristos   CASE (sem, INSN_PAR_MVTACHI_A) : /* mvtachi $src1,$accs */
522866e63ce3Schristos {
522966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
523066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
523166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
523266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
523366e63ce3Schristos   int UNUSED written = 0;
523466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
523566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
523666e63ce3Schristos 
523766e63ce3Schristos   {
523866e63ce3Schristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
523966e63ce3Schristos     OPRND (accs) = opval;
5240ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
524166e63ce3Schristos   }
524266e63ce3Schristos 
524366e63ce3Schristos #undef OPRND
524466e63ce3Schristos #undef FLD
524566e63ce3Schristos }
524666e63ce3Schristos   NEXT (vpc);
524766e63ce3Schristos 
CASE(sem,INSN_WRITE_MVTACHI_A)524866e63ce3Schristos CASE (sem, INSN_WRITE_MVTACHI_A) : /* mvtachi $src1,$accs */
524966e63ce3Schristos   {
525066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
525166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
525266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
525366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
525466e63ce3Schristos     int UNUSED written = abuf->written;
525566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
525666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
525766e63ce3Schristos 
525866e63ce3Schristos   SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
525966e63ce3Schristos 
526066e63ce3Schristos #undef OPRND
526166e63ce3Schristos #undef FLD
526266e63ce3Schristos   }
526366e63ce3Schristos   NEXT (vpc);
526466e63ce3Schristos 
CASE(sem,INSN_PAR_MVTACLO_A)526566e63ce3Schristos   CASE (sem, INSN_PAR_MVTACLO_A) : /* mvtaclo $src1,$accs */
526666e63ce3Schristos {
526766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
526866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
526966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
527066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
527166e63ce3Schristos   int UNUSED written = 0;
527266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
527366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
527466e63ce3Schristos 
527566e63ce3Schristos   {
527666e63ce3Schristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
527766e63ce3Schristos     OPRND (accs) = opval;
5278ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
527966e63ce3Schristos   }
528066e63ce3Schristos 
528166e63ce3Schristos #undef OPRND
528266e63ce3Schristos #undef FLD
528366e63ce3Schristos }
528466e63ce3Schristos   NEXT (vpc);
528566e63ce3Schristos 
CASE(sem,INSN_WRITE_MVTACLO_A)528666e63ce3Schristos CASE (sem, INSN_WRITE_MVTACLO_A) : /* mvtaclo $src1,$accs */
528766e63ce3Schristos   {
528866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
528966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
529066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
529166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
529266e63ce3Schristos     int UNUSED written = abuf->written;
529366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
529466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
529566e63ce3Schristos 
529666e63ce3Schristos   SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
529766e63ce3Schristos 
529866e63ce3Schristos #undef OPRND
529966e63ce3Schristos #undef FLD
530066e63ce3Schristos   }
530166e63ce3Schristos   NEXT (vpc);
530266e63ce3Schristos 
CASE(sem,INSN_PAR_MVTC)530366e63ce3Schristos   CASE (sem, INSN_PAR_MVTC) : /* mvtc $sr,$dcr */
530466e63ce3Schristos {
530566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
530666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
530766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
530866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvtc.f
530966e63ce3Schristos   int UNUSED written = 0;
531066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
531166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
531266e63ce3Schristos 
531366e63ce3Schristos   {
531466e63ce3Schristos     USI opval = * FLD (i_sr);
531566e63ce3Schristos     OPRND (dcr) = opval;
5316ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
531766e63ce3Schristos   }
531866e63ce3Schristos 
531966e63ce3Schristos #undef OPRND
532066e63ce3Schristos #undef FLD
532166e63ce3Schristos }
532266e63ce3Schristos   NEXT (vpc);
532366e63ce3Schristos 
CASE(sem,INSN_WRITE_MVTC)532466e63ce3Schristos CASE (sem, INSN_WRITE_MVTC) : /* mvtc $sr,$dcr */
532566e63ce3Schristos   {
532666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
532766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
532866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
532966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mvtc.f
533066e63ce3Schristos     int UNUSED written = abuf->written;
533166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
533266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
533366e63ce3Schristos 
533466e63ce3Schristos   SET_H_CR (FLD (f_r1), OPRND (dcr));
533566e63ce3Schristos 
533666e63ce3Schristos #undef OPRND
533766e63ce3Schristos #undef FLD
533866e63ce3Schristos   }
533966e63ce3Schristos   NEXT (vpc);
534066e63ce3Schristos 
CASE(sem,INSN_PAR_NEG)534166e63ce3Schristos   CASE (sem, INSN_PAR_NEG) : /* neg $dr,$sr */
534266e63ce3Schristos {
534366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
534466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
534566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
534666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mv.f
534766e63ce3Schristos   int UNUSED written = 0;
534866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
534966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
535066e63ce3Schristos 
535166e63ce3Schristos   {
535266e63ce3Schristos     SI opval = NEGSI (* FLD (i_sr));
535366e63ce3Schristos     OPRND (dr) = opval;
5354ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
535566e63ce3Schristos   }
535666e63ce3Schristos 
535766e63ce3Schristos #undef OPRND
535866e63ce3Schristos #undef FLD
535966e63ce3Schristos }
536066e63ce3Schristos   NEXT (vpc);
536166e63ce3Schristos 
CASE(sem,INSN_WRITE_NEG)536266e63ce3Schristos CASE (sem, INSN_WRITE_NEG) : /* neg $dr,$sr */
536366e63ce3Schristos   {
536466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
536566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
536666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
536766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mv.f
536866e63ce3Schristos     int UNUSED written = abuf->written;
536966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
537066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
537166e63ce3Schristos 
537266e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
537366e63ce3Schristos 
537466e63ce3Schristos #undef OPRND
537566e63ce3Schristos #undef FLD
537666e63ce3Schristos   }
537766e63ce3Schristos   NEXT (vpc);
537866e63ce3Schristos 
CASE(sem,INSN_PAR_NOP)537966e63ce3Schristos   CASE (sem, INSN_PAR_NOP) : /* nop */
538066e63ce3Schristos {
538166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
538266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
538366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
538466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_nop.f
538566e63ce3Schristos   int UNUSED written = 0;
538666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
538766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
538866e63ce3Schristos 
538966e63ce3Schristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
539066e63ce3Schristos 
539166e63ce3Schristos #undef OPRND
539266e63ce3Schristos #undef FLD
539366e63ce3Schristos }
539466e63ce3Schristos   NEXT (vpc);
539566e63ce3Schristos 
CASE(sem,INSN_WRITE_NOP)539666e63ce3Schristos CASE (sem, INSN_WRITE_NOP) : /* nop */
539766e63ce3Schristos   {
539866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
539966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
540066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
540166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_nop.f
540266e63ce3Schristos     int UNUSED written = abuf->written;
540366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
540466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
540566e63ce3Schristos 
540666e63ce3Schristos 
540766e63ce3Schristos #undef OPRND
540866e63ce3Schristos #undef FLD
540966e63ce3Schristos   }
541066e63ce3Schristos   NEXT (vpc);
541166e63ce3Schristos 
CASE(sem,INSN_PAR_NOT)541266e63ce3Schristos   CASE (sem, INSN_PAR_NOT) : /* not $dr,$sr */
541366e63ce3Schristos {
541466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
541566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
541666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
541766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mv.f
541866e63ce3Schristos   int UNUSED written = 0;
541966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
542066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
542166e63ce3Schristos 
542266e63ce3Schristos   {
542366e63ce3Schristos     SI opval = INVSI (* FLD (i_sr));
542466e63ce3Schristos     OPRND (dr) = opval;
5425ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
542666e63ce3Schristos   }
542766e63ce3Schristos 
542866e63ce3Schristos #undef OPRND
542966e63ce3Schristos #undef FLD
543066e63ce3Schristos }
543166e63ce3Schristos   NEXT (vpc);
543266e63ce3Schristos 
CASE(sem,INSN_WRITE_NOT)543366e63ce3Schristos CASE (sem, INSN_WRITE_NOT) : /* not $dr,$sr */
543466e63ce3Schristos   {
543566e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
543666e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
543766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
543866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mv.f
543966e63ce3Schristos     int UNUSED written = abuf->written;
544066e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
544166e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
544266e63ce3Schristos 
544366e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
544466e63ce3Schristos 
544566e63ce3Schristos #undef OPRND
544666e63ce3Schristos #undef FLD
544766e63ce3Schristos   }
544866e63ce3Schristos   NEXT (vpc);
544966e63ce3Schristos 
CASE(sem,INSN_PAR_RAC_DSI)545066e63ce3Schristos   CASE (sem, INSN_PAR_RAC_DSI) : /* rac $accd,$accs,$imm1 */
545166e63ce3Schristos {
545266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
545366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
545466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
545566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
545666e63ce3Schristos   int UNUSED written = 0;
545766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
545866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
545966e63ce3Schristos 
546066e63ce3Schristos {
546166e63ce3Schristos   DI tmp_tmp1;
546266e63ce3Schristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
546366e63ce3Schristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
546466e63ce3Schristos   {
546566e63ce3Schristos     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)));
546666e63ce3Schristos     OPRND (accd) = opval;
5467ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
546866e63ce3Schristos   }
546966e63ce3Schristos }
547066e63ce3Schristos 
547166e63ce3Schristos #undef OPRND
547266e63ce3Schristos #undef FLD
547366e63ce3Schristos }
547466e63ce3Schristos   NEXT (vpc);
547566e63ce3Schristos 
CASE(sem,INSN_WRITE_RAC_DSI)547666e63ce3Schristos CASE (sem, INSN_WRITE_RAC_DSI) : /* rac $accd,$accs,$imm1 */
547766e63ce3Schristos   {
547866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
547966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
548066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
548166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
548266e63ce3Schristos     int UNUSED written = abuf->written;
548366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
548466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
548566e63ce3Schristos 
548666e63ce3Schristos   SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
548766e63ce3Schristos 
548866e63ce3Schristos #undef OPRND
548966e63ce3Schristos #undef FLD
549066e63ce3Schristos   }
549166e63ce3Schristos   NEXT (vpc);
549266e63ce3Schristos 
CASE(sem,INSN_PAR_RACH_DSI)549366e63ce3Schristos   CASE (sem, INSN_PAR_RACH_DSI) : /* rach $accd,$accs,$imm1 */
549466e63ce3Schristos {
549566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
549666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
549766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
549866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
549966e63ce3Schristos   int UNUSED written = 0;
550066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
550166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
550266e63ce3Schristos 
550366e63ce3Schristos {
550466e63ce3Schristos   DI tmp_tmp1;
550566e63ce3Schristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
550666e63ce3Schristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
550766e63ce3Schristos   {
550866e63ce3Schristos     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)));
550966e63ce3Schristos     OPRND (accd) = opval;
5510ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
551166e63ce3Schristos   }
551266e63ce3Schristos }
551366e63ce3Schristos 
551466e63ce3Schristos #undef OPRND
551566e63ce3Schristos #undef FLD
551666e63ce3Schristos }
551766e63ce3Schristos   NEXT (vpc);
551866e63ce3Schristos 
CASE(sem,INSN_WRITE_RACH_DSI)551966e63ce3Schristos CASE (sem, INSN_WRITE_RACH_DSI) : /* rach $accd,$accs,$imm1 */
552066e63ce3Schristos   {
552166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
552266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
552366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
552466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
552566e63ce3Schristos     int UNUSED written = abuf->written;
552666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
552766e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
552866e63ce3Schristos 
552966e63ce3Schristos   SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
553066e63ce3Schristos 
553166e63ce3Schristos #undef OPRND
553266e63ce3Schristos #undef FLD
553366e63ce3Schristos   }
553466e63ce3Schristos   NEXT (vpc);
553566e63ce3Schristos 
CASE(sem,INSN_PAR_RTE)553666e63ce3Schristos   CASE (sem, INSN_PAR_RTE) : /* rte */
553766e63ce3Schristos {
553866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
553966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
554066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
554166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_rte.f
554266e63ce3Schristos   int UNUSED written = 0;
554366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
554466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
554566e63ce3Schristos 
554666e63ce3Schristos {
554766e63ce3Schristos   {
554866e63ce3Schristos     USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
554966e63ce3Schristos     OPRND (pc) = opval;
5550ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
555166e63ce3Schristos   }
555266e63ce3Schristos   {
555366e63ce3Schristos     USI opval = GET_H_CR (((UINT) 14));
555466e63ce3Schristos     OPRND (h_cr_USI_6) = opval;
5555ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
555666e63ce3Schristos   }
555766e63ce3Schristos   {
555866e63ce3Schristos     UQI opval = CPU (h_bpsw);
555966e63ce3Schristos     OPRND (h_psw_UQI) = opval;
5560ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
556166e63ce3Schristos   }
556266e63ce3Schristos   {
556366e63ce3Schristos     UQI opval = CPU (h_bbpsw);
556466e63ce3Schristos     OPRND (h_bpsw_UQI) = opval;
5565ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
556666e63ce3Schristos   }
556766e63ce3Schristos }
556866e63ce3Schristos 
556966e63ce3Schristos #undef OPRND
557066e63ce3Schristos #undef FLD
557166e63ce3Schristos }
557266e63ce3Schristos   NEXT (vpc);
557366e63ce3Schristos 
CASE(sem,INSN_WRITE_RTE)557466e63ce3Schristos CASE (sem, INSN_WRITE_RTE) : /* rte */
557566e63ce3Schristos   {
557666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
557766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
557866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
557966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_rte.f
558066e63ce3Schristos     int UNUSED written = abuf->written;
558166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
558266e63ce3Schristos     SEM_BRANCH_INIT
558366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
558466e63ce3Schristos 
558566e63ce3Schristos   CPU (h_bpsw) = OPRND (h_bpsw_UQI);
558666e63ce3Schristos   SET_H_CR (((UINT) 6), OPRND (h_cr_USI_6));
558766e63ce3Schristos   SET_H_PSW (OPRND (h_psw_UQI));
558866e63ce3Schristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
558966e63ce3Schristos 
559066e63ce3Schristos   SEM_BRANCH_FINI (vpc);
559166e63ce3Schristos #undef OPRND
559266e63ce3Schristos #undef FLD
559366e63ce3Schristos   }
559466e63ce3Schristos   NEXT (vpc);
559566e63ce3Schristos 
CASE(sem,INSN_PAR_SLL)559666e63ce3Schristos   CASE (sem, INSN_PAR_SLL) : /* sll $dr,$sr */
559766e63ce3Schristos {
559866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
559966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
560066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
560166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
560266e63ce3Schristos   int UNUSED written = 0;
560366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
560466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
560566e63ce3Schristos 
560666e63ce3Schristos   {
560766e63ce3Schristos     SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
560866e63ce3Schristos     OPRND (dr) = opval;
5609ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
561066e63ce3Schristos   }
561166e63ce3Schristos 
561266e63ce3Schristos #undef OPRND
561366e63ce3Schristos #undef FLD
561466e63ce3Schristos }
561566e63ce3Schristos   NEXT (vpc);
561666e63ce3Schristos 
CASE(sem,INSN_WRITE_SLL)561766e63ce3Schristos CASE (sem, INSN_WRITE_SLL) : /* sll $dr,$sr */
561866e63ce3Schristos   {
561966e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
562066e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
562166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
562266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
562366e63ce3Schristos     int UNUSED written = abuf->written;
562466e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
562566e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
562666e63ce3Schristos 
562766e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
562866e63ce3Schristos 
562966e63ce3Schristos #undef OPRND
563066e63ce3Schristos #undef FLD
563166e63ce3Schristos   }
563266e63ce3Schristos   NEXT (vpc);
563366e63ce3Schristos 
CASE(sem,INSN_PAR_SLLI)563466e63ce3Schristos   CASE (sem, INSN_PAR_SLLI) : /* slli $dr,$uimm5 */
563566e63ce3Schristos {
563666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
563766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
563866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
563966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_slli.f
564066e63ce3Schristos   int UNUSED written = 0;
564166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
564266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
564366e63ce3Schristos 
564466e63ce3Schristos   {
564566e63ce3Schristos     SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
564666e63ce3Schristos     OPRND (dr) = opval;
5647ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
564866e63ce3Schristos   }
564966e63ce3Schristos 
565066e63ce3Schristos #undef OPRND
565166e63ce3Schristos #undef FLD
565266e63ce3Schristos }
565366e63ce3Schristos   NEXT (vpc);
565466e63ce3Schristos 
CASE(sem,INSN_WRITE_SLLI)565566e63ce3Schristos CASE (sem, INSN_WRITE_SLLI) : /* slli $dr,$uimm5 */
565666e63ce3Schristos   {
565766e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
565866e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
565966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
566066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_slli.f
566166e63ce3Schristos     int UNUSED written = abuf->written;
566266e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
566366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
566466e63ce3Schristos 
566566e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
566666e63ce3Schristos 
566766e63ce3Schristos #undef OPRND
566866e63ce3Schristos #undef FLD
566966e63ce3Schristos   }
567066e63ce3Schristos   NEXT (vpc);
567166e63ce3Schristos 
CASE(sem,INSN_PAR_SRA)567266e63ce3Schristos   CASE (sem, INSN_PAR_SRA) : /* sra $dr,$sr */
567366e63ce3Schristos {
567466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
567566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
567666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
567766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
567866e63ce3Schristos   int UNUSED written = 0;
567966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
568066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
568166e63ce3Schristos 
568266e63ce3Schristos   {
568366e63ce3Schristos     SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
568466e63ce3Schristos     OPRND (dr) = opval;
5685ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
568666e63ce3Schristos   }
568766e63ce3Schristos 
568866e63ce3Schristos #undef OPRND
568966e63ce3Schristos #undef FLD
569066e63ce3Schristos }
569166e63ce3Schristos   NEXT (vpc);
569266e63ce3Schristos 
CASE(sem,INSN_WRITE_SRA)569366e63ce3Schristos CASE (sem, INSN_WRITE_SRA) : /* sra $dr,$sr */
569466e63ce3Schristos   {
569566e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
569666e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
569766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
569866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
569966e63ce3Schristos     int UNUSED written = abuf->written;
570066e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
570166e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
570266e63ce3Schristos 
570366e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
570466e63ce3Schristos 
570566e63ce3Schristos #undef OPRND
570666e63ce3Schristos #undef FLD
570766e63ce3Schristos   }
570866e63ce3Schristos   NEXT (vpc);
570966e63ce3Schristos 
CASE(sem,INSN_PAR_SRAI)571066e63ce3Schristos   CASE (sem, INSN_PAR_SRAI) : /* srai $dr,$uimm5 */
571166e63ce3Schristos {
571266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
571366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
571466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
571566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_slli.f
571666e63ce3Schristos   int UNUSED written = 0;
571766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
571866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
571966e63ce3Schristos 
572066e63ce3Schristos   {
572166e63ce3Schristos     SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
572266e63ce3Schristos     OPRND (dr) = opval;
5723ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
572466e63ce3Schristos   }
572566e63ce3Schristos 
572666e63ce3Schristos #undef OPRND
572766e63ce3Schristos #undef FLD
572866e63ce3Schristos }
572966e63ce3Schristos   NEXT (vpc);
573066e63ce3Schristos 
CASE(sem,INSN_WRITE_SRAI)573166e63ce3Schristos CASE (sem, INSN_WRITE_SRAI) : /* srai $dr,$uimm5 */
573266e63ce3Schristos   {
573366e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
573466e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
573566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
573666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_slli.f
573766e63ce3Schristos     int UNUSED written = abuf->written;
573866e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
573966e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
574066e63ce3Schristos 
574166e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
574266e63ce3Schristos 
574366e63ce3Schristos #undef OPRND
574466e63ce3Schristos #undef FLD
574566e63ce3Schristos   }
574666e63ce3Schristos   NEXT (vpc);
574766e63ce3Schristos 
CASE(sem,INSN_PAR_SRL)574866e63ce3Schristos   CASE (sem, INSN_PAR_SRL) : /* srl $dr,$sr */
574966e63ce3Schristos {
575066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
575166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
575266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
575366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
575466e63ce3Schristos   int UNUSED written = 0;
575566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
575666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
575766e63ce3Schristos 
575866e63ce3Schristos   {
575966e63ce3Schristos     SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
576066e63ce3Schristos     OPRND (dr) = opval;
5761ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
576266e63ce3Schristos   }
576366e63ce3Schristos 
576466e63ce3Schristos #undef OPRND
576566e63ce3Schristos #undef FLD
576666e63ce3Schristos }
576766e63ce3Schristos   NEXT (vpc);
576866e63ce3Schristos 
CASE(sem,INSN_WRITE_SRL)576966e63ce3Schristos CASE (sem, INSN_WRITE_SRL) : /* srl $dr,$sr */
577066e63ce3Schristos   {
577166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
577266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
577366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
577466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
577566e63ce3Schristos     int UNUSED written = abuf->written;
577666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
577766e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
577866e63ce3Schristos 
577966e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
578066e63ce3Schristos 
578166e63ce3Schristos #undef OPRND
578266e63ce3Schristos #undef FLD
578366e63ce3Schristos   }
578466e63ce3Schristos   NEXT (vpc);
578566e63ce3Schristos 
CASE(sem,INSN_PAR_SRLI)578666e63ce3Schristos   CASE (sem, INSN_PAR_SRLI) : /* srli $dr,$uimm5 */
578766e63ce3Schristos {
578866e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
578966e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
579066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
579166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_slli.f
579266e63ce3Schristos   int UNUSED written = 0;
579366e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
579466e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
579566e63ce3Schristos 
579666e63ce3Schristos   {
579766e63ce3Schristos     SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
579866e63ce3Schristos     OPRND (dr) = opval;
5799ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
580066e63ce3Schristos   }
580166e63ce3Schristos 
580266e63ce3Schristos #undef OPRND
580366e63ce3Schristos #undef FLD
580466e63ce3Schristos }
580566e63ce3Schristos   NEXT (vpc);
580666e63ce3Schristos 
CASE(sem,INSN_WRITE_SRLI)580766e63ce3Schristos CASE (sem, INSN_WRITE_SRLI) : /* srli $dr,$uimm5 */
580866e63ce3Schristos   {
580966e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
581066e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
581166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_slli.f
581266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_slli.f
581366e63ce3Schristos     int UNUSED written = abuf->written;
581466e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
581566e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
581666e63ce3Schristos 
581766e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
581866e63ce3Schristos 
581966e63ce3Schristos #undef OPRND
582066e63ce3Schristos #undef FLD
582166e63ce3Schristos   }
582266e63ce3Schristos   NEXT (vpc);
582366e63ce3Schristos 
CASE(sem,INSN_PAR_ST)582466e63ce3Schristos   CASE (sem, INSN_PAR_ST) : /* st $src1,@$src2 */
582566e63ce3Schristos {
582666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
582766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
582866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
582966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_st.f
583066e63ce3Schristos   int UNUSED written = 0;
583166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
583266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
583366e63ce3Schristos 
583466e63ce3Schristos   {
583566e63ce3Schristos     SI opval = * FLD (i_src1);
583666e63ce3Schristos     OPRND (h_memory_SI_src2_idx) = * FLD (i_src2);
583766e63ce3Schristos     OPRND (h_memory_SI_src2) = opval;
5838ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
583966e63ce3Schristos   }
584066e63ce3Schristos 
584166e63ce3Schristos #undef OPRND
584266e63ce3Schristos #undef FLD
584366e63ce3Schristos }
584466e63ce3Schristos   NEXT (vpc);
584566e63ce3Schristos 
CASE(sem,INSN_WRITE_ST)584666e63ce3Schristos CASE (sem, INSN_WRITE_ST) : /* st $src1,@$src2 */
584766e63ce3Schristos   {
584866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
584966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
585066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
585166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_st.f
585266e63ce3Schristos     int UNUSED written = abuf->written;
585366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
585466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
585566e63ce3Schristos 
585666e63ce3Schristos   SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_src2_idx), OPRND (h_memory_SI_src2));
585766e63ce3Schristos 
585866e63ce3Schristos #undef OPRND
585966e63ce3Schristos #undef FLD
586066e63ce3Schristos   }
586166e63ce3Schristos   NEXT (vpc);
586266e63ce3Schristos 
CASE(sem,INSN_PAR_STB)586366e63ce3Schristos   CASE (sem, INSN_PAR_STB) : /* stb $src1,@$src2 */
586466e63ce3Schristos {
586566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
586666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
586766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
586866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_stb.f
586966e63ce3Schristos   int UNUSED written = 0;
587066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
587166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
587266e63ce3Schristos 
587366e63ce3Schristos   {
587466e63ce3Schristos     QI opval = * FLD (i_src1);
587566e63ce3Schristos     OPRND (h_memory_QI_src2_idx) = * FLD (i_src2);
587666e63ce3Schristos     OPRND (h_memory_QI_src2) = opval;
5877ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
587866e63ce3Schristos   }
587966e63ce3Schristos 
588066e63ce3Schristos #undef OPRND
588166e63ce3Schristos #undef FLD
588266e63ce3Schristos }
588366e63ce3Schristos   NEXT (vpc);
588466e63ce3Schristos 
CASE(sem,INSN_WRITE_STB)588566e63ce3Schristos CASE (sem, INSN_WRITE_STB) : /* stb $src1,@$src2 */
588666e63ce3Schristos   {
588766e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
588866e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
588966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
589066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_stb.f
589166e63ce3Schristos     int UNUSED written = abuf->written;
589266e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
589366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
589466e63ce3Schristos 
589566e63ce3Schristos   SETMEMQI (current_cpu, pc, OPRND (h_memory_QI_src2_idx), OPRND (h_memory_QI_src2));
589666e63ce3Schristos 
589766e63ce3Schristos #undef OPRND
589866e63ce3Schristos #undef FLD
589966e63ce3Schristos   }
590066e63ce3Schristos   NEXT (vpc);
590166e63ce3Schristos 
CASE(sem,INSN_PAR_STH)590266e63ce3Schristos   CASE (sem, INSN_PAR_STH) : /* sth $src1,@$src2 */
590366e63ce3Schristos {
590466e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
590566e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
590666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
590766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sth.f
590866e63ce3Schristos   int UNUSED written = 0;
590966e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
591066e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
591166e63ce3Schristos 
591266e63ce3Schristos   {
591366e63ce3Schristos     HI opval = * FLD (i_src1);
591466e63ce3Schristos     OPRND (h_memory_HI_src2_idx) = * FLD (i_src2);
591566e63ce3Schristos     OPRND (h_memory_HI_src2) = opval;
5916ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
591766e63ce3Schristos   }
591866e63ce3Schristos 
591966e63ce3Schristos #undef OPRND
592066e63ce3Schristos #undef FLD
592166e63ce3Schristos }
592266e63ce3Schristos   NEXT (vpc);
592366e63ce3Schristos 
CASE(sem,INSN_WRITE_STH)592466e63ce3Schristos CASE (sem, INSN_WRITE_STH) : /* sth $src1,@$src2 */
592566e63ce3Schristos   {
592666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
592766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
592866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
592966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sth.f
593066e63ce3Schristos     int UNUSED written = abuf->written;
593166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
593266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
593366e63ce3Schristos 
593466e63ce3Schristos   SETMEMHI (current_cpu, pc, OPRND (h_memory_HI_src2_idx), OPRND (h_memory_HI_src2));
593566e63ce3Schristos 
593666e63ce3Schristos #undef OPRND
593766e63ce3Schristos #undef FLD
593866e63ce3Schristos   }
593966e63ce3Schristos   NEXT (vpc);
594066e63ce3Schristos 
CASE(sem,INSN_PAR_ST_PLUS)594166e63ce3Schristos   CASE (sem, INSN_PAR_ST_PLUS) : /* st $src1,@+$src2 */
594266e63ce3Schristos {
594366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
594466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
594566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
594666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
594766e63ce3Schristos   int UNUSED written = 0;
594866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
594966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
595066e63ce3Schristos 
595166e63ce3Schristos {
595266e63ce3Schristos   SI tmp_new_src2;
595366e63ce3Schristos   tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
595466e63ce3Schristos   {
595566e63ce3Schristos     SI opval = * FLD (i_src1);
595666e63ce3Schristos     OPRND (h_memory_SI_new_src2_idx) = tmp_new_src2;
595766e63ce3Schristos     OPRND (h_memory_SI_new_src2) = opval;
5958ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
595966e63ce3Schristos   }
596066e63ce3Schristos   {
596166e63ce3Schristos     SI opval = tmp_new_src2;
596266e63ce3Schristos     OPRND (src2) = opval;
5963ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
596466e63ce3Schristos   }
596566e63ce3Schristos }
596666e63ce3Schristos 
596766e63ce3Schristos #undef OPRND
596866e63ce3Schristos #undef FLD
596966e63ce3Schristos }
597066e63ce3Schristos   NEXT (vpc);
597166e63ce3Schristos 
CASE(sem,INSN_WRITE_ST_PLUS)597266e63ce3Schristos CASE (sem, INSN_WRITE_ST_PLUS) : /* st $src1,@+$src2 */
597366e63ce3Schristos   {
597466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
597566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
597666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
597766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
597866e63ce3Schristos     int UNUSED written = abuf->written;
597966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
598066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
598166e63ce3Schristos 
598266e63ce3Schristos   SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_new_src2_idx), OPRND (h_memory_SI_new_src2));
598366e63ce3Schristos   * FLD (i_src2) = OPRND (src2);
598466e63ce3Schristos 
598566e63ce3Schristos #undef OPRND
598666e63ce3Schristos #undef FLD
598766e63ce3Schristos   }
598866e63ce3Schristos   NEXT (vpc);
598966e63ce3Schristos 
CASE(sem,INSN_PAR_STH_PLUS)599066e63ce3Schristos   CASE (sem, INSN_PAR_STH_PLUS) : /* sth $src1,@$src2+ */
599166e63ce3Schristos {
599266e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
599366e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
599466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
599566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sth_plus.f
599666e63ce3Schristos   int UNUSED written = 0;
599766e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
599866e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
599966e63ce3Schristos 
600066e63ce3Schristos {
600166e63ce3Schristos   SI tmp_new_src2;
600266e63ce3Schristos   tmp_new_src2 = * FLD (i_src2);
600366e63ce3Schristos   {
600466e63ce3Schristos     HI opval = * FLD (i_src1);
600566e63ce3Schristos     OPRND (h_memory_HI_new_src2_idx) = tmp_new_src2;
600666e63ce3Schristos     OPRND (h_memory_HI_new_src2) = opval;
6007ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
600866e63ce3Schristos   }
600966e63ce3Schristos   {
601066e63ce3Schristos     SI opval = ADDSI (tmp_new_src2, 2);
601166e63ce3Schristos     OPRND (src2) = opval;
6012ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
601366e63ce3Schristos   }
601466e63ce3Schristos }
601566e63ce3Schristos 
601666e63ce3Schristos #undef OPRND
601766e63ce3Schristos #undef FLD
601866e63ce3Schristos }
601966e63ce3Schristos   NEXT (vpc);
602066e63ce3Schristos 
CASE(sem,INSN_WRITE_STH_PLUS)602166e63ce3Schristos CASE (sem, INSN_WRITE_STH_PLUS) : /* sth $src1,@$src2+ */
602266e63ce3Schristos   {
602366e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
602466e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
602566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
602666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sth_plus.f
602766e63ce3Schristos     int UNUSED written = abuf->written;
602866e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
602966e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
603066e63ce3Schristos 
603166e63ce3Schristos   SETMEMHI (current_cpu, pc, OPRND (h_memory_HI_new_src2_idx), OPRND (h_memory_HI_new_src2));
603266e63ce3Schristos   * FLD (i_src2) = OPRND (src2);
603366e63ce3Schristos 
603466e63ce3Schristos #undef OPRND
603566e63ce3Schristos #undef FLD
603666e63ce3Schristos   }
603766e63ce3Schristos   NEXT (vpc);
603866e63ce3Schristos 
CASE(sem,INSN_PAR_STB_PLUS)603966e63ce3Schristos   CASE (sem, INSN_PAR_STB_PLUS) : /* stb $src1,@$src2+ */
604066e63ce3Schristos {
604166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
604266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
604366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
604466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_stb_plus.f
604566e63ce3Schristos   int UNUSED written = 0;
604666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
604766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
604866e63ce3Schristos 
604966e63ce3Schristos {
605066e63ce3Schristos   SI tmp_new_src2;
605166e63ce3Schristos   tmp_new_src2 = * FLD (i_src2);
605266e63ce3Schristos   {
605366e63ce3Schristos     QI opval = * FLD (i_src1);
605466e63ce3Schristos     OPRND (h_memory_QI_new_src2_idx) = tmp_new_src2;
605566e63ce3Schristos     OPRND (h_memory_QI_new_src2) = opval;
6056ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
605766e63ce3Schristos   }
605866e63ce3Schristos   {
605966e63ce3Schristos     SI opval = ADDSI (tmp_new_src2, 1);
606066e63ce3Schristos     OPRND (src2) = opval;
6061ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
606266e63ce3Schristos   }
606366e63ce3Schristos }
606466e63ce3Schristos 
606566e63ce3Schristos #undef OPRND
606666e63ce3Schristos #undef FLD
606766e63ce3Schristos }
606866e63ce3Schristos   NEXT (vpc);
606966e63ce3Schristos 
CASE(sem,INSN_WRITE_STB_PLUS)607066e63ce3Schristos CASE (sem, INSN_WRITE_STB_PLUS) : /* stb $src1,@$src2+ */
607166e63ce3Schristos   {
607266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
607366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
607466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
607566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_stb_plus.f
607666e63ce3Schristos     int UNUSED written = abuf->written;
607766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
607866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
607966e63ce3Schristos 
608066e63ce3Schristos   SETMEMQI (current_cpu, pc, OPRND (h_memory_QI_new_src2_idx), OPRND (h_memory_QI_new_src2));
608166e63ce3Schristos   * FLD (i_src2) = OPRND (src2);
608266e63ce3Schristos 
608366e63ce3Schristos #undef OPRND
608466e63ce3Schristos #undef FLD
608566e63ce3Schristos   }
608666e63ce3Schristos   NEXT (vpc);
608766e63ce3Schristos 
CASE(sem,INSN_PAR_ST_MINUS)608866e63ce3Schristos   CASE (sem, INSN_PAR_ST_MINUS) : /* st $src1,@-$src2 */
608966e63ce3Schristos {
609066e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
609166e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
609266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
609366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
609466e63ce3Schristos   int UNUSED written = 0;
609566e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
609666e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
609766e63ce3Schristos 
609866e63ce3Schristos {
609966e63ce3Schristos   SI tmp_new_src2;
610066e63ce3Schristos   tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
610166e63ce3Schristos   {
610266e63ce3Schristos     SI opval = * FLD (i_src1);
610366e63ce3Schristos     OPRND (h_memory_SI_new_src2_idx) = tmp_new_src2;
610466e63ce3Schristos     OPRND (h_memory_SI_new_src2) = opval;
6105ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
610666e63ce3Schristos   }
610766e63ce3Schristos   {
610866e63ce3Schristos     SI opval = tmp_new_src2;
610966e63ce3Schristos     OPRND (src2) = opval;
6110ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
611166e63ce3Schristos   }
611266e63ce3Schristos }
611366e63ce3Schristos 
611466e63ce3Schristos #undef OPRND
611566e63ce3Schristos #undef FLD
611666e63ce3Schristos }
611766e63ce3Schristos   NEXT (vpc);
611866e63ce3Schristos 
CASE(sem,INSN_WRITE_ST_MINUS)611966e63ce3Schristos CASE (sem, INSN_WRITE_ST_MINUS) : /* st $src1,@-$src2 */
612066e63ce3Schristos   {
612166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
612266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
612366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
612466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
612566e63ce3Schristos     int UNUSED written = abuf->written;
612666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
612766e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
612866e63ce3Schristos 
612966e63ce3Schristos   SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_new_src2_idx), OPRND (h_memory_SI_new_src2));
613066e63ce3Schristos   * FLD (i_src2) = OPRND (src2);
613166e63ce3Schristos 
613266e63ce3Schristos #undef OPRND
613366e63ce3Schristos #undef FLD
613466e63ce3Schristos   }
613566e63ce3Schristos   NEXT (vpc);
613666e63ce3Schristos 
CASE(sem,INSN_PAR_SUB)613766e63ce3Schristos   CASE (sem, INSN_PAR_SUB) : /* sub $dr,$sr */
613866e63ce3Schristos {
613966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
614066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
614166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
614266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
614366e63ce3Schristos   int UNUSED written = 0;
614466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
614566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
614666e63ce3Schristos 
614766e63ce3Schristos   {
614866e63ce3Schristos     SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
614966e63ce3Schristos     OPRND (dr) = opval;
6150ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
615166e63ce3Schristos   }
615266e63ce3Schristos 
615366e63ce3Schristos #undef OPRND
615466e63ce3Schristos #undef FLD
615566e63ce3Schristos }
615666e63ce3Schristos   NEXT (vpc);
615766e63ce3Schristos 
CASE(sem,INSN_WRITE_SUB)615866e63ce3Schristos CASE (sem, INSN_WRITE_SUB) : /* sub $dr,$sr */
615966e63ce3Schristos   {
616066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
616166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
616266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
616366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_add.f
616466e63ce3Schristos     int UNUSED written = abuf->written;
616566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
616666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
616766e63ce3Schristos 
616866e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
616966e63ce3Schristos 
617066e63ce3Schristos #undef OPRND
617166e63ce3Schristos #undef FLD
617266e63ce3Schristos   }
617366e63ce3Schristos   NEXT (vpc);
617466e63ce3Schristos 
CASE(sem,INSN_PAR_SUBV)617566e63ce3Schristos   CASE (sem, INSN_PAR_SUBV) : /* subv $dr,$sr */
617666e63ce3Schristos {
617766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
617866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
617966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
618066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addv.f
618166e63ce3Schristos   int UNUSED written = 0;
618266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
618366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
618466e63ce3Schristos 
618566e63ce3Schristos {
618666e63ce3Schristos   SI temp0;BI temp1;
618766e63ce3Schristos   temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
618866e63ce3Schristos   temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
618966e63ce3Schristos   {
619066e63ce3Schristos     SI opval = temp0;
619166e63ce3Schristos     OPRND (dr) = opval;
6192ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
619366e63ce3Schristos   }
619466e63ce3Schristos   {
619566e63ce3Schristos     BI opval = temp1;
619666e63ce3Schristos     OPRND (condbit) = opval;
6197ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
619866e63ce3Schristos   }
619966e63ce3Schristos }
620066e63ce3Schristos 
620166e63ce3Schristos #undef OPRND
620266e63ce3Schristos #undef FLD
620366e63ce3Schristos }
620466e63ce3Schristos   NEXT (vpc);
620566e63ce3Schristos 
CASE(sem,INSN_WRITE_SUBV)620666e63ce3Schristos CASE (sem, INSN_WRITE_SUBV) : /* subv $dr,$sr */
620766e63ce3Schristos   {
620866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
620966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
621066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
621166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addv.f
621266e63ce3Schristos     int UNUSED written = abuf->written;
621366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
621466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
621566e63ce3Schristos 
621666e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
621766e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
621866e63ce3Schristos 
621966e63ce3Schristos #undef OPRND
622066e63ce3Schristos #undef FLD
622166e63ce3Schristos   }
622266e63ce3Schristos   NEXT (vpc);
622366e63ce3Schristos 
CASE(sem,INSN_PAR_SUBX)622466e63ce3Schristos   CASE (sem, INSN_PAR_SUBX) : /* subx $dr,$sr */
622566e63ce3Schristos {
622666e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
622766e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
622866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
622966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addx.f
623066e63ce3Schristos   int UNUSED written = 0;
623166e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
623266e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
623366e63ce3Schristos 
623466e63ce3Schristos {
623566e63ce3Schristos   SI temp0;BI temp1;
623666e63ce3Schristos   temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
623766e63ce3Schristos   temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
623866e63ce3Schristos   {
623966e63ce3Schristos     SI opval = temp0;
624066e63ce3Schristos     OPRND (dr) = opval;
6241ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
624266e63ce3Schristos   }
624366e63ce3Schristos   {
624466e63ce3Schristos     BI opval = temp1;
624566e63ce3Schristos     OPRND (condbit) = opval;
6246ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
624766e63ce3Schristos   }
624866e63ce3Schristos }
624966e63ce3Schristos 
625066e63ce3Schristos #undef OPRND
625166e63ce3Schristos #undef FLD
625266e63ce3Schristos }
625366e63ce3Schristos   NEXT (vpc);
625466e63ce3Schristos 
CASE(sem,INSN_WRITE_SUBX)625566e63ce3Schristos CASE (sem, INSN_WRITE_SUBX) : /* subx $dr,$sr */
625666e63ce3Schristos   {
625766e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
625866e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
625966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_add.f
626066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_addx.f
626166e63ce3Schristos     int UNUSED written = abuf->written;
626266e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
626366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
626466e63ce3Schristos 
626566e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
626666e63ce3Schristos   * FLD (i_dr) = OPRND (dr);
626766e63ce3Schristos 
626866e63ce3Schristos #undef OPRND
626966e63ce3Schristos #undef FLD
627066e63ce3Schristos   }
627166e63ce3Schristos   NEXT (vpc);
627266e63ce3Schristos 
CASE(sem,INSN_PAR_TRAP)627366e63ce3Schristos   CASE (sem, INSN_PAR_TRAP) : /* trap $uimm4 */
627466e63ce3Schristos {
627566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
627666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
627766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_trap.f
627866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_trap.f
627966e63ce3Schristos   int UNUSED written = 0;
628066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
628166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
628266e63ce3Schristos 
628366e63ce3Schristos {
628466e63ce3Schristos   {
628566e63ce3Schristos     USI opval = GET_H_CR (((UINT) 6));
628666e63ce3Schristos     OPRND (h_cr_USI_14) = opval;
6287ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
628866e63ce3Schristos   }
628966e63ce3Schristos   {
629066e63ce3Schristos     USI opval = ADDSI (pc, 4);
629166e63ce3Schristos     OPRND (h_cr_USI_6) = opval;
6292ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
629366e63ce3Schristos   }
629466e63ce3Schristos   {
629566e63ce3Schristos     UQI opval = CPU (h_bpsw);
629666e63ce3Schristos     OPRND (h_bbpsw_UQI) = opval;
6297ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
629866e63ce3Schristos   }
629966e63ce3Schristos   {
630066e63ce3Schristos     UQI opval = GET_H_PSW ();
630166e63ce3Schristos     OPRND (h_bpsw_UQI) = opval;
6302ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
630366e63ce3Schristos   }
630466e63ce3Schristos   {
630566e63ce3Schristos     UQI opval = ANDQI (GET_H_PSW (), 128);
630666e63ce3Schristos     OPRND (h_psw_UQI) = opval;
6307ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
630866e63ce3Schristos   }
630966e63ce3Schristos   {
631066e63ce3Schristos     SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
631166e63ce3Schristos     OPRND (pc) = opval;
6312ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
631366e63ce3Schristos   }
631466e63ce3Schristos }
631566e63ce3Schristos 
631666e63ce3Schristos #undef OPRND
631766e63ce3Schristos #undef FLD
631866e63ce3Schristos }
631966e63ce3Schristos   NEXT (vpc);
632066e63ce3Schristos 
CASE(sem,INSN_WRITE_TRAP)632166e63ce3Schristos CASE (sem, INSN_WRITE_TRAP) : /* trap $uimm4 */
632266e63ce3Schristos   {
632366e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
632466e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
632566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_trap.f
632666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_trap.f
632766e63ce3Schristos     int UNUSED written = abuf->written;
632866e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
632966e63ce3Schristos     SEM_BRANCH_INIT
633066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
633166e63ce3Schristos 
633266e63ce3Schristos   CPU (h_bbpsw) = OPRND (h_bbpsw_UQI);
633366e63ce3Schristos   CPU (h_bpsw) = OPRND (h_bpsw_UQI);
633466e63ce3Schristos   SET_H_CR (((UINT) 14), OPRND (h_cr_USI_14));
633566e63ce3Schristos   SET_H_CR (((UINT) 6), OPRND (h_cr_USI_6));
633666e63ce3Schristos   SET_H_PSW (OPRND (h_psw_UQI));
633766e63ce3Schristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
633866e63ce3Schristos 
633966e63ce3Schristos   SEM_BRANCH_FINI (vpc);
634066e63ce3Schristos #undef OPRND
634166e63ce3Schristos #undef FLD
634266e63ce3Schristos   }
634366e63ce3Schristos   NEXT (vpc);
634466e63ce3Schristos 
CASE(sem,INSN_PAR_UNLOCK)634566e63ce3Schristos   CASE (sem, INSN_PAR_UNLOCK) : /* unlock $src1,@$src2 */
634666e63ce3Schristos {
634766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
634866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
634966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
635066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_unlock.f
635166e63ce3Schristos   int UNUSED written = 0;
635266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
635366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
635466e63ce3Schristos 
635566e63ce3Schristos {
635666e63ce3Schristos if (CPU (h_lock)) {
635766e63ce3Schristos   {
635866e63ce3Schristos     SI opval = * FLD (i_src1);
635966e63ce3Schristos     OPRND (h_memory_SI_src2_idx) = * FLD (i_src2);
636066e63ce3Schristos     OPRND (h_memory_SI_src2) = opval;
636166e63ce3Schristos     written |= (1 << 4);
6362ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
636366e63ce3Schristos   }
636466e63ce3Schristos }
636566e63ce3Schristos   {
636666e63ce3Schristos     BI opval = 0;
636766e63ce3Schristos     OPRND (h_lock_BI) = opval;
6368ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
636966e63ce3Schristos   }
637066e63ce3Schristos }
637166e63ce3Schristos 
637266e63ce3Schristos   abuf->written = written;
637366e63ce3Schristos #undef OPRND
637466e63ce3Schristos #undef FLD
637566e63ce3Schristos }
637666e63ce3Schristos   NEXT (vpc);
637766e63ce3Schristos 
CASE(sem,INSN_WRITE_UNLOCK)637866e63ce3Schristos CASE (sem, INSN_WRITE_UNLOCK) : /* unlock $src1,@$src2 */
637966e63ce3Schristos   {
638066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
638166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
638266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
638366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_unlock.f
638466e63ce3Schristos     int UNUSED written = abuf->written;
638566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
638666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
638766e63ce3Schristos 
638866e63ce3Schristos   CPU (h_lock) = OPRND (h_lock_BI);
638966e63ce3Schristos   if (written & (1 << 4))
639066e63ce3Schristos     {
639166e63ce3Schristos       SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_src2_idx), OPRND (h_memory_SI_src2));
639266e63ce3Schristos     }
639366e63ce3Schristos 
639466e63ce3Schristos #undef OPRND
639566e63ce3Schristos #undef FLD
639666e63ce3Schristos   }
639766e63ce3Schristos   NEXT (vpc);
639866e63ce3Schristos 
CASE(sem,INSN_PAR_PCMPBZ)639966e63ce3Schristos   CASE (sem, INSN_PAR_PCMPBZ) : /* pcmpbz $src2 */
640066e63ce3Schristos {
640166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
640266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
640366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
640466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
640566e63ce3Schristos   int UNUSED written = 0;
640666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
640766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
640866e63ce3Schristos 
640966e63ce3Schristos   {
641066e63ce3Schristos     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);
641166e63ce3Schristos     OPRND (condbit) = opval;
6412ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
641366e63ce3Schristos   }
641466e63ce3Schristos 
641566e63ce3Schristos #undef OPRND
641666e63ce3Schristos #undef FLD
641766e63ce3Schristos }
641866e63ce3Schristos   NEXT (vpc);
641966e63ce3Schristos 
CASE(sem,INSN_WRITE_PCMPBZ)642066e63ce3Schristos CASE (sem, INSN_WRITE_PCMPBZ) : /* pcmpbz $src2 */
642166e63ce3Schristos   {
642266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
642366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
642466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
642566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
642666e63ce3Schristos     int UNUSED written = abuf->written;
642766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
642866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
642966e63ce3Schristos 
643066e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
643166e63ce3Schristos 
643266e63ce3Schristos #undef OPRND
643366e63ce3Schristos #undef FLD
643466e63ce3Schristos   }
643566e63ce3Schristos   NEXT (vpc);
643666e63ce3Schristos 
CASE(sem,INSN_PAR_SADD)643766e63ce3Schristos   CASE (sem, INSN_PAR_SADD) : /* sadd */
643866e63ce3Schristos {
643966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
644066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
644166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
644266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sadd.f
644366e63ce3Schristos   int UNUSED written = 0;
644466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
644566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
644666e63ce3Schristos 
644766e63ce3Schristos   {
644866e63ce3Schristos     DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0)));
644966e63ce3Schristos     OPRND (h_accums_DI_0) = opval;
6450ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
645166e63ce3Schristos   }
645266e63ce3Schristos 
645366e63ce3Schristos #undef OPRND
645466e63ce3Schristos #undef FLD
645566e63ce3Schristos }
645666e63ce3Schristos   NEXT (vpc);
645766e63ce3Schristos 
CASE(sem,INSN_WRITE_SADD)645866e63ce3Schristos CASE (sem, INSN_WRITE_SADD) : /* sadd */
645966e63ce3Schristos   {
646066e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
646166e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
646266e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
646366e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sadd.f
646466e63ce3Schristos     int UNUSED written = abuf->written;
646566e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
646666e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
646766e63ce3Schristos 
646866e63ce3Schristos   SET_H_ACCUMS (((UINT) 0), OPRND (h_accums_DI_0));
646966e63ce3Schristos 
647066e63ce3Schristos #undef OPRND
647166e63ce3Schristos #undef FLD
647266e63ce3Schristos   }
647366e63ce3Schristos   NEXT (vpc);
647466e63ce3Schristos 
CASE(sem,INSN_PAR_MACWU1)647566e63ce3Schristos   CASE (sem, INSN_PAR_MACWU1) : /* macwu1 $src1,$src2 */
647666e63ce3Schristos {
647766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
647866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
647966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
648066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
648166e63ce3Schristos   int UNUSED written = 0;
648266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
648366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
648466e63ce3Schristos 
648566e63ce3Schristos   {
648666e63ce3Schristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8);
648766e63ce3Schristos     OPRND (h_accums_DI_1) = opval;
6488ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
648966e63ce3Schristos   }
649066e63ce3Schristos 
649166e63ce3Schristos #undef OPRND
649266e63ce3Schristos #undef FLD
649366e63ce3Schristos }
649466e63ce3Schristos   NEXT (vpc);
649566e63ce3Schristos 
CASE(sem,INSN_WRITE_MACWU1)649666e63ce3Schristos CASE (sem, INSN_WRITE_MACWU1) : /* macwu1 $src1,$src2 */
649766e63ce3Schristos   {
649866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
649966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
650066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
650166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
650266e63ce3Schristos     int UNUSED written = abuf->written;
650366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
650466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
650566e63ce3Schristos 
650666e63ce3Schristos   SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1));
650766e63ce3Schristos 
650866e63ce3Schristos #undef OPRND
650966e63ce3Schristos #undef FLD
651066e63ce3Schristos   }
651166e63ce3Schristos   NEXT (vpc);
651266e63ce3Schristos 
CASE(sem,INSN_PAR_MSBLO)651366e63ce3Schristos   CASE (sem, INSN_PAR_MSBLO) : /* msblo $src1,$src2 */
651466e63ce3Schristos {
651566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
651666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
651766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
651866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_msblo.f
651966e63ce3Schristos   int UNUSED written = 0;
652066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
652166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
652266e63ce3Schristos 
652366e63ce3Schristos   {
652466e63ce3Schristos     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);
652566e63ce3Schristos     OPRND (accum) = opval;
6526ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
652766e63ce3Schristos   }
652866e63ce3Schristos 
652966e63ce3Schristos #undef OPRND
653066e63ce3Schristos #undef FLD
653166e63ce3Schristos }
653266e63ce3Schristos   NEXT (vpc);
653366e63ce3Schristos 
CASE(sem,INSN_WRITE_MSBLO)653466e63ce3Schristos CASE (sem, INSN_WRITE_MSBLO) : /* msblo $src1,$src2 */
653566e63ce3Schristos   {
653666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
653766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
653866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
653966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_msblo.f
654066e63ce3Schristos     int UNUSED written = abuf->written;
654166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
654266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
654366e63ce3Schristos 
654466e63ce3Schristos   SET_H_ACCUM (OPRND (accum));
654566e63ce3Schristos 
654666e63ce3Schristos #undef OPRND
654766e63ce3Schristos #undef FLD
654866e63ce3Schristos   }
654966e63ce3Schristos   NEXT (vpc);
655066e63ce3Schristos 
CASE(sem,INSN_PAR_MULWU1)655166e63ce3Schristos   CASE (sem, INSN_PAR_MULWU1) : /* mulwu1 $src1,$src2 */
655266e63ce3Schristos {
655366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
655466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
655566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
655666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulwu1.f
655766e63ce3Schristos   int UNUSED written = 0;
655866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
655966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
656066e63ce3Schristos 
656166e63ce3Schristos   {
656266e63ce3Schristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16);
656366e63ce3Schristos     OPRND (h_accums_DI_1) = opval;
6564ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
656566e63ce3Schristos   }
656666e63ce3Schristos 
656766e63ce3Schristos #undef OPRND
656866e63ce3Schristos #undef FLD
656966e63ce3Schristos }
657066e63ce3Schristos   NEXT (vpc);
657166e63ce3Schristos 
CASE(sem,INSN_WRITE_MULWU1)657266e63ce3Schristos CASE (sem, INSN_WRITE_MULWU1) : /* mulwu1 $src1,$src2 */
657366e63ce3Schristos   {
657466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
657566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
657666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
657766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_mulwu1.f
657866e63ce3Schristos     int UNUSED written = abuf->written;
657966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
658066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
658166e63ce3Schristos 
658266e63ce3Schristos   SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1));
658366e63ce3Schristos 
658466e63ce3Schristos #undef OPRND
658566e63ce3Schristos #undef FLD
658666e63ce3Schristos   }
658766e63ce3Schristos   NEXT (vpc);
658866e63ce3Schristos 
CASE(sem,INSN_PAR_MACLH1)658966e63ce3Schristos   CASE (sem, INSN_PAR_MACLH1) : /* maclh1 $src1,$src2 */
659066e63ce3Schristos {
659166e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
659266e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
659366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
659466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
659566e63ce3Schristos   int UNUSED written = 0;
659666e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
659766e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
659866e63ce3Schristos 
659966e63ce3Schristos   {
660066e63ce3Schristos     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);
660166e63ce3Schristos     OPRND (h_accums_DI_1) = opval;
6602ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
660366e63ce3Schristos   }
660466e63ce3Schristos 
660566e63ce3Schristos #undef OPRND
660666e63ce3Schristos #undef FLD
660766e63ce3Schristos }
660866e63ce3Schristos   NEXT (vpc);
660966e63ce3Schristos 
CASE(sem,INSN_WRITE_MACLH1)661066e63ce3Schristos CASE (sem, INSN_WRITE_MACLH1) : /* maclh1 $src1,$src2 */
661166e63ce3Schristos   {
661266e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
661366e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
661466e63ce3Schristos #define FLD(f) abuf->fields.sfmt_st_plus.f
661566e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
661666e63ce3Schristos     int UNUSED written = abuf->written;
661766e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
661866e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
661966e63ce3Schristos 
662066e63ce3Schristos   SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1));
662166e63ce3Schristos 
662266e63ce3Schristos #undef OPRND
662366e63ce3Schristos #undef FLD
662466e63ce3Schristos   }
662566e63ce3Schristos   NEXT (vpc);
662666e63ce3Schristos 
CASE(sem,INSN_PAR_SC)662766e63ce3Schristos   CASE (sem, INSN_PAR_SC) : /* sc */
662866e63ce3Schristos {
662966e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
663066e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
663166e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
663266e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sc.f
663366e63ce3Schristos   int UNUSED written = 0;
663466e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
663566e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
663666e63ce3Schristos 
663766e63ce3Schristos if (ZEXTBISI (CPU (h_cond)))
663866e63ce3Schristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
663966e63ce3Schristos 
664066e63ce3Schristos #undef OPRND
664166e63ce3Schristos #undef FLD
664266e63ce3Schristos }
664366e63ce3Schristos   NEXT (vpc);
664466e63ce3Schristos 
CASE(sem,INSN_WRITE_SC)664566e63ce3Schristos CASE (sem, INSN_WRITE_SC) : /* sc */
664666e63ce3Schristos   {
664766e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
664866e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
664966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
665066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sc.f
665166e63ce3Schristos     int UNUSED written = abuf->written;
665266e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
665366e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
665466e63ce3Schristos 
665566e63ce3Schristos 
665666e63ce3Schristos #undef OPRND
665766e63ce3Schristos #undef FLD
665866e63ce3Schristos   }
665966e63ce3Schristos   NEXT (vpc);
666066e63ce3Schristos 
CASE(sem,INSN_PAR_SNC)666166e63ce3Schristos   CASE (sem, INSN_PAR_SNC) : /* snc */
666266e63ce3Schristos {
666366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
666466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
666566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
666666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sc.f
666766e63ce3Schristos   int UNUSED written = 0;
666866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
666966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
667066e63ce3Schristos 
667166e63ce3Schristos if (ZEXTBISI (NOTBI (CPU (h_cond))))
667266e63ce3Schristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
667366e63ce3Schristos 
667466e63ce3Schristos #undef OPRND
667566e63ce3Schristos #undef FLD
667666e63ce3Schristos }
667766e63ce3Schristos   NEXT (vpc);
667866e63ce3Schristos 
CASE(sem,INSN_WRITE_SNC)667966e63ce3Schristos CASE (sem, INSN_WRITE_SNC) : /* snc */
668066e63ce3Schristos   {
668166e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
668266e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
668366e63ce3Schristos #define FLD(f) abuf->fields.sfmt_empty.f
668466e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_sc.f
668566e63ce3Schristos     int UNUSED written = abuf->written;
668666e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
668766e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
668866e63ce3Schristos 
668966e63ce3Schristos 
669066e63ce3Schristos #undef OPRND
669166e63ce3Schristos #undef FLD
669266e63ce3Schristos   }
669366e63ce3Schristos   NEXT (vpc);
669466e63ce3Schristos 
CASE(sem,INSN_PAR_CLRPSW)669566e63ce3Schristos   CASE (sem, INSN_PAR_CLRPSW) : /* clrpsw $uimm8 */
669666e63ce3Schristos {
669766e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
669866e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
669966e63ce3Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
670066e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_clrpsw.f
670166e63ce3Schristos   int UNUSED written = 0;
670266e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
670366e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
670466e63ce3Schristos 
670566e63ce3Schristos   {
670666e63ce3Schristos     USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280));
670766e63ce3Schristos     OPRND (h_cr_USI_0) = opval;
6708ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
670966e63ce3Schristos   }
671066e63ce3Schristos 
671166e63ce3Schristos #undef OPRND
671266e63ce3Schristos #undef FLD
671366e63ce3Schristos }
671466e63ce3Schristos   NEXT (vpc);
671566e63ce3Schristos 
CASE(sem,INSN_WRITE_CLRPSW)671666e63ce3Schristos CASE (sem, INSN_WRITE_CLRPSW) : /* clrpsw $uimm8 */
671766e63ce3Schristos   {
671866e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
671966e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
672066e63ce3Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
672166e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_clrpsw.f
672266e63ce3Schristos     int UNUSED written = abuf->written;
672366e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
672466e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
672566e63ce3Schristos 
672666e63ce3Schristos   SET_H_CR (((UINT) 0), OPRND (h_cr_USI_0));
672766e63ce3Schristos 
672866e63ce3Schristos #undef OPRND
672966e63ce3Schristos #undef FLD
673066e63ce3Schristos   }
673166e63ce3Schristos   NEXT (vpc);
673266e63ce3Schristos 
CASE(sem,INSN_PAR_SETPSW)673366e63ce3Schristos   CASE (sem, INSN_PAR_SETPSW) : /* setpsw $uimm8 */
673466e63ce3Schristos {
673566e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
673666e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
673766e63ce3Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
673866e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_setpsw.f
673966e63ce3Schristos   int UNUSED written = 0;
674066e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
674166e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
674266e63ce3Schristos 
674366e63ce3Schristos   {
674466e63ce3Schristos     USI opval = FLD (f_uimm8);
674566e63ce3Schristos     OPRND (h_cr_USI_0) = opval;
6746ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
674766e63ce3Schristos   }
674866e63ce3Schristos 
674966e63ce3Schristos #undef OPRND
675066e63ce3Schristos #undef FLD
675166e63ce3Schristos }
675266e63ce3Schristos   NEXT (vpc);
675366e63ce3Schristos 
CASE(sem,INSN_WRITE_SETPSW)675466e63ce3Schristos CASE (sem, INSN_WRITE_SETPSW) : /* setpsw $uimm8 */
675566e63ce3Schristos   {
675666e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
675766e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
675866e63ce3Schristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
675966e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_setpsw.f
676066e63ce3Schristos     int UNUSED written = abuf->written;
676166e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
676266e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
676366e63ce3Schristos 
676466e63ce3Schristos   SET_H_CR (((UINT) 0), OPRND (h_cr_USI_0));
676566e63ce3Schristos 
676666e63ce3Schristos #undef OPRND
676766e63ce3Schristos #undef FLD
676866e63ce3Schristos   }
676966e63ce3Schristos   NEXT (vpc);
677066e63ce3Schristos 
CASE(sem,INSN_PAR_BTST)677166e63ce3Schristos   CASE (sem, INSN_PAR_BTST) : /* btst $uimm3,$sr */
677266e63ce3Schristos {
677366e63ce3Schristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
677466e63ce3Schristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
677566e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bset.f
677666e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_btst.f
677766e63ce3Schristos   int UNUSED written = 0;
677866e63ce3Schristos   IADDR UNUSED pc = abuf->addr;
677966e63ce3Schristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
678066e63ce3Schristos 
678166e63ce3Schristos   {
678266e63ce3Schristos     BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
678366e63ce3Schristos     OPRND (condbit) = opval;
6784ed6a76a9Schristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
678566e63ce3Schristos   }
678666e63ce3Schristos 
678766e63ce3Schristos #undef OPRND
678866e63ce3Schristos #undef FLD
678966e63ce3Schristos }
679066e63ce3Schristos   NEXT (vpc);
679166e63ce3Schristos 
CASE(sem,INSN_WRITE_BTST)679266e63ce3Schristos CASE (sem, INSN_WRITE_BTST) : /* btst $uimm3,$sr */
679366e63ce3Schristos   {
679466e63ce3Schristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
679566e63ce3Schristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
679666e63ce3Schristos #define FLD(f) abuf->fields.sfmt_bset.f
679766e63ce3Schristos #define OPRND(f) par_exec->operands.sfmt_btst.f
679866e63ce3Schristos     int UNUSED written = abuf->written;
679966e63ce3Schristos     IADDR UNUSED pc = abuf->addr;
680066e63ce3Schristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
680166e63ce3Schristos 
680266e63ce3Schristos   CPU (h_cond) = OPRND (condbit);
680366e63ce3Schristos 
680466e63ce3Schristos #undef OPRND
680566e63ce3Schristos #undef FLD
680666e63ce3Schristos   }
680766e63ce3Schristos   NEXT (vpc);
680866e63ce3Schristos 
680966e63ce3Schristos 
681066e63ce3Schristos     }
681166e63ce3Schristos   ENDSWITCH (sem) /* End of semantic switch.  */
681266e63ce3Schristos 
681366e63ce3Schristos   /* At this point `vpc' contains the next insn to execute.  */
681466e63ce3Schristos }
681566e63ce3Schristos 
681666e63ce3Schristos #undef DEFINE_SWITCH
681766e63ce3Schristos #endif /* DEFINE_SWITCH */
6818