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