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