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