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