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