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