1 /* Simulator instruction semantics for sh64.
2 
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4 
5 Copyright 1996-2010 Free Software Foundation, Inc.
6 
7 This file is part of the GNU simulators.
8 
9    This file is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3, or (at your option)
12    any later version.
13 
14    It is distributed in the hope that it will be useful, but WITHOUT
15    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17    License for more details.
18 
19    You should have received a copy of the GNU General Public License along
20    with this program; if not, write to the Free Software Foundation, Inc.,
21    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 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     { SH64_MEDIA_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36     { SH64_MEDIA_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37     { SH64_MEDIA_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38     { SH64_MEDIA_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39     { SH64_MEDIA_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40     { SH64_MEDIA_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41     { SH64_MEDIA_INSN_ADD, && case_sem_INSN_ADD },
42     { SH64_MEDIA_INSN_ADDL, && case_sem_INSN_ADDL },
43     { SH64_MEDIA_INSN_ADDI, && case_sem_INSN_ADDI },
44     { SH64_MEDIA_INSN_ADDIL, && case_sem_INSN_ADDIL },
45     { SH64_MEDIA_INSN_ADDZL, && case_sem_INSN_ADDZL },
46     { SH64_MEDIA_INSN_ALLOCO, && case_sem_INSN_ALLOCO },
47     { SH64_MEDIA_INSN_AND, && case_sem_INSN_AND },
48     { SH64_MEDIA_INSN_ANDC, && case_sem_INSN_ANDC },
49     { SH64_MEDIA_INSN_ANDI, && case_sem_INSN_ANDI },
50     { SH64_MEDIA_INSN_BEQ, && case_sem_INSN_BEQ },
51     { SH64_MEDIA_INSN_BEQI, && case_sem_INSN_BEQI },
52     { SH64_MEDIA_INSN_BGE, && case_sem_INSN_BGE },
53     { SH64_MEDIA_INSN_BGEU, && case_sem_INSN_BGEU },
54     { SH64_MEDIA_INSN_BGT, && case_sem_INSN_BGT },
55     { SH64_MEDIA_INSN_BGTU, && case_sem_INSN_BGTU },
56     { SH64_MEDIA_INSN_BLINK, && case_sem_INSN_BLINK },
57     { SH64_MEDIA_INSN_BNE, && case_sem_INSN_BNE },
58     { SH64_MEDIA_INSN_BNEI, && case_sem_INSN_BNEI },
59     { SH64_MEDIA_INSN_BRK, && case_sem_INSN_BRK },
60     { SH64_MEDIA_INSN_BYTEREV, && case_sem_INSN_BYTEREV },
61     { SH64_MEDIA_INSN_CMPEQ, && case_sem_INSN_CMPEQ },
62     { SH64_MEDIA_INSN_CMPGT, && case_sem_INSN_CMPGT },
63     { SH64_MEDIA_INSN_CMPGTU, && case_sem_INSN_CMPGTU },
64     { SH64_MEDIA_INSN_CMVEQ, && case_sem_INSN_CMVEQ },
65     { SH64_MEDIA_INSN_CMVNE, && case_sem_INSN_CMVNE },
66     { SH64_MEDIA_INSN_FABSD, && case_sem_INSN_FABSD },
67     { SH64_MEDIA_INSN_FABSS, && case_sem_INSN_FABSS },
68     { SH64_MEDIA_INSN_FADDD, && case_sem_INSN_FADDD },
69     { SH64_MEDIA_INSN_FADDS, && case_sem_INSN_FADDS },
70     { SH64_MEDIA_INSN_FCMPEQD, && case_sem_INSN_FCMPEQD },
71     { SH64_MEDIA_INSN_FCMPEQS, && case_sem_INSN_FCMPEQS },
72     { SH64_MEDIA_INSN_FCMPGED, && case_sem_INSN_FCMPGED },
73     { SH64_MEDIA_INSN_FCMPGES, && case_sem_INSN_FCMPGES },
74     { SH64_MEDIA_INSN_FCMPGTD, && case_sem_INSN_FCMPGTD },
75     { SH64_MEDIA_INSN_FCMPGTS, && case_sem_INSN_FCMPGTS },
76     { SH64_MEDIA_INSN_FCMPUND, && case_sem_INSN_FCMPUND },
77     { SH64_MEDIA_INSN_FCMPUNS, && case_sem_INSN_FCMPUNS },
78     { SH64_MEDIA_INSN_FCNVDS, && case_sem_INSN_FCNVDS },
79     { SH64_MEDIA_INSN_FCNVSD, && case_sem_INSN_FCNVSD },
80     { SH64_MEDIA_INSN_FDIVD, && case_sem_INSN_FDIVD },
81     { SH64_MEDIA_INSN_FDIVS, && case_sem_INSN_FDIVS },
82     { SH64_MEDIA_INSN_FGETSCR, && case_sem_INSN_FGETSCR },
83     { SH64_MEDIA_INSN_FIPRS, && case_sem_INSN_FIPRS },
84     { SH64_MEDIA_INSN_FLDD, && case_sem_INSN_FLDD },
85     { SH64_MEDIA_INSN_FLDP, && case_sem_INSN_FLDP },
86     { SH64_MEDIA_INSN_FLDS, && case_sem_INSN_FLDS },
87     { SH64_MEDIA_INSN_FLDXD, && case_sem_INSN_FLDXD },
88     { SH64_MEDIA_INSN_FLDXP, && case_sem_INSN_FLDXP },
89     { SH64_MEDIA_INSN_FLDXS, && case_sem_INSN_FLDXS },
90     { SH64_MEDIA_INSN_FLOATLD, && case_sem_INSN_FLOATLD },
91     { SH64_MEDIA_INSN_FLOATLS, && case_sem_INSN_FLOATLS },
92     { SH64_MEDIA_INSN_FLOATQD, && case_sem_INSN_FLOATQD },
93     { SH64_MEDIA_INSN_FLOATQS, && case_sem_INSN_FLOATQS },
94     { SH64_MEDIA_INSN_FMACS, && case_sem_INSN_FMACS },
95     { SH64_MEDIA_INSN_FMOVD, && case_sem_INSN_FMOVD },
96     { SH64_MEDIA_INSN_FMOVDQ, && case_sem_INSN_FMOVDQ },
97     { SH64_MEDIA_INSN_FMOVLS, && case_sem_INSN_FMOVLS },
98     { SH64_MEDIA_INSN_FMOVQD, && case_sem_INSN_FMOVQD },
99     { SH64_MEDIA_INSN_FMOVS, && case_sem_INSN_FMOVS },
100     { SH64_MEDIA_INSN_FMOVSL, && case_sem_INSN_FMOVSL },
101     { SH64_MEDIA_INSN_FMULD, && case_sem_INSN_FMULD },
102     { SH64_MEDIA_INSN_FMULS, && case_sem_INSN_FMULS },
103     { SH64_MEDIA_INSN_FNEGD, && case_sem_INSN_FNEGD },
104     { SH64_MEDIA_INSN_FNEGS, && case_sem_INSN_FNEGS },
105     { SH64_MEDIA_INSN_FPUTSCR, && case_sem_INSN_FPUTSCR },
106     { SH64_MEDIA_INSN_FSQRTD, && case_sem_INSN_FSQRTD },
107     { SH64_MEDIA_INSN_FSQRTS, && case_sem_INSN_FSQRTS },
108     { SH64_MEDIA_INSN_FSTD, && case_sem_INSN_FSTD },
109     { SH64_MEDIA_INSN_FSTP, && case_sem_INSN_FSTP },
110     { SH64_MEDIA_INSN_FSTS, && case_sem_INSN_FSTS },
111     { SH64_MEDIA_INSN_FSTXD, && case_sem_INSN_FSTXD },
112     { SH64_MEDIA_INSN_FSTXP, && case_sem_INSN_FSTXP },
113     { SH64_MEDIA_INSN_FSTXS, && case_sem_INSN_FSTXS },
114     { SH64_MEDIA_INSN_FSUBD, && case_sem_INSN_FSUBD },
115     { SH64_MEDIA_INSN_FSUBS, && case_sem_INSN_FSUBS },
116     { SH64_MEDIA_INSN_FTRCDL, && case_sem_INSN_FTRCDL },
117     { SH64_MEDIA_INSN_FTRCSL, && case_sem_INSN_FTRCSL },
118     { SH64_MEDIA_INSN_FTRCDQ, && case_sem_INSN_FTRCDQ },
119     { SH64_MEDIA_INSN_FTRCSQ, && case_sem_INSN_FTRCSQ },
120     { SH64_MEDIA_INSN_FTRVS, && case_sem_INSN_FTRVS },
121     { SH64_MEDIA_INSN_GETCFG, && case_sem_INSN_GETCFG },
122     { SH64_MEDIA_INSN_GETCON, && case_sem_INSN_GETCON },
123     { SH64_MEDIA_INSN_GETTR, && case_sem_INSN_GETTR },
124     { SH64_MEDIA_INSN_ICBI, && case_sem_INSN_ICBI },
125     { SH64_MEDIA_INSN_LDB, && case_sem_INSN_LDB },
126     { SH64_MEDIA_INSN_LDL, && case_sem_INSN_LDL },
127     { SH64_MEDIA_INSN_LDQ, && case_sem_INSN_LDQ },
128     { SH64_MEDIA_INSN_LDUB, && case_sem_INSN_LDUB },
129     { SH64_MEDIA_INSN_LDUW, && case_sem_INSN_LDUW },
130     { SH64_MEDIA_INSN_LDW, && case_sem_INSN_LDW },
131     { SH64_MEDIA_INSN_LDHIL, && case_sem_INSN_LDHIL },
132     { SH64_MEDIA_INSN_LDHIQ, && case_sem_INSN_LDHIQ },
133     { SH64_MEDIA_INSN_LDLOL, && case_sem_INSN_LDLOL },
134     { SH64_MEDIA_INSN_LDLOQ, && case_sem_INSN_LDLOQ },
135     { SH64_MEDIA_INSN_LDXB, && case_sem_INSN_LDXB },
136     { SH64_MEDIA_INSN_LDXL, && case_sem_INSN_LDXL },
137     { SH64_MEDIA_INSN_LDXQ, && case_sem_INSN_LDXQ },
138     { SH64_MEDIA_INSN_LDXUB, && case_sem_INSN_LDXUB },
139     { SH64_MEDIA_INSN_LDXUW, && case_sem_INSN_LDXUW },
140     { SH64_MEDIA_INSN_LDXW, && case_sem_INSN_LDXW },
141     { SH64_MEDIA_INSN_MABSL, && case_sem_INSN_MABSL },
142     { SH64_MEDIA_INSN_MABSW, && case_sem_INSN_MABSW },
143     { SH64_MEDIA_INSN_MADDL, && case_sem_INSN_MADDL },
144     { SH64_MEDIA_INSN_MADDW, && case_sem_INSN_MADDW },
145     { SH64_MEDIA_INSN_MADDSL, && case_sem_INSN_MADDSL },
146     { SH64_MEDIA_INSN_MADDSUB, && case_sem_INSN_MADDSUB },
147     { SH64_MEDIA_INSN_MADDSW, && case_sem_INSN_MADDSW },
148     { SH64_MEDIA_INSN_MCMPEQB, && case_sem_INSN_MCMPEQB },
149     { SH64_MEDIA_INSN_MCMPEQL, && case_sem_INSN_MCMPEQL },
150     { SH64_MEDIA_INSN_MCMPEQW, && case_sem_INSN_MCMPEQW },
151     { SH64_MEDIA_INSN_MCMPGTL, && case_sem_INSN_MCMPGTL },
152     { SH64_MEDIA_INSN_MCMPGTUB, && case_sem_INSN_MCMPGTUB },
153     { SH64_MEDIA_INSN_MCMPGTW, && case_sem_INSN_MCMPGTW },
154     { SH64_MEDIA_INSN_MCMV, && case_sem_INSN_MCMV },
155     { SH64_MEDIA_INSN_MCNVSLW, && case_sem_INSN_MCNVSLW },
156     { SH64_MEDIA_INSN_MCNVSWB, && case_sem_INSN_MCNVSWB },
157     { SH64_MEDIA_INSN_MCNVSWUB, && case_sem_INSN_MCNVSWUB },
158     { SH64_MEDIA_INSN_MEXTR1, && case_sem_INSN_MEXTR1 },
159     { SH64_MEDIA_INSN_MEXTR2, && case_sem_INSN_MEXTR2 },
160     { SH64_MEDIA_INSN_MEXTR3, && case_sem_INSN_MEXTR3 },
161     { SH64_MEDIA_INSN_MEXTR4, && case_sem_INSN_MEXTR4 },
162     { SH64_MEDIA_INSN_MEXTR5, && case_sem_INSN_MEXTR5 },
163     { SH64_MEDIA_INSN_MEXTR6, && case_sem_INSN_MEXTR6 },
164     { SH64_MEDIA_INSN_MEXTR7, && case_sem_INSN_MEXTR7 },
165     { SH64_MEDIA_INSN_MMACFXWL, && case_sem_INSN_MMACFXWL },
166     { SH64_MEDIA_INSN_MMACNFX_WL, && case_sem_INSN_MMACNFX_WL },
167     { SH64_MEDIA_INSN_MMULL, && case_sem_INSN_MMULL },
168     { SH64_MEDIA_INSN_MMULW, && case_sem_INSN_MMULW },
169     { SH64_MEDIA_INSN_MMULFXL, && case_sem_INSN_MMULFXL },
170     { SH64_MEDIA_INSN_MMULFXW, && case_sem_INSN_MMULFXW },
171     { SH64_MEDIA_INSN_MMULFXRPW, && case_sem_INSN_MMULFXRPW },
172     { SH64_MEDIA_INSN_MMULHIWL, && case_sem_INSN_MMULHIWL },
173     { SH64_MEDIA_INSN_MMULLOWL, && case_sem_INSN_MMULLOWL },
174     { SH64_MEDIA_INSN_MMULSUMWQ, && case_sem_INSN_MMULSUMWQ },
175     { SH64_MEDIA_INSN_MOVI, && case_sem_INSN_MOVI },
176     { SH64_MEDIA_INSN_MPERMW, && case_sem_INSN_MPERMW },
177     { SH64_MEDIA_INSN_MSADUBQ, && case_sem_INSN_MSADUBQ },
178     { SH64_MEDIA_INSN_MSHALDSL, && case_sem_INSN_MSHALDSL },
179     { SH64_MEDIA_INSN_MSHALDSW, && case_sem_INSN_MSHALDSW },
180     { SH64_MEDIA_INSN_MSHARDL, && case_sem_INSN_MSHARDL },
181     { SH64_MEDIA_INSN_MSHARDW, && case_sem_INSN_MSHARDW },
182     { SH64_MEDIA_INSN_MSHARDSQ, && case_sem_INSN_MSHARDSQ },
183     { SH64_MEDIA_INSN_MSHFHIB, && case_sem_INSN_MSHFHIB },
184     { SH64_MEDIA_INSN_MSHFHIL, && case_sem_INSN_MSHFHIL },
185     { SH64_MEDIA_INSN_MSHFHIW, && case_sem_INSN_MSHFHIW },
186     { SH64_MEDIA_INSN_MSHFLOB, && case_sem_INSN_MSHFLOB },
187     { SH64_MEDIA_INSN_MSHFLOL, && case_sem_INSN_MSHFLOL },
188     { SH64_MEDIA_INSN_MSHFLOW, && case_sem_INSN_MSHFLOW },
189     { SH64_MEDIA_INSN_MSHLLDL, && case_sem_INSN_MSHLLDL },
190     { SH64_MEDIA_INSN_MSHLLDW, && case_sem_INSN_MSHLLDW },
191     { SH64_MEDIA_INSN_MSHLRDL, && case_sem_INSN_MSHLRDL },
192     { SH64_MEDIA_INSN_MSHLRDW, && case_sem_INSN_MSHLRDW },
193     { SH64_MEDIA_INSN_MSUBL, && case_sem_INSN_MSUBL },
194     { SH64_MEDIA_INSN_MSUBW, && case_sem_INSN_MSUBW },
195     { SH64_MEDIA_INSN_MSUBSL, && case_sem_INSN_MSUBSL },
196     { SH64_MEDIA_INSN_MSUBSUB, && case_sem_INSN_MSUBSUB },
197     { SH64_MEDIA_INSN_MSUBSW, && case_sem_INSN_MSUBSW },
198     { SH64_MEDIA_INSN_MULSL, && case_sem_INSN_MULSL },
199     { SH64_MEDIA_INSN_MULUL, && case_sem_INSN_MULUL },
200     { SH64_MEDIA_INSN_NOP, && case_sem_INSN_NOP },
201     { SH64_MEDIA_INSN_NSB, && case_sem_INSN_NSB },
202     { SH64_MEDIA_INSN_OCBI, && case_sem_INSN_OCBI },
203     { SH64_MEDIA_INSN_OCBP, && case_sem_INSN_OCBP },
204     { SH64_MEDIA_INSN_OCBWB, && case_sem_INSN_OCBWB },
205     { SH64_MEDIA_INSN_OR, && case_sem_INSN_OR },
206     { SH64_MEDIA_INSN_ORI, && case_sem_INSN_ORI },
207     { SH64_MEDIA_INSN_PREFI, && case_sem_INSN_PREFI },
208     { SH64_MEDIA_INSN_PTA, && case_sem_INSN_PTA },
209     { SH64_MEDIA_INSN_PTABS, && case_sem_INSN_PTABS },
210     { SH64_MEDIA_INSN_PTB, && case_sem_INSN_PTB },
211     { SH64_MEDIA_INSN_PTREL, && case_sem_INSN_PTREL },
212     { SH64_MEDIA_INSN_PUTCFG, && case_sem_INSN_PUTCFG },
213     { SH64_MEDIA_INSN_PUTCON, && case_sem_INSN_PUTCON },
214     { SH64_MEDIA_INSN_RTE, && case_sem_INSN_RTE },
215     { SH64_MEDIA_INSN_SHARD, && case_sem_INSN_SHARD },
216     { SH64_MEDIA_INSN_SHARDL, && case_sem_INSN_SHARDL },
217     { SH64_MEDIA_INSN_SHARI, && case_sem_INSN_SHARI },
218     { SH64_MEDIA_INSN_SHARIL, && case_sem_INSN_SHARIL },
219     { SH64_MEDIA_INSN_SHLLD, && case_sem_INSN_SHLLD },
220     { SH64_MEDIA_INSN_SHLLDL, && case_sem_INSN_SHLLDL },
221     { SH64_MEDIA_INSN_SHLLI, && case_sem_INSN_SHLLI },
222     { SH64_MEDIA_INSN_SHLLIL, && case_sem_INSN_SHLLIL },
223     { SH64_MEDIA_INSN_SHLRD, && case_sem_INSN_SHLRD },
224     { SH64_MEDIA_INSN_SHLRDL, && case_sem_INSN_SHLRDL },
225     { SH64_MEDIA_INSN_SHLRI, && case_sem_INSN_SHLRI },
226     { SH64_MEDIA_INSN_SHLRIL, && case_sem_INSN_SHLRIL },
227     { SH64_MEDIA_INSN_SHORI, && case_sem_INSN_SHORI },
228     { SH64_MEDIA_INSN_SLEEP, && case_sem_INSN_SLEEP },
229     { SH64_MEDIA_INSN_STB, && case_sem_INSN_STB },
230     { SH64_MEDIA_INSN_STL, && case_sem_INSN_STL },
231     { SH64_MEDIA_INSN_STQ, && case_sem_INSN_STQ },
232     { SH64_MEDIA_INSN_STW, && case_sem_INSN_STW },
233     { SH64_MEDIA_INSN_STHIL, && case_sem_INSN_STHIL },
234     { SH64_MEDIA_INSN_STHIQ, && case_sem_INSN_STHIQ },
235     { SH64_MEDIA_INSN_STLOL, && case_sem_INSN_STLOL },
236     { SH64_MEDIA_INSN_STLOQ, && case_sem_INSN_STLOQ },
237     { SH64_MEDIA_INSN_STXB, && case_sem_INSN_STXB },
238     { SH64_MEDIA_INSN_STXL, && case_sem_INSN_STXL },
239     { SH64_MEDIA_INSN_STXQ, && case_sem_INSN_STXQ },
240     { SH64_MEDIA_INSN_STXW, && case_sem_INSN_STXW },
241     { SH64_MEDIA_INSN_SUB, && case_sem_INSN_SUB },
242     { SH64_MEDIA_INSN_SUBL, && case_sem_INSN_SUBL },
243     { SH64_MEDIA_INSN_SWAPQ, && case_sem_INSN_SWAPQ },
244     { SH64_MEDIA_INSN_SYNCI, && case_sem_INSN_SYNCI },
245     { SH64_MEDIA_INSN_SYNCO, && case_sem_INSN_SYNCO },
246     { SH64_MEDIA_INSN_TRAPA, && case_sem_INSN_TRAPA },
247     { SH64_MEDIA_INSN_XOR, && case_sem_INSN_XOR },
248     { SH64_MEDIA_INSN_XORI, && case_sem_INSN_XORI },
249     { 0, 0 }
250   };
251   int i;
252 
253   for (i = 0; labels[i].label != 0; ++i)
254     {
255 #if FAST_P
256       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
257 #else
258       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
259 #endif
260     }
261 
262 #undef DEFINE_LABELS
263 #endif /* DEFINE_LABELS */
264 
265 #ifdef DEFINE_SWITCH
266 
267 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
268    off frills like tracing and profiling.  */
269 /* FIXME: A better way would be to have TRACE_RESULT check for something
270    that can cause it to be optimized out.  Another way would be to emit
271    special handlers into the instruction "stream".  */
272 
273 #if FAST_P
274 #undef TRACE_RESULT
275 #define TRACE_RESULT(cpu, abuf, name, type, val)
276 #endif
277 
278 #undef GET_ATTR
279 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
280 
281 {
282 
283 #if WITH_SCACHE_PBB
284 
285 /* Branch to next handler without going around main loop.  */
286 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
287 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
288 
289 #else /* ! WITH_SCACHE_PBB */
290 
291 #define NEXT(vpc) BREAK (sem)
292 #ifdef __GNUC__
293 #if FAST_P
294   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
295 #else
296   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
297 #endif
298 #else
299   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
300 #endif
301 
302 #endif /* ! WITH_SCACHE_PBB */
303 
304     {
305 
CASE(sem,INSN_X_INVALID)306   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
307 {
308   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
309   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
310 #define FLD(f) abuf->fields.sfmt_empty.f
311   int UNUSED written = 0;
312   IADDR UNUSED pc = abuf->addr;
313   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
314 
315   {
316     /* Update the recorded pc in the cpu state struct.
317        Only necessary for WITH_SCACHE case, but to avoid the
318        conditional compilation ....  */
319     SET_H_PC (pc);
320     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
321        using the default-insn-bitsize spec.  When executing insns in parallel
322        we may want to queue the fault and continue execution.  */
323     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
324     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
325   }
326 
327 #undef FLD
328 }
329   NEXT (vpc);
330 
CASE(sem,INSN_X_AFTER)331   CASE (sem, INSN_X_AFTER) : /* --after-- */
332 {
333   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
334   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
335 #define FLD(f) abuf->fields.sfmt_empty.f
336   int UNUSED written = 0;
337   IADDR UNUSED pc = abuf->addr;
338   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
339 
340   {
341 #if WITH_SCACHE_PBB_SH64_MEDIA
342     sh64_media_pbb_after (current_cpu, sem_arg);
343 #endif
344   }
345 
346 #undef FLD
347 }
348   NEXT (vpc);
349 
CASE(sem,INSN_X_BEFORE)350   CASE (sem, INSN_X_BEFORE) : /* --before-- */
351 {
352   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
353   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
354 #define FLD(f) abuf->fields.sfmt_empty.f
355   int UNUSED written = 0;
356   IADDR UNUSED pc = abuf->addr;
357   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
358 
359   {
360 #if WITH_SCACHE_PBB_SH64_MEDIA
361     sh64_media_pbb_before (current_cpu, sem_arg);
362 #endif
363   }
364 
365 #undef FLD
366 }
367   NEXT (vpc);
368 
CASE(sem,INSN_X_CTI_CHAIN)369   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
370 {
371   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
372   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
373 #define FLD(f) abuf->fields.sfmt_empty.f
374   int UNUSED written = 0;
375   IADDR UNUSED pc = abuf->addr;
376   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
377 
378   {
379 #if WITH_SCACHE_PBB_SH64_MEDIA
380 #ifdef DEFINE_SWITCH
381     vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg,
382 			       pbb_br_type, pbb_br_npc);
383     BREAK (sem);
384 #else
385     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
386     vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg,
387 			       CPU_PBB_BR_TYPE (current_cpu),
388 			       CPU_PBB_BR_NPC (current_cpu));
389 #endif
390 #endif
391   }
392 
393 #undef FLD
394 }
395   NEXT (vpc);
396 
CASE(sem,INSN_X_CHAIN)397   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
398 {
399   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
400   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
401 #define FLD(f) abuf->fields.sfmt_empty.f
402   int UNUSED written = 0;
403   IADDR UNUSED pc = abuf->addr;
404   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
405 
406   {
407 #if WITH_SCACHE_PBB_SH64_MEDIA
408     vpc = sh64_media_pbb_chain (current_cpu, sem_arg);
409 #ifdef DEFINE_SWITCH
410     BREAK (sem);
411 #endif
412 #endif
413   }
414 
415 #undef FLD
416 }
417   NEXT (vpc);
418 
CASE(sem,INSN_X_BEGIN)419   CASE (sem, INSN_X_BEGIN) : /* --begin-- */
420 {
421   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
422   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
423 #define FLD(f) abuf->fields.sfmt_empty.f
424   int UNUSED written = 0;
425   IADDR UNUSED pc = abuf->addr;
426   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
427 
428   {
429 #if WITH_SCACHE_PBB_SH64_MEDIA
430 #if defined DEFINE_SWITCH || defined FAST_P
431     /* In the switch case FAST_P is a constant, allowing several optimizations
432        in any called inline functions.  */
433     vpc = sh64_media_pbb_begin (current_cpu, FAST_P);
434 #else
435 #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
436     vpc = sh64_media_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
437 #else
438     vpc = sh64_media_pbb_begin (current_cpu, 0);
439 #endif
440 #endif
441 #endif
442   }
443 
444 #undef FLD
445 }
446   NEXT (vpc);
447 
CASE(sem,INSN_ADD)448   CASE (sem, INSN_ADD) : /* add $rm, $rn, $rd */
449 {
450   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
451   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
452 #define FLD(f) abuf->fields.sfmt_add.f
453   int UNUSED written = 0;
454   IADDR UNUSED pc = abuf->addr;
455   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
456 
457   {
458     DI opval = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
459     SET_H_GR (FLD (f_dest), opval);
460     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
461   }
462 
463 #undef FLD
464 }
465   NEXT (vpc);
466 
CASE(sem,INSN_ADDL)467   CASE (sem, INSN_ADDL) : /* add.l $rm, $rn, $rd */
468 {
469   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
470   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
471 #define FLD(f) abuf->fields.sfmt_add.f
472   int UNUSED written = 0;
473   IADDR UNUSED pc = abuf->addr;
474   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
475 
476   {
477     DI opval = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
478     SET_H_GR (FLD (f_dest), opval);
479     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
480   }
481 
482 #undef FLD
483 }
484   NEXT (vpc);
485 
CASE(sem,INSN_ADDI)486   CASE (sem, INSN_ADDI) : /* addi $rm, $disp10, $rd */
487 {
488   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
489   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
490 #define FLD(f) abuf->fields.sfmt_addi.f
491   int UNUSED written = 0;
492   IADDR UNUSED pc = abuf->addr;
493   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
494 
495   {
496     DI opval = ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)));
497     SET_H_GR (FLD (f_dest), opval);
498     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
499   }
500 
501 #undef FLD
502 }
503   NEXT (vpc);
504 
CASE(sem,INSN_ADDIL)505   CASE (sem, INSN_ADDIL) : /* addi.l $rm, $disp10, $rd */
506 {
507   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
508   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
509 #define FLD(f) abuf->fields.sfmt_addi.f
510   int UNUSED written = 0;
511   IADDR UNUSED pc = abuf->addr;
512   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
513 
514   {
515     DI opval = EXTSIDI (ADDSI (EXTSISI (FLD (f_disp10)), SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)));
516     SET_H_GR (FLD (f_dest), opval);
517     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
518   }
519 
520 #undef FLD
521 }
522   NEXT (vpc);
523 
CASE(sem,INSN_ADDZL)524   CASE (sem, INSN_ADDZL) : /* addz.l $rm, $rn, $rd */
525 {
526   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
527   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
528 #define FLD(f) abuf->fields.sfmt_add.f
529   int UNUSED written = 0;
530   IADDR UNUSED pc = abuf->addr;
531   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
532 
533   {
534     DI opval = ZEXTSIDI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
535     SET_H_GR (FLD (f_dest), opval);
536     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
537   }
538 
539 #undef FLD
540 }
541   NEXT (vpc);
542 
CASE(sem,INSN_ALLOCO)543   CASE (sem, INSN_ALLOCO) : /* alloco $rm, $disp6x32 */
544 {
545   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
546   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
547 #define FLD(f) abuf->fields.sfmt_xori.f
548   int UNUSED written = 0;
549   IADDR UNUSED pc = abuf->addr;
550   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
551 
552 {
553   {
554     DI opval = GET_H_GR (FLD (f_left));
555     SET_H_GR (FLD (f_left), opval);
556     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
557   }
558 ((void) 0); /*nop*/
559 }
560 
561 #undef FLD
562 }
563   NEXT (vpc);
564 
CASE(sem,INSN_AND)565   CASE (sem, INSN_AND) : /* and $rm, $rn, $rd */
566 {
567   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
568   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
569 #define FLD(f) abuf->fields.sfmt_add.f
570   int UNUSED written = 0;
571   IADDR UNUSED pc = abuf->addr;
572   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
573 
574   {
575     DI opval = ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
576     SET_H_GR (FLD (f_dest), opval);
577     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
578   }
579 
580 #undef FLD
581 }
582   NEXT (vpc);
583 
CASE(sem,INSN_ANDC)584   CASE (sem, INSN_ANDC) : /* andc $rm, $rn, $rd */
585 {
586   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
587   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
588 #define FLD(f) abuf->fields.sfmt_add.f
589   int UNUSED written = 0;
590   IADDR UNUSED pc = abuf->addr;
591   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
592 
593   {
594     DI opval = ANDDI (GET_H_GR (FLD (f_left)), INVDI (GET_H_GR (FLD (f_right))));
595     SET_H_GR (FLD (f_dest), opval);
596     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
597   }
598 
599 #undef FLD
600 }
601   NEXT (vpc);
602 
CASE(sem,INSN_ANDI)603   CASE (sem, INSN_ANDI) : /* andi $rm, $disp10, $rd */
604 {
605   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
606   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
607 #define FLD(f) abuf->fields.sfmt_addi.f
608   int UNUSED written = 0;
609   IADDR UNUSED pc = abuf->addr;
610   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
611 
612   {
613     DI opval = ANDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)));
614     SET_H_GR (FLD (f_dest), opval);
615     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
616   }
617 
618 #undef FLD
619 }
620   NEXT (vpc);
621 
CASE(sem,INSN_BEQ)622   CASE (sem, INSN_BEQ) : /* beq$likely $rm, $rn, $tra */
623 {
624   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
625   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
626 #define FLD(f) abuf->fields.sfmt_beq.f
627   int UNUSED written = 0;
628   IADDR UNUSED pc = abuf->addr;
629   SEM_BRANCH_INIT
630   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
631 
632 {
633 ((void) 0); /*nop*/
634 if (EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
635   {
636     UDI opval = CPU (h_tr[FLD (f_tra)]);
637     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
638     written |= (1 << 3);
639     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
640   }
641 }
642 }
643 
644   abuf->written = written;
645   SEM_BRANCH_FINI (vpc);
646 #undef FLD
647 }
648   NEXT (vpc);
649 
CASE(sem,INSN_BEQI)650   CASE (sem, INSN_BEQI) : /* beqi$likely $rm, $imm6, $tra */
651 {
652   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
653   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
654 #define FLD(f) abuf->fields.sfmt_beqi.f
655   int UNUSED written = 0;
656   IADDR UNUSED pc = abuf->addr;
657   SEM_BRANCH_INIT
658   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
659 
660 {
661 ((void) 0); /*nop*/
662 if (EQDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) {
663   {
664     UDI opval = CPU (h_tr[FLD (f_tra)]);
665     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
666     written |= (1 << 3);
667     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
668   }
669 }
670 }
671 
672   abuf->written = written;
673   SEM_BRANCH_FINI (vpc);
674 #undef FLD
675 }
676   NEXT (vpc);
677 
CASE(sem,INSN_BGE)678   CASE (sem, INSN_BGE) : /* bge$likely $rm, $rn, $tra */
679 {
680   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
681   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
682 #define FLD(f) abuf->fields.sfmt_beq.f
683   int UNUSED written = 0;
684   IADDR UNUSED pc = abuf->addr;
685   SEM_BRANCH_INIT
686   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
687 
688 {
689 ((void) 0); /*nop*/
690 if (GEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
691   {
692     UDI opval = CPU (h_tr[FLD (f_tra)]);
693     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
694     written |= (1 << 3);
695     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
696   }
697 }
698 }
699 
700   abuf->written = written;
701   SEM_BRANCH_FINI (vpc);
702 #undef FLD
703 }
704   NEXT (vpc);
705 
CASE(sem,INSN_BGEU)706   CASE (sem, INSN_BGEU) : /* bgeu$likely $rm, $rn, $tra */
707 {
708   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
709   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
710 #define FLD(f) abuf->fields.sfmt_beq.f
711   int UNUSED written = 0;
712   IADDR UNUSED pc = abuf->addr;
713   SEM_BRANCH_INIT
714   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
715 
716 {
717 ((void) 0); /*nop*/
718 if (GEUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
719   {
720     UDI opval = CPU (h_tr[FLD (f_tra)]);
721     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
722     written |= (1 << 3);
723     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
724   }
725 }
726 }
727 
728   abuf->written = written;
729   SEM_BRANCH_FINI (vpc);
730 #undef FLD
731 }
732   NEXT (vpc);
733 
CASE(sem,INSN_BGT)734   CASE (sem, INSN_BGT) : /* bgt$likely $rm, $rn, $tra */
735 {
736   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
737   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
738 #define FLD(f) abuf->fields.sfmt_beq.f
739   int UNUSED written = 0;
740   IADDR UNUSED pc = abuf->addr;
741   SEM_BRANCH_INIT
742   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
743 
744 {
745 ((void) 0); /*nop*/
746 if (GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
747   {
748     UDI opval = CPU (h_tr[FLD (f_tra)]);
749     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
750     written |= (1 << 3);
751     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
752   }
753 }
754 }
755 
756   abuf->written = written;
757   SEM_BRANCH_FINI (vpc);
758 #undef FLD
759 }
760   NEXT (vpc);
761 
CASE(sem,INSN_BGTU)762   CASE (sem, INSN_BGTU) : /* bgtu$likely $rm, $rn, $tra */
763 {
764   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
765   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
766 #define FLD(f) abuf->fields.sfmt_beq.f
767   int UNUSED written = 0;
768   IADDR UNUSED pc = abuf->addr;
769   SEM_BRANCH_INIT
770   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
771 
772 {
773 ((void) 0); /*nop*/
774 if (GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
775   {
776     UDI opval = CPU (h_tr[FLD (f_tra)]);
777     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
778     written |= (1 << 3);
779     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
780   }
781 }
782 }
783 
784   abuf->written = written;
785   SEM_BRANCH_FINI (vpc);
786 #undef FLD
787 }
788   NEXT (vpc);
789 
CASE(sem,INSN_BLINK)790   CASE (sem, INSN_BLINK) : /* blink $trb, $rd */
791 {
792   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
793   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
794 #define FLD(f) abuf->fields.sfmt_blink.f
795   int UNUSED written = 0;
796   IADDR UNUSED pc = abuf->addr;
797   SEM_BRANCH_INIT
798   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
799 
800 {
801   {
802     DI opval = ORDI (ADDDI (pc, 4), 1);
803     SET_H_GR (FLD (f_dest), opval);
804     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
805   }
806   {
807     UDI opval = CPU (h_tr[FLD (f_trb)]);
808     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
809     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
810   }
811 if (EQSI (FLD (f_dest), 63)) {
812 ((void) 0); /*nop*/
813 } else {
814 ((void) 0); /*nop*/
815 }
816 }
817 
818   SEM_BRANCH_FINI (vpc);
819 #undef FLD
820 }
821   NEXT (vpc);
822 
CASE(sem,INSN_BNE)823   CASE (sem, INSN_BNE) : /* bne$likely $rm, $rn, $tra */
824 {
825   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
826   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
827 #define FLD(f) abuf->fields.sfmt_beq.f
828   int UNUSED written = 0;
829   IADDR UNUSED pc = abuf->addr;
830   SEM_BRANCH_INIT
831   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
832 
833 {
834 ((void) 0); /*nop*/
835 if (NEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
836   {
837     UDI opval = CPU (h_tr[FLD (f_tra)]);
838     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
839     written |= (1 << 3);
840     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
841   }
842 }
843 }
844 
845   abuf->written = written;
846   SEM_BRANCH_FINI (vpc);
847 #undef FLD
848 }
849   NEXT (vpc);
850 
CASE(sem,INSN_BNEI)851   CASE (sem, INSN_BNEI) : /* bnei$likely $rm, $imm6, $tra */
852 {
853   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
854   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
855 #define FLD(f) abuf->fields.sfmt_beqi.f
856   int UNUSED written = 0;
857   IADDR UNUSED pc = abuf->addr;
858   SEM_BRANCH_INIT
859   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
860 
861 {
862 ((void) 0); /*nop*/
863 if (NEDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) {
864   {
865     UDI opval = CPU (h_tr[FLD (f_tra)]);
866     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
867     written |= (1 << 3);
868     TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
869   }
870 }
871 }
872 
873   abuf->written = written;
874   SEM_BRANCH_FINI (vpc);
875 #undef FLD
876 }
877   NEXT (vpc);
878 
CASE(sem,INSN_BRK)879   CASE (sem, INSN_BRK) : /* brk */
880 {
881   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
882   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
883 #define FLD(f) abuf->fields.sfmt_empty.f
884   int UNUSED written = 0;
885   IADDR UNUSED pc = abuf->addr;
886   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
887 
888 sh64_break (current_cpu, pc);
889 
890 #undef FLD
891 }
892   NEXT (vpc);
893 
CASE(sem,INSN_BYTEREV)894   CASE (sem, INSN_BYTEREV) : /* byterev $rm, $rd */
895 {
896   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
897   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
898 #define FLD(f) abuf->fields.sfmt_xori.f
899   int UNUSED written = 0;
900   IADDR UNUSED pc = abuf->addr;
901   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
902 
903 {
904   DI tmp_source;
905   DI tmp_result;
906   tmp_source = GET_H_GR (FLD (f_left));
907   tmp_result = 0;
908 {
909   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
910   tmp_source = SRLDI (tmp_source, 8);
911 }
912 {
913   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
914   tmp_source = SRLDI (tmp_source, 8);
915 }
916 {
917   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
918   tmp_source = SRLDI (tmp_source, 8);
919 }
920 {
921   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
922   tmp_source = SRLDI (tmp_source, 8);
923 }
924 {
925   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
926   tmp_source = SRLDI (tmp_source, 8);
927 }
928 {
929   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
930   tmp_source = SRLDI (tmp_source, 8);
931 }
932 {
933   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
934   tmp_source = SRLDI (tmp_source, 8);
935 }
936 {
937   tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
938   tmp_source = SRLDI (tmp_source, 8);
939 }
940   {
941     DI opval = tmp_result;
942     SET_H_GR (FLD (f_dest), opval);
943     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
944   }
945 }
946 
947 #undef FLD
948 }
949   NEXT (vpc);
950 
CASE(sem,INSN_CMPEQ)951   CASE (sem, INSN_CMPEQ) : /* cmpeq $rm, $rn, $rd */
952 {
953   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
954   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
955 #define FLD(f) abuf->fields.sfmt_add.f
956   int UNUSED written = 0;
957   IADDR UNUSED pc = abuf->addr;
958   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
959 
960   {
961     DI opval = ((EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0));
962     SET_H_GR (FLD (f_dest), opval);
963     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
964   }
965 
966 #undef FLD
967 }
968   NEXT (vpc);
969 
CASE(sem,INSN_CMPGT)970   CASE (sem, INSN_CMPGT) : /* cmpgt $rm, $rn, $rd */
971 {
972   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
973   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
974 #define FLD(f) abuf->fields.sfmt_add.f
975   int UNUSED written = 0;
976   IADDR UNUSED pc = abuf->addr;
977   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
978 
979   {
980     DI opval = ((GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0));
981     SET_H_GR (FLD (f_dest), opval);
982     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
983   }
984 
985 #undef FLD
986 }
987   NEXT (vpc);
988 
CASE(sem,INSN_CMPGTU)989   CASE (sem, INSN_CMPGTU) : /* cmpgtu $rm,$rn, $rd */
990 {
991   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
992   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
993 #define FLD(f) abuf->fields.sfmt_add.f
994   int UNUSED written = 0;
995   IADDR UNUSED pc = abuf->addr;
996   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
997 
998   {
999     DI opval = ((GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0));
1000     SET_H_GR (FLD (f_dest), opval);
1001     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1002   }
1003 
1004 #undef FLD
1005 }
1006   NEXT (vpc);
1007 
CASE(sem,INSN_CMVEQ)1008   CASE (sem, INSN_CMVEQ) : /* cmveq $rm, $rn, $rd */
1009 {
1010   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1011   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1012 #define FLD(f) abuf->fields.sfmt_add.f
1013   int UNUSED written = 0;
1014   IADDR UNUSED pc = abuf->addr;
1015   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1016 
1017 if (EQDI (GET_H_GR (FLD (f_left)), 0)) {
1018   {
1019     DI opval = GET_H_GR (FLD (f_right));
1020     SET_H_GR (FLD (f_dest), opval);
1021     written |= (1 << 2);
1022     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1023   }
1024 }
1025 
1026   abuf->written = written;
1027 #undef FLD
1028 }
1029   NEXT (vpc);
1030 
CASE(sem,INSN_CMVNE)1031   CASE (sem, INSN_CMVNE) : /* cmvne $rm, $rn, $rd */
1032 {
1033   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1034   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1035 #define FLD(f) abuf->fields.sfmt_add.f
1036   int UNUSED written = 0;
1037   IADDR UNUSED pc = abuf->addr;
1038   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1039 
1040 if (NEDI (GET_H_GR (FLD (f_left)), 0)) {
1041   {
1042     DI opval = GET_H_GR (FLD (f_right));
1043     SET_H_GR (FLD (f_dest), opval);
1044     written |= (1 << 2);
1045     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1046   }
1047 }
1048 
1049   abuf->written = written;
1050 #undef FLD
1051 }
1052   NEXT (vpc);
1053 
CASE(sem,INSN_FABSD)1054   CASE (sem, INSN_FABSD) : /* fabs.d $drgh, $drf */
1055 {
1056   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1057   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1058 #define FLD(f) abuf->fields.sfmt_fabsd.f
1059   int UNUSED written = 0;
1060   IADDR UNUSED pc = abuf->addr;
1061   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1062 
1063   {
1064     DF opval = sh64_fabsd (current_cpu, GET_H_DR (FLD (f_left_right)));
1065     SET_H_DR (FLD (f_dest), opval);
1066     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1067   }
1068 
1069 #undef FLD
1070 }
1071   NEXT (vpc);
1072 
CASE(sem,INSN_FABSS)1073   CASE (sem, INSN_FABSS) : /* fabs.s $frgh, $frf */
1074 {
1075   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1076   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1077 #define FLD(f) abuf->fields.sfmt_fabsd.f
1078   int UNUSED written = 0;
1079   IADDR UNUSED pc = abuf->addr;
1080   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1081 
1082   {
1083     SF opval = sh64_fabss (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1084     CPU (h_fr[FLD (f_dest)]) = opval;
1085     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1086   }
1087 
1088 #undef FLD
1089 }
1090   NEXT (vpc);
1091 
CASE(sem,INSN_FADDD)1092   CASE (sem, INSN_FADDD) : /* fadd.d $drg, $drh, $drf */
1093 {
1094   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1095   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1096 #define FLD(f) abuf->fields.sfmt_add.f
1097   int UNUSED written = 0;
1098   IADDR UNUSED pc = abuf->addr;
1099   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1100 
1101   {
1102     DF opval = sh64_faddd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
1103     SET_H_DR (FLD (f_dest), opval);
1104     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1105   }
1106 
1107 #undef FLD
1108 }
1109   NEXT (vpc);
1110 
CASE(sem,INSN_FADDS)1111   CASE (sem, INSN_FADDS) : /* fadd.s $frg, $frh, $frf */
1112 {
1113   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1114   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1115 #define FLD(f) abuf->fields.sfmt_add.f
1116   int UNUSED written = 0;
1117   IADDR UNUSED pc = abuf->addr;
1118   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1119 
1120   {
1121     SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
1122     CPU (h_fr[FLD (f_dest)]) = opval;
1123     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1124   }
1125 
1126 #undef FLD
1127 }
1128   NEXT (vpc);
1129 
CASE(sem,INSN_FCMPEQD)1130   CASE (sem, INSN_FCMPEQD) : /* fcmpeq.d $drg, $drh, $rd */
1131 {
1132   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1133   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1134 #define FLD(f) abuf->fields.sfmt_add.f
1135   int UNUSED written = 0;
1136   IADDR UNUSED pc = abuf->addr;
1137   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1138 
1139   {
1140     DI opval = ZEXTBIDI (sh64_fcmpeqd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
1141     SET_H_GR (FLD (f_dest), opval);
1142     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1143   }
1144 
1145 #undef FLD
1146 }
1147   NEXT (vpc);
1148 
CASE(sem,INSN_FCMPEQS)1149   CASE (sem, INSN_FCMPEQS) : /* fcmpeq.s $frg, $frh, $rd */
1150 {
1151   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1152   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1153 #define FLD(f) abuf->fields.sfmt_add.f
1154   int UNUSED written = 0;
1155   IADDR UNUSED pc = abuf->addr;
1156   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1157 
1158   {
1159     DI opval = ZEXTBIDI (sh64_fcmpeqs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1160     SET_H_GR (FLD (f_dest), opval);
1161     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1162   }
1163 
1164 #undef FLD
1165 }
1166   NEXT (vpc);
1167 
CASE(sem,INSN_FCMPGED)1168   CASE (sem, INSN_FCMPGED) : /* fcmpge.d $drg, $drh, $rd */
1169 {
1170   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1171   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1172 #define FLD(f) abuf->fields.sfmt_add.f
1173   int UNUSED written = 0;
1174   IADDR UNUSED pc = abuf->addr;
1175   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1176 
1177   {
1178     DI opval = ZEXTBIDI (sh64_fcmpged (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
1179     SET_H_GR (FLD (f_dest), opval);
1180     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1181   }
1182 
1183 #undef FLD
1184 }
1185   NEXT (vpc);
1186 
CASE(sem,INSN_FCMPGES)1187   CASE (sem, INSN_FCMPGES) : /* fcmpge.s $frg, $frh, $rd */
1188 {
1189   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1190   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1191 #define FLD(f) abuf->fields.sfmt_add.f
1192   int UNUSED written = 0;
1193   IADDR UNUSED pc = abuf->addr;
1194   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1195 
1196   {
1197     DI opval = ZEXTBIDI (sh64_fcmpges (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1198     SET_H_GR (FLD (f_dest), opval);
1199     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1200   }
1201 
1202 #undef FLD
1203 }
1204   NEXT (vpc);
1205 
CASE(sem,INSN_FCMPGTD)1206   CASE (sem, INSN_FCMPGTD) : /* fcmpgt.d $drg, $drh, $rd */
1207 {
1208   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1209   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1210 #define FLD(f) abuf->fields.sfmt_add.f
1211   int UNUSED written = 0;
1212   IADDR UNUSED pc = abuf->addr;
1213   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1214 
1215   {
1216     DI opval = ZEXTBIDI (sh64_fcmpgtd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
1217     SET_H_GR (FLD (f_dest), opval);
1218     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1219   }
1220 
1221 #undef FLD
1222 }
1223   NEXT (vpc);
1224 
CASE(sem,INSN_FCMPGTS)1225   CASE (sem, INSN_FCMPGTS) : /* fcmpgt.s $frg, $frh, $rd */
1226 {
1227   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1228   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1229 #define FLD(f) abuf->fields.sfmt_add.f
1230   int UNUSED written = 0;
1231   IADDR UNUSED pc = abuf->addr;
1232   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1233 
1234   {
1235     DI opval = ZEXTBIDI (sh64_fcmpgts (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1236     SET_H_GR (FLD (f_dest), opval);
1237     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1238   }
1239 
1240 #undef FLD
1241 }
1242   NEXT (vpc);
1243 
CASE(sem,INSN_FCMPUND)1244   CASE (sem, INSN_FCMPUND) : /* fcmpun.d $drg, $drh, $rd */
1245 {
1246   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1247   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1248 #define FLD(f) abuf->fields.sfmt_add.f
1249   int UNUSED written = 0;
1250   IADDR UNUSED pc = abuf->addr;
1251   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1252 
1253   {
1254     DI opval = ZEXTBIDI (sh64_fcmpund (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
1255     SET_H_GR (FLD (f_dest), opval);
1256     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1257   }
1258 
1259 #undef FLD
1260 }
1261   NEXT (vpc);
1262 
CASE(sem,INSN_FCMPUNS)1263   CASE (sem, INSN_FCMPUNS) : /* fcmpun.s $frg, $frh, $rd */
1264 {
1265   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1266   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1267 #define FLD(f) abuf->fields.sfmt_add.f
1268   int UNUSED written = 0;
1269   IADDR UNUSED pc = abuf->addr;
1270   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1271 
1272   {
1273     DI opval = ZEXTBIDI (sh64_fcmpuns (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1274     SET_H_GR (FLD (f_dest), opval);
1275     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1276   }
1277 
1278 #undef FLD
1279 }
1280   NEXT (vpc);
1281 
CASE(sem,INSN_FCNVDS)1282   CASE (sem, INSN_FCNVDS) : /* fcnv.ds $drgh, $frf */
1283 {
1284   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1285   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1286 #define FLD(f) abuf->fields.sfmt_fabsd.f
1287   int UNUSED written = 0;
1288   IADDR UNUSED pc = abuf->addr;
1289   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1290 
1291   {
1292     SF opval = sh64_fcnvds (current_cpu, GET_H_DR (FLD (f_left_right)));
1293     CPU (h_fr[FLD (f_dest)]) = opval;
1294     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1295   }
1296 
1297 #undef FLD
1298 }
1299   NEXT (vpc);
1300 
CASE(sem,INSN_FCNVSD)1301   CASE (sem, INSN_FCNVSD) : /* fcnv.sd $frgh, $drf */
1302 {
1303   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1304   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1305 #define FLD(f) abuf->fields.sfmt_fabsd.f
1306   int UNUSED written = 0;
1307   IADDR UNUSED pc = abuf->addr;
1308   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1309 
1310   {
1311     DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1312     SET_H_DR (FLD (f_dest), opval);
1313     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1314   }
1315 
1316 #undef FLD
1317 }
1318   NEXT (vpc);
1319 
CASE(sem,INSN_FDIVD)1320   CASE (sem, INSN_FDIVD) : /* fdiv.d $drg, $drh, $drf */
1321 {
1322   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1323   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1324 #define FLD(f) abuf->fields.sfmt_add.f
1325   int UNUSED written = 0;
1326   IADDR UNUSED pc = abuf->addr;
1327   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1328 
1329   {
1330     DF opval = sh64_fdivd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
1331     SET_H_DR (FLD (f_dest), opval);
1332     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1333   }
1334 
1335 #undef FLD
1336 }
1337   NEXT (vpc);
1338 
CASE(sem,INSN_FDIVS)1339   CASE (sem, INSN_FDIVS) : /* fdiv.s $frg, $frh, $frf */
1340 {
1341   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1342   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1343 #define FLD(f) abuf->fields.sfmt_add.f
1344   int UNUSED written = 0;
1345   IADDR UNUSED pc = abuf->addr;
1346   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1347 
1348   {
1349     SF opval = sh64_fdivs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
1350     CPU (h_fr[FLD (f_dest)]) = opval;
1351     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1352   }
1353 
1354 #undef FLD
1355 }
1356   NEXT (vpc);
1357 
CASE(sem,INSN_FGETSCR)1358   CASE (sem, INSN_FGETSCR) : /* fgetscr $frf */
1359 {
1360   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1361   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1362 #define FLD(f) abuf->fields.sfmt_shori.f
1363   int UNUSED written = 0;
1364   IADDR UNUSED pc = abuf->addr;
1365   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1366 
1367   {
1368     SF opval = SUBWORDSISF (CPU (h_fpscr));
1369     CPU (h_fr[FLD (f_dest)]) = opval;
1370     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1371   }
1372 
1373 #undef FLD
1374 }
1375   NEXT (vpc);
1376 
CASE(sem,INSN_FIPRS)1377   CASE (sem, INSN_FIPRS) : /* fipr.s $fvg, $fvh, $frf */
1378 {
1379   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1380   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1381 #define FLD(f) abuf->fields.sfmt_add.f
1382   int UNUSED written = 0;
1383   IADDR UNUSED pc = abuf->addr;
1384   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1385 
1386 {
1387   {
1388     SF opval = GET_H_FV (FLD (f_left));
1389     SET_H_FV (FLD (f_left), opval);
1390     TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
1391   }
1392   {
1393     SF opval = GET_H_FV (FLD (f_right));
1394     SET_H_FV (FLD (f_right), opval);
1395     TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
1396   }
1397   {
1398     SF opval = sh64_fiprs (current_cpu, FLD (f_left), FLD (f_right));
1399     CPU (h_fr[FLD (f_dest)]) = opval;
1400     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1401   }
1402 }
1403 
1404 #undef FLD
1405 }
1406   NEXT (vpc);
1407 
CASE(sem,INSN_FLDD)1408   CASE (sem, INSN_FLDD) : /* fld.d $rm, $disp10x8, $drf */
1409 {
1410   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1411   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1412 #define FLD(f) abuf->fields.sfmt_fldd.f
1413   int UNUSED written = 0;
1414   IADDR UNUSED pc = abuf->addr;
1415   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1416 
1417   {
1418     DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)));
1419     SET_H_DR (FLD (f_dest), opval);
1420     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1421   }
1422 
1423 #undef FLD
1424 }
1425   NEXT (vpc);
1426 
CASE(sem,INSN_FLDP)1427   CASE (sem, INSN_FLDP) : /* fld.p $rm, $disp10x8, $fpf */
1428 {
1429   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1430   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1431 #define FLD(f) abuf->fields.sfmt_fldd.f
1432   int UNUSED written = 0;
1433   IADDR UNUSED pc = abuf->addr;
1434   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1435 
1436 {
1437   {
1438     SF opval = GET_H_FP (FLD (f_dest));
1439     SET_H_FP (FLD (f_dest), opval);
1440     TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
1441   }
1442 sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest));
1443 }
1444 
1445 #undef FLD
1446 }
1447   NEXT (vpc);
1448 
CASE(sem,INSN_FLDS)1449   CASE (sem, INSN_FLDS) : /* fld.s $rm, $disp10x4, $frf */
1450 {
1451   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1452   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1453 #define FLD(f) abuf->fields.sfmt_flds.f
1454   int UNUSED written = 0;
1455   IADDR UNUSED pc = abuf->addr;
1456   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1457 
1458   {
1459     SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)));
1460     CPU (h_fr[FLD (f_dest)]) = opval;
1461     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1462   }
1463 
1464 #undef FLD
1465 }
1466   NEXT (vpc);
1467 
CASE(sem,INSN_FLDXD)1468   CASE (sem, INSN_FLDXD) : /* fldx.d $rm, $rn, $drf */
1469 {
1470   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1471   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1472 #define FLD(f) abuf->fields.sfmt_add.f
1473   int UNUSED written = 0;
1474   IADDR UNUSED pc = abuf->addr;
1475   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1476 
1477   {
1478     DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
1479     SET_H_DR (FLD (f_dest), opval);
1480     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1481   }
1482 
1483 #undef FLD
1484 }
1485   NEXT (vpc);
1486 
CASE(sem,INSN_FLDXP)1487   CASE (sem, INSN_FLDXP) : /* fldx.p $rm, $rn, $fpf */
1488 {
1489   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1490   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1491 #define FLD(f) abuf->fields.sfmt_add.f
1492   int UNUSED written = 0;
1493   IADDR UNUSED pc = abuf->addr;
1494   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1495 
1496 {
1497   {
1498     SF opval = GET_H_FP (FLD (f_dest));
1499     SET_H_FP (FLD (f_dest), opval);
1500     TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
1501   }
1502 sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest));
1503 }
1504 
1505 #undef FLD
1506 }
1507   NEXT (vpc);
1508 
CASE(sem,INSN_FLDXS)1509   CASE (sem, INSN_FLDXS) : /* fldx.s $rm, $rn, $frf */
1510 {
1511   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1512   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1513 #define FLD(f) abuf->fields.sfmt_add.f
1514   int UNUSED written = 0;
1515   IADDR UNUSED pc = abuf->addr;
1516   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1517 
1518   {
1519     SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
1520     CPU (h_fr[FLD (f_dest)]) = opval;
1521     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1522   }
1523 
1524 #undef FLD
1525 }
1526   NEXT (vpc);
1527 
CASE(sem,INSN_FLOATLD)1528   CASE (sem, INSN_FLOATLD) : /* float.ld $frgh, $drf */
1529 {
1530   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1531   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1532 #define FLD(f) abuf->fields.sfmt_fabsd.f
1533   int UNUSED written = 0;
1534   IADDR UNUSED pc = abuf->addr;
1535   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1536 
1537   {
1538     DF opval = sh64_floatld (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1539     SET_H_DR (FLD (f_dest), opval);
1540     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1541   }
1542 
1543 #undef FLD
1544 }
1545   NEXT (vpc);
1546 
CASE(sem,INSN_FLOATLS)1547   CASE (sem, INSN_FLOATLS) : /* float.ls $frgh, $frf */
1548 {
1549   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1550   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1551 #define FLD(f) abuf->fields.sfmt_fabsd.f
1552   int UNUSED written = 0;
1553   IADDR UNUSED pc = abuf->addr;
1554   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1555 
1556   {
1557     SF opval = sh64_floatls (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1558     CPU (h_fr[FLD (f_dest)]) = opval;
1559     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1560   }
1561 
1562 #undef FLD
1563 }
1564   NEXT (vpc);
1565 
CASE(sem,INSN_FLOATQD)1566   CASE (sem, INSN_FLOATQD) : /* float.qd $drgh, $drf */
1567 {
1568   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1569   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1570 #define FLD(f) abuf->fields.sfmt_fabsd.f
1571   int UNUSED written = 0;
1572   IADDR UNUSED pc = abuf->addr;
1573   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1574 
1575   {
1576     DF opval = sh64_floatqd (current_cpu, GET_H_DR (FLD (f_left_right)));
1577     SET_H_DR (FLD (f_dest), opval);
1578     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1579   }
1580 
1581 #undef FLD
1582 }
1583   NEXT (vpc);
1584 
CASE(sem,INSN_FLOATQS)1585   CASE (sem, INSN_FLOATQS) : /* float.qs $drgh, $frf */
1586 {
1587   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1588   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1589 #define FLD(f) abuf->fields.sfmt_fabsd.f
1590   int UNUSED written = 0;
1591   IADDR UNUSED pc = abuf->addr;
1592   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1593 
1594   {
1595     SF opval = sh64_floatqs (current_cpu, GET_H_DR (FLD (f_left_right)));
1596     CPU (h_fr[FLD (f_dest)]) = opval;
1597     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1598   }
1599 
1600 #undef FLD
1601 }
1602   NEXT (vpc);
1603 
CASE(sem,INSN_FMACS)1604   CASE (sem, INSN_FMACS) : /* fmac.s $frg, $frh, $frf */
1605 {
1606   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1607   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1608 #define FLD(f) abuf->fields.sfmt_add.f
1609   int UNUSED written = 0;
1610   IADDR UNUSED pc = abuf->addr;
1611   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1612 
1613   {
1614     SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_dest)]), sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1615     CPU (h_fr[FLD (f_dest)]) = opval;
1616     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1617   }
1618 
1619 #undef FLD
1620 }
1621   NEXT (vpc);
1622 
CASE(sem,INSN_FMOVD)1623   CASE (sem, INSN_FMOVD) : /* fmov.d $drgh, $drf */
1624 {
1625   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1626   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1627 #define FLD(f) abuf->fields.sfmt_fabsd.f
1628   int UNUSED written = 0;
1629   IADDR UNUSED pc = abuf->addr;
1630   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1631 
1632   {
1633     DF opval = GET_H_DR (FLD (f_left_right));
1634     SET_H_DR (FLD (f_dest), opval);
1635     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1636   }
1637 
1638 #undef FLD
1639 }
1640   NEXT (vpc);
1641 
CASE(sem,INSN_FMOVDQ)1642   CASE (sem, INSN_FMOVDQ) : /* fmov.dq $drgh, $rd */
1643 {
1644   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1645   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1646 #define FLD(f) abuf->fields.sfmt_fabsd.f
1647   int UNUSED written = 0;
1648   IADDR UNUSED pc = abuf->addr;
1649   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1650 
1651   {
1652     DI opval = SUBWORDDFDI (GET_H_DR (FLD (f_left_right)));
1653     SET_H_GR (FLD (f_dest), opval);
1654     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1655   }
1656 
1657 #undef FLD
1658 }
1659   NEXT (vpc);
1660 
CASE(sem,INSN_FMOVLS)1661   CASE (sem, INSN_FMOVLS) : /* fmov.ls $rm, $frf */
1662 {
1663   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1664   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1665 #define FLD(f) abuf->fields.sfmt_xori.f
1666   int UNUSED written = 0;
1667   IADDR UNUSED pc = abuf->addr;
1668   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1669 
1670   {
1671     SF opval = SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1));
1672     CPU (h_fr[FLD (f_dest)]) = opval;
1673     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1674   }
1675 
1676 #undef FLD
1677 }
1678   NEXT (vpc);
1679 
CASE(sem,INSN_FMOVQD)1680   CASE (sem, INSN_FMOVQD) : /* fmov.qd $rm, $drf */
1681 {
1682   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1683   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1684 #define FLD(f) abuf->fields.sfmt_xori.f
1685   int UNUSED written = 0;
1686   IADDR UNUSED pc = abuf->addr;
1687   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1688 
1689   {
1690     DF opval = SUBWORDDIDF (GET_H_GR (FLD (f_left)));
1691     SET_H_DR (FLD (f_dest), opval);
1692     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1693   }
1694 
1695 #undef FLD
1696 }
1697   NEXT (vpc);
1698 
CASE(sem,INSN_FMOVS)1699   CASE (sem, INSN_FMOVS) : /* fmov.s $frgh, $frf */
1700 {
1701   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1702   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1703 #define FLD(f) abuf->fields.sfmt_fabsd.f
1704   int UNUSED written = 0;
1705   IADDR UNUSED pc = abuf->addr;
1706   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1707 
1708   {
1709     SF opval = CPU (h_fr[FLD (f_left_right)]);
1710     CPU (h_fr[FLD (f_dest)]) = opval;
1711     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1712   }
1713 
1714 #undef FLD
1715 }
1716   NEXT (vpc);
1717 
CASE(sem,INSN_FMOVSL)1718   CASE (sem, INSN_FMOVSL) : /* fmov.sl $frgh, $rd */
1719 {
1720   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1721   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1722 #define FLD(f) abuf->fields.sfmt_fabsd.f
1723   int UNUSED written = 0;
1724   IADDR UNUSED pc = abuf->addr;
1725   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1726 
1727   {
1728     DI opval = EXTSIDI (SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)])));
1729     SET_H_GR (FLD (f_dest), opval);
1730     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
1731   }
1732 
1733 #undef FLD
1734 }
1735   NEXT (vpc);
1736 
CASE(sem,INSN_FMULD)1737   CASE (sem, INSN_FMULD) : /* fmul.d $drg, $drh, $drf */
1738 {
1739   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1740   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1741 #define FLD(f) abuf->fields.sfmt_add.f
1742   int UNUSED written = 0;
1743   IADDR UNUSED pc = abuf->addr;
1744   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1745 
1746   {
1747     DF opval = sh64_fmuld (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
1748     SET_H_DR (FLD (f_dest), opval);
1749     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1750   }
1751 
1752 #undef FLD
1753 }
1754   NEXT (vpc);
1755 
CASE(sem,INSN_FMULS)1756   CASE (sem, INSN_FMULS) : /* fmul.s $frg, $frh, $frf */
1757 {
1758   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1759   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1760 #define FLD(f) abuf->fields.sfmt_add.f
1761   int UNUSED written = 0;
1762   IADDR UNUSED pc = abuf->addr;
1763   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1764 
1765   {
1766     SF opval = sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
1767     CPU (h_fr[FLD (f_dest)]) = opval;
1768     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1769   }
1770 
1771 #undef FLD
1772 }
1773   NEXT (vpc);
1774 
CASE(sem,INSN_FNEGD)1775   CASE (sem, INSN_FNEGD) : /* fneg.d $drgh, $drf */
1776 {
1777   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1778   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1779 #define FLD(f) abuf->fields.sfmt_fabsd.f
1780   int UNUSED written = 0;
1781   IADDR UNUSED pc = abuf->addr;
1782   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1783 
1784   {
1785     DF opval = sh64_fnegd (current_cpu, GET_H_DR (FLD (f_left_right)));
1786     SET_H_DR (FLD (f_dest), opval);
1787     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1788   }
1789 
1790 #undef FLD
1791 }
1792   NEXT (vpc);
1793 
CASE(sem,INSN_FNEGS)1794   CASE (sem, INSN_FNEGS) : /* fneg.s $frgh, $frf */
1795 {
1796   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1797   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1798 #define FLD(f) abuf->fields.sfmt_fabsd.f
1799   int UNUSED written = 0;
1800   IADDR UNUSED pc = abuf->addr;
1801   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1802 
1803   {
1804     SF opval = sh64_fnegs (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1805     CPU (h_fr[FLD (f_dest)]) = opval;
1806     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1807   }
1808 
1809 #undef FLD
1810 }
1811   NEXT (vpc);
1812 
CASE(sem,INSN_FPUTSCR)1813   CASE (sem, INSN_FPUTSCR) : /* fputscr $frgh */
1814 {
1815   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1816   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1817 #define FLD(f) abuf->fields.sfmt_fabsd.f
1818   int UNUSED written = 0;
1819   IADDR UNUSED pc = abuf->addr;
1820   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1821 
1822   {
1823     SI opval = SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)]));
1824     CPU (h_fpscr) = opval;
1825     TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
1826   }
1827 
1828 #undef FLD
1829 }
1830   NEXT (vpc);
1831 
CASE(sem,INSN_FSQRTD)1832   CASE (sem, INSN_FSQRTD) : /* fsqrt.d $drgh, $drf */
1833 {
1834   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1835   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1836 #define FLD(f) abuf->fields.sfmt_fabsd.f
1837   int UNUSED written = 0;
1838   IADDR UNUSED pc = abuf->addr;
1839   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1840 
1841   {
1842     DF opval = sh64_fsqrtd (current_cpu, GET_H_DR (FLD (f_left_right)));
1843     SET_H_DR (FLD (f_dest), opval);
1844     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
1845   }
1846 
1847 #undef FLD
1848 }
1849   NEXT (vpc);
1850 
CASE(sem,INSN_FSQRTS)1851   CASE (sem, INSN_FSQRTS) : /* fsqrt.s $frgh, $frf */
1852 {
1853   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1854   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1855 #define FLD(f) abuf->fields.sfmt_fabsd.f
1856   int UNUSED written = 0;
1857   IADDR UNUSED pc = abuf->addr;
1858   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1859 
1860   {
1861     SF opval = sh64_fsqrts (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1862     CPU (h_fr[FLD (f_dest)]) = opval;
1863     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1864   }
1865 
1866 #undef FLD
1867 }
1868   NEXT (vpc);
1869 
CASE(sem,INSN_FSTD)1870   CASE (sem, INSN_FSTD) : /* fst.d $rm, $disp10x8, $drf */
1871 {
1872   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1873   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1874 #define FLD(f) abuf->fields.sfmt_fldd.f
1875   int UNUSED written = 0;
1876   IADDR UNUSED pc = abuf->addr;
1877   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1878 
1879   {
1880     DF opval = GET_H_DR (FLD (f_dest));
1881     SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)), opval);
1882     TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1883   }
1884 
1885 #undef FLD
1886 }
1887   NEXT (vpc);
1888 
CASE(sem,INSN_FSTP)1889   CASE (sem, INSN_FSTP) : /* fst.p $rm, $disp10x8, $fpf */
1890 {
1891   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1892   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1893 #define FLD(f) abuf->fields.sfmt_fldd.f
1894   int UNUSED written = 0;
1895   IADDR UNUSED pc = abuf->addr;
1896   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1897 
1898 {
1899   {
1900     SF opval = GET_H_FP (FLD (f_dest));
1901     SET_H_FP (FLD (f_dest), opval);
1902     TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
1903   }
1904 sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest));
1905 }
1906 
1907 #undef FLD
1908 }
1909   NEXT (vpc);
1910 
CASE(sem,INSN_FSTS)1911   CASE (sem, INSN_FSTS) : /* fst.s $rm, $disp10x4, $frf */
1912 {
1913   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1914   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1915 #define FLD(f) abuf->fields.sfmt_flds.f
1916   int UNUSED written = 0;
1917   IADDR UNUSED pc = abuf->addr;
1918   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1919 
1920   {
1921     SF opval = CPU (h_fr[FLD (f_dest)]);
1922     SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)), opval);
1923     TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1924   }
1925 
1926 #undef FLD
1927 }
1928   NEXT (vpc);
1929 
CASE(sem,INSN_FSTXD)1930   CASE (sem, INSN_FSTXD) : /* fstx.d $rm, $rn, $drf */
1931 {
1932   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1933   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1934 #define FLD(f) abuf->fields.sfmt_add.f
1935   int UNUSED written = 0;
1936   IADDR UNUSED pc = abuf->addr;
1937   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1938 
1939   {
1940     DF opval = GET_H_DR (FLD (f_dest));
1941     SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1942     TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1943   }
1944 
1945 #undef FLD
1946 }
1947   NEXT (vpc);
1948 
CASE(sem,INSN_FSTXP)1949   CASE (sem, INSN_FSTXP) : /* fstx.p $rm, $rn, $fpf */
1950 {
1951   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1952   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1953 #define FLD(f) abuf->fields.sfmt_add.f
1954   int UNUSED written = 0;
1955   IADDR UNUSED pc = abuf->addr;
1956   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1957 
1958 {
1959   {
1960     SF opval = GET_H_FP (FLD (f_dest));
1961     SET_H_FP (FLD (f_dest), opval);
1962     TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
1963   }
1964 sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest));
1965 }
1966 
1967 #undef FLD
1968 }
1969   NEXT (vpc);
1970 
CASE(sem,INSN_FSTXS)1971   CASE (sem, INSN_FSTXS) : /* fstx.s $rm, $rn, $frf */
1972 {
1973   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1974   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1975 #define FLD(f) abuf->fields.sfmt_add.f
1976   int UNUSED written = 0;
1977   IADDR UNUSED pc = abuf->addr;
1978   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1979 
1980   {
1981     SF opval = CPU (h_fr[FLD (f_dest)]);
1982     SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1983     TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1984   }
1985 
1986 #undef FLD
1987 }
1988   NEXT (vpc);
1989 
CASE(sem,INSN_FSUBD)1990   CASE (sem, INSN_FSUBD) : /* fsub.d $drg, $drh, $drf */
1991 {
1992   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1993   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1994 #define FLD(f) abuf->fields.sfmt_add.f
1995   int UNUSED written = 0;
1996   IADDR UNUSED pc = abuf->addr;
1997   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1998 
1999   {
2000     DF opval = sh64_fsubd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
2001     SET_H_DR (FLD (f_dest), opval);
2002     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
2003   }
2004 
2005 #undef FLD
2006 }
2007   NEXT (vpc);
2008 
CASE(sem,INSN_FSUBS)2009   CASE (sem, INSN_FSUBS) : /* fsub.s $frg, $frh, $frf */
2010 {
2011   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2012   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2013 #define FLD(f) abuf->fields.sfmt_add.f
2014   int UNUSED written = 0;
2015   IADDR UNUSED pc = abuf->addr;
2016   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2017 
2018   {
2019     SF opval = sh64_fsubs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
2020     CPU (h_fr[FLD (f_dest)]) = opval;
2021     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2022   }
2023 
2024 #undef FLD
2025 }
2026   NEXT (vpc);
2027 
CASE(sem,INSN_FTRCDL)2028   CASE (sem, INSN_FTRCDL) : /* ftrc.dl $drgh, $frf */
2029 {
2030   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2031   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2032 #define FLD(f) abuf->fields.sfmt_fabsd.f
2033   int UNUSED written = 0;
2034   IADDR UNUSED pc = abuf->addr;
2035   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2036 
2037   {
2038     SF opval = sh64_ftrcdl (current_cpu, GET_H_DR (FLD (f_left_right)));
2039     CPU (h_fr[FLD (f_dest)]) = opval;
2040     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2041   }
2042 
2043 #undef FLD
2044 }
2045   NEXT (vpc);
2046 
CASE(sem,INSN_FTRCSL)2047   CASE (sem, INSN_FTRCSL) : /* ftrc.sl $frgh, $frf */
2048 {
2049   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2050   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2051 #define FLD(f) abuf->fields.sfmt_fabsd.f
2052   int UNUSED written = 0;
2053   IADDR UNUSED pc = abuf->addr;
2054   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2055 
2056   {
2057     SF opval = sh64_ftrcsl (current_cpu, CPU (h_fr[FLD (f_left_right)]));
2058     CPU (h_fr[FLD (f_dest)]) = opval;
2059     TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2060   }
2061 
2062 #undef FLD
2063 }
2064   NEXT (vpc);
2065 
CASE(sem,INSN_FTRCDQ)2066   CASE (sem, INSN_FTRCDQ) : /* ftrc.dq $drgh, $drf */
2067 {
2068   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2069   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2070 #define FLD(f) abuf->fields.sfmt_fabsd.f
2071   int UNUSED written = 0;
2072   IADDR UNUSED pc = abuf->addr;
2073   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2074 
2075   {
2076     DF opval = sh64_ftrcdq (current_cpu, GET_H_DR (FLD (f_left_right)));
2077     SET_H_DR (FLD (f_dest), opval);
2078     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
2079   }
2080 
2081 #undef FLD
2082 }
2083   NEXT (vpc);
2084 
CASE(sem,INSN_FTRCSQ)2085   CASE (sem, INSN_FTRCSQ) : /* ftrc.sq $frgh, $drf */
2086 {
2087   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2088   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2089 #define FLD(f) abuf->fields.sfmt_fabsd.f
2090   int UNUSED written = 0;
2091   IADDR UNUSED pc = abuf->addr;
2092   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2093 
2094   {
2095     DF opval = sh64_ftrcsq (current_cpu, CPU (h_fr[FLD (f_left_right)]));
2096     SET_H_DR (FLD (f_dest), opval);
2097     TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
2098   }
2099 
2100 #undef FLD
2101 }
2102   NEXT (vpc);
2103 
CASE(sem,INSN_FTRVS)2104   CASE (sem, INSN_FTRVS) : /* ftrv.s $mtrxg, $fvh, $fvf */
2105 {
2106   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2107   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2108 #define FLD(f) abuf->fields.sfmt_add.f
2109   int UNUSED written = 0;
2110   IADDR UNUSED pc = abuf->addr;
2111   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2112 
2113 {
2114   {
2115     SF opval = GET_H_FMTX (FLD (f_left));
2116     SET_H_FMTX (FLD (f_left), opval);
2117     TRACE_RESULT (current_cpu, abuf, "fmtx", 'f', opval);
2118   }
2119   {
2120     SF opval = GET_H_FV (FLD (f_right));
2121     SET_H_FV (FLD (f_right), opval);
2122     TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
2123   }
2124   {
2125     SF opval = GET_H_FV (FLD (f_dest));
2126     SET_H_FV (FLD (f_dest), opval);
2127     TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
2128   }
2129 sh64_ftrvs (current_cpu, FLD (f_left), FLD (f_right), FLD (f_dest));
2130 }
2131 
2132 #undef FLD
2133 }
2134   NEXT (vpc);
2135 
CASE(sem,INSN_GETCFG)2136   CASE (sem, INSN_GETCFG) : /* getcfg $rm, $disp6, $rd */
2137 {
2138   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2139   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2140 #define FLD(f) abuf->fields.sfmt_getcfg.f
2141   int UNUSED written = 0;
2142   IADDR UNUSED pc = abuf->addr;
2143   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2144 
2145 {
2146   SI tmp_address;
2147   tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2148 ((void) 0); /*nop*/
2149   {
2150     DI opval = GETMEMSI (current_cpu, pc, tmp_address);
2151     SET_H_GR (FLD (f_dest), opval);
2152     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2153   }
2154 }
2155 
2156 #undef FLD
2157 }
2158   NEXT (vpc);
2159 
CASE(sem,INSN_GETCON)2160   CASE (sem, INSN_GETCON) : /* getcon $crk, $rd */
2161 {
2162   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2163   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2164 #define FLD(f) abuf->fields.sfmt_xori.f
2165   int UNUSED written = 0;
2166   IADDR UNUSED pc = abuf->addr;
2167   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2168 
2169   {
2170     DI opval = GET_H_CR (FLD (f_left));
2171     SET_H_GR (FLD (f_dest), opval);
2172     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2173   }
2174 
2175 #undef FLD
2176 }
2177   NEXT (vpc);
2178 
CASE(sem,INSN_GETTR)2179   CASE (sem, INSN_GETTR) : /* gettr $trb, $rd */
2180 {
2181   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2182   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2183 #define FLD(f) abuf->fields.sfmt_blink.f
2184   int UNUSED written = 0;
2185   IADDR UNUSED pc = abuf->addr;
2186   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2187 
2188   {
2189     DI opval = CPU (h_tr[FLD (f_trb)]);
2190     SET_H_GR (FLD (f_dest), opval);
2191     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2192   }
2193 
2194 #undef FLD
2195 }
2196   NEXT (vpc);
2197 
CASE(sem,INSN_ICBI)2198   CASE (sem, INSN_ICBI) : /* icbi $rm, $disp6x32 */
2199 {
2200   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2201   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2202 #define FLD(f) abuf->fields.sfmt_xori.f
2203   int UNUSED written = 0;
2204   IADDR UNUSED pc = abuf->addr;
2205   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2206 
2207 {
2208   {
2209     DI opval = GET_H_GR (FLD (f_left));
2210     SET_H_GR (FLD (f_left), opval);
2211     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2212   }
2213 ((void) 0); /*nop*/
2214 }
2215 
2216 #undef FLD
2217 }
2218   NEXT (vpc);
2219 
CASE(sem,INSN_LDB)2220   CASE (sem, INSN_LDB) : /* ld.b $rm, $disp10, $rd */
2221 {
2222   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2223   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2224 #define FLD(f) abuf->fields.sfmt_addi.f
2225   int UNUSED written = 0;
2226   IADDR UNUSED pc = abuf->addr;
2227   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2228 
2229   {
2230     DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)))));
2231     SET_H_GR (FLD (f_dest), opval);
2232     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2233   }
2234 
2235 #undef FLD
2236 }
2237   NEXT (vpc);
2238 
CASE(sem,INSN_LDL)2239   CASE (sem, INSN_LDL) : /* ld.l $rm, $disp10x4, $rd */
2240 {
2241   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2242   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2243 #define FLD(f) abuf->fields.sfmt_flds.f
2244   int UNUSED written = 0;
2245   IADDR UNUSED pc = abuf->addr;
2246   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2247 
2248   {
2249     DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4)))));
2250     SET_H_GR (FLD (f_dest), opval);
2251     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2252   }
2253 
2254 #undef FLD
2255 }
2256   NEXT (vpc);
2257 
CASE(sem,INSN_LDQ)2258   CASE (sem, INSN_LDQ) : /* ld.q $rm, $disp10x8, $rd */
2259 {
2260   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2261   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2262 #define FLD(f) abuf->fields.sfmt_fldd.f
2263   int UNUSED written = 0;
2264   IADDR UNUSED pc = abuf->addr;
2265   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2266 
2267   {
2268     DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))));
2269     SET_H_GR (FLD (f_dest), opval);
2270     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2271   }
2272 
2273 #undef FLD
2274 }
2275   NEXT (vpc);
2276 
CASE(sem,INSN_LDUB)2277   CASE (sem, INSN_LDUB) : /* ld.ub $rm, $disp10, $rd */
2278 {
2279   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2280   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2281 #define FLD(f) abuf->fields.sfmt_addi.f
2282   int UNUSED written = 0;
2283   IADDR UNUSED pc = abuf->addr;
2284   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2285 
2286   {
2287     DI opval = ZEXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)))));
2288     SET_H_GR (FLD (f_dest), opval);
2289     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2290   }
2291 
2292 #undef FLD
2293 }
2294   NEXT (vpc);
2295 
CASE(sem,INSN_LDUW)2296   CASE (sem, INSN_LDUW) : /* ld.uw $rm, $disp10x2, $rd */
2297 {
2298   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2299   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2300 #define FLD(f) abuf->fields.sfmt_lduw.f
2301   int UNUSED written = 0;
2302   IADDR UNUSED pc = abuf->addr;
2303   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2304 
2305   {
2306     DI opval = ZEXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2)))));
2307     SET_H_GR (FLD (f_dest), opval);
2308     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2309   }
2310 
2311 #undef FLD
2312 }
2313   NEXT (vpc);
2314 
CASE(sem,INSN_LDW)2315   CASE (sem, INSN_LDW) : /* ld.w $rm, $disp10x2, $rd */
2316 {
2317   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2318   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2319 #define FLD(f) abuf->fields.sfmt_lduw.f
2320   int UNUSED written = 0;
2321   IADDR UNUSED pc = abuf->addr;
2322   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2323 
2324   {
2325     DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2)))));
2326     SET_H_GR (FLD (f_dest), opval);
2327     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2328   }
2329 
2330 #undef FLD
2331 }
2332   NEXT (vpc);
2333 
CASE(sem,INSN_LDHIL)2334   CASE (sem, INSN_LDHIL) : /* ldhi.l $rm, $disp6, $rd */
2335 {
2336   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2337   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2338 #define FLD(f) abuf->fields.sfmt_getcfg.f
2339   int UNUSED written = 0;
2340   IADDR UNUSED pc = abuf->addr;
2341   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2342 
2343 {
2344   DI tmp_addr;
2345   QI tmp_bytecount;
2346   SI tmp_val;
2347   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2348   tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1);
2349   tmp_val = 0;
2350 if (ANDQI (tmp_bytecount, 4)) {
2351   {
2352     DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4)));
2353     SET_H_GR (FLD (f_dest), opval);
2354     written |= (1 << 6);
2355     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2356   }
2357 } else {
2358 if (GET_H_ENDIAN ()) {
2359 {
2360 if (ANDQI (tmp_bytecount, 2)) {
2361   tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2362 }
2363 if (ANDQI (tmp_bytecount, 1)) {
2364   tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2365 }
2366   {
2367     DI opval = EXTSIDI (tmp_val);
2368     SET_H_GR (FLD (f_dest), opval);
2369     written |= (1 << 6);
2370     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2371   }
2372 }
2373 } else {
2374 {
2375 if (ANDQI (tmp_bytecount, 1)) {
2376   tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2377 }
2378 if (ANDQI (tmp_bytecount, 2)) {
2379   tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2380 }
2381   {
2382     DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount))));
2383     SET_H_GR (FLD (f_dest), opval);
2384     written |= (1 << 6);
2385     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2386   }
2387 }
2388 }
2389 }
2390 }
2391 
2392   abuf->written = written;
2393 #undef FLD
2394 }
2395   NEXT (vpc);
2396 
CASE(sem,INSN_LDHIQ)2397   CASE (sem, INSN_LDHIQ) : /* ldhi.q $rm, $disp6, $rd */
2398 {
2399   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2400   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2401 #define FLD(f) abuf->fields.sfmt_getcfg.f
2402   int UNUSED written = 0;
2403   IADDR UNUSED pc = abuf->addr;
2404   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2405 
2406 {
2407   DI tmp_addr;
2408   QI tmp_bytecount;
2409   DI tmp_val;
2410   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2411   tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1);
2412   tmp_val = 0;
2413 if (ANDQI (tmp_bytecount, 8)) {
2414   {
2415     DI opval = GETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8));
2416     SET_H_GR (FLD (f_dest), opval);
2417     written |= (1 << 7);
2418     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2419   }
2420 } else {
2421 if (GET_H_ENDIAN ()) {
2422 {
2423 if (ANDQI (tmp_bytecount, 4)) {
2424   tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8))));
2425 }
2426 if (ANDQI (tmp_bytecount, 2)) {
2427   tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2428 }
2429 if (ANDQI (tmp_bytecount, 1)) {
2430   tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2431 }
2432   {
2433     DI opval = tmp_val;
2434     SET_H_GR (FLD (f_dest), opval);
2435     written |= (1 << 7);
2436     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2437   }
2438 }
2439 } else {
2440 {
2441 if (ANDQI (tmp_bytecount, 1)) {
2442   tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2443 }
2444 if (ANDQI (tmp_bytecount, 2)) {
2445   tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2446 }
2447 if (ANDQI (tmp_bytecount, 4)) {
2448   tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8))));
2449 }
2450   {
2451     DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount)));
2452     SET_H_GR (FLD (f_dest), opval);
2453     written |= (1 << 7);
2454     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2455   }
2456 }
2457 }
2458 }
2459 }
2460 
2461   abuf->written = written;
2462 #undef FLD
2463 }
2464   NEXT (vpc);
2465 
CASE(sem,INSN_LDLOL)2466   CASE (sem, INSN_LDLOL) : /* ldlo.l $rm, $disp6, $rd */
2467 {
2468   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2469   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2470 #define FLD(f) abuf->fields.sfmt_getcfg.f
2471   int UNUSED written = 0;
2472   IADDR UNUSED pc = abuf->addr;
2473   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2474 
2475 {
2476   DI tmp_addr;
2477   QI tmp_bytecount;
2478   SI tmp_val;
2479   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2480   tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3));
2481   tmp_val = 0;
2482 if (ANDQI (tmp_bytecount, 4)) {
2483   {
2484     DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, tmp_addr));
2485     SET_H_GR (FLD (f_dest), opval);
2486     written |= (1 << 6);
2487     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2488   }
2489 } else {
2490 if (GET_H_ENDIAN ()) {
2491 {
2492 if (ANDQI (tmp_bytecount, 1)) {
2493   tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2494 }
2495 if (ANDQI (tmp_bytecount, 2)) {
2496   tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2497 }
2498   {
2499     DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount))));
2500     SET_H_GR (FLD (f_dest), opval);
2501     written |= (1 << 6);
2502     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2503   }
2504 }
2505 } else {
2506 {
2507 if (ANDQI (tmp_bytecount, 2)) {
2508   tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2509 }
2510 if (ANDQI (tmp_bytecount, 1)) {
2511   tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2512 }
2513   {
2514     DI opval = EXTSIDI (tmp_val);
2515     SET_H_GR (FLD (f_dest), opval);
2516     written |= (1 << 6);
2517     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2518   }
2519 }
2520 }
2521 }
2522 }
2523 
2524   abuf->written = written;
2525 #undef FLD
2526 }
2527   NEXT (vpc);
2528 
CASE(sem,INSN_LDLOQ)2529   CASE (sem, INSN_LDLOQ) : /* ldlo.q $rm, $disp6, $rd */
2530 {
2531   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2532   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2533 #define FLD(f) abuf->fields.sfmt_getcfg.f
2534   int UNUSED written = 0;
2535   IADDR UNUSED pc = abuf->addr;
2536   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2537 
2538 {
2539   DI tmp_addr;
2540   QI tmp_bytecount;
2541   DI tmp_val;
2542   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2543   tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7));
2544   tmp_val = 0;
2545 if (ANDQI (tmp_bytecount, 8)) {
2546   {
2547     DI opval = GETMEMDI (current_cpu, pc, tmp_addr);
2548     SET_H_GR (FLD (f_dest), opval);
2549     written |= (1 << 7);
2550     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2551   }
2552 } else {
2553 if (GET_H_ENDIAN ()) {
2554 {
2555 if (ANDQI (tmp_bytecount, 1)) {
2556   tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2557 }
2558 if (ANDQI (tmp_bytecount, 2)) {
2559   tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2560 }
2561 if (ANDQI (tmp_bytecount, 4)) {
2562   tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4))));
2563 }
2564   {
2565     DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount)));
2566     SET_H_GR (FLD (f_dest), opval);
2567     written |= (1 << 7);
2568     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2569   }
2570 }
2571 } else {
2572 {
2573 if (ANDQI (tmp_bytecount, 4)) {
2574   tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4))));
2575 }
2576 if (ANDQI (tmp_bytecount, 2)) {
2577   tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2578 }
2579 if (ANDQI (tmp_bytecount, 1)) {
2580   tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2581 }
2582   {
2583     DI opval = tmp_val;
2584     SET_H_GR (FLD (f_dest), opval);
2585     written |= (1 << 7);
2586     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2587   }
2588 }
2589 }
2590 }
2591 }
2592 
2593   abuf->written = written;
2594 #undef FLD
2595 }
2596   NEXT (vpc);
2597 
CASE(sem,INSN_LDXB)2598   CASE (sem, INSN_LDXB) : /* ldx.b $rm, $rn, $rd */
2599 {
2600   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2601   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2602 #define FLD(f) abuf->fields.sfmt_add.f
2603   int UNUSED written = 0;
2604   IADDR UNUSED pc = abuf->addr;
2605   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2606 
2607   {
2608     DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2609     SET_H_GR (FLD (f_dest), opval);
2610     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2611   }
2612 
2613 #undef FLD
2614 }
2615   NEXT (vpc);
2616 
CASE(sem,INSN_LDXL)2617   CASE (sem, INSN_LDXL) : /* ldx.l $rm, $rn, $rd */
2618 {
2619   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2620   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2621 #define FLD(f) abuf->fields.sfmt_add.f
2622   int UNUSED written = 0;
2623   IADDR UNUSED pc = abuf->addr;
2624   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2625 
2626   {
2627     DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2628     SET_H_GR (FLD (f_dest), opval);
2629     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2630   }
2631 
2632 #undef FLD
2633 }
2634   NEXT (vpc);
2635 
CASE(sem,INSN_LDXQ)2636   CASE (sem, INSN_LDXQ) : /* ldx.q $rm, $rn, $rd */
2637 {
2638   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2639   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2640 #define FLD(f) abuf->fields.sfmt_add.f
2641   int UNUSED written = 0;
2642   IADDR UNUSED pc = abuf->addr;
2643   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2644 
2645   {
2646     DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
2647     SET_H_GR (FLD (f_dest), opval);
2648     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2649   }
2650 
2651 #undef FLD
2652 }
2653   NEXT (vpc);
2654 
CASE(sem,INSN_LDXUB)2655   CASE (sem, INSN_LDXUB) : /* ldx.ub $rm, $rn, $rd */
2656 {
2657   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2658   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2659 #define FLD(f) abuf->fields.sfmt_add.f
2660   int UNUSED written = 0;
2661   IADDR UNUSED pc = abuf->addr;
2662   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2663 
2664   {
2665     DI opval = ZEXTQIDI (GETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2666     SET_H_GR (FLD (f_dest), opval);
2667     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2668   }
2669 
2670 #undef FLD
2671 }
2672   NEXT (vpc);
2673 
CASE(sem,INSN_LDXUW)2674   CASE (sem, INSN_LDXUW) : /* ldx.uw $rm, $rn, $rd */
2675 {
2676   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2677   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2678 #define FLD(f) abuf->fields.sfmt_add.f
2679   int UNUSED written = 0;
2680   IADDR UNUSED pc = abuf->addr;
2681   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2682 
2683   {
2684     DI opval = ZEXTHIDI (GETMEMUHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2685     SET_H_GR (FLD (f_dest), opval);
2686     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2687   }
2688 
2689 #undef FLD
2690 }
2691   NEXT (vpc);
2692 
CASE(sem,INSN_LDXW)2693   CASE (sem, INSN_LDXW) : /* ldx.w $rm, $rn, $rd */
2694 {
2695   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2696   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2697 #define FLD(f) abuf->fields.sfmt_add.f
2698   int UNUSED written = 0;
2699   IADDR UNUSED pc = abuf->addr;
2700   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2701 
2702   {
2703     DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2704     SET_H_GR (FLD (f_dest), opval);
2705     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2706   }
2707 
2708 #undef FLD
2709 }
2710   NEXT (vpc);
2711 
CASE(sem,INSN_MABSL)2712   CASE (sem, INSN_MABSL) : /* mabs.l $rm, $rd */
2713 {
2714   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2715   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2716 #define FLD(f) abuf->fields.sfmt_xori.f
2717   int UNUSED written = 0;
2718   IADDR UNUSED pc = abuf->addr;
2719   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2720 
2721 {
2722   SI tmp_result1;
2723   SI tmp_result0;
2724   tmp_result0 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1));
2725   tmp_result1 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0));
2726   {
2727     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2728     SET_H_GR (FLD (f_dest), opval);
2729     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2730   }
2731 }
2732 
2733 #undef FLD
2734 }
2735   NEXT (vpc);
2736 
CASE(sem,INSN_MABSW)2737   CASE (sem, INSN_MABSW) : /* mabs.w $rm, $rd */
2738 {
2739   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2740   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2741 #define FLD(f) abuf->fields.sfmt_xori.f
2742   int UNUSED written = 0;
2743   IADDR UNUSED pc = abuf->addr;
2744   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2745 
2746 {
2747   HI tmp_result3;
2748   HI tmp_result2;
2749   HI tmp_result1;
2750   HI tmp_result0;
2751   tmp_result0 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3));
2752   tmp_result1 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2));
2753   tmp_result2 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1));
2754   tmp_result3 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0));
2755   {
2756     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2757     SET_H_GR (FLD (f_dest), opval);
2758     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2759   }
2760 }
2761 
2762 #undef FLD
2763 }
2764   NEXT (vpc);
2765 
CASE(sem,INSN_MADDL)2766   CASE (sem, INSN_MADDL) : /* madd.l $rm, $rn, $rd */
2767 {
2768   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2769   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2770 #define FLD(f) abuf->fields.sfmt_add.f
2771   int UNUSED written = 0;
2772   IADDR UNUSED pc = abuf->addr;
2773   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2774 
2775 {
2776   SI tmp_result1;
2777   SI tmp_result0;
2778   tmp_result0 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
2779   tmp_result1 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
2780   {
2781     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2782     SET_H_GR (FLD (f_dest), opval);
2783     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2784   }
2785 }
2786 
2787 #undef FLD
2788 }
2789   NEXT (vpc);
2790 
CASE(sem,INSN_MADDW)2791   CASE (sem, INSN_MADDW) : /* madd.w $rm, $rn, $rd */
2792 {
2793   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2794   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2795 #define FLD(f) abuf->fields.sfmt_add.f
2796   int UNUSED written = 0;
2797   IADDR UNUSED pc = abuf->addr;
2798   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2799 
2800 {
2801   HI tmp_result3;
2802   HI tmp_result2;
2803   HI tmp_result1;
2804   HI tmp_result0;
2805   tmp_result0 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
2806   tmp_result1 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
2807   tmp_result2 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
2808   tmp_result3 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
2809   {
2810     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2811     SET_H_GR (FLD (f_dest), opval);
2812     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2813   }
2814 }
2815 
2816 #undef FLD
2817 }
2818   NEXT (vpc);
2819 
CASE(sem,INSN_MADDSL)2820   CASE (sem, INSN_MADDSL) : /* madds.l $rm, $rn, $rd */
2821 {
2822   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2823   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2824 #define FLD(f) abuf->fields.sfmt_add.f
2825   int UNUSED written = 0;
2826   IADDR UNUSED pc = abuf->addr;
2827   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2828 
2829 {
2830   SI tmp_result1;
2831   SI tmp_result0;
2832   tmp_result0 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2833   tmp_result1 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2834   {
2835     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2836     SET_H_GR (FLD (f_dest), opval);
2837     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2838   }
2839 }
2840 
2841 #undef FLD
2842 }
2843   NEXT (vpc);
2844 
CASE(sem,INSN_MADDSUB)2845   CASE (sem, INSN_MADDSUB) : /* madds.ub $rm, $rn, $rd */
2846 {
2847   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2848   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2849 #define FLD(f) abuf->fields.sfmt_add.f
2850   int UNUSED written = 0;
2851   IADDR UNUSED pc = abuf->addr;
2852   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2853 
2854 {
2855   QI tmp_result7;
2856   QI tmp_result6;
2857   QI tmp_result5;
2858   QI tmp_result4;
2859   QI tmp_result3;
2860   QI tmp_result2;
2861   QI tmp_result1;
2862   QI tmp_result0;
2863   tmp_result0 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
2864   tmp_result1 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
2865   tmp_result2 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
2866   tmp_result3 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
2867   tmp_result4 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
2868   tmp_result5 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
2869   tmp_result6 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
2870   tmp_result7 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
2871   {
2872     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2873     SET_H_GR (FLD (f_dest), opval);
2874     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2875   }
2876 }
2877 
2878 #undef FLD
2879 }
2880   NEXT (vpc);
2881 
CASE(sem,INSN_MADDSW)2882   CASE (sem, INSN_MADDSW) : /* madds.w $rm, $rn, $rd */
2883 {
2884   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2885   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2886 #define FLD(f) abuf->fields.sfmt_add.f
2887   int UNUSED written = 0;
2888   IADDR UNUSED pc = abuf->addr;
2889   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2890 
2891 {
2892   HI tmp_result3;
2893   HI tmp_result2;
2894   HI tmp_result1;
2895   HI tmp_result0;
2896   tmp_result0 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2897   tmp_result1 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2898   tmp_result2 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2899   tmp_result3 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2900   {
2901     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2902     SET_H_GR (FLD (f_dest), opval);
2903     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2904   }
2905 }
2906 
2907 #undef FLD
2908 }
2909   NEXT (vpc);
2910 
CASE(sem,INSN_MCMPEQB)2911   CASE (sem, INSN_MCMPEQB) : /* mcmpeq.b $rm, $rn, $rd */
2912 {
2913   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2914   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2915 #define FLD(f) abuf->fields.sfmt_add.f
2916   int UNUSED written = 0;
2917   IADDR UNUSED pc = abuf->addr;
2918   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2919 
2920 {
2921   QI tmp_result7;
2922   QI tmp_result6;
2923   QI tmp_result5;
2924   QI tmp_result4;
2925   QI tmp_result3;
2926   QI tmp_result2;
2927   QI tmp_result1;
2928   QI tmp_result0;
2929   tmp_result0 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2930   tmp_result1 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2931   tmp_result2 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2932   tmp_result3 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2933   tmp_result4 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2934   tmp_result5 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2935   tmp_result6 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2936   tmp_result7 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2937   {
2938     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2939     SET_H_GR (FLD (f_dest), opval);
2940     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2941   }
2942 }
2943 
2944 #undef FLD
2945 }
2946   NEXT (vpc);
2947 
CASE(sem,INSN_MCMPEQL)2948   CASE (sem, INSN_MCMPEQL) : /* mcmpeq.l $rm, $rn, $rd */
2949 {
2950   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2951   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2952 #define FLD(f) abuf->fields.sfmt_add.f
2953   int UNUSED written = 0;
2954   IADDR UNUSED pc = abuf->addr;
2955   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2956 
2957 {
2958   SI tmp_result1;
2959   SI tmp_result0;
2960   tmp_result0 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2961   tmp_result1 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2962   {
2963     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2964     SET_H_GR (FLD (f_dest), opval);
2965     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2966   }
2967 }
2968 
2969 #undef FLD
2970 }
2971   NEXT (vpc);
2972 
CASE(sem,INSN_MCMPEQW)2973   CASE (sem, INSN_MCMPEQW) : /* mcmpeq.w $rm, $rn, $rd */
2974 {
2975   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2976   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2977 #define FLD(f) abuf->fields.sfmt_add.f
2978   int UNUSED written = 0;
2979   IADDR UNUSED pc = abuf->addr;
2980   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2981 
2982 {
2983   HI tmp_result3;
2984   HI tmp_result2;
2985   HI tmp_result1;
2986   HI tmp_result0;
2987   tmp_result0 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
2988   tmp_result1 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
2989   tmp_result2 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
2990   tmp_result3 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
2991   {
2992     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2993     SET_H_GR (FLD (f_dest), opval);
2994     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2995   }
2996 }
2997 
2998 #undef FLD
2999 }
3000   NEXT (vpc);
3001 
CASE(sem,INSN_MCMPGTL)3002   CASE (sem, INSN_MCMPGTL) : /* mcmpgt.l $rm, $rn, $rd */
3003 {
3004   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3005   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3006 #define FLD(f) abuf->fields.sfmt_add.f
3007   int UNUSED written = 0;
3008   IADDR UNUSED pc = abuf->addr;
3009   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3010 
3011 {
3012   SI tmp_result1;
3013   SI tmp_result0;
3014   tmp_result0 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
3015   tmp_result1 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
3016   {
3017     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3018     SET_H_GR (FLD (f_dest), opval);
3019     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3020   }
3021 }
3022 
3023 #undef FLD
3024 }
3025   NEXT (vpc);
3026 
CASE(sem,INSN_MCMPGTUB)3027   CASE (sem, INSN_MCMPGTUB) : /* mcmpgt.ub $rm, $rn, $rd */
3028 {
3029   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3030   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3031 #define FLD(f) abuf->fields.sfmt_add.f
3032   int UNUSED written = 0;
3033   IADDR UNUSED pc = abuf->addr;
3034   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3035 
3036 {
3037   QI tmp_result7;
3038   QI tmp_result6;
3039   QI tmp_result5;
3040   QI tmp_result4;
3041   QI tmp_result3;
3042   QI tmp_result2;
3043   QI tmp_result1;
3044   QI tmp_result0;
3045   tmp_result0 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
3046   tmp_result1 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
3047   tmp_result2 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
3048   tmp_result3 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
3049   tmp_result4 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
3050   tmp_result5 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
3051   tmp_result6 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
3052   tmp_result7 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
3053   {
3054     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3055     SET_H_GR (FLD (f_dest), opval);
3056     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3057   }
3058 }
3059 
3060 #undef FLD
3061 }
3062   NEXT (vpc);
3063 
CASE(sem,INSN_MCMPGTW)3064   CASE (sem, INSN_MCMPGTW) : /* mcmpgt.w $rm, $rn, $rd */
3065 {
3066   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3067   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3068 #define FLD(f) abuf->fields.sfmt_add.f
3069   int UNUSED written = 0;
3070   IADDR UNUSED pc = abuf->addr;
3071   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3072 
3073 {
3074   HI tmp_result3;
3075   HI tmp_result2;
3076   HI tmp_result1;
3077   HI tmp_result0;
3078   tmp_result0 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
3079   tmp_result1 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
3080   tmp_result2 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
3081   tmp_result3 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
3082   {
3083     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3084     SET_H_GR (FLD (f_dest), opval);
3085     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3086   }
3087 }
3088 
3089 #undef FLD
3090 }
3091   NEXT (vpc);
3092 
CASE(sem,INSN_MCMV)3093   CASE (sem, INSN_MCMV) : /* mcmv $rm, $rn, $rd */
3094 {
3095   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3096   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3097 #define FLD(f) abuf->fields.sfmt_add.f
3098   int UNUSED written = 0;
3099   IADDR UNUSED pc = abuf->addr;
3100   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3101 
3102   {
3103     DI opval = ORDI (ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), ANDDI (GET_H_GR (FLD (f_dest)), INVDI (GET_H_GR (FLD (f_right)))));
3104     SET_H_GR (FLD (f_dest), opval);
3105     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3106   }
3107 
3108 #undef FLD
3109 }
3110   NEXT (vpc);
3111 
CASE(sem,INSN_MCNVSLW)3112   CASE (sem, INSN_MCNVSLW) : /* mcnvs.lw $rm, $rn, $rd */
3113 {
3114   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3115   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3116 #define FLD(f) abuf->fields.sfmt_add.f
3117   int UNUSED written = 0;
3118   IADDR UNUSED pc = abuf->addr;
3119   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3120 
3121 {
3122   HI tmp_result3;
3123   HI tmp_result2;
3124   HI tmp_result1;
3125   HI tmp_result0;
3126   tmp_result0 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3127   tmp_result1 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3128   tmp_result2 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3129   tmp_result3 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3130   {
3131     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3132     SET_H_GR (FLD (f_dest), opval);
3133     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3134   }
3135 }
3136 
3137 #undef FLD
3138 }
3139   NEXT (vpc);
3140 
CASE(sem,INSN_MCNVSWB)3141   CASE (sem, INSN_MCNVSWB) : /* mcnvs.wb $rm, $rn, $rd */
3142 {
3143   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3144   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3145 #define FLD(f) abuf->fields.sfmt_add.f
3146   int UNUSED written = 0;
3147   IADDR UNUSED pc = abuf->addr;
3148   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3149 
3150 {
3151   QI tmp_result7;
3152   QI tmp_result6;
3153   QI tmp_result5;
3154   QI tmp_result4;
3155   QI tmp_result3;
3156   QI tmp_result2;
3157   QI tmp_result1;
3158   QI tmp_result0;
3159   tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3160   tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3161   tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3162   tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3163   tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3164   tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3165   tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3166   tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3167   {
3168     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3169     SET_H_GR (FLD (f_dest), opval);
3170     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3171   }
3172 }
3173 
3174 #undef FLD
3175 }
3176   NEXT (vpc);
3177 
CASE(sem,INSN_MCNVSWUB)3178   CASE (sem, INSN_MCNVSWUB) : /* mcnvs.wub $rm, $rn, $rd */
3179 {
3180   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3181   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3182 #define FLD(f) abuf->fields.sfmt_add.f
3183   int UNUSED written = 0;
3184   IADDR UNUSED pc = abuf->addr;
3185   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3186 
3187 {
3188   QI tmp_result7;
3189   QI tmp_result6;
3190   QI tmp_result5;
3191   QI tmp_result4;
3192   QI tmp_result3;
3193   QI tmp_result2;
3194   QI tmp_result1;
3195   QI tmp_result0;
3196   tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3197   tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3198   tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3199   tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3200   tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3201   tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3202   tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3203   tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3204   {
3205     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3206     SET_H_GR (FLD (f_dest), opval);
3207     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3208   }
3209 }
3210 
3211 #undef FLD
3212 }
3213   NEXT (vpc);
3214 
CASE(sem,INSN_MEXTR1)3215   CASE (sem, INSN_MEXTR1) : /* mextr1 $rm, $rn, $rd */
3216 {
3217   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3218   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3219 #define FLD(f) abuf->fields.sfmt_add.f
3220   int UNUSED written = 0;
3221   IADDR UNUSED pc = abuf->addr;
3222   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3223 
3224 {
3225   QI tmp_count;
3226   DI tmp_mask;
3227   DI tmp_rhs;
3228   tmp_count = MULQI (8, 1);
3229   tmp_mask = SLLDI (INVSI (0), tmp_count);
3230   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3231   tmp_count = MULQI (8, SUBQI (8, 1));
3232   tmp_mask = SRLDI (INVSI (0), tmp_count);
3233   {
3234     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3235     SET_H_GR (FLD (f_dest), opval);
3236     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3237   }
3238 }
3239 
3240 #undef FLD
3241 }
3242   NEXT (vpc);
3243 
CASE(sem,INSN_MEXTR2)3244   CASE (sem, INSN_MEXTR2) : /* mextr2 $rm, $rn, $rd */
3245 {
3246   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3247   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3248 #define FLD(f) abuf->fields.sfmt_add.f
3249   int UNUSED written = 0;
3250   IADDR UNUSED pc = abuf->addr;
3251   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3252 
3253 {
3254   QI tmp_count;
3255   DI tmp_mask;
3256   DI tmp_rhs;
3257   tmp_count = MULQI (8, 2);
3258   tmp_mask = SLLDI (INVSI (0), tmp_count);
3259   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3260   tmp_count = MULQI (8, SUBQI (8, 2));
3261   tmp_mask = SRLDI (INVSI (0), tmp_count);
3262   {
3263     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3264     SET_H_GR (FLD (f_dest), opval);
3265     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3266   }
3267 }
3268 
3269 #undef FLD
3270 }
3271   NEXT (vpc);
3272 
CASE(sem,INSN_MEXTR3)3273   CASE (sem, INSN_MEXTR3) : /* mextr3 $rm, $rn, $rd */
3274 {
3275   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3276   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3277 #define FLD(f) abuf->fields.sfmt_add.f
3278   int UNUSED written = 0;
3279   IADDR UNUSED pc = abuf->addr;
3280   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3281 
3282 {
3283   QI tmp_count;
3284   DI tmp_mask;
3285   DI tmp_rhs;
3286   tmp_count = MULQI (8, 3);
3287   tmp_mask = SLLDI (INVSI (0), tmp_count);
3288   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3289   tmp_count = MULQI (8, SUBQI (8, 3));
3290   tmp_mask = SRLDI (INVSI (0), tmp_count);
3291   {
3292     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3293     SET_H_GR (FLD (f_dest), opval);
3294     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3295   }
3296 }
3297 
3298 #undef FLD
3299 }
3300   NEXT (vpc);
3301 
CASE(sem,INSN_MEXTR4)3302   CASE (sem, INSN_MEXTR4) : /* mextr4 $rm, $rn, $rd */
3303 {
3304   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3305   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3306 #define FLD(f) abuf->fields.sfmt_add.f
3307   int UNUSED written = 0;
3308   IADDR UNUSED pc = abuf->addr;
3309   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3310 
3311 {
3312   QI tmp_count;
3313   DI tmp_mask;
3314   DI tmp_rhs;
3315   tmp_count = MULQI (8, 4);
3316   tmp_mask = SLLDI (INVSI (0), tmp_count);
3317   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3318   tmp_count = MULQI (8, SUBQI (8, 4));
3319   tmp_mask = SRLDI (INVSI (0), tmp_count);
3320   {
3321     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3322     SET_H_GR (FLD (f_dest), opval);
3323     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3324   }
3325 }
3326 
3327 #undef FLD
3328 }
3329   NEXT (vpc);
3330 
CASE(sem,INSN_MEXTR5)3331   CASE (sem, INSN_MEXTR5) : /* mextr5 $rm, $rn, $rd */
3332 {
3333   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3334   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3335 #define FLD(f) abuf->fields.sfmt_add.f
3336   int UNUSED written = 0;
3337   IADDR UNUSED pc = abuf->addr;
3338   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3339 
3340 {
3341   QI tmp_count;
3342   DI tmp_mask;
3343   DI tmp_rhs;
3344   tmp_count = MULQI (8, 5);
3345   tmp_mask = SLLDI (INVSI (0), tmp_count);
3346   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3347   tmp_count = MULQI (8, SUBQI (8, 5));
3348   tmp_mask = SRLDI (INVSI (0), tmp_count);
3349   {
3350     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3351     SET_H_GR (FLD (f_dest), opval);
3352     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3353   }
3354 }
3355 
3356 #undef FLD
3357 }
3358   NEXT (vpc);
3359 
CASE(sem,INSN_MEXTR6)3360   CASE (sem, INSN_MEXTR6) : /* mextr6 $rm, $rn, $rd */
3361 {
3362   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3363   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3364 #define FLD(f) abuf->fields.sfmt_add.f
3365   int UNUSED written = 0;
3366   IADDR UNUSED pc = abuf->addr;
3367   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3368 
3369 {
3370   QI tmp_count;
3371   DI tmp_mask;
3372   DI tmp_rhs;
3373   tmp_count = MULQI (8, 6);
3374   tmp_mask = SLLDI (INVSI (0), tmp_count);
3375   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3376   tmp_count = MULQI (8, SUBQI (8, 6));
3377   tmp_mask = SRLDI (INVSI (0), tmp_count);
3378   {
3379     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3380     SET_H_GR (FLD (f_dest), opval);
3381     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3382   }
3383 }
3384 
3385 #undef FLD
3386 }
3387   NEXT (vpc);
3388 
CASE(sem,INSN_MEXTR7)3389   CASE (sem, INSN_MEXTR7) : /* mextr7 $rm, $rn, $rd */
3390 {
3391   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3392   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3393 #define FLD(f) abuf->fields.sfmt_add.f
3394   int UNUSED written = 0;
3395   IADDR UNUSED pc = abuf->addr;
3396   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3397 
3398 {
3399   QI tmp_count;
3400   DI tmp_mask;
3401   DI tmp_rhs;
3402   tmp_count = MULQI (8, 7);
3403   tmp_mask = SLLDI (INVSI (0), tmp_count);
3404   tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3405   tmp_count = MULQI (8, SUBQI (8, 7));
3406   tmp_mask = SRLDI (INVSI (0), tmp_count);
3407   {
3408     DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3409     SET_H_GR (FLD (f_dest), opval);
3410     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3411   }
3412 }
3413 
3414 #undef FLD
3415 }
3416   NEXT (vpc);
3417 
CASE(sem,INSN_MMACFXWL)3418   CASE (sem, INSN_MMACFXWL) : /* mmacfx.wl $rm, $rn, $rd */
3419 {
3420   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3421   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3422 #define FLD(f) abuf->fields.sfmt_add.f
3423   int UNUSED written = 0;
3424   IADDR UNUSED pc = abuf->addr;
3425   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3426 
3427 {
3428   SI tmp_temp;
3429   SI tmp_result1;
3430   SI tmp_result0;
3431   tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3432   tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3433   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3434   tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3435   tmp_result0 = ((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3436   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3437   tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3438   tmp_result1 = ((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3439   {
3440     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3441     SET_H_GR (FLD (f_dest), opval);
3442     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3443   }
3444 }
3445 
3446 #undef FLD
3447 }
3448   NEXT (vpc);
3449 
CASE(sem,INSN_MMACNFX_WL)3450   CASE (sem, INSN_MMACNFX_WL) : /* mmacnfx.wl $rm, $rn, $rd */
3451 {
3452   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3453   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3454 #define FLD(f) abuf->fields.sfmt_add.f
3455   int UNUSED written = 0;
3456   IADDR UNUSED pc = abuf->addr;
3457   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3458 
3459 {
3460   SI tmp_temp;
3461   SI tmp_result1;
3462   SI tmp_result0;
3463   tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3464   tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3465   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3466   tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3467   tmp_result0 = ((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3468   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3469   tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3470   tmp_result1 = ((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3471   {
3472     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3473     SET_H_GR (FLD (f_dest), opval);
3474     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3475   }
3476 }
3477 
3478 #undef FLD
3479 }
3480   NEXT (vpc);
3481 
CASE(sem,INSN_MMULL)3482   CASE (sem, INSN_MMULL) : /* mmul.l $rm, $rn, $rd */
3483 {
3484   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3485   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3486 #define FLD(f) abuf->fields.sfmt_add.f
3487   int UNUSED written = 0;
3488   IADDR UNUSED pc = abuf->addr;
3489   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3490 
3491 {
3492   SI tmp_result1;
3493   SI tmp_result0;
3494   tmp_result0 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
3495   tmp_result1 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
3496   {
3497     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3498     SET_H_GR (FLD (f_dest), opval);
3499     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3500   }
3501 }
3502 
3503 #undef FLD
3504 }
3505   NEXT (vpc);
3506 
CASE(sem,INSN_MMULW)3507   CASE (sem, INSN_MMULW) : /* mmul.w $rm, $rn, $rd */
3508 {
3509   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3510   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3511 #define FLD(f) abuf->fields.sfmt_add.f
3512   int UNUSED written = 0;
3513   IADDR UNUSED pc = abuf->addr;
3514   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3515 
3516 {
3517   HI tmp_result3;
3518   HI tmp_result2;
3519   HI tmp_result1;
3520   HI tmp_result0;
3521   tmp_result0 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
3522   tmp_result1 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
3523   tmp_result2 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
3524   tmp_result3 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
3525   {
3526     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3527     SET_H_GR (FLD (f_dest), opval);
3528     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3529   }
3530 }
3531 
3532 #undef FLD
3533 }
3534   NEXT (vpc);
3535 
CASE(sem,INSN_MMULFXL)3536   CASE (sem, INSN_MMULFXL) : /* mmulfx.l $rm, $rn, $rd */
3537 {
3538   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3539   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3540 #define FLD(f) abuf->fields.sfmt_add.f
3541   int UNUSED written = 0;
3542   IADDR UNUSED pc = abuf->addr;
3543   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3544 
3545 {
3546   DI tmp_temp;
3547   SI tmp_result0;
3548   SI tmp_result1;
3549   tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
3550   tmp_result0 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3551   tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)));
3552   tmp_result1 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3553   {
3554     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3555     SET_H_GR (FLD (f_dest), opval);
3556     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3557   }
3558 }
3559 
3560 #undef FLD
3561 }
3562   NEXT (vpc);
3563 
CASE(sem,INSN_MMULFXW)3564   CASE (sem, INSN_MMULFXW) : /* mmulfx.w $rm, $rn, $rd */
3565 {
3566   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3567   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3568 #define FLD(f) abuf->fields.sfmt_add.f
3569   int UNUSED written = 0;
3570   IADDR UNUSED pc = abuf->addr;
3571   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3572 
3573 {
3574   SI tmp_temp;
3575   HI tmp_result0;
3576   HI tmp_result1;
3577   HI tmp_result2;
3578   HI tmp_result3;
3579   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3580   tmp_result0 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3581   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3582   tmp_result1 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3583   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3584   tmp_result2 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3585   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3586   tmp_result3 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3587   {
3588     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3589     SET_H_GR (FLD (f_dest), opval);
3590     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3591   }
3592 }
3593 
3594 #undef FLD
3595 }
3596   NEXT (vpc);
3597 
CASE(sem,INSN_MMULFXRPW)3598   CASE (sem, INSN_MMULFXRPW) : /* mmulfxrp.w $rm, $rn, $rd */
3599 {
3600   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3601   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3602 #define FLD(f) abuf->fields.sfmt_add.f
3603   int UNUSED written = 0;
3604   IADDR UNUSED pc = abuf->addr;
3605   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3606 
3607 {
3608   SI tmp_temp;
3609   HI tmp_result0;
3610   HI tmp_result1;
3611   HI tmp_result2;
3612   HI tmp_result3;
3613   HI tmp_c;
3614   tmp_c = SLLSI (1, 14);
3615   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3616   tmp_result0 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3617   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3618   tmp_result1 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3619   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3620   tmp_result2 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3621   tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3622   tmp_result3 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3623   {
3624     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3625     SET_H_GR (FLD (f_dest), opval);
3626     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3627   }
3628 }
3629 
3630 #undef FLD
3631 }
3632   NEXT (vpc);
3633 
CASE(sem,INSN_MMULHIWL)3634   CASE (sem, INSN_MMULHIWL) : /* mmulhi.wl $rm, $rn, $rd */
3635 {
3636   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3637   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3638 #define FLD(f) abuf->fields.sfmt_add.f
3639   int UNUSED written = 0;
3640   IADDR UNUSED pc = abuf->addr;
3641   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3642 
3643 {
3644   SI tmp_result1;
3645   SI tmp_result0;
3646   tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3647   tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3648   {
3649     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3650     SET_H_GR (FLD (f_dest), opval);
3651     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3652   }
3653 }
3654 
3655 #undef FLD
3656 }
3657   NEXT (vpc);
3658 
CASE(sem,INSN_MMULLOWL)3659   CASE (sem, INSN_MMULLOWL) : /* mmullo.wl $rm, $rn, $rd */
3660 {
3661   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3662   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3663 #define FLD(f) abuf->fields.sfmt_add.f
3664   int UNUSED written = 0;
3665   IADDR UNUSED pc = abuf->addr;
3666   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3667 
3668 {
3669   SI tmp_result1;
3670   SI tmp_result0;
3671   tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3672   tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3673   {
3674     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3675     SET_H_GR (FLD (f_dest), opval);
3676     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3677   }
3678 }
3679 
3680 #undef FLD
3681 }
3682   NEXT (vpc);
3683 
CASE(sem,INSN_MMULSUMWQ)3684   CASE (sem, INSN_MMULSUMWQ) : /* mmulsum.wq $rm, $rn, $rd */
3685 {
3686   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3687   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3688 #define FLD(f) abuf->fields.sfmt_add.f
3689   int UNUSED written = 0;
3690   IADDR UNUSED pc = abuf->addr;
3691   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3692 
3693 {
3694   DI tmp_acc;
3695   tmp_acc = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3696   tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))));
3697   tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))));
3698   tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))));
3699   {
3700     DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3701     SET_H_GR (FLD (f_dest), opval);
3702     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3703   }
3704 }
3705 
3706 #undef FLD
3707 }
3708   NEXT (vpc);
3709 
CASE(sem,INSN_MOVI)3710   CASE (sem, INSN_MOVI) : /* movi $imm16, $rd */
3711 {
3712   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3713   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3714 #define FLD(f) abuf->fields.sfmt_movi.f
3715   int UNUSED written = 0;
3716   IADDR UNUSED pc = abuf->addr;
3717   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3718 
3719   {
3720     DI opval = EXTSIDI (FLD (f_imm16));
3721     SET_H_GR (FLD (f_dest), opval);
3722     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3723   }
3724 
3725 #undef FLD
3726 }
3727   NEXT (vpc);
3728 
CASE(sem,INSN_MPERMW)3729   CASE (sem, INSN_MPERMW) : /* mperm.w $rm, $rn, $rd */
3730 {
3731   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3732   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3733 #define FLD(f) abuf->fields.sfmt_add.f
3734   int UNUSED written = 0;
3735   IADDR UNUSED pc = abuf->addr;
3736   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3737 
3738 {
3739   QI tmp_control;
3740   HI tmp_result3;
3741   HI tmp_result2;
3742   HI tmp_result1;
3743   HI tmp_result0;
3744   tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 255);
3745   tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (tmp_control, 3)));
3746   tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 2), 3)));
3747   tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 4), 3)));
3748   tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 6), 3)));
3749   {
3750     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3751     SET_H_GR (FLD (f_dest), opval);
3752     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3753   }
3754 }
3755 
3756 #undef FLD
3757 }
3758   NEXT (vpc);
3759 
CASE(sem,INSN_MSADUBQ)3760   CASE (sem, INSN_MSADUBQ) : /* msad.ubq $rm, $rn, $rd */
3761 {
3762   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3763   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3764 #define FLD(f) abuf->fields.sfmt_add.f
3765   int UNUSED written = 0;
3766   IADDR UNUSED pc = abuf->addr;
3767   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3768 
3769 {
3770   DI tmp_acc;
3771   tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)));
3772   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))));
3773   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))));
3774   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))));
3775   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))));
3776   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))));
3777   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))));
3778   tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))));
3779   {
3780     DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3781     SET_H_GR (FLD (f_dest), opval);
3782     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3783   }
3784 }
3785 
3786 #undef FLD
3787 }
3788   NEXT (vpc);
3789 
CASE(sem,INSN_MSHALDSL)3790   CASE (sem, INSN_MSHALDSL) : /* mshalds.l $rm, $rn, $rd */
3791 {
3792   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3793   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3794 #define FLD(f) abuf->fields.sfmt_add.f
3795   int UNUSED written = 0;
3796   IADDR UNUSED pc = abuf->addr;
3797   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3798 
3799 {
3800   SI tmp_result1;
3801   SI tmp_result0;
3802   tmp_result0 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3803   tmp_result1 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3804   {
3805     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3806     SET_H_GR (FLD (f_dest), opval);
3807     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3808   }
3809 }
3810 
3811 #undef FLD
3812 }
3813   NEXT (vpc);
3814 
CASE(sem,INSN_MSHALDSW)3815   CASE (sem, INSN_MSHALDSW) : /* mshalds.w $rm, $rn, $rd */
3816 {
3817   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3818   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3819 #define FLD(f) abuf->fields.sfmt_add.f
3820   int UNUSED written = 0;
3821   IADDR UNUSED pc = abuf->addr;
3822   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3823 
3824 {
3825   HI tmp_result3;
3826   HI tmp_result2;
3827   HI tmp_result1;
3828   HI tmp_result0;
3829   tmp_result0 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3830   tmp_result1 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3831   tmp_result2 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3832   tmp_result3 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3833   {
3834     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3835     SET_H_GR (FLD (f_dest), opval);
3836     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3837   }
3838 }
3839 
3840 #undef FLD
3841 }
3842   NEXT (vpc);
3843 
CASE(sem,INSN_MSHARDL)3844   CASE (sem, INSN_MSHARDL) : /* mshard.l $rm, $rn, $rd */
3845 {
3846   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3847   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3848 #define FLD(f) abuf->fields.sfmt_add.f
3849   int UNUSED written = 0;
3850   IADDR UNUSED pc = abuf->addr;
3851   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3852 
3853 {
3854   SI tmp_result1;
3855   SI tmp_result0;
3856   tmp_result0 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3857   tmp_result1 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3858   {
3859     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3860     SET_H_GR (FLD (f_dest), opval);
3861     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3862   }
3863 }
3864 
3865 #undef FLD
3866 }
3867   NEXT (vpc);
3868 
CASE(sem,INSN_MSHARDW)3869   CASE (sem, INSN_MSHARDW) : /* mshard.w $rm, $rn, $rd */
3870 {
3871   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3872   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3873 #define FLD(f) abuf->fields.sfmt_add.f
3874   int UNUSED written = 0;
3875   IADDR UNUSED pc = abuf->addr;
3876   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3877 
3878 {
3879   HI tmp_result3;
3880   HI tmp_result2;
3881   HI tmp_result1;
3882   HI tmp_result0;
3883   tmp_result0 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3884   tmp_result1 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3885   tmp_result2 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3886   tmp_result3 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3887   {
3888     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3889     SET_H_GR (FLD (f_dest), opval);
3890     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3891   }
3892 }
3893 
3894 #undef FLD
3895 }
3896   NEXT (vpc);
3897 
CASE(sem,INSN_MSHARDSQ)3898   CASE (sem, INSN_MSHARDSQ) : /* mshards.q $rm, $rn, $rd */
3899 {
3900   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3901   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3902 #define FLD(f) abuf->fields.sfmt_add.f
3903   int UNUSED written = 0;
3904   IADDR UNUSED pc = abuf->addr;
3905   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3906 
3907   {
3908     DI opval = ((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGDI (SLLDI (1, SUBSI (16, 1)))) : (((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), SLLDI (1, SUBSI (16, 1)))) ? (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63))) : (SUBDI (SLLDI (1, SUBSI (16, 1)), 1)))));
3909     SET_H_GR (FLD (f_dest), opval);
3910     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3911   }
3912 
3913 #undef FLD
3914 }
3915   NEXT (vpc);
3916 
CASE(sem,INSN_MSHFHIB)3917   CASE (sem, INSN_MSHFHIB) : /* mshfhi.b $rm, $rn, $rd */
3918 {
3919   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3920   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3921 #define FLD(f) abuf->fields.sfmt_add.f
3922   int UNUSED written = 0;
3923   IADDR UNUSED pc = abuf->addr;
3924   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3925 
3926 {
3927   QI tmp_result7;
3928   QI tmp_result6;
3929   QI tmp_result5;
3930   QI tmp_result4;
3931   QI tmp_result3;
3932   QI tmp_result2;
3933   QI tmp_result1;
3934   QI tmp_result0;
3935   tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3);
3936   tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3);
3937   tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2);
3938   tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2);
3939   tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1);
3940   tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1);
3941   tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0);
3942   tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0);
3943   {
3944     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3945     SET_H_GR (FLD (f_dest), opval);
3946     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3947   }
3948 }
3949 
3950 #undef FLD
3951 }
3952   NEXT (vpc);
3953 
CASE(sem,INSN_MSHFHIL)3954   CASE (sem, INSN_MSHFHIL) : /* mshfhi.l $rm, $rn, $rd */
3955 {
3956   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3957   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3958 #define FLD(f) abuf->fields.sfmt_add.f
3959   int UNUSED written = 0;
3960   IADDR UNUSED pc = abuf->addr;
3961   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3962 
3963 {
3964   SI tmp_result1;
3965   SI tmp_result0;
3966   tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0);
3967   tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0);
3968   {
3969     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3970     SET_H_GR (FLD (f_dest), opval);
3971     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3972   }
3973 }
3974 
3975 #undef FLD
3976 }
3977   NEXT (vpc);
3978 
CASE(sem,INSN_MSHFHIW)3979   CASE (sem, INSN_MSHFHIW) : /* mshfhi.w $rm, $rn, $rd */
3980 {
3981   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3982   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3983 #define FLD(f) abuf->fields.sfmt_add.f
3984   int UNUSED written = 0;
3985   IADDR UNUSED pc = abuf->addr;
3986   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3987 
3988 {
3989   HI tmp_result3;
3990   HI tmp_result2;
3991   HI tmp_result1;
3992   HI tmp_result0;
3993   tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1);
3994   tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1);
3995   tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0);
3996   tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0);
3997   {
3998     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3999     SET_H_GR (FLD (f_dest), opval);
4000     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4001   }
4002 }
4003 
4004 #undef FLD
4005 }
4006   NEXT (vpc);
4007 
CASE(sem,INSN_MSHFLOB)4008   CASE (sem, INSN_MSHFLOB) : /* mshflo.b $rm, $rn, $rd */
4009 {
4010   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4011   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4012 #define FLD(f) abuf->fields.sfmt_add.f
4013   int UNUSED written = 0;
4014   IADDR UNUSED pc = abuf->addr;
4015   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4016 
4017 {
4018   QI tmp_result7;
4019   QI tmp_result6;
4020   QI tmp_result5;
4021   QI tmp_result4;
4022   QI tmp_result3;
4023   QI tmp_result2;
4024   QI tmp_result1;
4025   QI tmp_result0;
4026   tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7);
4027   tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7);
4028   tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6);
4029   tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6);
4030   tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5);
4031   tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5);
4032   tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4);
4033   tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4);
4034   {
4035     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4036     SET_H_GR (FLD (f_dest), opval);
4037     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4038   }
4039 }
4040 
4041 #undef FLD
4042 }
4043   NEXT (vpc);
4044 
CASE(sem,INSN_MSHFLOL)4045   CASE (sem, INSN_MSHFLOL) : /* mshflo.l $rm, $rn, $rd */
4046 {
4047   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4048   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4049 #define FLD(f) abuf->fields.sfmt_add.f
4050   int UNUSED written = 0;
4051   IADDR UNUSED pc = abuf->addr;
4052   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4053 
4054 {
4055   SI tmp_result1;
4056   SI tmp_result0;
4057   tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1);
4058   tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1);
4059   {
4060     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4061     SET_H_GR (FLD (f_dest), opval);
4062     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4063   }
4064 }
4065 
4066 #undef FLD
4067 }
4068   NEXT (vpc);
4069 
CASE(sem,INSN_MSHFLOW)4070   CASE (sem, INSN_MSHFLOW) : /* mshflo.w $rm, $rn, $rd */
4071 {
4072   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4073   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4074 #define FLD(f) abuf->fields.sfmt_add.f
4075   int UNUSED written = 0;
4076   IADDR UNUSED pc = abuf->addr;
4077   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4078 
4079 {
4080   HI tmp_result3;
4081   HI tmp_result2;
4082   HI tmp_result1;
4083   HI tmp_result0;
4084   tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3);
4085   tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3);
4086   tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2);
4087   tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2);
4088   {
4089     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4090     SET_H_GR (FLD (f_dest), opval);
4091     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4092   }
4093 }
4094 
4095 #undef FLD
4096 }
4097   NEXT (vpc);
4098 
CASE(sem,INSN_MSHLLDL)4099   CASE (sem, INSN_MSHLLDL) : /* mshlld.l $rm, $rn, $rd */
4100 {
4101   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4102   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4103 #define FLD(f) abuf->fields.sfmt_add.f
4104   int UNUSED written = 0;
4105   IADDR UNUSED pc = abuf->addr;
4106   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4107 
4108 {
4109   SI tmp_result1;
4110   SI tmp_result0;
4111   tmp_result0 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
4112   tmp_result1 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
4113   {
4114     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4115     SET_H_GR (FLD (f_dest), opval);
4116     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4117   }
4118 }
4119 
4120 #undef FLD
4121 }
4122   NEXT (vpc);
4123 
CASE(sem,INSN_MSHLLDW)4124   CASE (sem, INSN_MSHLLDW) : /* mshlld.w $rm, $rn, $rd */
4125 {
4126   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4127   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4128 #define FLD(f) abuf->fields.sfmt_add.f
4129   int UNUSED written = 0;
4130   IADDR UNUSED pc = abuf->addr;
4131   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4132 
4133 {
4134   HI tmp_result3;
4135   HI tmp_result2;
4136   HI tmp_result1;
4137   HI tmp_result0;
4138   tmp_result0 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
4139   tmp_result1 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
4140   tmp_result2 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
4141   tmp_result3 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
4142   {
4143     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4144     SET_H_GR (FLD (f_dest), opval);
4145     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4146   }
4147 }
4148 
4149 #undef FLD
4150 }
4151   NEXT (vpc);
4152 
CASE(sem,INSN_MSHLRDL)4153   CASE (sem, INSN_MSHLRDL) : /* mshlrd.l $rm, $rn, $rd */
4154 {
4155   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4156   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4157 #define FLD(f) abuf->fields.sfmt_add.f
4158   int UNUSED written = 0;
4159   IADDR UNUSED pc = abuf->addr;
4160   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4161 
4162 {
4163   SI tmp_result1;
4164   SI tmp_result0;
4165   tmp_result0 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
4166   tmp_result1 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
4167   {
4168     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4169     SET_H_GR (FLD (f_dest), opval);
4170     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4171   }
4172 }
4173 
4174 #undef FLD
4175 }
4176   NEXT (vpc);
4177 
CASE(sem,INSN_MSHLRDW)4178   CASE (sem, INSN_MSHLRDW) : /* mshlrd.w $rm, $rn, $rd */
4179 {
4180   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4181   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4182 #define FLD(f) abuf->fields.sfmt_add.f
4183   int UNUSED written = 0;
4184   IADDR UNUSED pc = abuf->addr;
4185   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4186 
4187 {
4188   HI tmp_result3;
4189   HI tmp_result2;
4190   HI tmp_result1;
4191   HI tmp_result0;
4192   tmp_result0 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
4193   tmp_result1 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
4194   tmp_result2 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
4195   tmp_result3 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
4196   {
4197     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4198     SET_H_GR (FLD (f_dest), opval);
4199     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4200   }
4201 }
4202 
4203 #undef FLD
4204 }
4205   NEXT (vpc);
4206 
CASE(sem,INSN_MSUBL)4207   CASE (sem, INSN_MSUBL) : /* msub.l $rm, $rn, $rd */
4208 {
4209   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4210   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4211 #define FLD(f) abuf->fields.sfmt_add.f
4212   int UNUSED written = 0;
4213   IADDR UNUSED pc = abuf->addr;
4214   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4215 
4216 {
4217   SI tmp_result1;
4218   SI tmp_result0;
4219   tmp_result0 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
4220   tmp_result1 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
4221   {
4222     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4223     SET_H_GR (FLD (f_dest), opval);
4224     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4225   }
4226 }
4227 
4228 #undef FLD
4229 }
4230   NEXT (vpc);
4231 
CASE(sem,INSN_MSUBW)4232   CASE (sem, INSN_MSUBW) : /* msub.w $rm, $rn, $rd */
4233 {
4234   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4235   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4236 #define FLD(f) abuf->fields.sfmt_add.f
4237   int UNUSED written = 0;
4238   IADDR UNUSED pc = abuf->addr;
4239   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4240 
4241 {
4242   HI tmp_result3;
4243   HI tmp_result2;
4244   HI tmp_result1;
4245   HI tmp_result0;
4246   tmp_result0 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
4247   tmp_result1 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
4248   tmp_result2 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
4249   tmp_result3 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
4250   {
4251     DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4252     SET_H_GR (FLD (f_dest), opval);
4253     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4254   }
4255 }
4256 
4257 #undef FLD
4258 }
4259   NEXT (vpc);
4260 
CASE(sem,INSN_MSUBSL)4261   CASE (sem, INSN_MSUBSL) : /* msubs.l $rm, $rn, $rd */
4262 {
4263   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4264   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4265 #define FLD(f) abuf->fields.sfmt_add.f
4266   int UNUSED written = 0;
4267   IADDR UNUSED pc = abuf->addr;
4268   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4269 
4270 {
4271   SI tmp_result1;
4272   SI tmp_result0;
4273   tmp_result0 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4274   tmp_result1 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4275   {
4276     DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4277     SET_H_GR (FLD (f_dest), opval);
4278     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4279   }
4280 }
4281 
4282 #undef FLD
4283 }
4284   NEXT (vpc);
4285 
CASE(sem,INSN_MSUBSUB)4286   CASE (sem, INSN_MSUBSUB) : /* msubs.ub $rm, $rn, $rd */
4287 {
4288   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4289   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4290 #define FLD(f) abuf->fields.sfmt_add.f
4291   int UNUSED written = 0;
4292   IADDR UNUSED pc = abuf->addr;
4293   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4294 
4295 {
4296   QI tmp_result7;
4297   QI tmp_result6;
4298   QI tmp_result5;
4299   QI tmp_result4;
4300   QI tmp_result3;
4301   QI tmp_result2;
4302   QI tmp_result1;
4303   QI tmp_result0;
4304   tmp_result0 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
4305   tmp_result1 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
4306   tmp_result2 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
4307   tmp_result3 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
4308   tmp_result4 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
4309   tmp_result5 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
4310   tmp_result6 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
4311   tmp_result7 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
4312   {
4313     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4314     SET_H_GR (FLD (f_dest), opval);
4315     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4316   }
4317 }
4318 
4319 #undef FLD
4320 }
4321   NEXT (vpc);
4322 
CASE(sem,INSN_MSUBSW)4323   CASE (sem, INSN_MSUBSW) : /* msubs.w $rm, $rn, $rd */
4324 {
4325   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4326   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4327 #define FLD(f) abuf->fields.sfmt_add.f
4328   int UNUSED written = 0;
4329   IADDR UNUSED pc = abuf->addr;
4330   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4331 
4332 {
4333   QI tmp_result7;
4334   QI tmp_result6;
4335   QI tmp_result5;
4336   QI tmp_result4;
4337   QI tmp_result3;
4338   QI tmp_result2;
4339   QI tmp_result1;
4340   QI tmp_result0;
4341   tmp_result0 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4342   tmp_result1 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4343   tmp_result2 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4344   tmp_result3 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4345   tmp_result4 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4346   tmp_result5 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4347   tmp_result6 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4348   tmp_result7 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4349   {
4350     DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4351     SET_H_GR (FLD (f_dest), opval);
4352     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4353   }
4354 }
4355 
4356 #undef FLD
4357 }
4358   NEXT (vpc);
4359 
CASE(sem,INSN_MULSL)4360   CASE (sem, INSN_MULSL) : /* muls.l $rm, $rn, $rd */
4361 {
4362   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4363   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4364 #define FLD(f) abuf->fields.sfmt_add.f
4365   int UNUSED written = 0;
4366   IADDR UNUSED pc = abuf->addr;
4367   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4368 
4369   {
4370     DI opval = MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4371     SET_H_GR (FLD (f_dest), opval);
4372     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4373   }
4374 
4375 #undef FLD
4376 }
4377   NEXT (vpc);
4378 
CASE(sem,INSN_MULUL)4379   CASE (sem, INSN_MULUL) : /* mulu.l $rm, $rn, $rd */
4380 {
4381   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4382   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4383 #define FLD(f) abuf->fields.sfmt_add.f
4384   int UNUSED written = 0;
4385   IADDR UNUSED pc = abuf->addr;
4386   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4387 
4388   {
4389     DI opval = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4390     SET_H_GR (FLD (f_dest), opval);
4391     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4392   }
4393 
4394 #undef FLD
4395 }
4396   NEXT (vpc);
4397 
CASE(sem,INSN_NOP)4398   CASE (sem, INSN_NOP) : /* nop */
4399 {
4400   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4401   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4402 #define FLD(f) abuf->fields.sfmt_empty.f
4403   int UNUSED written = 0;
4404   IADDR UNUSED pc = abuf->addr;
4405   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4406 
4407 ((void) 0); /*nop*/
4408 
4409 #undef FLD
4410 }
4411   NEXT (vpc);
4412 
CASE(sem,INSN_NSB)4413   CASE (sem, INSN_NSB) : /* nsb $rm, $rd */
4414 {
4415   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4416   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4417 #define FLD(f) abuf->fields.sfmt_xori.f
4418   int UNUSED written = 0;
4419   IADDR UNUSED pc = abuf->addr;
4420   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4421 
4422   {
4423     DI opval = sh64_nsb (current_cpu, GET_H_GR (FLD (f_left)));
4424     SET_H_GR (FLD (f_dest), opval);
4425     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4426   }
4427 
4428 #undef FLD
4429 }
4430   NEXT (vpc);
4431 
CASE(sem,INSN_OCBI)4432   CASE (sem, INSN_OCBI) : /* ocbi $rm, $disp6x32 */
4433 {
4434   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4435   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4436 #define FLD(f) abuf->fields.sfmt_xori.f
4437   int UNUSED written = 0;
4438   IADDR UNUSED pc = abuf->addr;
4439   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4440 
4441 {
4442   {
4443     DI opval = GET_H_GR (FLD (f_left));
4444     SET_H_GR (FLD (f_left), opval);
4445     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4446   }
4447 ((void) 0); /*nop*/
4448 }
4449 
4450 #undef FLD
4451 }
4452   NEXT (vpc);
4453 
CASE(sem,INSN_OCBP)4454   CASE (sem, INSN_OCBP) : /* ocbp $rm, $disp6x32 */
4455 {
4456   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4457   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4458 #define FLD(f) abuf->fields.sfmt_xori.f
4459   int UNUSED written = 0;
4460   IADDR UNUSED pc = abuf->addr;
4461   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4462 
4463 {
4464   {
4465     DI opval = GET_H_GR (FLD (f_left));
4466     SET_H_GR (FLD (f_left), opval);
4467     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4468   }
4469 ((void) 0); /*nop*/
4470 }
4471 
4472 #undef FLD
4473 }
4474   NEXT (vpc);
4475 
CASE(sem,INSN_OCBWB)4476   CASE (sem, INSN_OCBWB) : /* ocbwb $rm, $disp6x32 */
4477 {
4478   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4479   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4480 #define FLD(f) abuf->fields.sfmt_xori.f
4481   int UNUSED written = 0;
4482   IADDR UNUSED pc = abuf->addr;
4483   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4484 
4485 {
4486   {
4487     DI opval = GET_H_GR (FLD (f_left));
4488     SET_H_GR (FLD (f_left), opval);
4489     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4490   }
4491 ((void) 0); /*nop*/
4492 }
4493 
4494 #undef FLD
4495 }
4496   NEXT (vpc);
4497 
CASE(sem,INSN_OR)4498   CASE (sem, INSN_OR) : /* or $rm, $rn, $rd */
4499 {
4500   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4501   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4502 #define FLD(f) abuf->fields.sfmt_add.f
4503   int UNUSED written = 0;
4504   IADDR UNUSED pc = abuf->addr;
4505   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4506 
4507   {
4508     DI opval = ORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
4509     SET_H_GR (FLD (f_dest), opval);
4510     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4511   }
4512 
4513 #undef FLD
4514 }
4515   NEXT (vpc);
4516 
CASE(sem,INSN_ORI)4517   CASE (sem, INSN_ORI) : /* ori $rm, $imm10, $rd */
4518 {
4519   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4520   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4521 #define FLD(f) abuf->fields.sfmt_ori.f
4522   int UNUSED written = 0;
4523   IADDR UNUSED pc = abuf->addr;
4524   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4525 
4526   {
4527     DI opval = ORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm10)));
4528     SET_H_GR (FLD (f_dest), opval);
4529     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4530   }
4531 
4532 #undef FLD
4533 }
4534   NEXT (vpc);
4535 
CASE(sem,INSN_PREFI)4536   CASE (sem, INSN_PREFI) : /* prefi $rm, $disp6x32 */
4537 {
4538   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4539   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4540 #define FLD(f) abuf->fields.sfmt_xori.f
4541   int UNUSED written = 0;
4542   IADDR UNUSED pc = abuf->addr;
4543   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4544 
4545 {
4546   {
4547     DI opval = GET_H_GR (FLD (f_left));
4548     SET_H_GR (FLD (f_left), opval);
4549     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4550   }
4551 ((void) 0); /*nop*/
4552 }
4553 
4554 #undef FLD
4555 }
4556   NEXT (vpc);
4557 
CASE(sem,INSN_PTA)4558   CASE (sem, INSN_PTA) : /* pta$likely $disp16, $tra */
4559 {
4560   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4561   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4562 #define FLD(f) abuf->fields.sfmt_pta.f
4563   int UNUSED written = 0;
4564   IADDR UNUSED pc = abuf->addr;
4565   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4566 
4567 {
4568 ((void) 0); /*nop*/
4569   {
4570     DI opval = ADDSI (FLD (f_disp16), 1);
4571     CPU (h_tr[FLD (f_tra)]) = opval;
4572     TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
4573   }
4574 }
4575 
4576 #undef FLD
4577 }
4578   NEXT (vpc);
4579 
CASE(sem,INSN_PTABS)4580   CASE (sem, INSN_PTABS) : /* ptabs$likely $rn, $tra */
4581 {
4582   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4583   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4584 #define FLD(f) abuf->fields.sfmt_beq.f
4585   int UNUSED written = 0;
4586   IADDR UNUSED pc = abuf->addr;
4587   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4588 
4589 {
4590 ((void) 0); /*nop*/
4591   {
4592     DI opval = GET_H_GR (FLD (f_right));
4593     CPU (h_tr[FLD (f_tra)]) = opval;
4594     TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
4595   }
4596 }
4597 
4598 #undef FLD
4599 }
4600   NEXT (vpc);
4601 
CASE(sem,INSN_PTB)4602   CASE (sem, INSN_PTB) : /* ptb$likely $disp16, $tra */
4603 {
4604   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4605   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4606 #define FLD(f) abuf->fields.sfmt_pta.f
4607   int UNUSED written = 0;
4608   IADDR UNUSED pc = abuf->addr;
4609   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4610 
4611 {
4612 ((void) 0); /*nop*/
4613   {
4614     DI opval = FLD (f_disp16);
4615     CPU (h_tr[FLD (f_tra)]) = opval;
4616     TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
4617   }
4618 }
4619 
4620 #undef FLD
4621 }
4622   NEXT (vpc);
4623 
CASE(sem,INSN_PTREL)4624   CASE (sem, INSN_PTREL) : /* ptrel$likely $rn, $tra */
4625 {
4626   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4627   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4628 #define FLD(f) abuf->fields.sfmt_beq.f
4629   int UNUSED written = 0;
4630   IADDR UNUSED pc = abuf->addr;
4631   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4632 
4633 {
4634 ((void) 0); /*nop*/
4635   {
4636     DI opval = ADDDI (pc, GET_H_GR (FLD (f_right)));
4637     CPU (h_tr[FLD (f_tra)]) = opval;
4638     TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
4639   }
4640 }
4641 
4642 #undef FLD
4643 }
4644   NEXT (vpc);
4645 
CASE(sem,INSN_PUTCFG)4646   CASE (sem, INSN_PUTCFG) : /* putcfg $rm, $disp6, $rd */
4647 {
4648   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4649   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4650 #define FLD(f) abuf->fields.sfmt_getcfg.f
4651   int UNUSED written = 0;
4652   IADDR UNUSED pc = abuf->addr;
4653   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4654 
4655 {
4656   SI tmp_address;
4657   tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
4658 ((void) 0); /*nop*/
4659   {
4660     SI opval = GET_H_GR (FLD (f_dest));
4661     SETMEMSI (current_cpu, pc, tmp_address, opval);
4662     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4663   }
4664 }
4665 
4666 #undef FLD
4667 }
4668   NEXT (vpc);
4669 
CASE(sem,INSN_PUTCON)4670   CASE (sem, INSN_PUTCON) : /* putcon $rm, $crj */
4671 {
4672   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4673   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4674 #define FLD(f) abuf->fields.sfmt_xori.f
4675   int UNUSED written = 0;
4676   IADDR UNUSED pc = abuf->addr;
4677   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4678 
4679   {
4680     DI opval = GET_H_GR (FLD (f_left));
4681     SET_H_CR (FLD (f_dest), opval);
4682     TRACE_RESULT (current_cpu, abuf, "cr", 'D', opval);
4683   }
4684 
4685 #undef FLD
4686 }
4687   NEXT (vpc);
4688 
CASE(sem,INSN_RTE)4689   CASE (sem, INSN_RTE) : /* rte */
4690 {
4691   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4692   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4693 #define FLD(f) abuf->fields.sfmt_empty.f
4694   int UNUSED written = 0;
4695   IADDR UNUSED pc = abuf->addr;
4696   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4697 
4698 ((void) 0); /*nop*/
4699 
4700 #undef FLD
4701 }
4702   NEXT (vpc);
4703 
CASE(sem,INSN_SHARD)4704   CASE (sem, INSN_SHARD) : /* shard $rm, $rn, $rd */
4705 {
4706   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4707   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4708 #define FLD(f) abuf->fields.sfmt_add.f
4709   int UNUSED written = 0;
4710   IADDR UNUSED pc = abuf->addr;
4711   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4712 
4713   {
4714     DI opval = SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4715     SET_H_GR (FLD (f_dest), opval);
4716     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4717   }
4718 
4719 #undef FLD
4720 }
4721   NEXT (vpc);
4722 
CASE(sem,INSN_SHARDL)4723   CASE (sem, INSN_SHARDL) : /* shard.l $rm, $rn, $rd */
4724 {
4725   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4726   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4727 #define FLD(f) abuf->fields.sfmt_add.f
4728   int UNUSED written = 0;
4729   IADDR UNUSED pc = abuf->addr;
4730   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4731 
4732   {
4733     DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4734     SET_H_GR (FLD (f_dest), opval);
4735     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4736   }
4737 
4738 #undef FLD
4739 }
4740   NEXT (vpc);
4741 
CASE(sem,INSN_SHARI)4742   CASE (sem, INSN_SHARI) : /* shari $rm, $uimm6, $rd */
4743 {
4744   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4745   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4746 #define FLD(f) abuf->fields.sfmt_shari.f
4747   int UNUSED written = 0;
4748   IADDR UNUSED pc = abuf->addr;
4749   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4750 
4751   {
4752     DI opval = SRADI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4753     SET_H_GR (FLD (f_dest), opval);
4754     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4755   }
4756 
4757 #undef FLD
4758 }
4759   NEXT (vpc);
4760 
CASE(sem,INSN_SHARIL)4761   CASE (sem, INSN_SHARIL) : /* shari.l $rm, $uimm6, $rd */
4762 {
4763   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4764   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4765 #define FLD(f) abuf->fields.sfmt_shari.f
4766   int UNUSED written = 0;
4767   IADDR UNUSED pc = abuf->addr;
4768   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4769 
4770   {
4771     DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4772     SET_H_GR (FLD (f_dest), opval);
4773     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4774   }
4775 
4776 #undef FLD
4777 }
4778   NEXT (vpc);
4779 
CASE(sem,INSN_SHLLD)4780   CASE (sem, INSN_SHLLD) : /* shlld $rm, $rn, $rd */
4781 {
4782   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4783   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4784 #define FLD(f) abuf->fields.sfmt_add.f
4785   int UNUSED written = 0;
4786   IADDR UNUSED pc = abuf->addr;
4787   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4788 
4789   {
4790     DI opval = SLLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4791     SET_H_GR (FLD (f_dest), opval);
4792     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4793   }
4794 
4795 #undef FLD
4796 }
4797   NEXT (vpc);
4798 
CASE(sem,INSN_SHLLDL)4799   CASE (sem, INSN_SHLLDL) : /* shlld.l $rm, $rn, $rd */
4800 {
4801   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4802   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4803 #define FLD(f) abuf->fields.sfmt_add.f
4804   int UNUSED written = 0;
4805   IADDR UNUSED pc = abuf->addr;
4806   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4807 
4808   {
4809     DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4810     SET_H_GR (FLD (f_dest), opval);
4811     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4812   }
4813 
4814 #undef FLD
4815 }
4816   NEXT (vpc);
4817 
CASE(sem,INSN_SHLLI)4818   CASE (sem, INSN_SHLLI) : /* shlli $rm, $uimm6, $rd */
4819 {
4820   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4821   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4822 #define FLD(f) abuf->fields.sfmt_shari.f
4823   int UNUSED written = 0;
4824   IADDR UNUSED pc = abuf->addr;
4825   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4826 
4827   {
4828     DI opval = SLLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4829     SET_H_GR (FLD (f_dest), opval);
4830     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4831   }
4832 
4833 #undef FLD
4834 }
4835   NEXT (vpc);
4836 
CASE(sem,INSN_SHLLIL)4837   CASE (sem, INSN_SHLLIL) : /* shlli.l $rm, $uimm6, $rd */
4838 {
4839   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4840   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4841 #define FLD(f) abuf->fields.sfmt_shari.f
4842   int UNUSED written = 0;
4843   IADDR UNUSED pc = abuf->addr;
4844   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4845 
4846   {
4847     DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4848     SET_H_GR (FLD (f_dest), opval);
4849     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4850   }
4851 
4852 #undef FLD
4853 }
4854   NEXT (vpc);
4855 
CASE(sem,INSN_SHLRD)4856   CASE (sem, INSN_SHLRD) : /* shlrd $rm, $rn, $rd */
4857 {
4858   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4859   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4860 #define FLD(f) abuf->fields.sfmt_add.f
4861   int UNUSED written = 0;
4862   IADDR UNUSED pc = abuf->addr;
4863   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4864 
4865   {
4866     DI opval = SRLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4867     SET_H_GR (FLD (f_dest), opval);
4868     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4869   }
4870 
4871 #undef FLD
4872 }
4873   NEXT (vpc);
4874 
CASE(sem,INSN_SHLRDL)4875   CASE (sem, INSN_SHLRDL) : /* shlrd.l $rm, $rn, $rd */
4876 {
4877   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4878   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4879 #define FLD(f) abuf->fields.sfmt_add.f
4880   int UNUSED written = 0;
4881   IADDR UNUSED pc = abuf->addr;
4882   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4883 
4884   {
4885     DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4886     SET_H_GR (FLD (f_dest), opval);
4887     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4888   }
4889 
4890 #undef FLD
4891 }
4892   NEXT (vpc);
4893 
CASE(sem,INSN_SHLRI)4894   CASE (sem, INSN_SHLRI) : /* shlri $rm, $uimm6, $rd */
4895 {
4896   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4897   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4898 #define FLD(f) abuf->fields.sfmt_shari.f
4899   int UNUSED written = 0;
4900   IADDR UNUSED pc = abuf->addr;
4901   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4902 
4903   {
4904     DI opval = SRLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4905     SET_H_GR (FLD (f_dest), opval);
4906     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4907   }
4908 
4909 #undef FLD
4910 }
4911   NEXT (vpc);
4912 
CASE(sem,INSN_SHLRIL)4913   CASE (sem, INSN_SHLRIL) : /* shlri.l $rm, $uimm6, $rd */
4914 {
4915   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4916   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4917 #define FLD(f) abuf->fields.sfmt_shari.f
4918   int UNUSED written = 0;
4919   IADDR UNUSED pc = abuf->addr;
4920   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4921 
4922   {
4923     DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4924     SET_H_GR (FLD (f_dest), opval);
4925     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4926   }
4927 
4928 #undef FLD
4929 }
4930   NEXT (vpc);
4931 
CASE(sem,INSN_SHORI)4932   CASE (sem, INSN_SHORI) : /* shori $uimm16, $rd */
4933 {
4934   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4935   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4936 #define FLD(f) abuf->fields.sfmt_shori.f
4937   int UNUSED written = 0;
4938   IADDR UNUSED pc = abuf->addr;
4939   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4940 
4941   {
4942     DI opval = ORDI (SLLDI (GET_H_GR (FLD (f_dest)), 16), ZEXTSIDI (FLD (f_uimm16)));
4943     SET_H_GR (FLD (f_dest), opval);
4944     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4945   }
4946 
4947 #undef FLD
4948 }
4949   NEXT (vpc);
4950 
CASE(sem,INSN_SLEEP)4951   CASE (sem, INSN_SLEEP) : /* sleep */
4952 {
4953   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4954   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4955 #define FLD(f) abuf->fields.sfmt_empty.f
4956   int UNUSED written = 0;
4957   IADDR UNUSED pc = abuf->addr;
4958   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4959 
4960 ((void) 0); /*nop*/
4961 
4962 #undef FLD
4963 }
4964   NEXT (vpc);
4965 
CASE(sem,INSN_STB)4966   CASE (sem, INSN_STB) : /* st.b $rm, $disp10, $rd */
4967 {
4968   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4969   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4970 #define FLD(f) abuf->fields.sfmt_addi.f
4971   int UNUSED written = 0;
4972   IADDR UNUSED pc = abuf->addr;
4973   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4974 
4975   {
4976     UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255);
4977     SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval);
4978     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4979   }
4980 
4981 #undef FLD
4982 }
4983   NEXT (vpc);
4984 
CASE(sem,INSN_STL)4985   CASE (sem, INSN_STL) : /* st.l $rm, $disp10x4, $rd */
4986 {
4987   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4988   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4989 #define FLD(f) abuf->fields.sfmt_flds.f
4990   int UNUSED written = 0;
4991   IADDR UNUSED pc = abuf->addr;
4992   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4993 
4994   {
4995     SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff);
4996     SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval);
4997     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4998   }
4999 
5000 #undef FLD
5001 }
5002   NEXT (vpc);
5003 
CASE(sem,INSN_STQ)5004   CASE (sem, INSN_STQ) : /* st.q $rm, $disp10x8, $rd */
5005 {
5006   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5007   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5008 #define FLD(f) abuf->fields.sfmt_fldd.f
5009   int UNUSED written = 0;
5010   IADDR UNUSED pc = abuf->addr;
5011   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5012 
5013   {
5014     DI opval = GET_H_GR (FLD (f_dest));
5015     SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval);
5016     TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5017   }
5018 
5019 #undef FLD
5020 }
5021   NEXT (vpc);
5022 
CASE(sem,INSN_STW)5023   CASE (sem, INSN_STW) : /* st.w $rm, $disp10x2, $rd */
5024 {
5025   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5026   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5027 #define FLD(f) abuf->fields.sfmt_lduw.f
5028   int UNUSED written = 0;
5029   IADDR UNUSED pc = abuf->addr;
5030   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5031 
5032   {
5033     HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535);
5034     SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval);
5035     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5036   }
5037 
5038 #undef FLD
5039 }
5040   NEXT (vpc);
5041 
CASE(sem,INSN_STHIL)5042   CASE (sem, INSN_STHIL) : /* sthi.l $rm, $disp6, $rd */
5043 {
5044   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5045   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5046 #define FLD(f) abuf->fields.sfmt_getcfg.f
5047   int UNUSED written = 0;
5048   IADDR UNUSED pc = abuf->addr;
5049   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5050 
5051 {
5052   DI tmp_addr;
5053   QI tmp_bytecount;
5054   DI tmp_val;
5055   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5056   tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1);
5057 if (ANDQI (tmp_bytecount, 4)) {
5058   {
5059     SI opval = GET_H_GR (FLD (f_dest));
5060     SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5061     written |= (1 << 5);
5062     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5063   }
5064 } else {
5065 if (GET_H_ENDIAN ()) {
5066 {
5067   tmp_val = GET_H_GR (FLD (f_dest));
5068 if (ANDQI (tmp_bytecount, 1)) {
5069 {
5070   {
5071     UQI opval = ANDQI (tmp_val, 255);
5072     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5073     written |= (1 << 6);
5074     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5075   }
5076   tmp_val = SRLDI (tmp_val, 8);
5077 }
5078 }
5079 if (ANDQI (tmp_bytecount, 2)) {
5080 {
5081   {
5082     HI opval = ANDHI (tmp_val, 65535);
5083     SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5084     written |= (1 << 4);
5085     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5086   }
5087   tmp_val = SRLDI (tmp_val, 16);
5088 }
5089 }
5090 }
5091 } else {
5092 {
5093   tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
5094 if (ANDQI (tmp_bytecount, 2)) {
5095 {
5096   {
5097     HI opval = ANDHI (tmp_val, 65535);
5098     SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5099     written |= (1 << 4);
5100     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5101   }
5102   tmp_val = SRLDI (tmp_val, 16);
5103 }
5104 }
5105 if (ANDQI (tmp_bytecount, 1)) {
5106 {
5107   {
5108     UQI opval = ANDQI (tmp_val, 255);
5109     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5110     written |= (1 << 6);
5111     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5112   }
5113   tmp_val = SRLDI (tmp_val, 8);
5114 }
5115 }
5116 }
5117 }
5118 }
5119 }
5120 
5121   abuf->written = written;
5122 #undef FLD
5123 }
5124   NEXT (vpc);
5125 
CASE(sem,INSN_STHIQ)5126   CASE (sem, INSN_STHIQ) : /* sthi.q $rm, $disp6, $rd */
5127 {
5128   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5129   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5130 #define FLD(f) abuf->fields.sfmt_getcfg.f
5131   int UNUSED written = 0;
5132   IADDR UNUSED pc = abuf->addr;
5133   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5134 
5135 {
5136   DI tmp_addr;
5137   QI tmp_bytecount;
5138   DI tmp_val;
5139   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5140   tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1);
5141 if (ANDQI (tmp_bytecount, 8)) {
5142   {
5143     DI opval = GET_H_GR (FLD (f_dest));
5144     SETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5145     written |= (1 << 4);
5146     TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5147   }
5148 } else {
5149 if (GET_H_ENDIAN ()) {
5150 {
5151   tmp_val = GET_H_GR (FLD (f_dest));
5152 if (ANDQI (tmp_bytecount, 1)) {
5153 {
5154   {
5155     UQI opval = ANDQI (tmp_val, 255);
5156     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5157     written |= (1 << 7);
5158     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5159   }
5160   tmp_val = SRLDI (tmp_val, 8);
5161 }
5162 }
5163 if (ANDQI (tmp_bytecount, 2)) {
5164 {
5165   {
5166     HI opval = ANDHI (tmp_val, 65535);
5167     SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5168     written |= (1 << 5);
5169     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5170   }
5171   tmp_val = SRLDI (tmp_val, 16);
5172 }
5173 }
5174 if (ANDQI (tmp_bytecount, 4)) {
5175 {
5176   {
5177     SI opval = ANDSI (tmp_val, 0xffffffff);
5178     SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5179     written |= (1 << 6);
5180     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5181   }
5182   tmp_val = SRLDI (tmp_val, 32);
5183 }
5184 }
5185 }
5186 } else {
5187 {
5188   tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount)));
5189 if (ANDQI (tmp_bytecount, 4)) {
5190 {
5191   {
5192     SI opval = ANDSI (tmp_val, 0xffffffff);
5193     SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5194     written |= (1 << 6);
5195     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5196   }
5197   tmp_val = SRLDI (tmp_val, 32);
5198 }
5199 }
5200 if (ANDQI (tmp_bytecount, 2)) {
5201 {
5202   {
5203     HI opval = ANDHI (tmp_val, 65535);
5204     SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5205     written |= (1 << 5);
5206     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5207   }
5208   tmp_val = SRLDI (tmp_val, 16);
5209 }
5210 }
5211 if (ANDQI (tmp_bytecount, 1)) {
5212 {
5213   {
5214     UQI opval = ANDQI (tmp_val, 255);
5215     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5216     written |= (1 << 7);
5217     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5218   }
5219   tmp_val = SRLDI (tmp_val, 8);
5220 }
5221 }
5222 }
5223 }
5224 }
5225 }
5226 
5227   abuf->written = written;
5228 #undef FLD
5229 }
5230   NEXT (vpc);
5231 
CASE(sem,INSN_STLOL)5232   CASE (sem, INSN_STLOL) : /* stlo.l $rm, $disp6, $rd */
5233 {
5234   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5235   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5236 #define FLD(f) abuf->fields.sfmt_getcfg.f
5237   int UNUSED written = 0;
5238   IADDR UNUSED pc = abuf->addr;
5239   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5240 
5241 {
5242   DI tmp_addr;
5243   QI tmp_bytecount;
5244   DI tmp_val;
5245   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5246   tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3));
5247 if (ANDQI (tmp_bytecount, 4)) {
5248   {
5249     USI opval = GET_H_GR (FLD (f_dest));
5250     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
5251     written |= (1 << 6);
5252     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5253   }
5254 } else {
5255 if (GET_H_ENDIAN ()) {
5256 {
5257   tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
5258 if (ANDQI (tmp_bytecount, 2)) {
5259 {
5260   {
5261     UHI opval = ANDHI (tmp_val, 65535);
5262     SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5263     written |= (1 << 4);
5264     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5265   }
5266   tmp_val = SRLDI (tmp_val, 16);
5267 }
5268 }
5269 if (ANDQI (tmp_bytecount, 1)) {
5270 {
5271   {
5272     UQI opval = ANDQI (tmp_val, 255);
5273     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5274     written |= (1 << 5);
5275     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5276   }
5277   tmp_val = SRLDI (tmp_val, 8);
5278 }
5279 }
5280 }
5281 } else {
5282 {
5283   tmp_val = GET_H_GR (FLD (f_dest));
5284 if (ANDQI (tmp_bytecount, 1)) {
5285 {
5286   {
5287     UQI opval = ANDQI (tmp_val, 255);
5288     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5289     written |= (1 << 5);
5290     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5291   }
5292   tmp_val = SRLDI (tmp_val, 8);
5293 }
5294 }
5295 if (ANDQI (tmp_bytecount, 2)) {
5296 {
5297   {
5298     UHI opval = ANDHI (tmp_val, 65535);
5299     SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5300     written |= (1 << 4);
5301     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5302   }
5303   tmp_val = SRLDI (tmp_val, 16);
5304 }
5305 }
5306 }
5307 }
5308 }
5309 }
5310 
5311   abuf->written = written;
5312 #undef FLD
5313 }
5314   NEXT (vpc);
5315 
CASE(sem,INSN_STLOQ)5316   CASE (sem, INSN_STLOQ) : /* stlo.q $rm, $disp6, $rd */
5317 {
5318   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5319   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5320 #define FLD(f) abuf->fields.sfmt_getcfg.f
5321   int UNUSED written = 0;
5322   IADDR UNUSED pc = abuf->addr;
5323   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5324 
5325 {
5326   DI tmp_addr;
5327   QI tmp_bytecount;
5328   DI tmp_val;
5329   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5330   tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7));
5331 if (ANDQI (tmp_bytecount, 8)) {
5332   {
5333     UDI opval = GET_H_GR (FLD (f_dest));
5334     SETMEMUDI (current_cpu, pc, tmp_addr, opval);
5335     written |= (1 << 4);
5336     TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5337   }
5338 } else {
5339 if (GET_H_ENDIAN ()) {
5340 {
5341   tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount)));
5342 if (ANDQI (tmp_bytecount, 4)) {
5343 {
5344   {
5345     USI opval = ANDSI (tmp_val, 0xffffffff);
5346     SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval);
5347     written |= (1 << 7);
5348     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5349   }
5350   tmp_val = SRLDI (tmp_val, 32);
5351 }
5352 }
5353 if (ANDQI (tmp_bytecount, 2)) {
5354 {
5355   {
5356     UHI opval = ANDHI (tmp_val, 65535);
5357     SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5358     written |= (1 << 5);
5359     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5360   }
5361   tmp_val = SRLDI (tmp_val, 16);
5362 }
5363 }
5364 if (ANDQI (tmp_bytecount, 1)) {
5365 {
5366   {
5367     UQI opval = ANDQI (tmp_val, 255);
5368     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5369     written |= (1 << 6);
5370     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5371   }
5372   tmp_val = SRLDI (tmp_val, 8);
5373 }
5374 }
5375 }
5376 } else {
5377 {
5378   tmp_val = GET_H_GR (FLD (f_dest));
5379 if (ANDQI (tmp_bytecount, 1)) {
5380 {
5381   {
5382     UQI opval = ANDQI (tmp_val, 255);
5383     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5384     written |= (1 << 6);
5385     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5386   }
5387   tmp_val = SRLDI (tmp_val, 8);
5388 }
5389 }
5390 if (ANDQI (tmp_bytecount, 2)) {
5391 {
5392   {
5393     UHI opval = ANDHI (tmp_val, 65535);
5394     SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5395     written |= (1 << 5);
5396     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5397   }
5398   tmp_val = SRLDI (tmp_val, 16);
5399 }
5400 }
5401 if (ANDQI (tmp_bytecount, 4)) {
5402 {
5403   {
5404     USI opval = ANDSI (tmp_val, 0xffffffff);
5405     SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval);
5406     written |= (1 << 7);
5407     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5408   }
5409   tmp_val = SRLDI (tmp_val, 32);
5410 }
5411 }
5412 }
5413 }
5414 }
5415 }
5416 
5417   abuf->written = written;
5418 #undef FLD
5419 }
5420   NEXT (vpc);
5421 
CASE(sem,INSN_STXB)5422   CASE (sem, INSN_STXB) : /* stx.b $rm, $rn, $rd */
5423 {
5424   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5425   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5426 #define FLD(f) abuf->fields.sfmt_add.f
5427   int UNUSED written = 0;
5428   IADDR UNUSED pc = abuf->addr;
5429   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5430 
5431   {
5432     UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7);
5433     SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5434     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5435   }
5436 
5437 #undef FLD
5438 }
5439   NEXT (vpc);
5440 
CASE(sem,INSN_STXL)5441   CASE (sem, INSN_STXL) : /* stx.l $rm, $rn, $rd */
5442 {
5443   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5444   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5445 #define FLD(f) abuf->fields.sfmt_add.f
5446   int UNUSED written = 0;
5447   IADDR UNUSED pc = abuf->addr;
5448   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5449 
5450   {
5451     SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
5452     SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5453     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5454   }
5455 
5456 #undef FLD
5457 }
5458   NEXT (vpc);
5459 
CASE(sem,INSN_STXQ)5460   CASE (sem, INSN_STXQ) : /* stx.q $rm, $rn, $rd */
5461 {
5462   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5463   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5464 #define FLD(f) abuf->fields.sfmt_add.f
5465   int UNUSED written = 0;
5466   IADDR UNUSED pc = abuf->addr;
5467   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5468 
5469   {
5470     DI opval = GET_H_GR (FLD (f_dest));
5471     SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5472     TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5473   }
5474 
5475 #undef FLD
5476 }
5477   NEXT (vpc);
5478 
CASE(sem,INSN_STXW)5479   CASE (sem, INSN_STXW) : /* stx.w $rm, $rn, $rd */
5480 {
5481   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5482   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5483 #define FLD(f) abuf->fields.sfmt_add.f
5484   int UNUSED written = 0;
5485   IADDR UNUSED pc = abuf->addr;
5486   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5487 
5488   {
5489     HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3);
5490     SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5491     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5492   }
5493 
5494 #undef FLD
5495 }
5496   NEXT (vpc);
5497 
CASE(sem,INSN_SUB)5498   CASE (sem, INSN_SUB) : /* sub $rm, $rn, $rd */
5499 {
5500   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5501   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5502 #define FLD(f) abuf->fields.sfmt_add.f
5503   int UNUSED written = 0;
5504   IADDR UNUSED pc = abuf->addr;
5505   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5506 
5507   {
5508     DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5509     SET_H_GR (FLD (f_dest), opval);
5510     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5511   }
5512 
5513 #undef FLD
5514 }
5515   NEXT (vpc);
5516 
CASE(sem,INSN_SUBL)5517   CASE (sem, INSN_SUBL) : /* sub.l $rm, $rn, $rd */
5518 {
5519   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5520   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5521 #define FLD(f) abuf->fields.sfmt_add.f
5522   int UNUSED written = 0;
5523   IADDR UNUSED pc = abuf->addr;
5524   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5525 
5526   {
5527     DI opval = EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
5528     SET_H_GR (FLD (f_dest), opval);
5529     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5530   }
5531 
5532 #undef FLD
5533 }
5534   NEXT (vpc);
5535 
CASE(sem,INSN_SWAPQ)5536   CASE (sem, INSN_SWAPQ) : /* swap.q $rm, $rn, $rd */
5537 {
5538   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5539   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5540 #define FLD(f) abuf->fields.sfmt_add.f
5541   int UNUSED written = 0;
5542   IADDR UNUSED pc = abuf->addr;
5543   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5544 
5545 {
5546   DI tmp_addr;
5547   DI tmp_temp;
5548   tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5549   tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr);
5550   {
5551     DI opval = GET_H_GR (FLD (f_dest));
5552     SETMEMDI (current_cpu, pc, tmp_addr, opval);
5553     TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5554   }
5555   {
5556     DI opval = tmp_temp;
5557     SET_H_GR (FLD (f_dest), opval);
5558     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5559   }
5560 }
5561 
5562 #undef FLD
5563 }
5564   NEXT (vpc);
5565 
CASE(sem,INSN_SYNCI)5566   CASE (sem, INSN_SYNCI) : /* synci */
5567 {
5568   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5569   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5570 #define FLD(f) abuf->fields.sfmt_empty.f
5571   int UNUSED written = 0;
5572   IADDR UNUSED pc = abuf->addr;
5573   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5574 
5575 ((void) 0); /*nop*/
5576 
5577 #undef FLD
5578 }
5579   NEXT (vpc);
5580 
CASE(sem,INSN_SYNCO)5581   CASE (sem, INSN_SYNCO) : /* synco */
5582 {
5583   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5584   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5585 #define FLD(f) abuf->fields.sfmt_empty.f
5586   int UNUSED written = 0;
5587   IADDR UNUSED pc = abuf->addr;
5588   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5589 
5590 ((void) 0); /*nop*/
5591 
5592 #undef FLD
5593 }
5594   NEXT (vpc);
5595 
CASE(sem,INSN_TRAPA)5596   CASE (sem, INSN_TRAPA) : /* trapa $rm */
5597 {
5598   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5599   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5600 #define FLD(f) abuf->fields.sfmt_xori.f
5601   int UNUSED written = 0;
5602   IADDR UNUSED pc = abuf->addr;
5603   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5604 
5605 sh64_trapa (current_cpu, GET_H_GR (FLD (f_left)), pc);
5606 
5607 #undef FLD
5608 }
5609   NEXT (vpc);
5610 
CASE(sem,INSN_XOR)5611   CASE (sem, INSN_XOR) : /* xor $rm, $rn, $rd */
5612 {
5613   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5614   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5615 #define FLD(f) abuf->fields.sfmt_add.f
5616   int UNUSED written = 0;
5617   IADDR UNUSED pc = abuf->addr;
5618   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5619 
5620   {
5621     DI opval = XORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5622     SET_H_GR (FLD (f_dest), opval);
5623     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5624   }
5625 
5626 #undef FLD
5627 }
5628   NEXT (vpc);
5629 
CASE(sem,INSN_XORI)5630   CASE (sem, INSN_XORI) : /* xori $rm, $imm6, $rd */
5631 {
5632   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5633   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5634 #define FLD(f) abuf->fields.sfmt_xori.f
5635   int UNUSED written = 0;
5636   IADDR UNUSED pc = abuf->addr;
5637   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5638 
5639   {
5640     DI opval = XORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)));
5641     SET_H_GR (FLD (f_dest), opval);
5642     TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5643   }
5644 
5645 #undef FLD
5646 }
5647   NEXT (vpc);
5648 
5649 
5650     }
5651   ENDSWITCH (sem) /* End of semantic switch.  */
5652 
5653   /* At this point `vpc' contains the next insn to execute.  */
5654 }
5655 
5656 #undef DEFINE_SWITCH
5657 #endif /* DEFINE_SWITCH */
5658