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