]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/sh64/sem-media-switch.c
Update Copyright year range in all files maintained by GDB.
[thirdparty/binutils-gdb.git] / sim / sh64 / sem-media-switch.c
CommitLineData
cbb38b47
BE
1/* Simulator instruction semantics for sh64.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
ecd75fc8 5Copyright 1996-2014 Free Software Foundation, Inc.
cbb38b47 6
1bbd6057 7This file is part of the GNU simulators.
cbb38b47 8
fda1c30b
DE
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.
cbb38b47 13
fda1c30b
DE
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.
cbb38b47 18
fda1c30b 19 You should have received a copy of the GNU General Public License along
51b318de 20 with this program; if not, see <http://www.gnu.org/licenses/>.
cbb38b47
BE
21
22*/
23
24#ifdef DEFINE_LABELS
25
26 /* The labels have the case they have because the enum of insn types
27 is all uppercase and in the non-stdc case the insn symbol is built
28 into the enum name. */
29
30 static struct {
31 int index;
32 void *label;
33 } labels[] = {
34 { SH64_MEDIA_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
35 { SH64_MEDIA_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
36 { SH64_MEDIA_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
37 { SH64_MEDIA_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
38 { SH64_MEDIA_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
39 { SH64_MEDIA_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
40 { SH64_MEDIA_INSN_ADD, && case_sem_INSN_ADD },
41 { SH64_MEDIA_INSN_ADDL, && case_sem_INSN_ADDL },
42 { SH64_MEDIA_INSN_ADDI, && case_sem_INSN_ADDI },
43 { SH64_MEDIA_INSN_ADDIL, && case_sem_INSN_ADDIL },
44 { SH64_MEDIA_INSN_ADDZL, && case_sem_INSN_ADDZL },
45 { SH64_MEDIA_INSN_ALLOCO, && case_sem_INSN_ALLOCO },
46 { SH64_MEDIA_INSN_AND, && case_sem_INSN_AND },
47 { SH64_MEDIA_INSN_ANDC, && case_sem_INSN_ANDC },
48 { SH64_MEDIA_INSN_ANDI, && case_sem_INSN_ANDI },
49 { SH64_MEDIA_INSN_BEQ, && case_sem_INSN_BEQ },
50 { SH64_MEDIA_INSN_BEQI, && case_sem_INSN_BEQI },
51 { SH64_MEDIA_INSN_BGE, && case_sem_INSN_BGE },
52 { SH64_MEDIA_INSN_BGEU, && case_sem_INSN_BGEU },
53 { SH64_MEDIA_INSN_BGT, && case_sem_INSN_BGT },
54 { SH64_MEDIA_INSN_BGTU, && case_sem_INSN_BGTU },
55 { SH64_MEDIA_INSN_BLINK, && case_sem_INSN_BLINK },
56 { SH64_MEDIA_INSN_BNE, && case_sem_INSN_BNE },
57 { SH64_MEDIA_INSN_BNEI, && case_sem_INSN_BNEI },
58 { SH64_MEDIA_INSN_BRK, && case_sem_INSN_BRK },
59 { SH64_MEDIA_INSN_BYTEREV, && case_sem_INSN_BYTEREV },
60 { SH64_MEDIA_INSN_CMPEQ, && case_sem_INSN_CMPEQ },
61 { SH64_MEDIA_INSN_CMPGT, && case_sem_INSN_CMPGT },
62 { SH64_MEDIA_INSN_CMPGTU, && case_sem_INSN_CMPGTU },
63 { SH64_MEDIA_INSN_CMVEQ, && case_sem_INSN_CMVEQ },
64 { SH64_MEDIA_INSN_CMVNE, && case_sem_INSN_CMVNE },
65 { SH64_MEDIA_INSN_FABSD, && case_sem_INSN_FABSD },
66 { SH64_MEDIA_INSN_FABSS, && case_sem_INSN_FABSS },
67 { SH64_MEDIA_INSN_FADDD, && case_sem_INSN_FADDD },
68 { SH64_MEDIA_INSN_FADDS, && case_sem_INSN_FADDS },
69 { SH64_MEDIA_INSN_FCMPEQD, && case_sem_INSN_FCMPEQD },
70 { SH64_MEDIA_INSN_FCMPEQS, && case_sem_INSN_FCMPEQS },
71 { SH64_MEDIA_INSN_FCMPGED, && case_sem_INSN_FCMPGED },
72 { SH64_MEDIA_INSN_FCMPGES, && case_sem_INSN_FCMPGES },
73 { SH64_MEDIA_INSN_FCMPGTD, && case_sem_INSN_FCMPGTD },
74 { SH64_MEDIA_INSN_FCMPGTS, && case_sem_INSN_FCMPGTS },
75 { SH64_MEDIA_INSN_FCMPUND, && case_sem_INSN_FCMPUND },
76 { SH64_MEDIA_INSN_FCMPUNS, && case_sem_INSN_FCMPUNS },
77 { SH64_MEDIA_INSN_FCNVDS, && case_sem_INSN_FCNVDS },
78 { SH64_MEDIA_INSN_FCNVSD, && case_sem_INSN_FCNVSD },
79 { SH64_MEDIA_INSN_FDIVD, && case_sem_INSN_FDIVD },
80 { SH64_MEDIA_INSN_FDIVS, && case_sem_INSN_FDIVS },
81 { SH64_MEDIA_INSN_FGETSCR, && case_sem_INSN_FGETSCR },
82 { SH64_MEDIA_INSN_FIPRS, && case_sem_INSN_FIPRS },
83 { SH64_MEDIA_INSN_FLDD, && case_sem_INSN_FLDD },
84 { SH64_MEDIA_INSN_FLDP, && case_sem_INSN_FLDP },
85 { SH64_MEDIA_INSN_FLDS, && case_sem_INSN_FLDS },
86 { SH64_MEDIA_INSN_FLDXD, && case_sem_INSN_FLDXD },
87 { SH64_MEDIA_INSN_FLDXP, && case_sem_INSN_FLDXP },
88 { SH64_MEDIA_INSN_FLDXS, && case_sem_INSN_FLDXS },
89 { SH64_MEDIA_INSN_FLOATLD, && case_sem_INSN_FLOATLD },
90 { SH64_MEDIA_INSN_FLOATLS, && case_sem_INSN_FLOATLS },
91 { SH64_MEDIA_INSN_FLOATQD, && case_sem_INSN_FLOATQD },
92 { SH64_MEDIA_INSN_FLOATQS, && case_sem_INSN_FLOATQS },
93 { SH64_MEDIA_INSN_FMACS, && case_sem_INSN_FMACS },
94 { SH64_MEDIA_INSN_FMOVD, && case_sem_INSN_FMOVD },
95 { SH64_MEDIA_INSN_FMOVDQ, && case_sem_INSN_FMOVDQ },
96 { SH64_MEDIA_INSN_FMOVLS, && case_sem_INSN_FMOVLS },
97 { SH64_MEDIA_INSN_FMOVQD, && case_sem_INSN_FMOVQD },
98 { SH64_MEDIA_INSN_FMOVS, && case_sem_INSN_FMOVS },
99 { SH64_MEDIA_INSN_FMOVSL, && case_sem_INSN_FMOVSL },
100 { SH64_MEDIA_INSN_FMULD, && case_sem_INSN_FMULD },
101 { SH64_MEDIA_INSN_FMULS, && case_sem_INSN_FMULS },
102 { SH64_MEDIA_INSN_FNEGD, && case_sem_INSN_FNEGD },
103 { SH64_MEDIA_INSN_FNEGS, && case_sem_INSN_FNEGS },
104 { SH64_MEDIA_INSN_FPUTSCR, && case_sem_INSN_FPUTSCR },
105 { SH64_MEDIA_INSN_FSQRTD, && case_sem_INSN_FSQRTD },
106 { SH64_MEDIA_INSN_FSQRTS, && case_sem_INSN_FSQRTS },
107 { SH64_MEDIA_INSN_FSTD, && case_sem_INSN_FSTD },
108 { SH64_MEDIA_INSN_FSTP, && case_sem_INSN_FSTP },
109 { SH64_MEDIA_INSN_FSTS, && case_sem_INSN_FSTS },
110 { SH64_MEDIA_INSN_FSTXD, && case_sem_INSN_FSTXD },
111 { SH64_MEDIA_INSN_FSTXP, && case_sem_INSN_FSTXP },
112 { SH64_MEDIA_INSN_FSTXS, && case_sem_INSN_FSTXS },
113 { SH64_MEDIA_INSN_FSUBD, && case_sem_INSN_FSUBD },
114 { SH64_MEDIA_INSN_FSUBS, && case_sem_INSN_FSUBS },
115 { SH64_MEDIA_INSN_FTRCDL, && case_sem_INSN_FTRCDL },
116 { SH64_MEDIA_INSN_FTRCSL, && case_sem_INSN_FTRCSL },
117 { SH64_MEDIA_INSN_FTRCDQ, && case_sem_INSN_FTRCDQ },
118 { SH64_MEDIA_INSN_FTRCSQ, && case_sem_INSN_FTRCSQ },
119 { SH64_MEDIA_INSN_FTRVS, && case_sem_INSN_FTRVS },
120 { SH64_MEDIA_INSN_GETCFG, && case_sem_INSN_GETCFG },
121 { SH64_MEDIA_INSN_GETCON, && case_sem_INSN_GETCON },
122 { SH64_MEDIA_INSN_GETTR, && case_sem_INSN_GETTR },
123 { SH64_MEDIA_INSN_ICBI, && case_sem_INSN_ICBI },
124 { SH64_MEDIA_INSN_LDB, && case_sem_INSN_LDB },
125 { SH64_MEDIA_INSN_LDL, && case_sem_INSN_LDL },
126 { SH64_MEDIA_INSN_LDQ, && case_sem_INSN_LDQ },
127 { SH64_MEDIA_INSN_LDUB, && case_sem_INSN_LDUB },
128 { SH64_MEDIA_INSN_LDUW, && case_sem_INSN_LDUW },
129 { SH64_MEDIA_INSN_LDW, && case_sem_INSN_LDW },
130 { SH64_MEDIA_INSN_LDHIL, && case_sem_INSN_LDHIL },
131 { SH64_MEDIA_INSN_LDHIQ, && case_sem_INSN_LDHIQ },
132 { SH64_MEDIA_INSN_LDLOL, && case_sem_INSN_LDLOL },
133 { SH64_MEDIA_INSN_LDLOQ, && case_sem_INSN_LDLOQ },
134 { SH64_MEDIA_INSN_LDXB, && case_sem_INSN_LDXB },
135 { SH64_MEDIA_INSN_LDXL, && case_sem_INSN_LDXL },
136 { SH64_MEDIA_INSN_LDXQ, && case_sem_INSN_LDXQ },
137 { SH64_MEDIA_INSN_LDXUB, && case_sem_INSN_LDXUB },
138 { SH64_MEDIA_INSN_LDXUW, && case_sem_INSN_LDXUW },
139 { SH64_MEDIA_INSN_LDXW, && case_sem_INSN_LDXW },
140 { SH64_MEDIA_INSN_MABSL, && case_sem_INSN_MABSL },
141 { SH64_MEDIA_INSN_MABSW, && case_sem_INSN_MABSW },
142 { SH64_MEDIA_INSN_MADDL, && case_sem_INSN_MADDL },
143 { SH64_MEDIA_INSN_MADDW, && case_sem_INSN_MADDW },
144 { SH64_MEDIA_INSN_MADDSL, && case_sem_INSN_MADDSL },
145 { SH64_MEDIA_INSN_MADDSUB, && case_sem_INSN_MADDSUB },
146 { SH64_MEDIA_INSN_MADDSW, && case_sem_INSN_MADDSW },
147 { SH64_MEDIA_INSN_MCMPEQB, && case_sem_INSN_MCMPEQB },
148 { SH64_MEDIA_INSN_MCMPEQL, && case_sem_INSN_MCMPEQL },
149 { SH64_MEDIA_INSN_MCMPEQW, && case_sem_INSN_MCMPEQW },
150 { SH64_MEDIA_INSN_MCMPGTL, && case_sem_INSN_MCMPGTL },
151 { SH64_MEDIA_INSN_MCMPGTUB, && case_sem_INSN_MCMPGTUB },
152 { SH64_MEDIA_INSN_MCMPGTW, && case_sem_INSN_MCMPGTW },
153 { SH64_MEDIA_INSN_MCMV, && case_sem_INSN_MCMV },
154 { SH64_MEDIA_INSN_MCNVSLW, && case_sem_INSN_MCNVSLW },
155 { SH64_MEDIA_INSN_MCNVSWB, && case_sem_INSN_MCNVSWB },
156 { SH64_MEDIA_INSN_MCNVSWUB, && case_sem_INSN_MCNVSWUB },
157 { SH64_MEDIA_INSN_MEXTR1, && case_sem_INSN_MEXTR1 },
158 { SH64_MEDIA_INSN_MEXTR2, && case_sem_INSN_MEXTR2 },
159 { SH64_MEDIA_INSN_MEXTR3, && case_sem_INSN_MEXTR3 },
160 { SH64_MEDIA_INSN_MEXTR4, && case_sem_INSN_MEXTR4 },
161 { SH64_MEDIA_INSN_MEXTR5, && case_sem_INSN_MEXTR5 },
162 { SH64_MEDIA_INSN_MEXTR6, && case_sem_INSN_MEXTR6 },
163 { SH64_MEDIA_INSN_MEXTR7, && case_sem_INSN_MEXTR7 },
164 { SH64_MEDIA_INSN_MMACFXWL, && case_sem_INSN_MMACFXWL },
165 { SH64_MEDIA_INSN_MMACNFX_WL, && case_sem_INSN_MMACNFX_WL },
166 { SH64_MEDIA_INSN_MMULL, && case_sem_INSN_MMULL },
167 { SH64_MEDIA_INSN_MMULW, && case_sem_INSN_MMULW },
168 { SH64_MEDIA_INSN_MMULFXL, && case_sem_INSN_MMULFXL },
169 { SH64_MEDIA_INSN_MMULFXW, && case_sem_INSN_MMULFXW },
170 { SH64_MEDIA_INSN_MMULFXRPW, && case_sem_INSN_MMULFXRPW },
171 { SH64_MEDIA_INSN_MMULHIWL, && case_sem_INSN_MMULHIWL },
172 { SH64_MEDIA_INSN_MMULLOWL, && case_sem_INSN_MMULLOWL },
173 { SH64_MEDIA_INSN_MMULSUMWQ, && case_sem_INSN_MMULSUMWQ },
174 { SH64_MEDIA_INSN_MOVI, && case_sem_INSN_MOVI },
175 { SH64_MEDIA_INSN_MPERMW, && case_sem_INSN_MPERMW },
176 { SH64_MEDIA_INSN_MSADUBQ, && case_sem_INSN_MSADUBQ },
177 { SH64_MEDIA_INSN_MSHALDSL, && case_sem_INSN_MSHALDSL },
178 { SH64_MEDIA_INSN_MSHALDSW, && case_sem_INSN_MSHALDSW },
179 { SH64_MEDIA_INSN_MSHARDL, && case_sem_INSN_MSHARDL },
180 { SH64_MEDIA_INSN_MSHARDW, && case_sem_INSN_MSHARDW },
181 { SH64_MEDIA_INSN_MSHARDSQ, && case_sem_INSN_MSHARDSQ },
182 { SH64_MEDIA_INSN_MSHFHIB, && case_sem_INSN_MSHFHIB },
183 { SH64_MEDIA_INSN_MSHFHIL, && case_sem_INSN_MSHFHIL },
184 { SH64_MEDIA_INSN_MSHFHIW, && case_sem_INSN_MSHFHIW },
185 { SH64_MEDIA_INSN_MSHFLOB, && case_sem_INSN_MSHFLOB },
186 { SH64_MEDIA_INSN_MSHFLOL, && case_sem_INSN_MSHFLOL },
187 { SH64_MEDIA_INSN_MSHFLOW, && case_sem_INSN_MSHFLOW },
188 { SH64_MEDIA_INSN_MSHLLDL, && case_sem_INSN_MSHLLDL },
189 { SH64_MEDIA_INSN_MSHLLDW, && case_sem_INSN_MSHLLDW },
190 { SH64_MEDIA_INSN_MSHLRDL, && case_sem_INSN_MSHLRDL },
191 { SH64_MEDIA_INSN_MSHLRDW, && case_sem_INSN_MSHLRDW },
192 { SH64_MEDIA_INSN_MSUBL, && case_sem_INSN_MSUBL },
193 { SH64_MEDIA_INSN_MSUBW, && case_sem_INSN_MSUBW },
194 { SH64_MEDIA_INSN_MSUBSL, && case_sem_INSN_MSUBSL },
195 { SH64_MEDIA_INSN_MSUBSUB, && case_sem_INSN_MSUBSUB },
196 { SH64_MEDIA_INSN_MSUBSW, && case_sem_INSN_MSUBSW },
197 { SH64_MEDIA_INSN_MULSL, && case_sem_INSN_MULSL },
198 { SH64_MEDIA_INSN_MULUL, && case_sem_INSN_MULUL },
199 { SH64_MEDIA_INSN_NOP, && case_sem_INSN_NOP },
200 { SH64_MEDIA_INSN_NSB, && case_sem_INSN_NSB },
201 { SH64_MEDIA_INSN_OCBI, && case_sem_INSN_OCBI },
202 { SH64_MEDIA_INSN_OCBP, && case_sem_INSN_OCBP },
203 { SH64_MEDIA_INSN_OCBWB, && case_sem_INSN_OCBWB },
204 { SH64_MEDIA_INSN_OR, && case_sem_INSN_OR },
205 { SH64_MEDIA_INSN_ORI, && case_sem_INSN_ORI },
206 { SH64_MEDIA_INSN_PREFI, && case_sem_INSN_PREFI },
207 { SH64_MEDIA_INSN_PTA, && case_sem_INSN_PTA },
208 { SH64_MEDIA_INSN_PTABS, && case_sem_INSN_PTABS },
209 { SH64_MEDIA_INSN_PTB, && case_sem_INSN_PTB },
210 { SH64_MEDIA_INSN_PTREL, && case_sem_INSN_PTREL },
211 { SH64_MEDIA_INSN_PUTCFG, && case_sem_INSN_PUTCFG },
212 { SH64_MEDIA_INSN_PUTCON, && case_sem_INSN_PUTCON },
213 { SH64_MEDIA_INSN_RTE, && case_sem_INSN_RTE },
214 { SH64_MEDIA_INSN_SHARD, && case_sem_INSN_SHARD },
215 { SH64_MEDIA_INSN_SHARDL, && case_sem_INSN_SHARDL },
216 { SH64_MEDIA_INSN_SHARI, && case_sem_INSN_SHARI },
217 { SH64_MEDIA_INSN_SHARIL, && case_sem_INSN_SHARIL },
218 { SH64_MEDIA_INSN_SHLLD, && case_sem_INSN_SHLLD },
219 { SH64_MEDIA_INSN_SHLLDL, && case_sem_INSN_SHLLDL },
220 { SH64_MEDIA_INSN_SHLLI, && case_sem_INSN_SHLLI },
221 { SH64_MEDIA_INSN_SHLLIL, && case_sem_INSN_SHLLIL },
222 { SH64_MEDIA_INSN_SHLRD, && case_sem_INSN_SHLRD },
223 { SH64_MEDIA_INSN_SHLRDL, && case_sem_INSN_SHLRDL },
224 { SH64_MEDIA_INSN_SHLRI, && case_sem_INSN_SHLRI },
225 { SH64_MEDIA_INSN_SHLRIL, && case_sem_INSN_SHLRIL },
226 { SH64_MEDIA_INSN_SHORI, && case_sem_INSN_SHORI },
227 { SH64_MEDIA_INSN_SLEEP, && case_sem_INSN_SLEEP },
228 { SH64_MEDIA_INSN_STB, && case_sem_INSN_STB },
229 { SH64_MEDIA_INSN_STL, && case_sem_INSN_STL },
230 { SH64_MEDIA_INSN_STQ, && case_sem_INSN_STQ },
231 { SH64_MEDIA_INSN_STW, && case_sem_INSN_STW },
232 { SH64_MEDIA_INSN_STHIL, && case_sem_INSN_STHIL },
233 { SH64_MEDIA_INSN_STHIQ, && case_sem_INSN_STHIQ },
234 { SH64_MEDIA_INSN_STLOL, && case_sem_INSN_STLOL },
235 { SH64_MEDIA_INSN_STLOQ, && case_sem_INSN_STLOQ },
236 { SH64_MEDIA_INSN_STXB, && case_sem_INSN_STXB },
237 { SH64_MEDIA_INSN_STXL, && case_sem_INSN_STXL },
238 { SH64_MEDIA_INSN_STXQ, && case_sem_INSN_STXQ },
239 { SH64_MEDIA_INSN_STXW, && case_sem_INSN_STXW },
240 { SH64_MEDIA_INSN_SUB, && case_sem_INSN_SUB },
241 { SH64_MEDIA_INSN_SUBL, && case_sem_INSN_SUBL },
242 { SH64_MEDIA_INSN_SWAPQ, && case_sem_INSN_SWAPQ },
243 { SH64_MEDIA_INSN_SYNCI, && case_sem_INSN_SYNCI },
244 { SH64_MEDIA_INSN_SYNCO, && case_sem_INSN_SYNCO },
245 { SH64_MEDIA_INSN_TRAPA, && case_sem_INSN_TRAPA },
246 { SH64_MEDIA_INSN_XOR, && case_sem_INSN_XOR },
247 { SH64_MEDIA_INSN_XORI, && case_sem_INSN_XORI },
248 { 0, 0 }
249 };
250 int i;
251
252 for (i = 0; labels[i].label != 0; ++i)
253 {
254#if FAST_P
255 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
256#else
257 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
258#endif
259 }
260
261#undef DEFINE_LABELS
262#endif /* DEFINE_LABELS */
263
264#ifdef DEFINE_SWITCH
265
266/* If hyper-fast [well not unnecessarily slow] execution is selected, turn
267 off frills like tracing and profiling. */
268/* FIXME: A better way would be to have TRACE_RESULT check for something
269 that can cause it to be optimized out. Another way would be to emit
270 special handlers into the instruction "stream". */
271
272#if FAST_P
273#undef TRACE_RESULT
274#define TRACE_RESULT(cpu, abuf, name, type, val)
275#endif
276
277#undef GET_ATTR
cbb38b47 278#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
cbb38b47
BE
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);
2310652a 309#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
2310652a 334#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
2310652a 353#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
2310652a 372#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
2310652a 400#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
2310652a 422#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
1bbd6057 459 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 478 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 497 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 516 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 535 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
c7e628df 546#define FLD(f) abuf->fields.sfmt_xori.f
cbb38b47
BE
547 int UNUSED written = 0;
548 IADDR UNUSED pc = abuf->addr;
549 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
550
c7e628df
DB
551{
552 {
553 DI opval = GET_H_GR (FLD (f_left));
554 SET_H_GR (FLD (f_left), opval);
555 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
556 }
cbb38b47 557((void) 0); /*nop*/
c7e628df 558}
cbb38b47
BE
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);
1bbd6057 576 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 595 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 614 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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
c7e628df
DB
631{
632((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
639 }
c7e628df 640}
cbb38b47
BE
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
c7e628df
DB
659{
660((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
667 }
c7e628df 668}
cbb38b47
BE
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
c7e628df
DB
687{
688((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
695 }
c7e628df 696}
cbb38b47
BE
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
c7e628df
DB
715{
716((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
723 }
c7e628df 724}
cbb38b47
BE
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
c7e628df
DB
743{
744((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
751 }
c7e628df 752}
cbb38b47
BE
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
c7e628df
DB
771{
772((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
779 }
c7e628df 780}
cbb38b47
BE
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);
1bbd6057 803 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
804 }
805 {
806 UDI opval = CPU (h_tr[FLD (f_trb)]);
807 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
808 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
809 }
c7e628df
DB
810if (EQSI (FLD (f_dest), 63)) {
811((void) 0); /*nop*/
812} else {
813((void) 0); /*nop*/
814}
cbb38b47
BE
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
c7e628df
DB
832{
833((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
840 }
c7e628df 841}
cbb38b47
BE
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
c7e628df
DB
860{
861((void) 0); /*nop*/
cbb38b47
BE
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 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
868 }
c7e628df 869}
cbb38b47
BE
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);
2310652a 882#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
1bbd6057 942 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 962 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 981 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1000 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1021 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1044 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1065 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1084 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1103 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1122 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1141 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1160 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1179 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1198 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1217 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1236 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1255 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1274 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 1293 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1312 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1331 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1350 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
c7e628df 1361#define FLD(f) abuf->fields.sfmt_shori.f
cbb38b47
BE
1362 int UNUSED written = 0;
1363 IADDR UNUSED pc = abuf->addr;
1364 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1365
c7e628df
DB
1366 {
1367 SF opval = SUBWORDSISF (CPU (h_fpscr));
1368 CPU (h_fr[FLD (f_dest)]) = opval;
1369 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1370 }
cbb38b47
BE
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{
cbb38b47 1386 {
c7e628df
DB
1387 SF opval = GET_H_FV (FLD (f_left));
1388 SET_H_FV (FLD (f_left), opval);
1389 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
1390 }
1391 {
1392 SF opval = GET_H_FV (FLD (f_right));
1393 SET_H_FV (FLD (f_right), opval);
1394 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
1395 }
1396 {
1397 SF opval = sh64_fiprs (current_cpu, FLD (f_left), FLD (f_right));
cbb38b47 1398 CPU (h_fr[FLD (f_dest)]) = opval;
1bbd6057 1399 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1419 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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{
cbb38b47 1436 {
c7e628df
DB
1437 SF opval = GET_H_FP (FLD (f_dest));
1438 SET_H_FP (FLD (f_dest), opval);
1439 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
cbb38b47 1440 }
c7e628df 1441sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest));
cbb38b47
BE
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;
1bbd6057 1460 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1479 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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{
cbb38b47 1496 {
c7e628df
DB
1497 SF opval = GET_H_FP (FLD (f_dest));
1498 SET_H_FP (FLD (f_dest), opval);
1499 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
cbb38b47 1500 }
c7e628df 1501sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest));
cbb38b47
BE
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;
1bbd6057 1520 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1539 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1558 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1577 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1596 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1615 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1634 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1653 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 1672 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1691 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1710 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1729 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1748 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1767 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1786 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1805 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
c7e628df 1816#define FLD(f) abuf->fields.sfmt_fabsd.f
cbb38b47
BE
1817 int UNUSED written = 0;
1818 IADDR UNUSED pc = abuf->addr;
1819 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1820
c7e628df
DB
1821 {
1822 SI opval = SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)]));
1823 CPU (h_fpscr) = opval;
1824 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
1825 }
cbb38b47
BE
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);
1bbd6057 1843 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1862 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
1863 }
1864
1865#undef FLD
1866}
1867 NEXT (vpc);
1868
1869 CASE (sem, INSN_FSTD) : /* fst.d $rm, $disp10x8, $drf */
1870{
1871 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1872 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1873#define FLD(f) abuf->fields.sfmt_fldd.f
1874 int UNUSED written = 0;
1875 IADDR UNUSED pc = abuf->addr;
1876 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1877
1878 {
1879 DF opval = GET_H_DR (FLD (f_dest));
1880 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)), opval);
1881 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1882 }
1883
1884#undef FLD
1885}
1886 NEXT (vpc);
1887
1888 CASE (sem, INSN_FSTP) : /* fst.p $rm, $disp10x8, $fpf */
1889{
1890 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1891 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1892#define FLD(f) abuf->fields.sfmt_fldd.f
1893 int UNUSED written = 0;
1894 IADDR UNUSED pc = abuf->addr;
1895 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1896
1897{
cbb38b47 1898 {
c7e628df
DB
1899 SF opval = GET_H_FP (FLD (f_dest));
1900 SET_H_FP (FLD (f_dest), opval);
1901 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
cbb38b47 1902 }
c7e628df 1903sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest));
cbb38b47
BE
1904}
1905
1906#undef FLD
1907}
1908 NEXT (vpc);
1909
1910 CASE (sem, INSN_FSTS) : /* fst.s $rm, $disp10x4, $frf */
1911{
1912 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1913 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1914#define FLD(f) abuf->fields.sfmt_flds.f
1915 int UNUSED written = 0;
1916 IADDR UNUSED pc = abuf->addr;
1917 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1918
1919 {
1920 SF opval = CPU (h_fr[FLD (f_dest)]);
1921 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)), opval);
1922 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1923 }
1924
1925#undef FLD
1926}
1927 NEXT (vpc);
1928
1929 CASE (sem, INSN_FSTXD) : /* fstx.d $rm, $rn, $drf */
1930{
1931 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1932 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1933#define FLD(f) abuf->fields.sfmt_add.f
1934 int UNUSED written = 0;
1935 IADDR UNUSED pc = abuf->addr;
1936 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1937
1938 {
1939 DF opval = GET_H_DR (FLD (f_dest));
1940 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1941 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1942 }
1943
1944#undef FLD
1945}
1946 NEXT (vpc);
1947
1948 CASE (sem, INSN_FSTXP) : /* fstx.p $rm, $rn, $fpf */
1949{
1950 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1951 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1952#define FLD(f) abuf->fields.sfmt_add.f
1953 int UNUSED written = 0;
1954 IADDR UNUSED pc = abuf->addr;
1955 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1956
1957{
cbb38b47 1958 {
c7e628df
DB
1959 SF opval = GET_H_FP (FLD (f_dest));
1960 SET_H_FP (FLD (f_dest), opval);
1961 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval);
cbb38b47 1962 }
c7e628df 1963sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest));
cbb38b47
BE
1964}
1965
1966#undef FLD
1967}
1968 NEXT (vpc);
1969
1970 CASE (sem, INSN_FSTXS) : /* fstx.s $rm, $rn, $frf */
1971{
1972 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1973 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1974#define FLD(f) abuf->fields.sfmt_add.f
1975 int UNUSED written = 0;
1976 IADDR UNUSED pc = abuf->addr;
1977 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1978
1979 {
1980 SF opval = CPU (h_fr[FLD (f_dest)]);
1981 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1982 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1983 }
1984
1985#undef FLD
1986}
1987 NEXT (vpc);
1988
1989 CASE (sem, INSN_FSUBD) : /* fsub.d $drg, $drh, $drf */
1990{
1991 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1992 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1993#define FLD(f) abuf->fields.sfmt_add.f
1994 int UNUSED written = 0;
1995 IADDR UNUSED pc = abuf->addr;
1996 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1997
1998 {
1999 DF opval = sh64_fsubd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
2000 SET_H_DR (FLD (f_dest), opval);
1bbd6057 2001 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 2020 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 2039 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 2058 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 2077 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 2096 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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
c7e628df
DB
2112{
2113 {
2114 SF opval = GET_H_FMTX (FLD (f_left));
2115 SET_H_FMTX (FLD (f_left), opval);
2116 TRACE_RESULT (current_cpu, abuf, "fmtx", 'f', opval);
2117 }
2118 {
2119 SF opval = GET_H_FV (FLD (f_right));
2120 SET_H_FV (FLD (f_right), opval);
2121 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
2122 }
2123 {
2124 SF opval = GET_H_FV (FLD (f_dest));
2125 SET_H_FV (FLD (f_dest), opval);
2126 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval);
2127 }
cbb38b47 2128sh64_ftrvs (current_cpu, FLD (f_left), FLD (f_right), FLD (f_dest));
c7e628df 2129}
cbb38b47
BE
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);
c7e628df 2139#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
2140 int UNUSED written = 0;
2141 IADDR UNUSED pc = abuf->addr;
2142 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2143
c7e628df
DB
2144{
2145 SI tmp_address;
2146 tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
cbb38b47 2147((void) 0); /*nop*/
c7e628df
DB
2148 {
2149 DI opval = GETMEMSI (current_cpu, pc, tmp_address);
2150 SET_H_GR (FLD (f_dest), opval);
2151 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2152 }
2153}
cbb38b47
BE
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);
1bbd6057 2171 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2190 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
c7e628df 2201#define FLD(f) abuf->fields.sfmt_xori.f
cbb38b47
BE
2202 int UNUSED written = 0;
2203 IADDR UNUSED pc = abuf->addr;
2204 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2205
c7e628df
DB
2206{
2207 {
2208 DI opval = GET_H_GR (FLD (f_left));
2209 SET_H_GR (FLD (f_left), opval);
2210 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2211 }
cbb38b47 2212((void) 0); /*nop*/
c7e628df 2213}
cbb38b47
BE
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);
1bbd6057 2231 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2250 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2269 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2288 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2307 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2326 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
c7e628df 2337#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
2338 int UNUSED written = 0;
2339 IADDR UNUSED pc = abuf->addr;
2340 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2341
1bbd6057
JR
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 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 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 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2385 }
2386}
2387}
2388}
2389}
cbb38b47 2390
1bbd6057 2391 abuf->written = written;
cbb38b47
BE
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);
c7e628df 2400#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
2401 int UNUSED written = 0;
2402 IADDR UNUSED pc = abuf->addr;
2403 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2404
1bbd6057
JR
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 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 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 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2454 }
2455}
2456}
2457}
2458}
cbb38b47 2459
1bbd6057 2460 abuf->written = written;
cbb38b47
BE
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);
c7e628df 2469#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
2470 int UNUSED written = 0;
2471 IADDR UNUSED pc = abuf->addr;
2472 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2473
1bbd6057
JR
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 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 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 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2517 }
2518}
2519}
2520}
2521}
cbb38b47 2522
1bbd6057 2523 abuf->written = written;
cbb38b47
BE
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);
c7e628df 2532#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
2533 int UNUSED written = 0;
2534 IADDR UNUSED pc = abuf->addr;
2535 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2536
1bbd6057
JR
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 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 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 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2586 }
2587}
2588}
2589}
2590}
cbb38b47 2591
1bbd6057 2592 abuf->written = written;
cbb38b47
BE
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);
1bbd6057 2609 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2628 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2647 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2666 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2685 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2704 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2728 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2757 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2782 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2811 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
2833 {
2834 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2835 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2836 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 2873 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 2902 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2939 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2964 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2993 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3018 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3055 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3084 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3104 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 3132 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 3169 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 3206 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3227 tmp_count = MULQI (8, 1);
cbb38b47
BE
3228 tmp_mask = SLLDI (INVSI (0), tmp_count);
3229 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3230 tmp_count = MULQI (8, SUBQI (8, 1));
cbb38b47
BE
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);
1bbd6057 3235 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3256 tmp_count = MULQI (8, 2);
cbb38b47
BE
3257 tmp_mask = SLLDI (INVSI (0), tmp_count);
3258 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3259 tmp_count = MULQI (8, SUBQI (8, 2));
cbb38b47
BE
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);
1bbd6057 3264 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3285 tmp_count = MULQI (8, 3);
cbb38b47
BE
3286 tmp_mask = SLLDI (INVSI (0), tmp_count);
3287 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3288 tmp_count = MULQI (8, SUBQI (8, 3));
cbb38b47
BE
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);
1bbd6057 3293 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3314 tmp_count = MULQI (8, 4);
cbb38b47
BE
3315 tmp_mask = SLLDI (INVSI (0), tmp_count);
3316 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3317 tmp_count = MULQI (8, SUBQI (8, 4));
cbb38b47
BE
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);
1bbd6057 3322 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3343 tmp_count = MULQI (8, 5);
cbb38b47
BE
3344 tmp_mask = SLLDI (INVSI (0), tmp_count);
3345 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3346 tmp_count = MULQI (8, SUBQI (8, 5));
cbb38b47
BE
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);
1bbd6057 3351 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3372 tmp_count = MULQI (8, 6);
cbb38b47
BE
3373 tmp_mask = SLLDI (INVSI (0), tmp_count);
3374 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3375 tmp_count = MULQI (8, SUBQI (8, 6));
cbb38b47
BE
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);
1bbd6057 3380 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3401 tmp_count = MULQI (8, 7);
cbb38b47
BE
3402 tmp_mask = SLLDI (INVSI (0), tmp_count);
3403 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3404 tmp_count = MULQI (8, SUBQI (8, 7));
cbb38b47
BE
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);
1bbd6057 3409 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
3438 {
3439 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3440 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3441 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
3470 {
3471 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3472 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3473 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3498 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3527 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
cbb38b47 3548 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
1bbd6057
JR
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)))));
cbb38b47
BE
3552 {
3553 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3554 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3555 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
cbb38b47 3578 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 3589 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
cbb38b47 3614 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 3625 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)));
cbb38b47
BE
3647 {
3648 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3649 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3650 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)));
cbb38b47
BE
3672 {
3673 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3674 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3675 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3701 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3721 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3743 tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 255);
cbb38b47
BE
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);
1bbd6057 3751 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 3770 tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)));
cbb38b47
BE
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);
1bbd6057 3781 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
3803 {
3804 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3805 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3806 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 3835 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3860 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3889 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 3909 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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);
cbb38b47
BE
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);
1bbd6057 3945 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
3965 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0);
3966 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0);
cbb38b47
BE
3967 {
3968 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3969 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3970 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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);
cbb38b47
BE
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);
1bbd6057 3999 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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);
cbb38b47
BE
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);
1bbd6057 4036 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
4056 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1);
4057 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1);
cbb38b47
BE
4058 {
4059 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4060 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4061 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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);
cbb38b47
BE
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);
1bbd6057 4090 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4115 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4144 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4169 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4198 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4223 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4252 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
4274 {
4275 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4276 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4277 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 4314 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057
JR
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)))));
cbb38b47
BE
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);
1bbd6057 4351 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4371 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4390 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
2310652a 4401#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
1bbd6057 4424 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
c7e628df 4435#define FLD(f) abuf->fields.sfmt_xori.f
cbb38b47
BE
4436 int UNUSED written = 0;
4437 IADDR UNUSED pc = abuf->addr;
4438 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4439
c7e628df
DB
4440{
4441 {
4442 DI opval = GET_H_GR (FLD (f_left));
4443 SET_H_GR (FLD (f_left), opval);
4444 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4445 }
cbb38b47 4446((void) 0); /*nop*/
c7e628df 4447}
cbb38b47
BE
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);
c7e628df 4457#define FLD(f) abuf->fields.sfmt_xori.f
cbb38b47
BE
4458 int UNUSED written = 0;
4459 IADDR UNUSED pc = abuf->addr;
4460 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4461
c7e628df
DB
4462{
4463 {
4464 DI opval = GET_H_GR (FLD (f_left));
4465 SET_H_GR (FLD (f_left), opval);
4466 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4467 }
cbb38b47 4468((void) 0); /*nop*/
c7e628df 4469}
cbb38b47
BE
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);
c7e628df 4479#define FLD(f) abuf->fields.sfmt_xori.f
cbb38b47
BE
4480 int UNUSED written = 0;
4481 IADDR UNUSED pc = abuf->addr;
4482 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4483
c7e628df
DB
4484{
4485 {
4486 DI opval = GET_H_GR (FLD (f_left));
4487 SET_H_GR (FLD (f_left), opval);
4488 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4489 }
cbb38b47 4490((void) 0); /*nop*/
c7e628df 4491}
cbb38b47
BE
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);
1bbd6057 4509 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4528 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
c7e628df 4539#define FLD(f) abuf->fields.sfmt_xori.f
cbb38b47
BE
4540 int UNUSED written = 0;
4541 IADDR UNUSED pc = abuf->addr;
4542 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4543
c7e628df
DB
4544{
4545 {
4546 DI opval = GET_H_GR (FLD (f_left));
4547 SET_H_GR (FLD (f_left), opval);
4548 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4549 }
cbb38b47 4550((void) 0); /*nop*/
c7e628df 4551}
cbb38b47
BE
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
c7e628df
DB
4566{
4567((void) 0); /*nop*/
cbb38b47
BE
4568 {
4569 DI opval = ADDSI (FLD (f_disp16), 1);
4570 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4571 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47 4572 }
c7e628df 4573}
cbb38b47
BE
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
c7e628df
DB
4588{
4589((void) 0); /*nop*/
cbb38b47
BE
4590 {
4591 DI opval = GET_H_GR (FLD (f_right));
4592 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4593 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47 4594 }
c7e628df 4595}
cbb38b47
BE
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
c7e628df
DB
4610{
4611((void) 0); /*nop*/
cbb38b47
BE
4612 {
4613 DI opval = FLD (f_disp16);
4614 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4615 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47 4616 }
c7e628df 4617}
cbb38b47
BE
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
c7e628df
DB
4632{
4633((void) 0); /*nop*/
cbb38b47
BE
4634 {
4635 DI opval = ADDDI (pc, GET_H_GR (FLD (f_right)));
4636 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4637 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47 4638 }
c7e628df 4639}
cbb38b47
BE
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);
c7e628df 4649#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
4650 int UNUSED written = 0;
4651 IADDR UNUSED pc = abuf->addr;
4652 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4653
c7e628df
DB
4654{
4655 SI tmp_address;
4656 tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
cbb38b47 4657((void) 0); /*nop*/
c7e628df
DB
4658 {
4659 SI opval = GET_H_GR (FLD (f_dest));
4660 SETMEMSI (current_cpu, pc, tmp_address, opval);
4661 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4662 }
4663}
cbb38b47
BE
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);
1bbd6057 4681 TRACE_RESULT (current_cpu, abuf, "cr", 'D', opval);
cbb38b47
BE
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);
2310652a 4692#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
1bbd6057 4715 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4734 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4753 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4772 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4791 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4810 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4829 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4848 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4867 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4886 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4905 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4924 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 4943 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
2310652a 4954#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
4955 int UNUSED written = 0;
4956 IADDR UNUSED pc = abuf->addr;
4957 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4958
4959((void) 0); /*nop*/
4960
4961#undef FLD
4962}
4963 NEXT (vpc);
4964
4965 CASE (sem, INSN_STB) : /* st.b $rm, $disp10, $rd */
4966{
4967 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4968 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4969#define FLD(f) abuf->fields.sfmt_addi.f
4970 int UNUSED written = 0;
4971 IADDR UNUSED pc = abuf->addr;
4972 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4973
4974 {
4975 UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255);
4976 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval);
4977 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4978 }
4979
4980#undef FLD
4981}
4982 NEXT (vpc);
4983
4984 CASE (sem, INSN_STL) : /* st.l $rm, $disp10x4, $rd */
4985{
4986 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4987 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4988#define FLD(f) abuf->fields.sfmt_flds.f
4989 int UNUSED written = 0;
4990 IADDR UNUSED pc = abuf->addr;
4991 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4992
4993 {
4994 SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff);
4995 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval);
4996 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4997 }
4998
4999#undef FLD
5000}
5001 NEXT (vpc);
5002
5003 CASE (sem, INSN_STQ) : /* st.q $rm, $disp10x8, $rd */
5004{
5005 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5006 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5007#define FLD(f) abuf->fields.sfmt_fldd.f
5008 int UNUSED written = 0;
5009 IADDR UNUSED pc = abuf->addr;
5010 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5011
5012 {
5013 DI opval = GET_H_GR (FLD (f_dest));
5014 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval);
5015 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5016 }
5017
5018#undef FLD
5019}
5020 NEXT (vpc);
5021
5022 CASE (sem, INSN_STW) : /* st.w $rm, $disp10x2, $rd */
5023{
5024 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5025 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5026#define FLD(f) abuf->fields.sfmt_lduw.f
5027 int UNUSED written = 0;
5028 IADDR UNUSED pc = abuf->addr;
5029 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5030
5031 {
5032 HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535);
5033 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval);
5034 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5035 }
5036
5037#undef FLD
5038}
5039 NEXT (vpc);
5040
5041 CASE (sem, INSN_STHIL) : /* sthi.l $rm, $disp6, $rd */
5042{
5043 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5044 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
c7e628df 5045#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
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);
1bbd6057
JR
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 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5062 }
5063} else {
cbb38b47 5064if (GET_H_ENDIAN ()) {
1bbd6057 5065{
cbb38b47 5066 tmp_val = GET_H_GR (FLD (f_dest));
1bbd6057 5067if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5068{
5069 {
5070 UQI opval = ANDQI (tmp_val, 255);
5071 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5072 written |= (1 << 6);
cbb38b47
BE
5073 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5074 }
5075 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5076}
5077}
1bbd6057 5078if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5079{
5080 {
1bbd6057
JR
5081 HI opval = ANDHI (tmp_val, 65535);
5082 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
cbb38b47
BE
5083 written |= (1 << 4);
5084 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5085 }
1bbd6057
JR
5086 tmp_val = SRLDI (tmp_val, 16);
5087}
cbb38b47
BE
5088}
5089}
1bbd6057
JR
5090} else {
5091{
5092 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
5093if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5094{
5095 {
1bbd6057
JR
5096 HI opval = ANDHI (tmp_val, 65535);
5097 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
cbb38b47
BE
5098 written |= (1 << 4);
5099 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5100 }
1bbd6057 5101 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5102}
5103}
1bbd6057 5104if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5105{
5106 {
5107 UQI opval = ANDQI (tmp_val, 255);
5108 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5109 written |= (1 << 6);
cbb38b47
BE
5110 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5111 }
5112 tmp_val = SRLDI (tmp_val, 8);
1bbd6057
JR
5113}
5114}
5115}
cbb38b47
BE
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);
c7e628df 5129#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
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);
1bbd6057
JR
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 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5146 }
5147} else {
cbb38b47 5148if (GET_H_ENDIAN ()) {
1bbd6057 5149{
cbb38b47 5150 tmp_val = GET_H_GR (FLD (f_dest));
1bbd6057 5151if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5152{
5153 {
5154 UQI opval = ANDQI (tmp_val, 255);
5155 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5156 written |= (1 << 7);
cbb38b47
BE
5157 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5158 }
5159 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5160}
5161}
1bbd6057 5162if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5163{
5164 {
1bbd6057
JR
5165 HI opval = ANDHI (tmp_val, 65535);
5166 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5167 written |= (1 << 5);
cbb38b47
BE
5168 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5169 }
1bbd6057 5170 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5171}
5172}
1bbd6057 5173if (ANDQI (tmp_bytecount, 4)) {
cbb38b47
BE
5174{
5175 {
1bbd6057
JR
5176 SI opval = ANDSI (tmp_val, 0xffffffff);
5177 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5178 written |= (1 << 6);
cbb38b47
BE
5179 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5180 }
1bbd6057
JR
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 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5195 }
5196 tmp_val = SRLDI (tmp_val, 32);
cbb38b47
BE
5197}
5198}
1bbd6057
JR
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 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5206 }
5207 tmp_val = SRLDI (tmp_val, 16);
5208}
5209}
5210if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5211{
5212 {
5213 UQI opval = ANDQI (tmp_val, 255);
5214 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5215 written |= (1 << 7);
cbb38b47
BE
5216 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5217 }
5218 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5219}
5220}
1bbd6057
JR
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);
c7e628df 5235#define FLD(f) abuf->fields.sfmt_getcfg.f
1bbd6057
JR
5236 int UNUSED written = 0;
5237 IADDR UNUSED pc = abuf->addr;
5238 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5239
cbb38b47 5240{
1bbd6057
JR
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)) {
cbb38b47 5247 {
1bbd6057
JR
5248 USI opval = GET_H_GR (FLD (f_dest));
5249 SETMEMUSI (current_cpu, pc, tmp_addr, opval);
5250 written |= (1 << 6);
5251 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5252 }
5253} else {
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);
cbb38b47
BE
5262 written |= (1 << 4);
5263 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5264 }
1bbd6057 5265 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5266}
5267}
1bbd6057 5268if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5269{
5270 {
5271 UQI opval = ANDQI (tmp_val, 255);
5272 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5273 written |= (1 << 5);
cbb38b47
BE
5274 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5275 }
5276 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5277}
5278}
1bbd6057
JR
5279}
5280} else {
5281{
5282 tmp_val = GET_H_GR (FLD (f_dest));
5283if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5284{
5285 {
5286 UQI opval = ANDQI (tmp_val, 255);
5287 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5288 written |= (1 << 5);
cbb38b47
BE
5289 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5290 }
5291 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5292}
5293}
1bbd6057 5294if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5295{
5296 {
1bbd6057
JR
5297 UHI opval = ANDHI (tmp_val, 65535);
5298 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
cbb38b47
BE
5299 written |= (1 << 4);
5300 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5301 }
1bbd6057
JR
5302 tmp_val = SRLDI (tmp_val, 16);
5303}
5304}
5305}
cbb38b47
BE
5306}
5307}
5308}
5309
5310 abuf->written = written;
5311#undef FLD
5312}
5313 NEXT (vpc);
5314
1bbd6057 5315 CASE (sem, INSN_STLOQ) : /* stlo.q $rm, $disp6, $rd */
cbb38b47
BE
5316{
5317 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5318 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
c7e628df 5319#define FLD(f) abuf->fields.sfmt_getcfg.f
cbb38b47
BE
5320 int UNUSED written = 0;
5321 IADDR UNUSED pc = abuf->addr;
5322 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5323
1bbd6057
JR
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 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 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5348 }
5349 tmp_val = SRLDI (tmp_val, 32);
cbb38b47 5350}
1bbd6057
JR
5351}
5352if (ANDQI (tmp_bytecount, 2)) {
cbb38b47 5353{
1bbd6057
JR
5354 {
5355 UHI opval = ANDHI (tmp_val, 65535);
5356 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5357 written |= (1 << 5);
5358 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5359 }
5360 tmp_val = SRLDI (tmp_val, 16);
5361}
5362}
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 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 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 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 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5407 }
5408 tmp_val = SRLDI (tmp_val, 32);
5409}
5410}
5411}
5412}
5413}
5414}
cbb38b47 5415
1bbd6057 5416 abuf->written = written;
cbb38b47
BE
5417#undef FLD
5418}
5419 NEXT (vpc);
5420
5421 CASE (sem, INSN_STXB) : /* stx.b $rm, $rn, $rd */
5422{
5423 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5424 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5425#define FLD(f) abuf->fields.sfmt_add.f
5426 int UNUSED written = 0;
5427 IADDR UNUSED pc = abuf->addr;
5428 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5429
5430 {
5431 UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7);
5432 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5433 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5434 }
5435
5436#undef FLD
5437}
5438 NEXT (vpc);
5439
5440 CASE (sem, INSN_STXL) : /* stx.l $rm, $rn, $rd */
5441{
5442 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5444#define FLD(f) abuf->fields.sfmt_add.f
5445 int UNUSED written = 0;
5446 IADDR UNUSED pc = abuf->addr;
5447 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5448
5449 {
5450 SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
5451 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5452 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5453 }
5454
5455#undef FLD
5456}
5457 NEXT (vpc);
5458
5459 CASE (sem, INSN_STXQ) : /* stx.q $rm, $rn, $rd */
5460{
5461 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5462 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5463#define FLD(f) abuf->fields.sfmt_add.f
5464 int UNUSED written = 0;
5465 IADDR UNUSED pc = abuf->addr;
5466 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5467
5468 {
5469 DI opval = GET_H_GR (FLD (f_dest));
5470 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5471 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5472 }
5473
5474#undef FLD
5475}
5476 NEXT (vpc);
5477
5478 CASE (sem, INSN_STXW) : /* stx.w $rm, $rn, $rd */
5479{
5480 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5481 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5482#define FLD(f) abuf->fields.sfmt_add.f
5483 int UNUSED written = 0;
5484 IADDR UNUSED pc = abuf->addr;
5485 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5486
5487 {
5488 HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3);
5489 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5490 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5491 }
5492
5493#undef FLD
5494}
5495 NEXT (vpc);
5496
5497 CASE (sem, INSN_SUB) : /* sub $rm, $rn, $rd */
5498{
5499 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5500 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5501#define FLD(f) abuf->fields.sfmt_add.f
5502 int UNUSED written = 0;
5503 IADDR UNUSED pc = abuf->addr;
5504 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5505
5506 {
5507 DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5508 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5509 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 5528 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
5529 }
5530
5531#undef FLD
5532}
5533 NEXT (vpc);
5534
5535 CASE (sem, INSN_SWAPQ) : /* swap.q $rm, $rn, $rd */
5536{
5537 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5538 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5539#define FLD(f) abuf->fields.sfmt_add.f
5540 int UNUSED written = 0;
5541 IADDR UNUSED pc = abuf->addr;
5542 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5543
5544{
5545 DI tmp_addr;
5546 DI tmp_temp;
5547 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5548 tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr);
5549 {
5550 DI opval = GET_H_GR (FLD (f_dest));
5551 SETMEMDI (current_cpu, pc, tmp_addr, opval);
5552 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5553 }
5554 {
5555 DI opval = tmp_temp;
5556 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5557 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
2310652a 5569#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
2310652a 5584#define FLD(f) abuf->fields.sfmt_empty.f
cbb38b47
BE
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);
1bbd6057 5622 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 5641 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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 */