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