]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/sh64/sem-compact-switch.c
This commit was generated by cvs2svn to track changes on a CVS vendor
[thirdparty/binutils-gdb.git] / sim / sh64 / sem-compact-switch.c
1 /* Simulator instruction semantics for sh64.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
6
7 This file is part of the GNU Simulators.
8
9 This program 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 2, or (at your option)
12 any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 */
24
25 #ifdef DEFINE_LABELS
26
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
30
31 static struct {
32 int index;
33 void *label;
34 } labels[] = {
35 { SH64_COMPACT_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36 { SH64_COMPACT_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37 { SH64_COMPACT_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38 { SH64_COMPACT_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39 { SH64_COMPACT_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40 { SH64_COMPACT_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41 { SH64_COMPACT_INSN_ADD_COMPACT, && case_sem_INSN_ADD_COMPACT },
42 { SH64_COMPACT_INSN_ADDI_COMPACT, && case_sem_INSN_ADDI_COMPACT },
43 { SH64_COMPACT_INSN_ADDC_COMPACT, && case_sem_INSN_ADDC_COMPACT },
44 { SH64_COMPACT_INSN_ADDV_COMPACT, && case_sem_INSN_ADDV_COMPACT },
45 { SH64_COMPACT_INSN_AND_COMPACT, && case_sem_INSN_AND_COMPACT },
46 { SH64_COMPACT_INSN_ANDI_COMPACT, && case_sem_INSN_ANDI_COMPACT },
47 { SH64_COMPACT_INSN_ANDB_COMPACT, && case_sem_INSN_ANDB_COMPACT },
48 { SH64_COMPACT_INSN_BF_COMPACT, && case_sem_INSN_BF_COMPACT },
49 { SH64_COMPACT_INSN_BFS_COMPACT, && case_sem_INSN_BFS_COMPACT },
50 { SH64_COMPACT_INSN_BRA_COMPACT, && case_sem_INSN_BRA_COMPACT },
51 { SH64_COMPACT_INSN_BRAF_COMPACT, && case_sem_INSN_BRAF_COMPACT },
52 { SH64_COMPACT_INSN_BRK_COMPACT, && case_sem_INSN_BRK_COMPACT },
53 { SH64_COMPACT_INSN_BSR_COMPACT, && case_sem_INSN_BSR_COMPACT },
54 { SH64_COMPACT_INSN_BSRF_COMPACT, && case_sem_INSN_BSRF_COMPACT },
55 { SH64_COMPACT_INSN_BT_COMPACT, && case_sem_INSN_BT_COMPACT },
56 { SH64_COMPACT_INSN_BTS_COMPACT, && case_sem_INSN_BTS_COMPACT },
57 { SH64_COMPACT_INSN_CLRMAC_COMPACT, && case_sem_INSN_CLRMAC_COMPACT },
58 { SH64_COMPACT_INSN_CLRS_COMPACT, && case_sem_INSN_CLRS_COMPACT },
59 { SH64_COMPACT_INSN_CLRT_COMPACT, && case_sem_INSN_CLRT_COMPACT },
60 { SH64_COMPACT_INSN_CMPEQ_COMPACT, && case_sem_INSN_CMPEQ_COMPACT },
61 { SH64_COMPACT_INSN_CMPEQI_COMPACT, && case_sem_INSN_CMPEQI_COMPACT },
62 { SH64_COMPACT_INSN_CMPGE_COMPACT, && case_sem_INSN_CMPGE_COMPACT },
63 { SH64_COMPACT_INSN_CMPGT_COMPACT, && case_sem_INSN_CMPGT_COMPACT },
64 { SH64_COMPACT_INSN_CMPHI_COMPACT, && case_sem_INSN_CMPHI_COMPACT },
65 { SH64_COMPACT_INSN_CMPHS_COMPACT, && case_sem_INSN_CMPHS_COMPACT },
66 { SH64_COMPACT_INSN_CMPPL_COMPACT, && case_sem_INSN_CMPPL_COMPACT },
67 { SH64_COMPACT_INSN_CMPPZ_COMPACT, && case_sem_INSN_CMPPZ_COMPACT },
68 { SH64_COMPACT_INSN_CMPSTR_COMPACT, && case_sem_INSN_CMPSTR_COMPACT },
69 { SH64_COMPACT_INSN_DIV0S_COMPACT, && case_sem_INSN_DIV0S_COMPACT },
70 { SH64_COMPACT_INSN_DIV0U_COMPACT, && case_sem_INSN_DIV0U_COMPACT },
71 { SH64_COMPACT_INSN_DIV1_COMPACT, && case_sem_INSN_DIV1_COMPACT },
72 { SH64_COMPACT_INSN_DMULSL_COMPACT, && case_sem_INSN_DMULSL_COMPACT },
73 { SH64_COMPACT_INSN_DMULUL_COMPACT, && case_sem_INSN_DMULUL_COMPACT },
74 { SH64_COMPACT_INSN_DT_COMPACT, && case_sem_INSN_DT_COMPACT },
75 { SH64_COMPACT_INSN_EXTSB_COMPACT, && case_sem_INSN_EXTSB_COMPACT },
76 { SH64_COMPACT_INSN_EXTSW_COMPACT, && case_sem_INSN_EXTSW_COMPACT },
77 { SH64_COMPACT_INSN_EXTUB_COMPACT, && case_sem_INSN_EXTUB_COMPACT },
78 { SH64_COMPACT_INSN_EXTUW_COMPACT, && case_sem_INSN_EXTUW_COMPACT },
79 { SH64_COMPACT_INSN_FABS_COMPACT, && case_sem_INSN_FABS_COMPACT },
80 { SH64_COMPACT_INSN_FADD_COMPACT, && case_sem_INSN_FADD_COMPACT },
81 { SH64_COMPACT_INSN_FCMPEQ_COMPACT, && case_sem_INSN_FCMPEQ_COMPACT },
82 { SH64_COMPACT_INSN_FCMPGT_COMPACT, && case_sem_INSN_FCMPGT_COMPACT },
83 { SH64_COMPACT_INSN_FCNVDS_COMPACT, && case_sem_INSN_FCNVDS_COMPACT },
84 { SH64_COMPACT_INSN_FCNVSD_COMPACT, && case_sem_INSN_FCNVSD_COMPACT },
85 { SH64_COMPACT_INSN_FDIV_COMPACT, && case_sem_INSN_FDIV_COMPACT },
86 { SH64_COMPACT_INSN_FIPR_COMPACT, && case_sem_INSN_FIPR_COMPACT },
87 { SH64_COMPACT_INSN_FLDS_COMPACT, && case_sem_INSN_FLDS_COMPACT },
88 { SH64_COMPACT_INSN_FLDI0_COMPACT, && case_sem_INSN_FLDI0_COMPACT },
89 { SH64_COMPACT_INSN_FLDI1_COMPACT, && case_sem_INSN_FLDI1_COMPACT },
90 { SH64_COMPACT_INSN_FLOAT_COMPACT, && case_sem_INSN_FLOAT_COMPACT },
91 { SH64_COMPACT_INSN_FMAC_COMPACT, && case_sem_INSN_FMAC_COMPACT },
92 { SH64_COMPACT_INSN_FMOV1_COMPACT, && case_sem_INSN_FMOV1_COMPACT },
93 { SH64_COMPACT_INSN_FMOV2_COMPACT, && case_sem_INSN_FMOV2_COMPACT },
94 { SH64_COMPACT_INSN_FMOV3_COMPACT, && case_sem_INSN_FMOV3_COMPACT },
95 { SH64_COMPACT_INSN_FMOV4_COMPACT, && case_sem_INSN_FMOV4_COMPACT },
96 { SH64_COMPACT_INSN_FMOV5_COMPACT, && case_sem_INSN_FMOV5_COMPACT },
97 { SH64_COMPACT_INSN_FMOV6_COMPACT, && case_sem_INSN_FMOV6_COMPACT },
98 { SH64_COMPACT_INSN_FMOV7_COMPACT, && case_sem_INSN_FMOV7_COMPACT },
99 { SH64_COMPACT_INSN_FMUL_COMPACT, && case_sem_INSN_FMUL_COMPACT },
100 { SH64_COMPACT_INSN_FNEG_COMPACT, && case_sem_INSN_FNEG_COMPACT },
101 { SH64_COMPACT_INSN_FRCHG_COMPACT, && case_sem_INSN_FRCHG_COMPACT },
102 { SH64_COMPACT_INSN_FSCHG_COMPACT, && case_sem_INSN_FSCHG_COMPACT },
103 { SH64_COMPACT_INSN_FSQRT_COMPACT, && case_sem_INSN_FSQRT_COMPACT },
104 { SH64_COMPACT_INSN_FSTS_COMPACT, && case_sem_INSN_FSTS_COMPACT },
105 { SH64_COMPACT_INSN_FSUB_COMPACT, && case_sem_INSN_FSUB_COMPACT },
106 { SH64_COMPACT_INSN_FTRC_COMPACT, && case_sem_INSN_FTRC_COMPACT },
107 { SH64_COMPACT_INSN_FTRV_COMPACT, && case_sem_INSN_FTRV_COMPACT },
108 { SH64_COMPACT_INSN_JMP_COMPACT, && case_sem_INSN_JMP_COMPACT },
109 { SH64_COMPACT_INSN_JSR_COMPACT, && case_sem_INSN_JSR_COMPACT },
110 { SH64_COMPACT_INSN_LDC_COMPACT, && case_sem_INSN_LDC_COMPACT },
111 { SH64_COMPACT_INSN_LDCL_COMPACT, && case_sem_INSN_LDCL_COMPACT },
112 { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT, && case_sem_INSN_LDS_FPSCR_COMPACT },
113 { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT, && case_sem_INSN_LDSL_FPSCR_COMPACT },
114 { SH64_COMPACT_INSN_LDS_FPUL_COMPACT, && case_sem_INSN_LDS_FPUL_COMPACT },
115 { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT, && case_sem_INSN_LDSL_FPUL_COMPACT },
116 { SH64_COMPACT_INSN_LDS_MACH_COMPACT, && case_sem_INSN_LDS_MACH_COMPACT },
117 { SH64_COMPACT_INSN_LDSL_MACH_COMPACT, && case_sem_INSN_LDSL_MACH_COMPACT },
118 { SH64_COMPACT_INSN_LDS_MACL_COMPACT, && case_sem_INSN_LDS_MACL_COMPACT },
119 { SH64_COMPACT_INSN_LDSL_MACL_COMPACT, && case_sem_INSN_LDSL_MACL_COMPACT },
120 { SH64_COMPACT_INSN_LDS_PR_COMPACT, && case_sem_INSN_LDS_PR_COMPACT },
121 { SH64_COMPACT_INSN_LDSL_PR_COMPACT, && case_sem_INSN_LDSL_PR_COMPACT },
122 { SH64_COMPACT_INSN_MACL_COMPACT, && case_sem_INSN_MACL_COMPACT },
123 { SH64_COMPACT_INSN_MACW_COMPACT, && case_sem_INSN_MACW_COMPACT },
124 { SH64_COMPACT_INSN_MOV_COMPACT, && case_sem_INSN_MOV_COMPACT },
125 { SH64_COMPACT_INSN_MOVI_COMPACT, && case_sem_INSN_MOVI_COMPACT },
126 { SH64_COMPACT_INSN_MOVB1_COMPACT, && case_sem_INSN_MOVB1_COMPACT },
127 { SH64_COMPACT_INSN_MOVB2_COMPACT, && case_sem_INSN_MOVB2_COMPACT },
128 { SH64_COMPACT_INSN_MOVB3_COMPACT, && case_sem_INSN_MOVB3_COMPACT },
129 { SH64_COMPACT_INSN_MOVB4_COMPACT, && case_sem_INSN_MOVB4_COMPACT },
130 { SH64_COMPACT_INSN_MOVB5_COMPACT, && case_sem_INSN_MOVB5_COMPACT },
131 { SH64_COMPACT_INSN_MOVB6_COMPACT, && case_sem_INSN_MOVB6_COMPACT },
132 { SH64_COMPACT_INSN_MOVB7_COMPACT, && case_sem_INSN_MOVB7_COMPACT },
133 { SH64_COMPACT_INSN_MOVB8_COMPACT, && case_sem_INSN_MOVB8_COMPACT },
134 { SH64_COMPACT_INSN_MOVB9_COMPACT, && case_sem_INSN_MOVB9_COMPACT },
135 { SH64_COMPACT_INSN_MOVB10_COMPACT, && case_sem_INSN_MOVB10_COMPACT },
136 { SH64_COMPACT_INSN_MOVL1_COMPACT, && case_sem_INSN_MOVL1_COMPACT },
137 { SH64_COMPACT_INSN_MOVL2_COMPACT, && case_sem_INSN_MOVL2_COMPACT },
138 { SH64_COMPACT_INSN_MOVL3_COMPACT, && case_sem_INSN_MOVL3_COMPACT },
139 { SH64_COMPACT_INSN_MOVL4_COMPACT, && case_sem_INSN_MOVL4_COMPACT },
140 { SH64_COMPACT_INSN_MOVL5_COMPACT, && case_sem_INSN_MOVL5_COMPACT },
141 { SH64_COMPACT_INSN_MOVL6_COMPACT, && case_sem_INSN_MOVL6_COMPACT },
142 { SH64_COMPACT_INSN_MOVL7_COMPACT, && case_sem_INSN_MOVL7_COMPACT },
143 { SH64_COMPACT_INSN_MOVL8_COMPACT, && case_sem_INSN_MOVL8_COMPACT },
144 { SH64_COMPACT_INSN_MOVL9_COMPACT, && case_sem_INSN_MOVL9_COMPACT },
145 { SH64_COMPACT_INSN_MOVL10_COMPACT, && case_sem_INSN_MOVL10_COMPACT },
146 { SH64_COMPACT_INSN_MOVL11_COMPACT, && case_sem_INSN_MOVL11_COMPACT },
147 { SH64_COMPACT_INSN_MOVW1_COMPACT, && case_sem_INSN_MOVW1_COMPACT },
148 { SH64_COMPACT_INSN_MOVW2_COMPACT, && case_sem_INSN_MOVW2_COMPACT },
149 { SH64_COMPACT_INSN_MOVW3_COMPACT, && case_sem_INSN_MOVW3_COMPACT },
150 { SH64_COMPACT_INSN_MOVW4_COMPACT, && case_sem_INSN_MOVW4_COMPACT },
151 { SH64_COMPACT_INSN_MOVW5_COMPACT, && case_sem_INSN_MOVW5_COMPACT },
152 { SH64_COMPACT_INSN_MOVW6_COMPACT, && case_sem_INSN_MOVW6_COMPACT },
153 { SH64_COMPACT_INSN_MOVW7_COMPACT, && case_sem_INSN_MOVW7_COMPACT },
154 { SH64_COMPACT_INSN_MOVW8_COMPACT, && case_sem_INSN_MOVW8_COMPACT },
155 { SH64_COMPACT_INSN_MOVW9_COMPACT, && case_sem_INSN_MOVW9_COMPACT },
156 { SH64_COMPACT_INSN_MOVW10_COMPACT, && case_sem_INSN_MOVW10_COMPACT },
157 { SH64_COMPACT_INSN_MOVW11_COMPACT, && case_sem_INSN_MOVW11_COMPACT },
158 { SH64_COMPACT_INSN_MOVA_COMPACT, && case_sem_INSN_MOVA_COMPACT },
159 { SH64_COMPACT_INSN_MOVCAL_COMPACT, && case_sem_INSN_MOVCAL_COMPACT },
160 { SH64_COMPACT_INSN_MOVT_COMPACT, && case_sem_INSN_MOVT_COMPACT },
161 { SH64_COMPACT_INSN_MULL_COMPACT, && case_sem_INSN_MULL_COMPACT },
162 { SH64_COMPACT_INSN_MULSW_COMPACT, && case_sem_INSN_MULSW_COMPACT },
163 { SH64_COMPACT_INSN_MULUW_COMPACT, && case_sem_INSN_MULUW_COMPACT },
164 { SH64_COMPACT_INSN_NEG_COMPACT, && case_sem_INSN_NEG_COMPACT },
165 { SH64_COMPACT_INSN_NEGC_COMPACT, && case_sem_INSN_NEGC_COMPACT },
166 { SH64_COMPACT_INSN_NOP_COMPACT, && case_sem_INSN_NOP_COMPACT },
167 { SH64_COMPACT_INSN_NOT_COMPACT, && case_sem_INSN_NOT_COMPACT },
168 { SH64_COMPACT_INSN_OCBI_COMPACT, && case_sem_INSN_OCBI_COMPACT },
169 { SH64_COMPACT_INSN_OCBP_COMPACT, && case_sem_INSN_OCBP_COMPACT },
170 { SH64_COMPACT_INSN_OCBWB_COMPACT, && case_sem_INSN_OCBWB_COMPACT },
171 { SH64_COMPACT_INSN_OR_COMPACT, && case_sem_INSN_OR_COMPACT },
172 { SH64_COMPACT_INSN_ORI_COMPACT, && case_sem_INSN_ORI_COMPACT },
173 { SH64_COMPACT_INSN_ORB_COMPACT, && case_sem_INSN_ORB_COMPACT },
174 { SH64_COMPACT_INSN_PREF_COMPACT, && case_sem_INSN_PREF_COMPACT },
175 { SH64_COMPACT_INSN_ROTCL_COMPACT, && case_sem_INSN_ROTCL_COMPACT },
176 { SH64_COMPACT_INSN_ROTCR_COMPACT, && case_sem_INSN_ROTCR_COMPACT },
177 { SH64_COMPACT_INSN_ROTL_COMPACT, && case_sem_INSN_ROTL_COMPACT },
178 { SH64_COMPACT_INSN_ROTR_COMPACT, && case_sem_INSN_ROTR_COMPACT },
179 { SH64_COMPACT_INSN_RTS_COMPACT, && case_sem_INSN_RTS_COMPACT },
180 { SH64_COMPACT_INSN_SETS_COMPACT, && case_sem_INSN_SETS_COMPACT },
181 { SH64_COMPACT_INSN_SETT_COMPACT, && case_sem_INSN_SETT_COMPACT },
182 { SH64_COMPACT_INSN_SHAD_COMPACT, && case_sem_INSN_SHAD_COMPACT },
183 { SH64_COMPACT_INSN_SHAL_COMPACT, && case_sem_INSN_SHAL_COMPACT },
184 { SH64_COMPACT_INSN_SHAR_COMPACT, && case_sem_INSN_SHAR_COMPACT },
185 { SH64_COMPACT_INSN_SHLD_COMPACT, && case_sem_INSN_SHLD_COMPACT },
186 { SH64_COMPACT_INSN_SHLL_COMPACT, && case_sem_INSN_SHLL_COMPACT },
187 { SH64_COMPACT_INSN_SHLL2_COMPACT, && case_sem_INSN_SHLL2_COMPACT },
188 { SH64_COMPACT_INSN_SHLL8_COMPACT, && case_sem_INSN_SHLL8_COMPACT },
189 { SH64_COMPACT_INSN_SHLL16_COMPACT, && case_sem_INSN_SHLL16_COMPACT },
190 { SH64_COMPACT_INSN_SHLR_COMPACT, && case_sem_INSN_SHLR_COMPACT },
191 { SH64_COMPACT_INSN_SHLR2_COMPACT, && case_sem_INSN_SHLR2_COMPACT },
192 { SH64_COMPACT_INSN_SHLR8_COMPACT, && case_sem_INSN_SHLR8_COMPACT },
193 { SH64_COMPACT_INSN_SHLR16_COMPACT, && case_sem_INSN_SHLR16_COMPACT },
194 { SH64_COMPACT_INSN_STC_GBR_COMPACT, && case_sem_INSN_STC_GBR_COMPACT },
195 { SH64_COMPACT_INSN_STCL_GBR_COMPACT, && case_sem_INSN_STCL_GBR_COMPACT },
196 { SH64_COMPACT_INSN_STS_FPSCR_COMPACT, && case_sem_INSN_STS_FPSCR_COMPACT },
197 { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT, && case_sem_INSN_STSL_FPSCR_COMPACT },
198 { SH64_COMPACT_INSN_STS_FPUL_COMPACT, && case_sem_INSN_STS_FPUL_COMPACT },
199 { SH64_COMPACT_INSN_STSL_FPUL_COMPACT, && case_sem_INSN_STSL_FPUL_COMPACT },
200 { SH64_COMPACT_INSN_STS_MACH_COMPACT, && case_sem_INSN_STS_MACH_COMPACT },
201 { SH64_COMPACT_INSN_STSL_MACH_COMPACT, && case_sem_INSN_STSL_MACH_COMPACT },
202 { SH64_COMPACT_INSN_STS_MACL_COMPACT, && case_sem_INSN_STS_MACL_COMPACT },
203 { SH64_COMPACT_INSN_STSL_MACL_COMPACT, && case_sem_INSN_STSL_MACL_COMPACT },
204 { SH64_COMPACT_INSN_STS_PR_COMPACT, && case_sem_INSN_STS_PR_COMPACT },
205 { SH64_COMPACT_INSN_STSL_PR_COMPACT, && case_sem_INSN_STSL_PR_COMPACT },
206 { SH64_COMPACT_INSN_SUB_COMPACT, && case_sem_INSN_SUB_COMPACT },
207 { SH64_COMPACT_INSN_SUBC_COMPACT, && case_sem_INSN_SUBC_COMPACT },
208 { SH64_COMPACT_INSN_SUBV_COMPACT, && case_sem_INSN_SUBV_COMPACT },
209 { SH64_COMPACT_INSN_SWAPB_COMPACT, && case_sem_INSN_SWAPB_COMPACT },
210 { SH64_COMPACT_INSN_SWAPW_COMPACT, && case_sem_INSN_SWAPW_COMPACT },
211 { SH64_COMPACT_INSN_TASB_COMPACT, && case_sem_INSN_TASB_COMPACT },
212 { SH64_COMPACT_INSN_TRAPA_COMPACT, && case_sem_INSN_TRAPA_COMPACT },
213 { SH64_COMPACT_INSN_TST_COMPACT, && case_sem_INSN_TST_COMPACT },
214 { SH64_COMPACT_INSN_TSTI_COMPACT, && case_sem_INSN_TSTI_COMPACT },
215 { SH64_COMPACT_INSN_TSTB_COMPACT, && case_sem_INSN_TSTB_COMPACT },
216 { SH64_COMPACT_INSN_XOR_COMPACT, && case_sem_INSN_XOR_COMPACT },
217 { SH64_COMPACT_INSN_XORI_COMPACT, && case_sem_INSN_XORI_COMPACT },
218 { SH64_COMPACT_INSN_XORB_COMPACT, && case_sem_INSN_XORB_COMPACT },
219 { SH64_COMPACT_INSN_XTRCT_COMPACT, && case_sem_INSN_XTRCT_COMPACT },
220 { 0, 0 }
221 };
222 int i;
223
224 for (i = 0; labels[i].label != 0; ++i)
225 {
226 #if FAST_P
227 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
228 #else
229 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
230 #endif
231 }
232
233 #undef DEFINE_LABELS
234 #endif /* DEFINE_LABELS */
235
236 #ifdef DEFINE_SWITCH
237
238 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
239 off frills like tracing and profiling. */
240 /* FIXME: A better way would be to have TRACE_RESULT check for something
241 that can cause it to be optimized out. Another way would be to emit
242 special handlers into the instruction "stream". */
243
244 #if FAST_P
245 #undef TRACE_RESULT
246 #define TRACE_RESULT(cpu, abuf, name, type, val)
247 #endif
248
249 #undef GET_ATTR
250 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
251 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
252 #else
253 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
254 #endif
255
256 {
257
258 #if WITH_SCACHE_PBB
259
260 /* Branch to next handler without going around main loop. */
261 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
262 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
263
264 #else /* ! WITH_SCACHE_PBB */
265
266 #define NEXT(vpc) BREAK (sem)
267 #ifdef __GNUC__
268 #if FAST_P
269 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
270 #else
271 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
272 #endif
273 #else
274 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
275 #endif
276
277 #endif /* ! WITH_SCACHE_PBB */
278
279 {
280
281 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
282 {
283 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
284 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
285 #define FLD(f) abuf->fields.fmt_empty.f
286 int UNUSED written = 0;
287 IADDR UNUSED pc = abuf->addr;
288 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
289
290 {
291 /* Update the recorded pc in the cpu state struct.
292 Only necessary for WITH_SCACHE case, but to avoid the
293 conditional compilation .... */
294 SET_H_PC (pc);
295 /* Virtual insns have zero size. Overwrite vpc with address of next insn
296 using the default-insn-bitsize spec. When executing insns in parallel
297 we may want to queue the fault and continue execution. */
298 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
299 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
300 }
301
302 #undef FLD
303 }
304 NEXT (vpc);
305
306 CASE (sem, INSN_X_AFTER) : /* --after-- */
307 {
308 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
309 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
310 #define FLD(f) abuf->fields.fmt_empty.f
311 int UNUSED written = 0;
312 IADDR UNUSED pc = abuf->addr;
313 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
314
315 {
316 #if WITH_SCACHE_PBB_SH64_COMPACT
317 sh64_compact_pbb_after (current_cpu, sem_arg);
318 #endif
319 }
320
321 #undef FLD
322 }
323 NEXT (vpc);
324
325 CASE (sem, INSN_X_BEFORE) : /* --before-- */
326 {
327 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
328 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
329 #define FLD(f) abuf->fields.fmt_empty.f
330 int UNUSED written = 0;
331 IADDR UNUSED pc = abuf->addr;
332 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
333
334 {
335 #if WITH_SCACHE_PBB_SH64_COMPACT
336 sh64_compact_pbb_before (current_cpu, sem_arg);
337 #endif
338 }
339
340 #undef FLD
341 }
342 NEXT (vpc);
343
344 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
345 {
346 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
347 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
348 #define FLD(f) abuf->fields.fmt_empty.f
349 int UNUSED written = 0;
350 IADDR UNUSED pc = abuf->addr;
351 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
352
353 {
354 #if WITH_SCACHE_PBB_SH64_COMPACT
355 #ifdef DEFINE_SWITCH
356 vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
357 pbb_br_type, pbb_br_npc);
358 BREAK (sem);
359 #else
360 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
361 vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
362 CPU_PBB_BR_TYPE (current_cpu),
363 CPU_PBB_BR_NPC (current_cpu));
364 #endif
365 #endif
366 }
367
368 #undef FLD
369 }
370 NEXT (vpc);
371
372 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
373 {
374 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
375 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
376 #define FLD(f) abuf->fields.fmt_empty.f
377 int UNUSED written = 0;
378 IADDR UNUSED pc = abuf->addr;
379 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
380
381 {
382 #if WITH_SCACHE_PBB_SH64_COMPACT
383 vpc = sh64_compact_pbb_chain (current_cpu, sem_arg);
384 #ifdef DEFINE_SWITCH
385 BREAK (sem);
386 #endif
387 #endif
388 }
389
390 #undef FLD
391 }
392 NEXT (vpc);
393
394 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
395 {
396 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
397 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
398 #define FLD(f) abuf->fields.fmt_empty.f
399 int UNUSED written = 0;
400 IADDR UNUSED pc = abuf->addr;
401 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
402
403 {
404 #if WITH_SCACHE_PBB_SH64_COMPACT
405 #if defined DEFINE_SWITCH || defined FAST_P
406 /* In the switch case FAST_P is a constant, allowing several optimizations
407 in any called inline functions. */
408 vpc = sh64_compact_pbb_begin (current_cpu, FAST_P);
409 #else
410 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
411 vpc = sh64_compact_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
412 #else
413 vpc = sh64_compact_pbb_begin (current_cpu, 0);
414 #endif
415 #endif
416 #endif
417 }
418
419 #undef FLD
420 }
421 NEXT (vpc);
422
423 CASE (sem, INSN_ADD_COMPACT) : /* add $rm, $rn */
424 {
425 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
426 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
427 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
428 int UNUSED written = 0;
429 IADDR UNUSED pc = abuf->addr;
430 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
431
432 {
433 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
434 SET_H_GRC (FLD (f_rn), opval);
435 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
436 }
437
438 #undef FLD
439 }
440 NEXT (vpc);
441
442 CASE (sem, INSN_ADDI_COMPACT) : /* add #$imm8, $rn */
443 {
444 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
445 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
446 #define FLD(f) abuf->fields.sfmt_addi_compact.f
447 int UNUSED written = 0;
448 IADDR UNUSED pc = abuf->addr;
449 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
450
451 {
452 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
453 SET_H_GRC (FLD (f_rn), opval);
454 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
455 }
456
457 #undef FLD
458 }
459 NEXT (vpc);
460
461 CASE (sem, INSN_ADDC_COMPACT) : /* addc $rm, $rn */
462 {
463 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
464 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
465 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
466 int UNUSED written = 0;
467 IADDR UNUSED pc = abuf->addr;
468 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
469
470 {
471 BI tmp_flag;
472 tmp_flag = ADDCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
473 {
474 SI opval = ADDCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
475 SET_H_GRC (FLD (f_rn), opval);
476 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
477 }
478 {
479 BI opval = tmp_flag;
480 SET_H_TBIT (opval);
481 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
482 }
483 }
484
485 #undef FLD
486 }
487 NEXT (vpc);
488
489 CASE (sem, INSN_ADDV_COMPACT) : /* addv $rm, $rn */
490 {
491 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
492 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
493 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
494 int UNUSED written = 0;
495 IADDR UNUSED pc = abuf->addr;
496 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
497
498 {
499 BI tmp_t;
500 tmp_t = ADDOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
501 {
502 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
503 SET_H_GRC (FLD (f_rn), opval);
504 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
505 }
506 {
507 BI opval = tmp_t;
508 SET_H_TBIT (opval);
509 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
510 }
511 }
512
513 #undef FLD
514 }
515 NEXT (vpc);
516
517 CASE (sem, INSN_AND_COMPACT) : /* and $rm64, $rn64 */
518 {
519 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
520 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
521 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
522 int UNUSED written = 0;
523 IADDR UNUSED pc = abuf->addr;
524 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
525
526 {
527 DI opval = ANDDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
528 SET_H_GR (FLD (f_rn), opval);
529 TRACE_RESULT (current_cpu, abuf, "rn64", 'D', opval);
530 }
531
532 #undef FLD
533 }
534 NEXT (vpc);
535
536 CASE (sem, INSN_ANDI_COMPACT) : /* and #$uimm8, r0 */
537 {
538 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
539 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
540 #define FLD(f) abuf->fields.sfmt_addi_compact.f
541 int UNUSED written = 0;
542 IADDR UNUSED pc = abuf->addr;
543 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
544
545 {
546 SI opval = ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
547 SET_H_GRC (((UINT) 0), opval);
548 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
549 }
550
551 #undef FLD
552 }
553 NEXT (vpc);
554
555 CASE (sem, INSN_ANDB_COMPACT) : /* and.b #$imm8, @(r0, gbr) */
556 {
557 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
558 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
559 #define FLD(f) abuf->fields.sfmt_addi_compact.f
560 int UNUSED written = 0;
561 IADDR UNUSED pc = abuf->addr;
562 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
563
564 {
565 DI tmp_addr;
566 UQI tmp_data;
567 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
568 tmp_data = ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
569 {
570 UQI opval = tmp_data;
571 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
572 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
573 }
574 }
575
576 #undef FLD
577 }
578 NEXT (vpc);
579
580 CASE (sem, INSN_BF_COMPACT) : /* bf $disp8 */
581 {
582 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
583 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
584 #define FLD(f) abuf->fields.sfmt_bf_compact.f
585 int UNUSED written = 0;
586 IADDR UNUSED pc = abuf->addr;
587 SEM_BRANCH_INIT
588 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
589
590 if (NOTBI (GET_H_TBIT ())) {
591 {
592 UDI opval = FLD (i_disp8);
593 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
594 written |= (1 << 2);
595 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
596 }
597 }
598
599 abuf->written = written;
600 SEM_BRANCH_FINI (vpc);
601 #undef FLD
602 }
603 NEXT (vpc);
604
605 CASE (sem, INSN_BFS_COMPACT) : /* bf/s $disp8 */
606 {
607 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
608 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
609 #define FLD(f) abuf->fields.sfmt_bf_compact.f
610 int UNUSED written = 0;
611 IADDR UNUSED pc = abuf->addr;
612 SEM_BRANCH_INIT
613 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
614
615 if (NOTBI (GET_H_TBIT ())) {
616 {
617 {
618 UDI opval = FLD (i_disp8);
619 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
620 written |= (1 << 2);
621 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
622 }
623 }
624 }
625
626 abuf->written = written;
627 SEM_BRANCH_FINI (vpc);
628 #undef FLD
629 }
630 NEXT (vpc);
631
632 CASE (sem, INSN_BRA_COMPACT) : /* bra $disp12 */
633 {
634 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
635 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
636 #define FLD(f) abuf->fields.sfmt_bra_compact.f
637 int UNUSED written = 0;
638 IADDR UNUSED pc = abuf->addr;
639 SEM_BRANCH_INIT
640 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
641
642 {
643 {
644 UDI opval = FLD (i_disp12);
645 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
646 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
647 }
648 }
649
650 SEM_BRANCH_FINI (vpc);
651 #undef FLD
652 }
653 NEXT (vpc);
654
655 CASE (sem, INSN_BRAF_COMPACT) : /* braf $rn */
656 {
657 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
658 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
659 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
660 int UNUSED written = 0;
661 IADDR UNUSED pc = abuf->addr;
662 SEM_BRANCH_INIT
663 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
664
665 {
666 {
667 UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
668 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
669 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
670 }
671 }
672
673 SEM_BRANCH_FINI (vpc);
674 #undef FLD
675 }
676 NEXT (vpc);
677
678 CASE (sem, INSN_BRK_COMPACT) : /* brk */
679 {
680 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
681 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
682 #define FLD(f) abuf->fields.fmt_empty.f
683 int UNUSED written = 0;
684 IADDR UNUSED pc = abuf->addr;
685 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
686
687 sh64_break (current_cpu, pc);
688
689 #undef FLD
690 }
691 NEXT (vpc);
692
693 CASE (sem, INSN_BSR_COMPACT) : /* bsr $disp12 */
694 {
695 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
696 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
697 #define FLD(f) abuf->fields.sfmt_bra_compact.f
698 int UNUSED written = 0;
699 IADDR UNUSED pc = abuf->addr;
700 SEM_BRANCH_INIT
701 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
702
703 {
704 {
705 {
706 SI opval = ADDDI (pc, 4);
707 SET_H_PR (opval);
708 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
709 }
710 {
711 UDI opval = FLD (i_disp12);
712 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
713 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
714 }
715 }
716 }
717
718 SEM_BRANCH_FINI (vpc);
719 #undef FLD
720 }
721 NEXT (vpc);
722
723 CASE (sem, INSN_BSRF_COMPACT) : /* bsrf $rn */
724 {
725 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
726 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
727 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
728 int UNUSED written = 0;
729 IADDR UNUSED pc = abuf->addr;
730 SEM_BRANCH_INIT
731 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
732
733 {
734 {
735 {
736 SI opval = ADDDI (pc, 4);
737 SET_H_PR (opval);
738 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
739 }
740 {
741 UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
742 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
743 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
744 }
745 }
746 }
747
748 SEM_BRANCH_FINI (vpc);
749 #undef FLD
750 }
751 NEXT (vpc);
752
753 CASE (sem, INSN_BT_COMPACT) : /* bt $disp8 */
754 {
755 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
756 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
757 #define FLD(f) abuf->fields.sfmt_bf_compact.f
758 int UNUSED written = 0;
759 IADDR UNUSED pc = abuf->addr;
760 SEM_BRANCH_INIT
761 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
762
763 if (GET_H_TBIT ()) {
764 {
765 UDI opval = FLD (i_disp8);
766 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
767 written |= (1 << 2);
768 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
769 }
770 }
771
772 abuf->written = written;
773 SEM_BRANCH_FINI (vpc);
774 #undef FLD
775 }
776 NEXT (vpc);
777
778 CASE (sem, INSN_BTS_COMPACT) : /* bt/s $disp8 */
779 {
780 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
781 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
782 #define FLD(f) abuf->fields.sfmt_bf_compact.f
783 int UNUSED written = 0;
784 IADDR UNUSED pc = abuf->addr;
785 SEM_BRANCH_INIT
786 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
787
788 if (GET_H_TBIT ()) {
789 {
790 {
791 UDI opval = FLD (i_disp8);
792 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
793 written |= (1 << 2);
794 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
795 }
796 }
797 }
798
799 abuf->written = written;
800 SEM_BRANCH_FINI (vpc);
801 #undef FLD
802 }
803 NEXT (vpc);
804
805 CASE (sem, INSN_CLRMAC_COMPACT) : /* clrmac */
806 {
807 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
808 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
809 #define FLD(f) abuf->fields.fmt_empty.f
810 int UNUSED written = 0;
811 IADDR UNUSED pc = abuf->addr;
812 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
813
814 {
815 {
816 SI opval = 0;
817 SET_H_MACL (opval);
818 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
819 }
820 {
821 SI opval = 0;
822 SET_H_MACH (opval);
823 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
824 }
825 }
826
827 #undef FLD
828 }
829 NEXT (vpc);
830
831 CASE (sem, INSN_CLRS_COMPACT) : /* clrs */
832 {
833 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
834 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
835 #define FLD(f) abuf->fields.fmt_empty.f
836 int UNUSED written = 0;
837 IADDR UNUSED pc = abuf->addr;
838 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
839
840 {
841 BI opval = 0;
842 SET_H_SBIT (opval);
843 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
844 }
845
846 #undef FLD
847 }
848 NEXT (vpc);
849
850 CASE (sem, INSN_CLRT_COMPACT) : /* clrt */
851 {
852 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
853 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
854 #define FLD(f) abuf->fields.fmt_empty.f
855 int UNUSED written = 0;
856 IADDR UNUSED pc = abuf->addr;
857 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
858
859 {
860 BI opval = 0;
861 SET_H_TBIT (opval);
862 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
863 }
864
865 #undef FLD
866 }
867 NEXT (vpc);
868
869 CASE (sem, INSN_CMPEQ_COMPACT) : /* cmp/eq $rm, $rn */
870 {
871 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
872 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
873 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
874 int UNUSED written = 0;
875 IADDR UNUSED pc = abuf->addr;
876 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
877
878 {
879 BI opval = EQSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
880 SET_H_TBIT (opval);
881 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
882 }
883
884 #undef FLD
885 }
886 NEXT (vpc);
887
888 CASE (sem, INSN_CMPEQI_COMPACT) : /* cmp/eq #$imm8, r0 */
889 {
890 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
891 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
892 #define FLD(f) abuf->fields.sfmt_addi_compact.f
893 int UNUSED written = 0;
894 IADDR UNUSED pc = abuf->addr;
895 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
896
897 {
898 BI opval = EQSI (GET_H_GRC (((UINT) 0)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
899 SET_H_TBIT (opval);
900 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
901 }
902
903 #undef FLD
904 }
905 NEXT (vpc);
906
907 CASE (sem, INSN_CMPGE_COMPACT) : /* cmp/ge $rm, $rn */
908 {
909 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
910 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
911 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
912 int UNUSED written = 0;
913 IADDR UNUSED pc = abuf->addr;
914 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
915
916 {
917 BI opval = GESI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
918 SET_H_TBIT (opval);
919 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
920 }
921
922 #undef FLD
923 }
924 NEXT (vpc);
925
926 CASE (sem, INSN_CMPGT_COMPACT) : /* cmp/gt $rm, $rn */
927 {
928 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
929 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
930 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
931 int UNUSED written = 0;
932 IADDR UNUSED pc = abuf->addr;
933 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
934
935 {
936 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
937 SET_H_TBIT (opval);
938 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
939 }
940
941 #undef FLD
942 }
943 NEXT (vpc);
944
945 CASE (sem, INSN_CMPHI_COMPACT) : /* cmp/hi $rm, $rn */
946 {
947 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
948 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
949 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
950 int UNUSED written = 0;
951 IADDR UNUSED pc = abuf->addr;
952 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
953
954 {
955 BI opval = GTUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
956 SET_H_TBIT (opval);
957 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
958 }
959
960 #undef FLD
961 }
962 NEXT (vpc);
963
964 CASE (sem, INSN_CMPHS_COMPACT) : /* cmp/hs $rm, $rn */
965 {
966 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
967 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
968 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
969 int UNUSED written = 0;
970 IADDR UNUSED pc = abuf->addr;
971 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
972
973 {
974 BI opval = GEUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
975 SET_H_TBIT (opval);
976 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
977 }
978
979 #undef FLD
980 }
981 NEXT (vpc);
982
983 CASE (sem, INSN_CMPPL_COMPACT) : /* cmp/pl $rn */
984 {
985 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
986 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
987 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
988 int UNUSED written = 0;
989 IADDR UNUSED pc = abuf->addr;
990 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
991
992 {
993 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), 0);
994 SET_H_TBIT (opval);
995 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
996 }
997
998 #undef FLD
999 }
1000 NEXT (vpc);
1001
1002 CASE (sem, INSN_CMPPZ_COMPACT) : /* cmp/pz $rn */
1003 {
1004 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1005 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1006 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1007 int UNUSED written = 0;
1008 IADDR UNUSED pc = abuf->addr;
1009 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1010
1011 {
1012 BI opval = GESI (GET_H_GRC (FLD (f_rn)), 0);
1013 SET_H_TBIT (opval);
1014 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1015 }
1016
1017 #undef FLD
1018 }
1019 NEXT (vpc);
1020
1021 CASE (sem, INSN_CMPSTR_COMPACT) : /* cmp/str $rm, $rn */
1022 {
1023 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1024 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1025 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1026 int UNUSED written = 0;
1027 IADDR UNUSED pc = abuf->addr;
1028 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1029
1030 {
1031 BI tmp_t;
1032 SI tmp_temp;
1033 tmp_temp = XORSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
1034 tmp_t = EQSI (ANDSI (tmp_temp, 0xff000000), 0);
1035 tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 16711680), 0), tmp_t);
1036 tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 65280), 0), tmp_t);
1037 tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 255), 0), tmp_t);
1038 {
1039 BI opval = ((GTUBI (tmp_t, 0)) ? (1) : (0));
1040 SET_H_TBIT (opval);
1041 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1042 }
1043 }
1044
1045 #undef FLD
1046 }
1047 NEXT (vpc);
1048
1049 CASE (sem, INSN_DIV0S_COMPACT) : /* div0s $rm, $rn */
1050 {
1051 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1052 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1053 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1054 int UNUSED written = 0;
1055 IADDR UNUSED pc = abuf->addr;
1056 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1057
1058 {
1059 {
1060 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1061 SET_H_QBIT (opval);
1062 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1063 }
1064 {
1065 BI opval = SRLSI (GET_H_GRC (FLD (f_rm)), 31);
1066 SET_H_MBIT (opval);
1067 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
1068 }
1069 {
1070 BI opval = ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm)), 31), SRLSI (GET_H_GRC (FLD (f_rn)), 31))) ? (0) : (1));
1071 SET_H_TBIT (opval);
1072 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1073 }
1074 }
1075
1076 #undef FLD
1077 }
1078 NEXT (vpc);
1079
1080 CASE (sem, INSN_DIV0U_COMPACT) : /* div0u */
1081 {
1082 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1083 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1084 #define FLD(f) abuf->fields.fmt_empty.f
1085 int UNUSED written = 0;
1086 IADDR UNUSED pc = abuf->addr;
1087 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1088
1089 {
1090 {
1091 BI opval = 0;
1092 SET_H_TBIT (opval);
1093 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1094 }
1095 {
1096 BI opval = 0;
1097 SET_H_QBIT (opval);
1098 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1099 }
1100 {
1101 BI opval = 0;
1102 SET_H_MBIT (opval);
1103 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
1104 }
1105 }
1106
1107 #undef FLD
1108 }
1109 NEXT (vpc);
1110
1111 CASE (sem, INSN_DIV1_COMPACT) : /* div1 $rm, $rn */
1112 {
1113 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1114 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1115 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1116 int UNUSED written = 0;
1117 IADDR UNUSED pc = abuf->addr;
1118 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1119
1120 {
1121 BI tmp_oldq;
1122 SI tmp_tmp0;
1123 UQI tmp_tmp1;
1124 tmp_oldq = GET_H_QBIT ();
1125 {
1126 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1127 SET_H_QBIT (opval);
1128 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1129 }
1130 {
1131 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), ZEXTBISI (GET_H_TBIT ()));
1132 SET_H_GRC (FLD (f_rn), opval);
1133 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1134 }
1135 if (NOTBI (tmp_oldq)) {
1136 if (NOTBI (GET_H_MBIT ())) {
1137 {
1138 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1139 {
1140 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1141 SET_H_GRC (FLD (f_rn), opval);
1142 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1143 }
1144 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1145 if (NOTBI (GET_H_QBIT ())) {
1146 {
1147 BI opval = ((tmp_tmp1) ? (1) : (0));
1148 SET_H_QBIT (opval);
1149 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1150 }
1151 } else {
1152 {
1153 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1154 SET_H_QBIT (opval);
1155 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1156 }
1157 }
1158 }
1159 } else {
1160 {
1161 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1162 {
1163 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1164 SET_H_GRC (FLD (f_rn), opval);
1165 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1166 }
1167 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1168 if (NOTBI (GET_H_QBIT ())) {
1169 {
1170 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1171 SET_H_QBIT (opval);
1172 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1173 }
1174 } else {
1175 {
1176 BI opval = ((tmp_tmp1) ? (1) : (0));
1177 SET_H_QBIT (opval);
1178 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1179 }
1180 }
1181 }
1182 }
1183 } else {
1184 if (NOTBI (GET_H_MBIT ())) {
1185 {
1186 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1187 {
1188 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
1189 SET_H_GRC (FLD (f_rn), opval);
1190 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1191 }
1192 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1193 if (NOTBI (GET_H_QBIT ())) {
1194 {
1195 BI opval = ((tmp_tmp1) ? (1) : (0));
1196 SET_H_QBIT (opval);
1197 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1198 }
1199 } else {
1200 {
1201 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1202 SET_H_QBIT (opval);
1203 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1204 }
1205 }
1206 }
1207 } else {
1208 {
1209 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1210 {
1211 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1212 SET_H_GRC (FLD (f_rn), opval);
1213 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1214 }
1215 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1216 if (NOTBI (GET_H_QBIT ())) {
1217 {
1218 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1219 SET_H_QBIT (opval);
1220 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1221 }
1222 } else {
1223 {
1224 BI opval = ((tmp_tmp1) ? (1) : (0));
1225 SET_H_QBIT (opval);
1226 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1227 }
1228 }
1229 }
1230 }
1231 }
1232 {
1233 BI opval = ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1234 SET_H_TBIT (opval);
1235 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1236 }
1237 }
1238
1239 #undef FLD
1240 }
1241 NEXT (vpc);
1242
1243 CASE (sem, INSN_DMULSL_COMPACT) : /* dmuls.l $rm, $rn */
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_movl5_compact.f
1248 int UNUSED written = 0;
1249 IADDR UNUSED pc = abuf->addr;
1250 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1251
1252 {
1253 DI tmp_result;
1254 tmp_result = MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm))), EXTSIDI (GET_H_GRC (FLD (f_rn))));
1255 {
1256 SI opval = SUBWORDDISI (tmp_result, 0);
1257 SET_H_MACH (opval);
1258 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1259 }
1260 {
1261 SI opval = SUBWORDDISI (tmp_result, 1);
1262 SET_H_MACL (opval);
1263 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1264 }
1265 }
1266
1267 #undef FLD
1268 }
1269 NEXT (vpc);
1270
1271 CASE (sem, INSN_DMULUL_COMPACT) : /* dmulu.l $rm, $rn */
1272 {
1273 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1274 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1275 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1276 int UNUSED written = 0;
1277 IADDR UNUSED pc = abuf->addr;
1278 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1279
1280 {
1281 DI tmp_result;
1282 tmp_result = MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm))), ZEXTSIDI (GET_H_GRC (FLD (f_rn))));
1283 {
1284 SI opval = SUBWORDDISI (tmp_result, 0);
1285 SET_H_MACH (opval);
1286 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1287 }
1288 {
1289 SI opval = SUBWORDDISI (tmp_result, 1);
1290 SET_H_MACL (opval);
1291 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1292 }
1293 }
1294
1295 #undef FLD
1296 }
1297 NEXT (vpc);
1298
1299 CASE (sem, INSN_DT_COMPACT) : /* dt $rn */
1300 {
1301 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1302 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1303 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1304 int UNUSED written = 0;
1305 IADDR UNUSED pc = abuf->addr;
1306 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1307
1308 {
1309 {
1310 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
1311 SET_H_GRC (FLD (f_rn), opval);
1312 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1313 }
1314 {
1315 BI opval = EQSI (GET_H_GRC (FLD (f_rn)), 0);
1316 SET_H_TBIT (opval);
1317 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1318 }
1319 }
1320
1321 #undef FLD
1322 }
1323 NEXT (vpc);
1324
1325 CASE (sem, INSN_EXTSB_COMPACT) : /* exts.b $rm, $rn */
1326 {
1327 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1328 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1329 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1330 int UNUSED written = 0;
1331 IADDR UNUSED pc = abuf->addr;
1332 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1333
1334 {
1335 SI opval = EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
1336 SET_H_GRC (FLD (f_rn), opval);
1337 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1338 }
1339
1340 #undef FLD
1341 }
1342 NEXT (vpc);
1343
1344 CASE (sem, INSN_EXTSW_COMPACT) : /* exts.w $rm, $rn */
1345 {
1346 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1347 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1348 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1349 int UNUSED written = 0;
1350 IADDR UNUSED pc = abuf->addr;
1351 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1352
1353 {
1354 SI opval = EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
1355 SET_H_GRC (FLD (f_rn), opval);
1356 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1357 }
1358
1359 #undef FLD
1360 }
1361 NEXT (vpc);
1362
1363 CASE (sem, INSN_EXTUB_COMPACT) : /* extu.b $rm, $rn */
1364 {
1365 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1366 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1367 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1368 int UNUSED written = 0;
1369 IADDR UNUSED pc = abuf->addr;
1370 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1371
1372 {
1373 SI opval = ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
1374 SET_H_GRC (FLD (f_rn), opval);
1375 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1376 }
1377
1378 #undef FLD
1379 }
1380 NEXT (vpc);
1381
1382 CASE (sem, INSN_EXTUW_COMPACT) : /* extu.w $rm, $rn */
1383 {
1384 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1385 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1386 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1387 int UNUSED written = 0;
1388 IADDR UNUSED pc = abuf->addr;
1389 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1390
1391 {
1392 SI opval = ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
1393 SET_H_GRC (FLD (f_rn), opval);
1394 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1395 }
1396
1397 #undef FLD
1398 }
1399 NEXT (vpc);
1400
1401 CASE (sem, INSN_FABS_COMPACT) : /* fabs $fsdn */
1402 {
1403 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1404 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1405 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1406 int UNUSED written = 0;
1407 IADDR UNUSED pc = abuf->addr;
1408 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1409
1410 if (GET_H_PRBIT ()) {
1411 {
1412 DF opval = sh64_fabsd (current_cpu, GET_H_DR (FLD (f_rn)));
1413 SET_H_DR (FLD (f_rn), opval);
1414 written |= (1 << 5);
1415 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
1416 }
1417 } else {
1418 {
1419 SF opval = sh64_fabss (current_cpu, GET_H_FRC (FLD (f_rn)));
1420 SET_H_FRC (FLD (f_rn), opval);
1421 written |= (1 << 4);
1422 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
1423 }
1424 }
1425
1426 abuf->written = written;
1427 #undef FLD
1428 }
1429 NEXT (vpc);
1430
1431 CASE (sem, INSN_FADD_COMPACT) : /* fadd $fsdm, $fsdn */
1432 {
1433 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1434 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1435 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1436 int UNUSED written = 0;
1437 IADDR UNUSED pc = abuf->addr;
1438 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1439
1440 if (GET_H_PRBIT ()) {
1441 {
1442 DF opval = sh64_faddd (current_cpu, GET_H_DR (FLD (f_rm)), GET_H_DR (FLD (f_rn)));
1443 SET_H_DR (FLD (f_rn), opval);
1444 written |= (1 << 8);
1445 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
1446 }
1447 } else {
1448 {
1449 SF opval = sh64_fadds (current_cpu, GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
1450 SET_H_FRC (FLD (f_rn), opval);
1451 written |= (1 << 7);
1452 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
1453 }
1454 }
1455
1456 abuf->written = written;
1457 #undef FLD
1458 }
1459 NEXT (vpc);
1460
1461 CASE (sem, INSN_FCMPEQ_COMPACT) : /* fcmp/eq $fsdm, $fsdn */
1462 {
1463 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1464 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1465 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1466 int UNUSED written = 0;
1467 IADDR UNUSED pc = abuf->addr;
1468 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1469
1470 if (GET_H_PRBIT ()) {
1471 {
1472 BI opval = sh64_fcmpeqd (current_cpu, GET_H_DR (FLD (f_rm)), GET_H_DR (FLD (f_rn)));
1473 SET_H_TBIT (opval);
1474 written |= (1 << 7);
1475 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1476 }
1477 } else {
1478 {
1479 BI opval = sh64_fcmpeqs (current_cpu, GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
1480 SET_H_TBIT (opval);
1481 written |= (1 << 7);
1482 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1483 }
1484 }
1485
1486 abuf->written = written;
1487 #undef FLD
1488 }
1489 NEXT (vpc);
1490
1491 CASE (sem, INSN_FCMPGT_COMPACT) : /* fcmp/gt $fsdm, $fsdn */
1492 {
1493 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1494 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1495 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1496 int UNUSED written = 0;
1497 IADDR UNUSED pc = abuf->addr;
1498 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1499
1500 if (GET_H_PRBIT ()) {
1501 {
1502 BI opval = sh64_fcmpgtd (current_cpu, GET_H_DR (FLD (f_rn)), GET_H_DR (FLD (f_rm)));
1503 SET_H_TBIT (opval);
1504 written |= (1 << 7);
1505 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1506 }
1507 } else {
1508 {
1509 BI opval = sh64_fcmpgts (current_cpu, GET_H_FRC (FLD (f_rn)), GET_H_FRC (FLD (f_rm)));
1510 SET_H_TBIT (opval);
1511 written |= (1 << 7);
1512 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1513 }
1514 }
1515
1516 abuf->written = written;
1517 #undef FLD
1518 }
1519 NEXT (vpc);
1520
1521 CASE (sem, INSN_FCNVDS_COMPACT) : /* fcnvds $drn, fpul */
1522 {
1523 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1524 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1525 #define FLD(f) abuf->fields.sfmt_fcnvds_compact.f
1526 int UNUSED written = 0;
1527 IADDR UNUSED pc = abuf->addr;
1528 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1529
1530 {
1531 SF opval = sh64_fcnvds (current_cpu, GET_H_DRC (FLD (f_dn)));
1532 CPU (h_fr[((UINT) 32)]) = opval;
1533 TRACE_RESULT (current_cpu, abuf, "fpul", 'f', opval);
1534 }
1535
1536 #undef FLD
1537 }
1538 NEXT (vpc);
1539
1540 CASE (sem, INSN_FCNVSD_COMPACT) : /* fcnvsd fpul, $drn */
1541 {
1542 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1543 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1544 #define FLD(f) abuf->fields.sfmt_fcnvds_compact.f
1545 int UNUSED written = 0;
1546 IADDR UNUSED pc = abuf->addr;
1547 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1548
1549 {
1550 DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[((UINT) 32)]));
1551 SET_H_DRC (FLD (f_dn), opval);
1552 TRACE_RESULT (current_cpu, abuf, "drn", 'f', opval);
1553 }
1554
1555 #undef FLD
1556 }
1557 NEXT (vpc);
1558
1559 CASE (sem, INSN_FDIV_COMPACT) : /* fdiv $fsdm, $fsdn */
1560 {
1561 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1562 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1563 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1564 int UNUSED written = 0;
1565 IADDR UNUSED pc = abuf->addr;
1566 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1567
1568 if (GET_H_PRBIT ()) {
1569 {
1570 DF opval = sh64_fdivd (current_cpu, GET_H_DR (FLD (f_rn)), GET_H_DR (FLD (f_rm)));
1571 SET_H_DR (FLD (f_rn), opval);
1572 written |= (1 << 8);
1573 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
1574 }
1575 } else {
1576 {
1577 SF opval = sh64_fdivs (current_cpu, GET_H_FRC (FLD (f_rn)), GET_H_FRC (FLD (f_rm)));
1578 SET_H_FRC (FLD (f_rn), opval);
1579 written |= (1 << 7);
1580 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
1581 }
1582 }
1583
1584 abuf->written = written;
1585 #undef FLD
1586 }
1587 NEXT (vpc);
1588
1589 CASE (sem, INSN_FIPR_COMPACT) : /* fipr $fvm, $fvn */
1590 {
1591 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1592 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1593 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
1594 int UNUSED written = 0;
1595 IADDR UNUSED pc = abuf->addr;
1596 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1597
1598 {
1599 QI tmp_m;
1600 QI tmp_n;
1601 SF tmp_res;
1602 tmp_m = FLD (f_vm);
1603 tmp_n = FLD (f_vn);
1604 tmp_res = sh64_fmuls (current_cpu, GET_H_FVC (FLD (f_vm)), GET_H_FVC (FLD (f_vn)));
1605 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_FRC (ADDQI (tmp_m, 1)), GET_H_FRC (ADDQI (tmp_n, 1))));
1606 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_FRC (ADDQI (tmp_m, 2)), GET_H_FRC (ADDQI (tmp_n, 2))));
1607 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_FRC (ADDQI (tmp_m, 3)), GET_H_FRC (ADDQI (tmp_n, 3))));
1608 {
1609 SF opval = tmp_res;
1610 SET_H_FRC (ADDQI (tmp_n, 3), opval);
1611 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-3", 'f', opval);
1612 }
1613 }
1614
1615 #undef FLD
1616 }
1617 NEXT (vpc);
1618
1619 CASE (sem, INSN_FLDS_COMPACT) : /* flds $frn */
1620 {
1621 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1622 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1623 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1624 int UNUSED written = 0;
1625 IADDR UNUSED pc = abuf->addr;
1626 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1627
1628 {
1629 SF opval = GET_H_FRC (FLD (f_rn));
1630 CPU (h_fr[((UINT) 32)]) = opval;
1631 TRACE_RESULT (current_cpu, abuf, "fpul", 'f', opval);
1632 }
1633
1634 #undef FLD
1635 }
1636 NEXT (vpc);
1637
1638 CASE (sem, INSN_FLDI0_COMPACT) : /* fldi0 $frn */
1639 {
1640 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1641 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1642 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1643 int UNUSED written = 0;
1644 IADDR UNUSED pc = abuf->addr;
1645 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1646
1647 {
1648 SF opval = sh64_fldi0 (current_cpu);
1649 SET_H_FRC (FLD (f_rn), opval);
1650 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1651 }
1652
1653 #undef FLD
1654 }
1655 NEXT (vpc);
1656
1657 CASE (sem, INSN_FLDI1_COMPACT) : /* fldi1 $frn */
1658 {
1659 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1660 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1661 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1662 int UNUSED written = 0;
1663 IADDR UNUSED pc = abuf->addr;
1664 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1665
1666 {
1667 SF opval = sh64_fldi1 (current_cpu);
1668 SET_H_FRC (FLD (f_rn), opval);
1669 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1670 }
1671
1672 #undef FLD
1673 }
1674 NEXT (vpc);
1675
1676 CASE (sem, INSN_FLOAT_COMPACT) : /* float fpul, $fsdn */
1677 {
1678 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1679 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1680 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1681 int UNUSED written = 0;
1682 IADDR UNUSED pc = abuf->addr;
1683 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1684
1685 if (GET_H_PRBIT ()) {
1686 {
1687 DF opval = sh64_floatld (current_cpu, CPU (h_fr[((UINT) 32)]));
1688 SET_H_DR (FLD (f_rn), opval);
1689 written |= (1 << 4);
1690 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
1691 }
1692 } else {
1693 {
1694 SF opval = sh64_floatls (current_cpu, CPU (h_fr[((UINT) 32)]));
1695 SET_H_FRC (FLD (f_rn), opval);
1696 written |= (1 << 3);
1697 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
1698 }
1699 }
1700
1701 abuf->written = written;
1702 #undef FLD
1703 }
1704 NEXT (vpc);
1705
1706 CASE (sem, INSN_FMAC_COMPACT) : /* fmac fr0, $frm, $frn */
1707 {
1708 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1709 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1710 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1711 int UNUSED written = 0;
1712 IADDR UNUSED pc = abuf->addr;
1713 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1714
1715 {
1716 SF opval = sh64_fmacs (current_cpu, GET_H_FRC (((UINT) 0)), GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
1717 SET_H_FRC (FLD (f_rn), opval);
1718 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1719 }
1720
1721 #undef FLD
1722 }
1723 NEXT (vpc);
1724
1725 CASE (sem, INSN_FMOV1_COMPACT) : /* fmov $frm, $frn */
1726 {
1727 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1728 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1729 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1730 int UNUSED written = 0;
1731 IADDR UNUSED pc = abuf->addr;
1732 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1733
1734 if (NOTBI (GET_H_SZBIT ())) {
1735 {
1736 SF opval = GET_H_FRC (FLD (f_rm));
1737 SET_H_FRC (FLD (f_rn), opval);
1738 written |= (1 << 6);
1739 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1740 }
1741 } else {
1742 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
1743 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
1744 {
1745 DF opval = GET_H_XD (((FLD (f_rm)) & (INVQI (1))));
1746 SET_H_XD (((FLD (f_rn)) & (INVQI (1))), opval);
1747 written |= (1 << 8);
1748 TRACE_RESULT (current_cpu, abuf, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval);
1749 }
1750 } else {
1751 {
1752 DF opval = GET_H_XD (((FLD (f_rm)) & (INVQI (1))));
1753 SET_H_DR (FLD (f_rn), opval);
1754 written |= (1 << 7);
1755 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-frn", 'f', opval);
1756 }
1757 }
1758 } else {
1759 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
1760 {
1761 DF opval = GET_H_DR (FLD (f_rm));
1762 SET_H_XD (((FLD (f_rn)) & (INVQI (1))), opval);
1763 written |= (1 << 8);
1764 TRACE_RESULT (current_cpu, abuf, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval);
1765 }
1766 } else {
1767 {
1768 DF opval = GET_H_DR (FLD (f_rm));
1769 SET_H_DR (FLD (f_rn), opval);
1770 written |= (1 << 7);
1771 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-frn", 'f', opval);
1772 }
1773 }
1774 }
1775 }
1776
1777 abuf->written = written;
1778 #undef FLD
1779 }
1780 NEXT (vpc);
1781
1782 CASE (sem, INSN_FMOV2_COMPACT) : /* fmov @$rm, $frn */
1783 {
1784 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1785 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1786 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1787 int UNUSED written = 0;
1788 IADDR UNUSED pc = abuf->addr;
1789 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1790
1791 if (NOTBI (GET_H_SZBIT ())) {
1792 {
1793 SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1794 SET_H_FRC (FLD (f_rn), opval);
1795 written |= (1 << 5);
1796 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1797 }
1798 } else {
1799 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
1800 {
1801 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1802 SET_H_XD (((FLD (f_rn)) & (INVQI (1))), opval);
1803 written |= (1 << 7);
1804 TRACE_RESULT (current_cpu, abuf, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval);
1805 }
1806 } else {
1807 {
1808 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1809 SET_H_DR (FLD (f_rn), opval);
1810 written |= (1 << 6);
1811 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-frn", 'f', opval);
1812 }
1813 }
1814 }
1815
1816 abuf->written = written;
1817 #undef FLD
1818 }
1819 NEXT (vpc);
1820
1821 CASE (sem, INSN_FMOV3_COMPACT) : /* fmov @${rm}+, frn */
1822 {
1823 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1824 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1825 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1826 int UNUSED written = 0;
1827 IADDR UNUSED pc = abuf->addr;
1828 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1829
1830 if (NOTBI (GET_H_SZBIT ())) {
1831 {
1832 {
1833 SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1834 SET_H_FRC (FLD (f_rn), opval);
1835 written |= (1 << 5);
1836 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1837 }
1838 {
1839 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
1840 SET_H_GRC (FLD (f_rm), opval);
1841 written |= (1 << 8);
1842 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
1843 }
1844 }
1845 } else {
1846 {
1847 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
1848 {
1849 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1850 SET_H_XD (((FLD (f_rn)) & (INVQI (1))), opval);
1851 written |= (1 << 7);
1852 TRACE_RESULT (current_cpu, abuf, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval);
1853 }
1854 } else {
1855 {
1856 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1857 SET_H_DR (FLD (f_rn), opval);
1858 written |= (1 << 6);
1859 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-frn", 'f', opval);
1860 }
1861 }
1862 {
1863 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 8);
1864 SET_H_GRC (FLD (f_rm), opval);
1865 written |= (1 << 8);
1866 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
1867 }
1868 }
1869 }
1870
1871 abuf->written = written;
1872 #undef FLD
1873 }
1874 NEXT (vpc);
1875
1876 CASE (sem, INSN_FMOV4_COMPACT) : /* fmov @(r0, $rm), $frn */
1877 {
1878 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1879 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1880 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1881 int UNUSED written = 0;
1882 IADDR UNUSED pc = abuf->addr;
1883 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1884
1885 if (NOTBI (GET_H_SZBIT ())) {
1886 {
1887 SF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
1888 SET_H_FRC (FLD (f_rn), opval);
1889 written |= (1 << 6);
1890 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1891 }
1892 } else {
1893 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
1894 {
1895 DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
1896 SET_H_XD (((FLD (f_rn)) & (INVQI (1))), opval);
1897 written |= (1 << 8);
1898 TRACE_RESULT (current_cpu, abuf, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval);
1899 }
1900 } else {
1901 {
1902 DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
1903 SET_H_DR (FLD (f_rn), opval);
1904 written |= (1 << 7);
1905 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-frn", 'f', opval);
1906 }
1907 }
1908 }
1909
1910 abuf->written = written;
1911 #undef FLD
1912 }
1913 NEXT (vpc);
1914
1915 CASE (sem, INSN_FMOV5_COMPACT) : /* fmov $frm, @$rn */
1916 {
1917 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1918 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1919 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1920 int UNUSED written = 0;
1921 IADDR UNUSED pc = abuf->addr;
1922 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1923
1924 if (NOTBI (GET_H_SZBIT ())) {
1925 {
1926 SF opval = GET_H_FRC (FLD (f_rm));
1927 SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1928 written |= (1 << 6);
1929 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1930 }
1931 } else {
1932 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
1933 {
1934 DF opval = GET_H_XD (((FLD (f_rm)) & (INVQI (1))));
1935 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1936 written |= (1 << 7);
1937 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1938 }
1939 } else {
1940 {
1941 DF opval = GET_H_DR (FLD (f_rm));
1942 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1943 written |= (1 << 7);
1944 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1945 }
1946 }
1947 }
1948
1949 abuf->written = written;
1950 #undef FLD
1951 }
1952 NEXT (vpc);
1953
1954 CASE (sem, INSN_FMOV6_COMPACT) : /* fmov $frm, @-$rn */
1955 {
1956 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1957 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1958 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1959 int UNUSED written = 0;
1960 IADDR UNUSED pc = abuf->addr;
1961 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1962
1963 if (NOTBI (GET_H_SZBIT ())) {
1964 {
1965 {
1966 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
1967 SET_H_GRC (FLD (f_rn), opval);
1968 written |= (1 << 8);
1969 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1970 }
1971 {
1972 SF opval = GET_H_FRC (FLD (f_rm));
1973 SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1974 written |= (1 << 6);
1975 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1976 }
1977 }
1978 } else {
1979 {
1980 {
1981 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 8);
1982 SET_H_GRC (FLD (f_rn), opval);
1983 written |= (1 << 8);
1984 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
1985 }
1986 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
1987 {
1988 DF opval = GET_H_XD (((FLD (f_rm)) & (INVQI (1))));
1989 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1990 written |= (1 << 7);
1991 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1992 }
1993 } else {
1994 {
1995 DF opval = GET_H_DR (FLD (f_rm));
1996 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1997 written |= (1 << 7);
1998 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1999 }
2000 }
2001 }
2002 }
2003
2004 abuf->written = written;
2005 #undef FLD
2006 }
2007 NEXT (vpc);
2008
2009 CASE (sem, INSN_FMOV7_COMPACT) : /* fmov $frm, @(r0, $rn) */
2010 {
2011 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2012 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2013 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2014 int UNUSED written = 0;
2015 IADDR UNUSED pc = abuf->addr;
2016 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2017
2018 if (NOTBI (GET_H_SZBIT ())) {
2019 {
2020 SF opval = GET_H_FRC (FLD (f_rm));
2021 SETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2022 written |= (1 << 7);
2023 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
2024 }
2025 } else {
2026 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
2027 {
2028 DF opval = GET_H_XD (((FLD (f_rm)) & (INVQI (1))));
2029 SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2030 written |= (1 << 8);
2031 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
2032 }
2033 } else {
2034 {
2035 DF opval = GET_H_DR (FLD (f_rm));
2036 SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2037 written |= (1 << 8);
2038 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
2039 }
2040 }
2041 }
2042
2043 abuf->written = written;
2044 #undef FLD
2045 }
2046 NEXT (vpc);
2047
2048 CASE (sem, INSN_FMUL_COMPACT) : /* fmul $fsdm, $fsdn */
2049 {
2050 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2051 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2052 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2053 int UNUSED written = 0;
2054 IADDR UNUSED pc = abuf->addr;
2055 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2056
2057 if (GET_H_PRBIT ()) {
2058 {
2059 DF opval = sh64_fmuld (current_cpu, GET_H_DR (FLD (f_rm)), GET_H_DR (FLD (f_rn)));
2060 SET_H_DR (FLD (f_rn), opval);
2061 written |= (1 << 8);
2062 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
2063 }
2064 } else {
2065 {
2066 SF opval = sh64_fmuls (current_cpu, GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
2067 SET_H_FRC (FLD (f_rn), opval);
2068 written |= (1 << 7);
2069 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
2070 }
2071 }
2072
2073 abuf->written = written;
2074 #undef FLD
2075 }
2076 NEXT (vpc);
2077
2078 CASE (sem, INSN_FNEG_COMPACT) : /* fneg $fsdn */
2079 {
2080 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2081 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2082 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2083 int UNUSED written = 0;
2084 IADDR UNUSED pc = abuf->addr;
2085 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2086
2087 if (GET_H_PRBIT ()) {
2088 {
2089 DF opval = sh64_fnegd (current_cpu, GET_H_DR (FLD (f_rn)));
2090 SET_H_DR (FLD (f_rn), opval);
2091 written |= (1 << 5);
2092 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
2093 }
2094 } else {
2095 {
2096 SF opval = sh64_fnegs (current_cpu, GET_H_FRC (FLD (f_rn)));
2097 SET_H_FRC (FLD (f_rn), opval);
2098 written |= (1 << 4);
2099 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
2100 }
2101 }
2102
2103 abuf->written = written;
2104 #undef FLD
2105 }
2106 NEXT (vpc);
2107
2108 CASE (sem, INSN_FRCHG_COMPACT) : /* frchg */
2109 {
2110 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2111 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2112 #define FLD(f) abuf->fields.fmt_empty.f
2113 int UNUSED written = 0;
2114 IADDR UNUSED pc = abuf->addr;
2115 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2116
2117 {
2118 BI opval = NOTBI (GET_H_FRBIT ());
2119 SET_H_FRBIT (opval);
2120 TRACE_RESULT (current_cpu, abuf, "frbit", 'x', opval);
2121 }
2122
2123 #undef FLD
2124 }
2125 NEXT (vpc);
2126
2127 CASE (sem, INSN_FSCHG_COMPACT) : /* fschg */
2128 {
2129 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2130 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2131 #define FLD(f) abuf->fields.fmt_empty.f
2132 int UNUSED written = 0;
2133 IADDR UNUSED pc = abuf->addr;
2134 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2135
2136 {
2137 BI opval = NOTBI (GET_H_SZBIT ());
2138 SET_H_SZBIT (opval);
2139 TRACE_RESULT (current_cpu, abuf, "szbit", 'x', opval);
2140 }
2141
2142 #undef FLD
2143 }
2144 NEXT (vpc);
2145
2146 CASE (sem, INSN_FSQRT_COMPACT) : /* fsqrt $fsdn */
2147 {
2148 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2149 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2150 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2151 int UNUSED written = 0;
2152 IADDR UNUSED pc = abuf->addr;
2153 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2154
2155 if (GET_H_PRBIT ()) {
2156 {
2157 DF opval = sh64_fsqrtd (current_cpu, GET_H_DR (FLD (f_rn)));
2158 SET_H_DR (FLD (f_rn), opval);
2159 written |= (1 << 5);
2160 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
2161 }
2162 } else {
2163 {
2164 SF opval = sh64_fsqrts (current_cpu, GET_H_FRC (FLD (f_rn)));
2165 SET_H_FRC (FLD (f_rn), opval);
2166 written |= (1 << 4);
2167 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
2168 }
2169 }
2170
2171 abuf->written = written;
2172 #undef FLD
2173 }
2174 NEXT (vpc);
2175
2176 CASE (sem, INSN_FSTS_COMPACT) : /* fsts fpul, $frn */
2177 {
2178 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2179 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2180 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2181 int UNUSED written = 0;
2182 IADDR UNUSED pc = abuf->addr;
2183 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2184
2185 {
2186 SF opval = CPU (h_fr[((UINT) 32)]);
2187 SET_H_FRC (FLD (f_rn), opval);
2188 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
2189 }
2190
2191 #undef FLD
2192 }
2193 NEXT (vpc);
2194
2195 CASE (sem, INSN_FSUB_COMPACT) : /* fsub $fsdm, $fsdn */
2196 {
2197 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2198 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2199 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2200 int UNUSED written = 0;
2201 IADDR UNUSED pc = abuf->addr;
2202 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2203
2204 if (GET_H_PRBIT ()) {
2205 {
2206 DF opval = sh64_fsubd (current_cpu, GET_H_DR (FLD (f_rn)), GET_H_DR (FLD (f_rm)));
2207 SET_H_DR (FLD (f_rn), opval);
2208 written |= (1 << 8);
2209 TRACE_RESULT (current_cpu, abuf, "dr-index-of--DFLT-fsdn", 'f', opval);
2210 }
2211 } else {
2212 {
2213 SF opval = sh64_fsubs (current_cpu, GET_H_FRC (FLD (f_rn)), GET_H_FRC (FLD (f_rm)));
2214 SET_H_FRC (FLD (f_rn), opval);
2215 written |= (1 << 7);
2216 TRACE_RESULT (current_cpu, abuf, "fsdn", 'f', opval);
2217 }
2218 }
2219
2220 abuf->written = written;
2221 #undef FLD
2222 }
2223 NEXT (vpc);
2224
2225 CASE (sem, INSN_FTRC_COMPACT) : /* ftrc $fsdn, fpul */
2226 {
2227 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2228 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2229 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2230 int UNUSED written = 0;
2231 IADDR UNUSED pc = abuf->addr;
2232 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2233
2234 {
2235 SF opval = ((GET_H_PRBIT ()) ? (sh64_ftrcdl (current_cpu, GET_H_DR (FLD (f_rn)))) : (sh64_ftrcsl (current_cpu, GET_H_FRC (FLD (f_rn)))));
2236 CPU (h_fr[((UINT) 32)]) = opval;
2237 TRACE_RESULT (current_cpu, abuf, "fpul", 'f', opval);
2238 }
2239
2240 #undef FLD
2241 }
2242 NEXT (vpc);
2243
2244 CASE (sem, INSN_FTRV_COMPACT) : /* ftrv xmtrx, $fvn */
2245 {
2246 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2247 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2248 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
2249 int UNUSED written = 0;
2250 IADDR UNUSED pc = abuf->addr;
2251 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2252
2253 {
2254 QI tmp_n;
2255 SF tmp_res;
2256 tmp_n = FLD (f_vn);
2257 tmp_res = sh64_fmuls (current_cpu, GET_H_XF (((UINT) 0)), GET_H_FRC (tmp_n));
2258 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 4)), GET_H_FRC (ADDQI (tmp_n, 1))));
2259 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 8)), GET_H_FRC (ADDQI (tmp_n, 2))));
2260 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 12)), GET_H_FRC (ADDQI (tmp_n, 3))));
2261 {
2262 SF opval = tmp_res;
2263 SET_H_FRC (tmp_n, opval);
2264 TRACE_RESULT (current_cpu, abuf, "frc-n", 'f', opval);
2265 }
2266 tmp_res = sh64_fmuls (current_cpu, GET_H_XF (((UINT) 1)), GET_H_FRC (tmp_n));
2267 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 5)), GET_H_FRC (ADDQI (tmp_n, 1))));
2268 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 9)), GET_H_FRC (ADDQI (tmp_n, 2))));
2269 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 13)), GET_H_FRC (ADDQI (tmp_n, 3))));
2270 {
2271 SF opval = tmp_res;
2272 SET_H_FRC (ADDQI (tmp_n, 1), opval);
2273 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-1", 'f', opval);
2274 }
2275 tmp_res = sh64_fmuls (current_cpu, GET_H_XF (((UINT) 2)), GET_H_FRC (tmp_n));
2276 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 6)), GET_H_FRC (ADDQI (tmp_n, 1))));
2277 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 10)), GET_H_FRC (ADDQI (tmp_n, 2))));
2278 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 14)), GET_H_FRC (ADDQI (tmp_n, 3))));
2279 {
2280 SF opval = tmp_res;
2281 SET_H_FRC (ADDQI (tmp_n, 2), opval);
2282 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-2", 'f', opval);
2283 }
2284 tmp_res = sh64_fmuls (current_cpu, GET_H_XF (((UINT) 3)), GET_H_FRC (tmp_n));
2285 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 7)), GET_H_FRC (ADDQI (tmp_n, 1))));
2286 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 11)), GET_H_FRC (ADDQI (tmp_n, 2))));
2287 tmp_res = sh64_fadds (current_cpu, tmp_res, sh64_fmuls (current_cpu, GET_H_XF (((UINT) 15)), GET_H_FRC (ADDQI (tmp_n, 3))));
2288 {
2289 SF opval = tmp_res;
2290 SET_H_FRC (ADDQI (tmp_n, 3), opval);
2291 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-3", 'f', opval);
2292 }
2293 }
2294
2295 #undef FLD
2296 }
2297 NEXT (vpc);
2298
2299 CASE (sem, INSN_JMP_COMPACT) : /* jmp @$rn */
2300 {
2301 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2302 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2303 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2304 int UNUSED written = 0;
2305 IADDR UNUSED pc = abuf->addr;
2306 SEM_BRANCH_INIT
2307 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2308
2309 {
2310 {
2311 UDI opval = GET_H_GRC (FLD (f_rn));
2312 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2313 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
2314 }
2315 }
2316
2317 SEM_BRANCH_FINI (vpc);
2318 #undef FLD
2319 }
2320 NEXT (vpc);
2321
2322 CASE (sem, INSN_JSR_COMPACT) : /* jsr @$rn */
2323 {
2324 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2325 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2326 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2327 int UNUSED written = 0;
2328 IADDR UNUSED pc = abuf->addr;
2329 SEM_BRANCH_INIT
2330 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2331
2332 {
2333 {
2334 {
2335 SI opval = ADDDI (pc, 4);
2336 SET_H_PR (opval);
2337 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2338 }
2339 {
2340 UDI opval = GET_H_GRC (FLD (f_rn));
2341 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2342 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
2343 }
2344 }
2345 }
2346
2347 SEM_BRANCH_FINI (vpc);
2348 #undef FLD
2349 }
2350 NEXT (vpc);
2351
2352 CASE (sem, INSN_LDC_COMPACT) : /* ldc $rn, gbr */
2353 {
2354 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2355 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2356 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2357 int UNUSED written = 0;
2358 IADDR UNUSED pc = abuf->addr;
2359 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2360
2361 {
2362 SI opval = GET_H_GRC (FLD (f_rn));
2363 SET_H_GBR (opval);
2364 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
2365 }
2366
2367 #undef FLD
2368 }
2369 NEXT (vpc);
2370
2371 CASE (sem, INSN_LDCL_COMPACT) : /* ldc.l @${rn}+, gbr */
2372 {
2373 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2375 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2376 int UNUSED written = 0;
2377 IADDR UNUSED pc = abuf->addr;
2378 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2379
2380 {
2381 {
2382 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2383 SET_H_GBR (opval);
2384 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
2385 }
2386 {
2387 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2388 SET_H_GRC (FLD (f_rn), opval);
2389 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2390 }
2391 }
2392
2393 #undef FLD
2394 }
2395 NEXT (vpc);
2396
2397 CASE (sem, INSN_LDS_FPSCR_COMPACT) : /* lds $rn, fpscr */
2398 {
2399 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2400 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2401 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2402 int UNUSED written = 0;
2403 IADDR UNUSED pc = abuf->addr;
2404 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2405
2406 {
2407 SI opval = GET_H_GRC (FLD (f_rn));
2408 SET_H_FPCCR (opval);
2409 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2410 }
2411
2412 #undef FLD
2413 }
2414 NEXT (vpc);
2415
2416 CASE (sem, INSN_LDSL_FPSCR_COMPACT) : /* lds.l @${rn}+, fpscr */
2417 {
2418 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2419 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2420 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2421 int UNUSED written = 0;
2422 IADDR UNUSED pc = abuf->addr;
2423 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2424
2425 {
2426 {
2427 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2428 SET_H_FPCCR (opval);
2429 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2430 }
2431 {
2432 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2433 SET_H_GRC (FLD (f_rn), opval);
2434 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2435 }
2436 }
2437
2438 #undef FLD
2439 }
2440 NEXT (vpc);
2441
2442 CASE (sem, INSN_LDS_FPUL_COMPACT) : /* lds $rn, fpul */
2443 {
2444 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2445 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2446 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2447 int UNUSED written = 0;
2448 IADDR UNUSED pc = abuf->addr;
2449 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2450
2451 {
2452 SF opval = SUBWORDSISF (GET_H_GRC (FLD (f_rn)));
2453 CPU (h_fr[((UINT) 32)]) = opval;
2454 TRACE_RESULT (current_cpu, abuf, "fpul", 'f', opval);
2455 }
2456
2457 #undef FLD
2458 }
2459 NEXT (vpc);
2460
2461 CASE (sem, INSN_LDSL_FPUL_COMPACT) : /* lds.l @${rn}+, fpul */
2462 {
2463 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2464 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2465 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2466 int UNUSED written = 0;
2467 IADDR UNUSED pc = abuf->addr;
2468 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2469
2470 {
2471 {
2472 SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2473 CPU (h_fr[((UINT) 32)]) = opval;
2474 TRACE_RESULT (current_cpu, abuf, "fpul", 'f', opval);
2475 }
2476 {
2477 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2478 SET_H_GRC (FLD (f_rn), opval);
2479 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2480 }
2481 }
2482
2483 #undef FLD
2484 }
2485 NEXT (vpc);
2486
2487 CASE (sem, INSN_LDS_MACH_COMPACT) : /* lds $rn, mach */
2488 {
2489 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2490 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2491 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2492 int UNUSED written = 0;
2493 IADDR UNUSED pc = abuf->addr;
2494 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2495
2496 {
2497 SI opval = GET_H_GRC (FLD (f_rn));
2498 SET_H_MACH (opval);
2499 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2500 }
2501
2502 #undef FLD
2503 }
2504 NEXT (vpc);
2505
2506 CASE (sem, INSN_LDSL_MACH_COMPACT) : /* lds.l @${rn}+, mach */
2507 {
2508 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2509 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2510 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2511 int UNUSED written = 0;
2512 IADDR UNUSED pc = abuf->addr;
2513 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2514
2515 {
2516 {
2517 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2518 SET_H_MACH (opval);
2519 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2520 }
2521 {
2522 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2523 SET_H_GRC (FLD (f_rn), opval);
2524 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2525 }
2526 }
2527
2528 #undef FLD
2529 }
2530 NEXT (vpc);
2531
2532 CASE (sem, INSN_LDS_MACL_COMPACT) : /* lds $rn, macl */
2533 {
2534 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2535 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2536 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2537 int UNUSED written = 0;
2538 IADDR UNUSED pc = abuf->addr;
2539 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2540
2541 {
2542 SI opval = GET_H_GRC (FLD (f_rn));
2543 SET_H_MACL (opval);
2544 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2545 }
2546
2547 #undef FLD
2548 }
2549 NEXT (vpc);
2550
2551 CASE (sem, INSN_LDSL_MACL_COMPACT) : /* lds.l @${rn}+, macl */
2552 {
2553 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2554 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2555 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2556 int UNUSED written = 0;
2557 IADDR UNUSED pc = abuf->addr;
2558 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2559
2560 {
2561 {
2562 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2563 SET_H_MACL (opval);
2564 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2565 }
2566 {
2567 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2568 SET_H_GRC (FLD (f_rn), opval);
2569 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2570 }
2571 }
2572
2573 #undef FLD
2574 }
2575 NEXT (vpc);
2576
2577 CASE (sem, INSN_LDS_PR_COMPACT) : /* lds $rn, pr */
2578 {
2579 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2580 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2581 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2582 int UNUSED written = 0;
2583 IADDR UNUSED pc = abuf->addr;
2584 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2585
2586 {
2587 SI opval = GET_H_GRC (FLD (f_rn));
2588 SET_H_PR (opval);
2589 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2590 }
2591
2592 #undef FLD
2593 }
2594 NEXT (vpc);
2595
2596 CASE (sem, INSN_LDSL_PR_COMPACT) : /* lds.l @${rn}+, pr */
2597 {
2598 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2599 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2600 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2601 int UNUSED written = 0;
2602 IADDR UNUSED pc = abuf->addr;
2603 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2604
2605 {
2606 {
2607 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2608 SET_H_PR (opval);
2609 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2610 }
2611 {
2612 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2613 SET_H_GRC (FLD (f_rn), opval);
2614 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2615 }
2616 }
2617
2618 #undef FLD
2619 }
2620 NEXT (vpc);
2621
2622 CASE (sem, INSN_MACL_COMPACT) : /* mac.l @${rm}+, @${rn}+ */
2623 {
2624 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2625 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2626 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2627 int UNUSED written = 0;
2628 IADDR UNUSED pc = abuf->addr;
2629 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2630
2631 {
2632 DI tmp_tmpry;
2633 DI tmp_mac;
2634 DI tmp_result;
2635 SI tmp_x;
2636 SI tmp_y;
2637 tmp_x = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2638 {
2639 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2640 SET_H_GRC (FLD (f_rn), opval);
2641 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2642 }
2643 if (EQSI (FLD (f_rn), FLD (f_rm))) {
2644 {
2645 {
2646 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2647 SET_H_GRC (FLD (f_rn), opval);
2648 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2649 }
2650 {
2651 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
2652 SET_H_GRC (FLD (f_rm), opval);
2653 written |= (1 << 11);
2654 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
2655 }
2656 }
2657 }
2658 tmp_y = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2659 {
2660 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
2661 SET_H_GRC (FLD (f_rm), opval);
2662 written |= (1 << 11);
2663 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
2664 }
2665 tmp_tmpry = MULDI (ZEXTSIDI (tmp_x), ZEXTSIDI (tmp_y));
2666 tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2667 tmp_result = ADDDI (tmp_mac, tmp_tmpry);
2668 {
2669 if (GET_H_SBIT ()) {
2670 {
2671 SI tmp_min;
2672 SI tmp_max;
2673 tmp_max = SRLDI (INVDI (0), 16);
2674 tmp_min = SRLDI (INVDI (0), 15);
2675 if (GTDI (tmp_result, tmp_max)) {
2676 tmp_result = tmp_max;
2677 } else {
2678 if (LTDI (tmp_result, tmp_min)) {
2679 tmp_result = tmp_min;
2680 }
2681 }
2682 }
2683 }
2684 {
2685 SI opval = SUBWORDDISI (tmp_result, 0);
2686 SET_H_MACH (opval);
2687 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2688 }
2689 {
2690 SI opval = SUBWORDDISI (tmp_result, 1);
2691 SET_H_MACL (opval);
2692 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2693 }
2694 }
2695 }
2696
2697 abuf->written = written;
2698 #undef FLD
2699 }
2700 NEXT (vpc);
2701
2702 CASE (sem, INSN_MACW_COMPACT) : /* mac.w @${rm}+, @${rn}+ */
2703 {
2704 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2705 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2706 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2707 int UNUSED written = 0;
2708 IADDR UNUSED pc = abuf->addr;
2709 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2710
2711 {
2712 SI tmp_tmpry;
2713 DI tmp_mac;
2714 DI tmp_result;
2715 HI tmp_x;
2716 HI tmp_y;
2717 tmp_x = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2718 {
2719 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
2720 SET_H_GRC (FLD (f_rn), opval);
2721 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2722 }
2723 if (EQSI (FLD (f_rn), FLD (f_rm))) {
2724 {
2725 {
2726 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
2727 SET_H_GRC (FLD (f_rn), opval);
2728 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2729 }
2730 {
2731 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
2732 SET_H_GRC (FLD (f_rm), opval);
2733 written |= (1 << 11);
2734 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
2735 }
2736 }
2737 }
2738 tmp_y = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2739 {
2740 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
2741 SET_H_GRC (FLD (f_rm), opval);
2742 written |= (1 << 11);
2743 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
2744 }
2745 tmp_tmpry = MULSI (ZEXTHISI (tmp_x), ZEXTHISI (tmp_y));
2746 if (GET_H_SBIT ()) {
2747 {
2748 if (ADDOFSI (tmp_tmpry, GET_H_MACL (), 0)) {
2749 {
2750 SI opval = 1;
2751 SET_H_MACH (opval);
2752 written |= (1 << 9);
2753 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2754 }
2755 }
2756 {
2757 SI opval = ADDSI (tmp_tmpry, GET_H_MACL ());
2758 SET_H_MACL (opval);
2759 written |= (1 << 10);
2760 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2761 }
2762 }
2763 } else {
2764 {
2765 tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2766 tmp_result = ADDDI (tmp_mac, EXTSIDI (tmp_tmpry));
2767 {
2768 SI opval = SUBWORDDISI (tmp_result, 0);
2769 SET_H_MACH (opval);
2770 written |= (1 << 9);
2771 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2772 }
2773 {
2774 SI opval = SUBWORDDISI (tmp_result, 1);
2775 SET_H_MACL (opval);
2776 written |= (1 << 10);
2777 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2778 }
2779 }
2780 }
2781 }
2782
2783 abuf->written = written;
2784 #undef FLD
2785 }
2786 NEXT (vpc);
2787
2788 CASE (sem, INSN_MOV_COMPACT) : /* mov $rm64, $rn64 */
2789 {
2790 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2791 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2792 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2793 int UNUSED written = 0;
2794 IADDR UNUSED pc = abuf->addr;
2795 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2796
2797 {
2798 DI opval = GET_H_GR (FLD (f_rm));
2799 SET_H_GR (FLD (f_rn), opval);
2800 TRACE_RESULT (current_cpu, abuf, "rn64", 'D', opval);
2801 }
2802
2803 #undef FLD
2804 }
2805 NEXT (vpc);
2806
2807 CASE (sem, INSN_MOVI_COMPACT) : /* mov #$imm8, $rn */
2808 {
2809 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2810 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2811 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2812 int UNUSED written = 0;
2813 IADDR UNUSED pc = abuf->addr;
2814 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2815
2816 {
2817 SI opval = EXTQIDI (ANDQI (FLD (f_imm8), 255));
2818 SET_H_GRC (FLD (f_rn), opval);
2819 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2820 }
2821
2822 #undef FLD
2823 }
2824 NEXT (vpc);
2825
2826 CASE (sem, INSN_MOVB1_COMPACT) : /* mov.b $rm, @$rn */
2827 {
2828 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2829 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2830 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2831 int UNUSED written = 0;
2832 IADDR UNUSED pc = abuf->addr;
2833 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2834
2835 {
2836 UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
2837 SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
2838 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2839 }
2840
2841 #undef FLD
2842 }
2843 NEXT (vpc);
2844
2845 CASE (sem, INSN_MOVB2_COMPACT) : /* mov.b $rm, @-$rn */
2846 {
2847 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2848 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2849 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2850 int UNUSED written = 0;
2851 IADDR UNUSED pc = abuf->addr;
2852 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2853
2854 {
2855 DI tmp_addr;
2856 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
2857 {
2858 UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
2859 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
2860 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2861 }
2862 {
2863 SI opval = tmp_addr;
2864 SET_H_GRC (FLD (f_rn), opval);
2865 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2866 }
2867 }
2868
2869 #undef FLD
2870 }
2871 NEXT (vpc);
2872
2873 CASE (sem, INSN_MOVB3_COMPACT) : /* mov.b $rm, @(r0,$rn) */
2874 {
2875 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2876 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2877 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2878 int UNUSED written = 0;
2879 IADDR UNUSED pc = abuf->addr;
2880 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2881
2882 {
2883 UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
2884 SETMEMUQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2885 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2886 }
2887
2888 #undef FLD
2889 }
2890 NEXT (vpc);
2891
2892 CASE (sem, INSN_MOVB4_COMPACT) : /* mov.b r0, @($imm8, gbr) */
2893 {
2894 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2895 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2896 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2897 int UNUSED written = 0;
2898 IADDR UNUSED pc = abuf->addr;
2899 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2900
2901 {
2902 DI tmp_addr;
2903 tmp_addr = ADDSI (GET_H_GBR (), FLD (f_imm8));
2904 {
2905 UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
2906 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
2907 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2908 }
2909 }
2910
2911 #undef FLD
2912 }
2913 NEXT (vpc);
2914
2915 CASE (sem, INSN_MOVB5_COMPACT) : /* mov.b r0, @($imm4, $rm) */
2916 {
2917 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2918 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2919 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
2920 int UNUSED written = 0;
2921 IADDR UNUSED pc = abuf->addr;
2922 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2923
2924 {
2925 DI tmp_addr;
2926 tmp_addr = ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4));
2927 {
2928 UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
2929 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
2930 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2931 }
2932 }
2933
2934 #undef FLD
2935 }
2936 NEXT (vpc);
2937
2938 CASE (sem, INSN_MOVB6_COMPACT) : /* mov.b @$rm, $rn */
2939 {
2940 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2941 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2942 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2943 int UNUSED written = 0;
2944 IADDR UNUSED pc = abuf->addr;
2945 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2946
2947 {
2948 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
2949 SET_H_GRC (FLD (f_rn), opval);
2950 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2951 }
2952
2953 #undef FLD
2954 }
2955 NEXT (vpc);
2956
2957 CASE (sem, INSN_MOVB7_COMPACT) : /* mov.b @${rm}+, $rn */
2958 {
2959 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2960 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2961 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2962 int UNUSED written = 0;
2963 IADDR UNUSED pc = abuf->addr;
2964 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2965
2966 {
2967 QI tmp_data;
2968 tmp_data = GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2969 if (EQSI (FLD (f_rm), FLD (f_rn))) {
2970 {
2971 SI opval = EXTQISI (tmp_data);
2972 SET_H_GRC (FLD (f_rm), opval);
2973 written |= (1 << 4);
2974 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
2975 }
2976 } else {
2977 {
2978 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 1);
2979 SET_H_GRC (FLD (f_rm), opval);
2980 written |= (1 << 4);
2981 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
2982 }
2983 }
2984 {
2985 SI opval = EXTQISI (tmp_data);
2986 SET_H_GRC (FLD (f_rn), opval);
2987 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2988 }
2989 }
2990
2991 abuf->written = written;
2992 #undef FLD
2993 }
2994 NEXT (vpc);
2995
2996 CASE (sem, INSN_MOVB8_COMPACT) : /* mov.b @(r0, $rm), $rn */
2997 {
2998 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2999 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3000 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3001 int UNUSED written = 0;
3002 IADDR UNUSED pc = abuf->addr;
3003 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3004
3005 {
3006 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
3007 SET_H_GRC (FLD (f_rn), opval);
3008 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3009 }
3010
3011 #undef FLD
3012 }
3013 NEXT (vpc);
3014
3015 CASE (sem, INSN_MOVB9_COMPACT) : /* mov.b @($imm8, gbr), r0 */
3016 {
3017 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3018 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3019 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3020 int UNUSED written = 0;
3021 IADDR UNUSED pc = abuf->addr;
3022 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3023
3024 {
3025 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8))));
3026 SET_H_GRC (((UINT) 0), opval);
3027 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3028 }
3029
3030 #undef FLD
3031 }
3032 NEXT (vpc);
3033
3034 CASE (sem, INSN_MOVB10_COMPACT) : /* mov.b @($imm4, $rm), r0 */
3035 {
3036 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3037 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3038 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
3039 int UNUSED written = 0;
3040 IADDR UNUSED pc = abuf->addr;
3041 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3042
3043 {
3044 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4))));
3045 SET_H_GRC (((UINT) 0), opval);
3046 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3047 }
3048
3049 #undef FLD
3050 }
3051 NEXT (vpc);
3052
3053 CASE (sem, INSN_MOVL1_COMPACT) : /* mov.l $rm, @$rn */
3054 {
3055 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3056 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3057 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3058 int UNUSED written = 0;
3059 IADDR UNUSED pc = abuf->addr;
3060 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3061
3062 {
3063 SI opval = GET_H_GRC (FLD (f_rm));
3064 SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
3065 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3066 }
3067
3068 #undef FLD
3069 }
3070 NEXT (vpc);
3071
3072 CASE (sem, INSN_MOVL2_COMPACT) : /* mov.l $rm, @-$rn */
3073 {
3074 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3075 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3076 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3077 int UNUSED written = 0;
3078 IADDR UNUSED pc = abuf->addr;
3079 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3080
3081 {
3082 SI tmp_addr;
3083 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
3084 {
3085 SI opval = GET_H_GRC (FLD (f_rm));
3086 SETMEMSI (current_cpu, pc, tmp_addr, opval);
3087 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3088 }
3089 {
3090 SI opval = tmp_addr;
3091 SET_H_GRC (FLD (f_rn), opval);
3092 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3093 }
3094 }
3095
3096 #undef FLD
3097 }
3098 NEXT (vpc);
3099
3100 CASE (sem, INSN_MOVL3_COMPACT) : /* mov.l $rm, @(r0, $rn) */
3101 {
3102 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3103 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3104 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3105 int UNUSED written = 0;
3106 IADDR UNUSED pc = abuf->addr;
3107 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3108
3109 {
3110 SI opval = GET_H_GRC (FLD (f_rm));
3111 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
3112 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3113 }
3114
3115 #undef FLD
3116 }
3117 NEXT (vpc);
3118
3119 CASE (sem, INSN_MOVL4_COMPACT) : /* mov.l r0, @($imm8x4, gbr) */
3120 {
3121 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3122 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3123 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3124 int UNUSED written = 0;
3125 IADDR UNUSED pc = abuf->addr;
3126 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3127
3128 {
3129 SI opval = GET_H_GRC (((UINT) 0));
3130 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)), opval);
3131 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3132 }
3133
3134 #undef FLD
3135 }
3136 NEXT (vpc);
3137
3138 CASE (sem, INSN_MOVL5_COMPACT) : /* mov.l $rm, @($imm4x4, $rn) */
3139 {
3140 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3141 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3142 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3143 int UNUSED written = 0;
3144 IADDR UNUSED pc = abuf->addr;
3145 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3146
3147 {
3148 SI opval = GET_H_GRC (FLD (f_rm));
3149 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm4x4)), opval);
3150 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3151 }
3152
3153 #undef FLD
3154 }
3155 NEXT (vpc);
3156
3157 CASE (sem, INSN_MOVL6_COMPACT) : /* mov.l @$rm, $rn */
3158 {
3159 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3160 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3161 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3162 int UNUSED written = 0;
3163 IADDR UNUSED pc = abuf->addr;
3164 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3165
3166 {
3167 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3168 SET_H_GRC (FLD (f_rn), opval);
3169 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3170 }
3171
3172 #undef FLD
3173 }
3174 NEXT (vpc);
3175
3176 CASE (sem, INSN_MOVL7_COMPACT) : /* mov.l @${rm}+, $rn */
3177 {
3178 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3179 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3180 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3181 int UNUSED written = 0;
3182 IADDR UNUSED pc = abuf->addr;
3183 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3184
3185 {
3186 {
3187 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3188 SET_H_GRC (FLD (f_rn), opval);
3189 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3190 }
3191 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3192 {
3193 SI opval = GET_H_GRC (FLD (f_rn));
3194 SET_H_GRC (FLD (f_rm), opval);
3195 written |= (1 << 5);
3196 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
3197 }
3198 } else {
3199 {
3200 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
3201 SET_H_GRC (FLD (f_rm), opval);
3202 written |= (1 << 5);
3203 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
3204 }
3205 }
3206 }
3207
3208 abuf->written = written;
3209 #undef FLD
3210 }
3211 NEXT (vpc);
3212
3213 CASE (sem, INSN_MOVL8_COMPACT) : /* mov.l @(r0, $rm), $rn */
3214 {
3215 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3216 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3217 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3218 int UNUSED written = 0;
3219 IADDR UNUSED pc = abuf->addr;
3220 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3221
3222 {
3223 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
3224 SET_H_GRC (FLD (f_rn), opval);
3225 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3226 }
3227
3228 #undef FLD
3229 }
3230 NEXT (vpc);
3231
3232 CASE (sem, INSN_MOVL9_COMPACT) : /* mov.l @($imm8x4, gbr), r0 */
3233 {
3234 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3235 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3236 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3237 int UNUSED written = 0;
3238 IADDR UNUSED pc = abuf->addr;
3239 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3240
3241 {
3242 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)));
3243 SET_H_GRC (((UINT) 0), opval);
3244 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3245 }
3246
3247 #undef FLD
3248 }
3249 NEXT (vpc);
3250
3251 CASE (sem, INSN_MOVL10_COMPACT) : /* mov.l @($imm8x4, pc), $rn */
3252 {
3253 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3254 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3255 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3256 int UNUSED written = 0;
3257 IADDR UNUSED pc = abuf->addr;
3258 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3259
3260 {
3261 SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_imm8x4), ANDDI (ADDDI (pc, 4), INVSI (3))));
3262 SET_H_GRC (FLD (f_rn), opval);
3263 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3264 }
3265
3266 #undef FLD
3267 }
3268 NEXT (vpc);
3269
3270 CASE (sem, INSN_MOVL11_COMPACT) : /* mov.l @($imm4x4, $rm), $rn */
3271 {
3272 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3274 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3275 int UNUSED written = 0;
3276 IADDR UNUSED pc = abuf->addr;
3277 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3278
3279 {
3280 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x4)));
3281 SET_H_GRC (FLD (f_rn), opval);
3282 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3283 }
3284
3285 #undef FLD
3286 }
3287 NEXT (vpc);
3288
3289 CASE (sem, INSN_MOVW1_COMPACT) : /* mov.w $rm, @$rn */
3290 {
3291 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3292 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3293 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3294 int UNUSED written = 0;
3295 IADDR UNUSED pc = abuf->addr;
3296 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3297
3298 {
3299 HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
3300 SETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
3301 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3302 }
3303
3304 #undef FLD
3305 }
3306 NEXT (vpc);
3307
3308 CASE (sem, INSN_MOVW2_COMPACT) : /* mov.w $rm, @-$rn */
3309 {
3310 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3311 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3312 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3313 int UNUSED written = 0;
3314 IADDR UNUSED pc = abuf->addr;
3315 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3316
3317 {
3318 DI tmp_addr;
3319 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 2);
3320 {
3321 HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
3322 SETMEMHI (current_cpu, pc, tmp_addr, opval);
3323 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3324 }
3325 {
3326 SI opval = tmp_addr;
3327 SET_H_GRC (FLD (f_rn), opval);
3328 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3329 }
3330 }
3331
3332 #undef FLD
3333 }
3334 NEXT (vpc);
3335
3336 CASE (sem, INSN_MOVW3_COMPACT) : /* mov.w $rm, @(r0, $rn) */
3337 {
3338 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3339 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3340 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3341 int UNUSED written = 0;
3342 IADDR UNUSED pc = abuf->addr;
3343 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3344
3345 {
3346 HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
3347 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
3348 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3349 }
3350
3351 #undef FLD
3352 }
3353 NEXT (vpc);
3354
3355 CASE (sem, INSN_MOVW4_COMPACT) : /* mov.w r0, @($imm8x2, gbr) */
3356 {
3357 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3358 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3359 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3360 int UNUSED written = 0;
3361 IADDR UNUSED pc = abuf->addr;
3362 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3363
3364 {
3365 HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
3366 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2)), opval);
3367 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3368 }
3369
3370 #undef FLD
3371 }
3372 NEXT (vpc);
3373
3374 CASE (sem, INSN_MOVW5_COMPACT) : /* mov.w r0, @($imm4x2, $rn) */
3375 {
3376 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3377 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3378 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3379 int UNUSED written = 0;
3380 IADDR UNUSED pc = abuf->addr;
3381 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3382
3383 {
3384 HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
3385 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm4x2)), opval);
3386 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3387 }
3388
3389 #undef FLD
3390 }
3391 NEXT (vpc);
3392
3393 CASE (sem, INSN_MOVW6_COMPACT) : /* mov.w @$rm, $rn */
3394 {
3395 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3396 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3397 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3398 int UNUSED written = 0;
3399 IADDR UNUSED pc = abuf->addr;
3400 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3401
3402 {
3403 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
3404 SET_H_GRC (FLD (f_rn), opval);
3405 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3406 }
3407
3408 #undef FLD
3409 }
3410 NEXT (vpc);
3411
3412 CASE (sem, INSN_MOVW7_COMPACT) : /* mov.w @${rm}+, $rn */
3413 {
3414 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3415 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3416 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3417 int UNUSED written = 0;
3418 IADDR UNUSED pc = abuf->addr;
3419 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3420
3421 {
3422 HI tmp_data;
3423 tmp_data = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3424 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3425 {
3426 SI opval = EXTHISI (tmp_data);
3427 SET_H_GRC (FLD (f_rm), opval);
3428 written |= (1 << 4);
3429 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
3430 }
3431 } else {
3432 {
3433 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
3434 SET_H_GRC (FLD (f_rm), opval);
3435 written |= (1 << 4);
3436 TRACE_RESULT (current_cpu, abuf, "rm", 'x', opval);
3437 }
3438 }
3439 {
3440 SI opval = EXTHISI (tmp_data);
3441 SET_H_GRC (FLD (f_rn), opval);
3442 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3443 }
3444 }
3445
3446 abuf->written = written;
3447 #undef FLD
3448 }
3449 NEXT (vpc);
3450
3451 CASE (sem, INSN_MOVW8_COMPACT) : /* mov.w @(r0, $rm), $rn */
3452 {
3453 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3454 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3455 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3456 int UNUSED written = 0;
3457 IADDR UNUSED pc = abuf->addr;
3458 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3459
3460 {
3461 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
3462 SET_H_GRC (FLD (f_rn), opval);
3463 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3464 }
3465
3466 #undef FLD
3467 }
3468 NEXT (vpc);
3469
3470 CASE (sem, INSN_MOVW9_COMPACT) : /* mov.w @($imm8x2, gbr), r0 */
3471 {
3472 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3473 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3474 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3475 int UNUSED written = 0;
3476 IADDR UNUSED pc = abuf->addr;
3477 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3478
3479 {
3480 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2))));
3481 SET_H_GRC (((UINT) 0), opval);
3482 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3483 }
3484
3485 #undef FLD
3486 }
3487 NEXT (vpc);
3488
3489 CASE (sem, INSN_MOVW10_COMPACT) : /* mov.w @($imm8x2, pc), $rn */
3490 {
3491 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3492 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3493 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3494 int UNUSED written = 0;
3495 IADDR UNUSED pc = abuf->addr;
3496 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3497
3498 {
3499 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDDI (ADDDI (pc, 4), FLD (f_imm8x2))));
3500 SET_H_GRC (FLD (f_rn), opval);
3501 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3502 }
3503
3504 #undef FLD
3505 }
3506 NEXT (vpc);
3507
3508 CASE (sem, INSN_MOVW11_COMPACT) : /* mov.w @($imm4x2, $rm), r0 */
3509 {
3510 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3511 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3512 #define FLD(f) abuf->fields.sfmt_movw11_compact.f
3513 int UNUSED written = 0;
3514 IADDR UNUSED pc = abuf->addr;
3515 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3516
3517 {
3518 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2))));
3519 SET_H_GRC (((UINT) 0), opval);
3520 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3521 }
3522
3523 #undef FLD
3524 }
3525 NEXT (vpc);
3526
3527 CASE (sem, INSN_MOVA_COMPACT) : /* mova @($imm8x4, pc), r0 */
3528 {
3529 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3530 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3531 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3532 int UNUSED written = 0;
3533 IADDR UNUSED pc = abuf->addr;
3534 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3535
3536 {
3537 SI opval = ADDDI (ANDDI (ADDDI (pc, 4), INVSI (3)), FLD (f_imm8x4));
3538 SET_H_GRC (((UINT) 0), opval);
3539 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3540 }
3541
3542 #undef FLD
3543 }
3544 NEXT (vpc);
3545
3546 CASE (sem, INSN_MOVCAL_COMPACT) : /* movca.l r0, @$rn */
3547 {
3548 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3549 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3550 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3551 int UNUSED written = 0;
3552 IADDR UNUSED pc = abuf->addr;
3553 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3554
3555 {
3556 SI opval = GET_H_GRC (((UINT) 0));
3557 SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
3558 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3559 }
3560
3561 #undef FLD
3562 }
3563 NEXT (vpc);
3564
3565 CASE (sem, INSN_MOVT_COMPACT) : /* movt $rn */
3566 {
3567 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3568 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3569 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3570 int UNUSED written = 0;
3571 IADDR UNUSED pc = abuf->addr;
3572 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3573
3574 {
3575 SI opval = ZEXTBISI (GET_H_TBIT ());
3576 SET_H_GRC (FLD (f_rn), opval);
3577 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3578 }
3579
3580 #undef FLD
3581 }
3582 NEXT (vpc);
3583
3584 CASE (sem, INSN_MULL_COMPACT) : /* mul.l $rm, $rn */
3585 {
3586 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3587 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3588 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3589 int UNUSED written = 0;
3590 IADDR UNUSED pc = abuf->addr;
3591 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3592
3593 {
3594 SI opval = MULSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
3595 SET_H_MACL (opval);
3596 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3597 }
3598
3599 #undef FLD
3600 }
3601 NEXT (vpc);
3602
3603 CASE (sem, INSN_MULSW_COMPACT) : /* muls.w $rm, $rn */
3604 {
3605 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3606 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3607 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3608 int UNUSED written = 0;
3609 IADDR UNUSED pc = abuf->addr;
3610 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3611
3612 {
3613 SI opval = MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3614 SET_H_MACL (opval);
3615 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3616 }
3617
3618 #undef FLD
3619 }
3620 NEXT (vpc);
3621
3622 CASE (sem, INSN_MULUW_COMPACT) : /* mulu.w $rm, $rn */
3623 {
3624 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3625 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3626 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3627 int UNUSED written = 0;
3628 IADDR UNUSED pc = abuf->addr;
3629 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3630
3631 {
3632 SI opval = MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3633 SET_H_MACL (opval);
3634 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3635 }
3636
3637 #undef FLD
3638 }
3639 NEXT (vpc);
3640
3641 CASE (sem, INSN_NEG_COMPACT) : /* neg $rm, $rn */
3642 {
3643 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3644 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3645 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3646 int UNUSED written = 0;
3647 IADDR UNUSED pc = abuf->addr;
3648 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3649
3650 {
3651 SI opval = NEGSI (GET_H_GRC (FLD (f_rm)));
3652 SET_H_GRC (FLD (f_rn), opval);
3653 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3654 }
3655
3656 #undef FLD
3657 }
3658 NEXT (vpc);
3659
3660 CASE (sem, INSN_NEGC_COMPACT) : /* negc $rm, $rn */
3661 {
3662 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3663 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3664 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3665 int UNUSED written = 0;
3666 IADDR UNUSED pc = abuf->addr;
3667 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3668
3669 {
3670 BI tmp_flag;
3671 tmp_flag = SUBCFSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
3672 {
3673 SI opval = SUBCSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
3674 SET_H_GRC (FLD (f_rn), opval);
3675 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3676 }
3677 {
3678 BI opval = tmp_flag;
3679 SET_H_TBIT (opval);
3680 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3681 }
3682 }
3683
3684 #undef FLD
3685 }
3686 NEXT (vpc);
3687
3688 CASE (sem, INSN_NOP_COMPACT) : /* nop */
3689 {
3690 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3691 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3692 #define FLD(f) abuf->fields.fmt_empty.f
3693 int UNUSED written = 0;
3694 IADDR UNUSED pc = abuf->addr;
3695 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3696
3697 ((void) 0); /*nop*/
3698
3699 #undef FLD
3700 }
3701 NEXT (vpc);
3702
3703 CASE (sem, INSN_NOT_COMPACT) : /* not $rm64, $rn64 */
3704 {
3705 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3706 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3707 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3708 int UNUSED written = 0;
3709 IADDR UNUSED pc = abuf->addr;
3710 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3711
3712 {
3713 DI opval = INVDI (GET_H_GR (FLD (f_rm)));
3714 SET_H_GR (FLD (f_rn), opval);
3715 TRACE_RESULT (current_cpu, abuf, "rn64", 'D', opval);
3716 }
3717
3718 #undef FLD
3719 }
3720 NEXT (vpc);
3721
3722 CASE (sem, INSN_OCBI_COMPACT) : /* ocbi @$rn */
3723 {
3724 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3725 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3726 #define FLD(f) abuf->fields.fmt_empty.f
3727 int UNUSED written = 0;
3728 IADDR UNUSED pc = abuf->addr;
3729 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3730
3731 ((void) 0); /*nop*/
3732
3733 #undef FLD
3734 }
3735 NEXT (vpc);
3736
3737 CASE (sem, INSN_OCBP_COMPACT) : /* ocbp @$rn */
3738 {
3739 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3740 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3741 #define FLD(f) abuf->fields.fmt_empty.f
3742 int UNUSED written = 0;
3743 IADDR UNUSED pc = abuf->addr;
3744 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3745
3746 ((void) 0); /*nop*/
3747
3748 #undef FLD
3749 }
3750 NEXT (vpc);
3751
3752 CASE (sem, INSN_OCBWB_COMPACT) : /* ocbwb @$rn */
3753 {
3754 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3755 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3756 #define FLD(f) abuf->fields.fmt_empty.f
3757 int UNUSED written = 0;
3758 IADDR UNUSED pc = abuf->addr;
3759 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3760
3761 ((void) 0); /*nop*/
3762
3763 #undef FLD
3764 }
3765 NEXT (vpc);
3766
3767 CASE (sem, INSN_OR_COMPACT) : /* or $rm64, $rn64 */
3768 {
3769 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3770 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3771 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3772 int UNUSED written = 0;
3773 IADDR UNUSED pc = abuf->addr;
3774 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3775
3776 {
3777 DI opval = ORDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
3778 SET_H_GR (FLD (f_rn), opval);
3779 TRACE_RESULT (current_cpu, abuf, "rn64", 'D', opval);
3780 }
3781
3782 #undef FLD
3783 }
3784 NEXT (vpc);
3785
3786 CASE (sem, INSN_ORI_COMPACT) : /* or #$uimm8, r0 */
3787 {
3788 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3789 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3790 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3791 int UNUSED written = 0;
3792 IADDR UNUSED pc = abuf->addr;
3793 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3794
3795 {
3796 SI opval = ORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
3797 SET_H_GRC (((UINT) 0), opval);
3798 TRACE_RESULT (current_cpu, abuf, "r0", 'x', opval);
3799 }
3800
3801 #undef FLD
3802 }
3803 NEXT (vpc);
3804
3805 CASE (sem, INSN_ORB_COMPACT) : /* or.b #$imm8, @(r0, gbr) */
3806 {
3807 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3808 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3809 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3810 int UNUSED written = 0;
3811 IADDR UNUSED pc = abuf->addr;
3812 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3813
3814 {
3815 DI tmp_addr;
3816 UQI tmp_data;
3817 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
3818 tmp_data = ORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
3819 {
3820 UQI opval = tmp_data;
3821 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
3822 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3823 }
3824 }
3825
3826 #undef FLD
3827 }
3828 NEXT (vpc);
3829
3830 CASE (sem, INSN_PREF_COMPACT) : /* pref @$rn */
3831 {
3832 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3833 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3834 #define FLD(f) abuf->fields.fmt_empty.f
3835 int UNUSED written = 0;
3836 IADDR UNUSED pc = abuf->addr;
3837 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3838
3839 ((void) 0); /*nop*/
3840
3841 #undef FLD
3842 }
3843 NEXT (vpc);
3844
3845 CASE (sem, INSN_ROTCL_COMPACT) : /* rotcl $rn */
3846 {
3847 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3848 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3849 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3850 int UNUSED written = 0;
3851 IADDR UNUSED pc = abuf->addr;
3852 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3853
3854 {
3855 BI tmp_temp;
3856 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
3857 {
3858 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), GET_H_TBIT ());
3859 SET_H_GRC (FLD (f_rn), opval);
3860 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3861 }
3862 {
3863 BI opval = ((tmp_temp) ? (1) : (0));
3864 SET_H_TBIT (opval);
3865 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3866 }
3867 }
3868
3869 #undef FLD
3870 }
3871 NEXT (vpc);
3872
3873 CASE (sem, INSN_ROTCR_COMPACT) : /* rotcr $rn */
3874 {
3875 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3876 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3877 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3878 int UNUSED written = 0;
3879 IADDR UNUSED pc = abuf->addr;
3880 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3881
3882 {
3883 BI tmp_lsbit;
3884 SI tmp_temp;
3885 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
3886 tmp_temp = GET_H_TBIT ();
3887 {
3888 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
3889 SET_H_GRC (FLD (f_rn), opval);
3890 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3891 }
3892 {
3893 BI opval = ((tmp_lsbit) ? (1) : (0));
3894 SET_H_TBIT (opval);
3895 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3896 }
3897 }
3898
3899 #undef FLD
3900 }
3901 NEXT (vpc);
3902
3903 CASE (sem, INSN_ROTL_COMPACT) : /* rotl $rn */
3904 {
3905 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3906 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3907 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3908 int UNUSED written = 0;
3909 IADDR UNUSED pc = abuf->addr;
3910 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3911
3912 {
3913 BI tmp_temp;
3914 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
3915 {
3916 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), tmp_temp);
3917 SET_H_GRC (FLD (f_rn), opval);
3918 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3919 }
3920 {
3921 BI opval = ((tmp_temp) ? (1) : (0));
3922 SET_H_TBIT (opval);
3923 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3924 }
3925 }
3926
3927 #undef FLD
3928 }
3929 NEXT (vpc);
3930
3931 CASE (sem, INSN_ROTR_COMPACT) : /* rotr $rn */
3932 {
3933 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3934 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3935 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3936 int UNUSED written = 0;
3937 IADDR UNUSED pc = abuf->addr;
3938 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3939
3940 {
3941 BI tmp_lsbit;
3942 SI tmp_temp;
3943 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
3944 tmp_temp = tmp_lsbit;
3945 {
3946 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
3947 SET_H_GRC (FLD (f_rn), opval);
3948 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3949 }
3950 {
3951 BI opval = ((tmp_lsbit) ? (1) : (0));
3952 SET_H_TBIT (opval);
3953 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3954 }
3955 }
3956
3957 #undef FLD
3958 }
3959 NEXT (vpc);
3960
3961 CASE (sem, INSN_RTS_COMPACT) : /* rts */
3962 {
3963 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3964 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3965 #define FLD(f) abuf->fields.fmt_empty.f
3966 int UNUSED written = 0;
3967 IADDR UNUSED pc = abuf->addr;
3968 SEM_BRANCH_INIT
3969 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3970
3971 {
3972 {
3973 UDI opval = GET_H_PR ();
3974 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3975 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
3976 }
3977 }
3978
3979 SEM_BRANCH_FINI (vpc);
3980 #undef FLD
3981 }
3982 NEXT (vpc);
3983
3984 CASE (sem, INSN_SETS_COMPACT) : /* sets */
3985 {
3986 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3987 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3988 #define FLD(f) abuf->fields.fmt_empty.f
3989 int UNUSED written = 0;
3990 IADDR UNUSED pc = abuf->addr;
3991 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3992
3993 {
3994 BI opval = 1;
3995 SET_H_SBIT (opval);
3996 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
3997 }
3998
3999 #undef FLD
4000 }
4001 NEXT (vpc);
4002
4003 CASE (sem, INSN_SETT_COMPACT) : /* sett */
4004 {
4005 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4006 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4007 #define FLD(f) abuf->fields.fmt_empty.f
4008 int UNUSED written = 0;
4009 IADDR UNUSED pc = abuf->addr;
4010 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4011
4012 {
4013 BI opval = 1;
4014 SET_H_TBIT (opval);
4015 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4016 }
4017
4018 #undef FLD
4019 }
4020 NEXT (vpc);
4021
4022 CASE (sem, INSN_SHAD_COMPACT) : /* shad $rm, $rn */
4023 {
4024 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4025 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4026 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4027 int UNUSED written = 0;
4028 IADDR UNUSED pc = abuf->addr;
4029 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4030
4031 {
4032 QI tmp_shamt;
4033 tmp_shamt = ANDQI (GET_H_GRC (FLD (f_rm)), 31);
4034 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
4035 {
4036 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
4037 SET_H_GRC (FLD (f_rn), opval);
4038 written |= (1 << 3);
4039 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4040 }
4041 } else {
4042 if (NEQI (tmp_shamt, 0)) {
4043 {
4044 SI opval = SRASI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
4045 SET_H_GRC (FLD (f_rn), opval);
4046 written |= (1 << 3);
4047 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4048 }
4049 } else {
4050 if (LTSI (GET_H_GRC (FLD (f_rn)), 0)) {
4051 {
4052 SI opval = NEGSI (1);
4053 SET_H_GRC (FLD (f_rn), opval);
4054 written |= (1 << 3);
4055 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4056 }
4057 } else {
4058 {
4059 SI opval = 0;
4060 SET_H_GRC (FLD (f_rn), opval);
4061 written |= (1 << 3);
4062 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4063 }
4064 }
4065 }
4066 }
4067 }
4068
4069 abuf->written = written;
4070 #undef FLD
4071 }
4072 NEXT (vpc);
4073
4074 CASE (sem, INSN_SHAL_COMPACT) : /* shal $rn */
4075 {
4076 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4077 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4078 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4079 int UNUSED written = 0;
4080 IADDR UNUSED pc = abuf->addr;
4081 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4082
4083 {
4084 BI tmp_t;
4085 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4086 {
4087 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
4088 SET_H_GRC (FLD (f_rn), opval);
4089 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4090 }
4091 {
4092 BI opval = ((tmp_t) ? (1) : (0));
4093 SET_H_TBIT (opval);
4094 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4095 }
4096 }
4097
4098 #undef FLD
4099 }
4100 NEXT (vpc);
4101
4102 CASE (sem, INSN_SHAR_COMPACT) : /* shar $rn */
4103 {
4104 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4105 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4106 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4107 int UNUSED written = 0;
4108 IADDR UNUSED pc = abuf->addr;
4109 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4110
4111 {
4112 BI tmp_t;
4113 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
4114 {
4115 SI opval = SRASI (GET_H_GRC (FLD (f_rn)), 1);
4116 SET_H_GRC (FLD (f_rn), opval);
4117 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4118 }
4119 {
4120 BI opval = ((tmp_t) ? (1) : (0));
4121 SET_H_TBIT (opval);
4122 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4123 }
4124 }
4125
4126 #undef FLD
4127 }
4128 NEXT (vpc);
4129
4130 CASE (sem, INSN_SHLD_COMPACT) : /* shld $rm, $rn */
4131 {
4132 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4133 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4134 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4135 int UNUSED written = 0;
4136 IADDR UNUSED pc = abuf->addr;
4137 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4138
4139 {
4140 QI tmp_shamt;
4141 tmp_shamt = ANDQI (GET_H_GRC (FLD (f_rm)), 31);
4142 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
4143 {
4144 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
4145 SET_H_GRC (FLD (f_rn), opval);
4146 written |= (1 << 3);
4147 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4148 }
4149 } else {
4150 if (NEQI (tmp_shamt, 0)) {
4151 {
4152 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
4153 SET_H_GRC (FLD (f_rn), opval);
4154 written |= (1 << 3);
4155 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4156 }
4157 } else {
4158 {
4159 SI opval = 0;
4160 SET_H_GRC (FLD (f_rn), opval);
4161 written |= (1 << 3);
4162 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4163 }
4164 }
4165 }
4166 }
4167
4168 abuf->written = written;
4169 #undef FLD
4170 }
4171 NEXT (vpc);
4172
4173 CASE (sem, INSN_SHLL_COMPACT) : /* shll $rn */
4174 {
4175 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4176 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4177 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4178 int UNUSED written = 0;
4179 IADDR UNUSED pc = abuf->addr;
4180 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4181
4182 {
4183 BI tmp_t;
4184 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4185 {
4186 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
4187 SET_H_GRC (FLD (f_rn), opval);
4188 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4189 }
4190 {
4191 BI opval = ((tmp_t) ? (1) : (0));
4192 SET_H_TBIT (opval);
4193 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4194 }
4195 }
4196
4197 #undef FLD
4198 }
4199 NEXT (vpc);
4200
4201 CASE (sem, INSN_SHLL2_COMPACT) : /* shll2 $rn */
4202 {
4203 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4204 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4205 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4206 int UNUSED written = 0;
4207 IADDR UNUSED pc = abuf->addr;
4208 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4209
4210 {
4211 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 2);
4212 SET_H_GRC (FLD (f_rn), opval);
4213 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4214 }
4215
4216 #undef FLD
4217 }
4218 NEXT (vpc);
4219
4220 CASE (sem, INSN_SHLL8_COMPACT) : /* shll8 $rn */
4221 {
4222 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4223 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4224 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4225 int UNUSED written = 0;
4226 IADDR UNUSED pc = abuf->addr;
4227 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4228
4229 {
4230 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 8);
4231 SET_H_GRC (FLD (f_rn), opval);
4232 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4233 }
4234
4235 #undef FLD
4236 }
4237 NEXT (vpc);
4238
4239 CASE (sem, INSN_SHLL16_COMPACT) : /* shll16 $rn */
4240 {
4241 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4242 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4243 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4244 int UNUSED written = 0;
4245 IADDR UNUSED pc = abuf->addr;
4246 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4247
4248 {
4249 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 16);
4250 SET_H_GRC (FLD (f_rn), opval);
4251 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4252 }
4253
4254 #undef FLD
4255 }
4256 NEXT (vpc);
4257
4258 CASE (sem, INSN_SHLR_COMPACT) : /* shlr $rn */
4259 {
4260 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4261 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4262 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4263 int UNUSED written = 0;
4264 IADDR UNUSED pc = abuf->addr;
4265 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4266
4267 {
4268 BI tmp_t;
4269 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
4270 {
4271 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 1);
4272 SET_H_GRC (FLD (f_rn), opval);
4273 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4274 }
4275 {
4276 BI opval = ((tmp_t) ? (1) : (0));
4277 SET_H_TBIT (opval);
4278 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4279 }
4280 }
4281
4282 #undef FLD
4283 }
4284 NEXT (vpc);
4285
4286 CASE (sem, INSN_SHLR2_COMPACT) : /* shlr2 $rn */
4287 {
4288 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4289 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4290 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4291 int UNUSED written = 0;
4292 IADDR UNUSED pc = abuf->addr;
4293 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4294
4295 {
4296 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 2);
4297 SET_H_GRC (FLD (f_rn), opval);
4298 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4299 }
4300
4301 #undef FLD
4302 }
4303 NEXT (vpc);
4304
4305 CASE (sem, INSN_SHLR8_COMPACT) : /* shlr8 $rn */
4306 {
4307 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4308 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4309 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4310 int UNUSED written = 0;
4311 IADDR UNUSED pc = abuf->addr;
4312 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4313
4314 {
4315 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 8);
4316 SET_H_GRC (FLD (f_rn), opval);
4317 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4318 }
4319
4320 #undef FLD
4321 }
4322 NEXT (vpc);
4323
4324 CASE (sem, INSN_SHLR16_COMPACT) : /* shlr16 $rn */
4325 {
4326 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4327 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4328 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4329 int UNUSED written = 0;
4330 IADDR UNUSED pc = abuf->addr;
4331 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4332
4333 {
4334 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 16);
4335 SET_H_GRC (FLD (f_rn), opval);
4336 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4337 }
4338
4339 #undef FLD
4340 }
4341 NEXT (vpc);
4342
4343 CASE (sem, INSN_STC_GBR_COMPACT) : /* stc gbr, $rn */
4344 {
4345 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4346 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4347 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4348 int UNUSED written = 0;
4349 IADDR UNUSED pc = abuf->addr;
4350 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4351
4352 {
4353 SI opval = GET_H_GBR ();
4354 SET_H_GRC (FLD (f_rn), opval);
4355 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4356 }
4357
4358 #undef FLD
4359 }
4360 NEXT (vpc);
4361
4362 CASE (sem, INSN_STCL_GBR_COMPACT) : /* stc.l gbr, @-$rn */
4363 {
4364 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4365 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4366 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4367 int UNUSED written = 0;
4368 IADDR UNUSED pc = abuf->addr;
4369 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4370
4371 {
4372 DI tmp_addr;
4373 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4374 {
4375 SI opval = GET_H_GBR ();
4376 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4377 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4378 }
4379 {
4380 SI opval = tmp_addr;
4381 SET_H_GRC (FLD (f_rn), opval);
4382 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4383 }
4384 }
4385
4386 #undef FLD
4387 }
4388 NEXT (vpc);
4389
4390 CASE (sem, INSN_STS_FPSCR_COMPACT) : /* sts fpscr, $rn */
4391 {
4392 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4393 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4394 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4395 int UNUSED written = 0;
4396 IADDR UNUSED pc = abuf->addr;
4397 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4398
4399 {
4400 SI opval = GET_H_FPCCR ();
4401 SET_H_GRC (FLD (f_rn), opval);
4402 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4403 }
4404
4405 #undef FLD
4406 }
4407 NEXT (vpc);
4408
4409 CASE (sem, INSN_STSL_FPSCR_COMPACT) : /* sts.l fpscr, @-$rn */
4410 {
4411 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4412 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4413 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4414 int UNUSED written = 0;
4415 IADDR UNUSED pc = abuf->addr;
4416 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4417
4418 {
4419 DI tmp_addr;
4420 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4421 {
4422 SI opval = GET_H_FPCCR ();
4423 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4424 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4425 }
4426 {
4427 SI opval = tmp_addr;
4428 SET_H_GRC (FLD (f_rn), opval);
4429 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4430 }
4431 }
4432
4433 #undef FLD
4434 }
4435 NEXT (vpc);
4436
4437 CASE (sem, INSN_STS_FPUL_COMPACT) : /* sts fpul, $rn */
4438 {
4439 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4440 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4441 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4442 int UNUSED written = 0;
4443 IADDR UNUSED pc = abuf->addr;
4444 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4445
4446 {
4447 SI opval = SUBWORDSFSI (CPU (h_fr[((UINT) 32)]));
4448 SET_H_GRC (FLD (f_rn), opval);
4449 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4450 }
4451
4452 #undef FLD
4453 }
4454 NEXT (vpc);
4455
4456 CASE (sem, INSN_STSL_FPUL_COMPACT) : /* sts.l fpul, @-$rn */
4457 {
4458 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4459 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4460 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4461 int UNUSED written = 0;
4462 IADDR UNUSED pc = abuf->addr;
4463 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4464
4465 {
4466 DI tmp_addr;
4467 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4468 {
4469 SF opval = CPU (h_fr[((UINT) 32)]);
4470 SETMEMSF (current_cpu, pc, tmp_addr, opval);
4471 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
4472 }
4473 {
4474 SI opval = tmp_addr;
4475 SET_H_GRC (FLD (f_rn), opval);
4476 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4477 }
4478 }
4479
4480 #undef FLD
4481 }
4482 NEXT (vpc);
4483
4484 CASE (sem, INSN_STS_MACH_COMPACT) : /* sts mach, $rn */
4485 {
4486 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4487 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4488 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4489 int UNUSED written = 0;
4490 IADDR UNUSED pc = abuf->addr;
4491 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4492
4493 {
4494 SI opval = GET_H_MACH ();
4495 SET_H_GRC (FLD (f_rn), opval);
4496 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4497 }
4498
4499 #undef FLD
4500 }
4501 NEXT (vpc);
4502
4503 CASE (sem, INSN_STSL_MACH_COMPACT) : /* sts.l mach, @-$rn */
4504 {
4505 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4506 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4507 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4508 int UNUSED written = 0;
4509 IADDR UNUSED pc = abuf->addr;
4510 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4511
4512 {
4513 DI tmp_addr;
4514 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4515 {
4516 SI opval = GET_H_MACH ();
4517 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4518 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4519 }
4520 {
4521 SI opval = tmp_addr;
4522 SET_H_GRC (FLD (f_rn), opval);
4523 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4524 }
4525 }
4526
4527 #undef FLD
4528 }
4529 NEXT (vpc);
4530
4531 CASE (sem, INSN_STS_MACL_COMPACT) : /* sts macl, $rn */
4532 {
4533 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4535 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4536 int UNUSED written = 0;
4537 IADDR UNUSED pc = abuf->addr;
4538 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4539
4540 {
4541 SI opval = GET_H_MACL ();
4542 SET_H_GRC (FLD (f_rn), opval);
4543 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4544 }
4545
4546 #undef FLD
4547 }
4548 NEXT (vpc);
4549
4550 CASE (sem, INSN_STSL_MACL_COMPACT) : /* sts.l macl, @-$rn */
4551 {
4552 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4553 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4554 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4555 int UNUSED written = 0;
4556 IADDR UNUSED pc = abuf->addr;
4557 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4558
4559 {
4560 DI tmp_addr;
4561 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4562 {
4563 SI opval = GET_H_MACL ();
4564 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4565 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4566 }
4567 {
4568 SI opval = tmp_addr;
4569 SET_H_GRC (FLD (f_rn), opval);
4570 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4571 }
4572 }
4573
4574 #undef FLD
4575 }
4576 NEXT (vpc);
4577
4578 CASE (sem, INSN_STS_PR_COMPACT) : /* sts pr, $rn */
4579 {
4580 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4581 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4582 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4583 int UNUSED written = 0;
4584 IADDR UNUSED pc = abuf->addr;
4585 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4586
4587 {
4588 SI opval = GET_H_PR ();
4589 SET_H_GRC (FLD (f_rn), opval);
4590 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4591 }
4592
4593 #undef FLD
4594 }
4595 NEXT (vpc);
4596
4597 CASE (sem, INSN_STSL_PR_COMPACT) : /* sts.l pr, @-$rn */
4598 {
4599 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4600 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4601 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4602 int UNUSED written = 0;
4603 IADDR UNUSED pc = abuf->addr;
4604 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4605
4606 {
4607 DI tmp_addr;
4608 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4609 {
4610 SI opval = GET_H_PR ();
4611 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4612 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4613 }
4614 {
4615 SI opval = tmp_addr;
4616 SET_H_GRC (FLD (f_rn), opval);
4617 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4618 }
4619 }
4620
4621 #undef FLD
4622 }
4623 NEXT (vpc);
4624
4625 CASE (sem, INSN_SUB_COMPACT) : /* sub $rm, $rn */
4626 {
4627 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4628 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4629 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4630 int UNUSED written = 0;
4631 IADDR UNUSED pc = abuf->addr;
4632 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4633
4634 {
4635 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
4636 SET_H_GRC (FLD (f_rn), opval);
4637 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4638 }
4639
4640 #undef FLD
4641 }
4642 NEXT (vpc);
4643
4644 CASE (sem, INSN_SUBC_COMPACT) : /* subc $rm, $rn */
4645 {
4646 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4647 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4648 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4649 int UNUSED written = 0;
4650 IADDR UNUSED pc = abuf->addr;
4651 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4652
4653 {
4654 BI tmp_flag;
4655 tmp_flag = SUBCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
4656 {
4657 SI opval = SUBCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
4658 SET_H_GRC (FLD (f_rn), opval);
4659 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4660 }
4661 {
4662 BI opval = tmp_flag;
4663 SET_H_TBIT (opval);
4664 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4665 }
4666 }
4667
4668 #undef FLD
4669 }
4670 NEXT (vpc);
4671
4672 CASE (sem, INSN_SUBV_COMPACT) : /* subv $rm, $rn */
4673 {
4674 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4675 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4676 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4677 int UNUSED written = 0;
4678 IADDR UNUSED pc = abuf->addr;
4679 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4680
4681 {
4682 BI tmp_t;
4683 tmp_t = SUBOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
4684 {
4685 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
4686 SET_H_GRC (FLD (f_rn), opval);
4687 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4688 }
4689 {
4690 BI opval = ((tmp_t) ? (1) : (0));
4691 SET_H_TBIT (opval);
4692 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4693 }
4694 }
4695
4696 #undef FLD
4697 }
4698 NEXT (vpc);
4699
4700 CASE (sem, INSN_SWAPB_COMPACT) : /* swap.b $rm, $rn */
4701 {
4702 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4703 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4704 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4705 int UNUSED written = 0;
4706 IADDR UNUSED pc = abuf->addr;
4707 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4708
4709 {
4710 UHI tmp_top_half;
4711 UQI tmp_byte1;
4712 UQI tmp_byte0;
4713 tmp_top_half = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 0);
4714 tmp_byte1 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 2);
4715 tmp_byte0 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3);
4716 {
4717 SI opval = ORSI (SLLSI (tmp_top_half, 16), ORSI (SLLSI (tmp_byte0, 8), tmp_byte1));
4718 SET_H_GRC (FLD (f_rn), opval);
4719 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4720 }
4721 }
4722
4723 #undef FLD
4724 }
4725 NEXT (vpc);
4726
4727 CASE (sem, INSN_SWAPW_COMPACT) : /* swap.w $rm, $rn */
4728 {
4729 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4730 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4731 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4732 int UNUSED written = 0;
4733 IADDR UNUSED pc = abuf->addr;
4734 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4735
4736 {
4737 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rm)), 16), SLLSI (GET_H_GRC (FLD (f_rm)), 16));
4738 SET_H_GRC (FLD (f_rn), opval);
4739 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4740 }
4741
4742 #undef FLD
4743 }
4744 NEXT (vpc);
4745
4746 CASE (sem, INSN_TASB_COMPACT) : /* tas.b @$rn */
4747 {
4748 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4749 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4750 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4751 int UNUSED written = 0;
4752 IADDR UNUSED pc = abuf->addr;
4753 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4754
4755 {
4756 UQI tmp_byte;
4757 tmp_byte = GETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
4758 {
4759 BI opval = ((EQQI (tmp_byte, 0)) ? (1) : (0));
4760 SET_H_TBIT (opval);
4761 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4762 }
4763 tmp_byte = ORQI (tmp_byte, 128);
4764 {
4765 UQI opval = tmp_byte;
4766 SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
4767 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4768 }
4769 }
4770
4771 #undef FLD
4772 }
4773 NEXT (vpc);
4774
4775 CASE (sem, INSN_TRAPA_COMPACT) : /* trapa #$uimm8 */
4776 {
4777 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4778 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4779 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4780 int UNUSED written = 0;
4781 IADDR UNUSED pc = abuf->addr;
4782 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4783
4784 sh64_compact_trapa (current_cpu, FLD (f_imm8), pc);
4785
4786 #undef FLD
4787 }
4788 NEXT (vpc);
4789
4790 CASE (sem, INSN_TST_COMPACT) : /* tst $rm, $rn */
4791 {
4792 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4793 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4794 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4795 int UNUSED written = 0;
4796 IADDR UNUSED pc = abuf->addr;
4797 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4798
4799 {
4800 BI opval = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn))), 0)) ? (1) : (0));
4801 SET_H_TBIT (opval);
4802 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4803 }
4804
4805 #undef FLD
4806 }
4807 NEXT (vpc);
4808
4809 CASE (sem, INSN_TSTI_COMPACT) : /* tst #$uimm8, r0 */
4810 {
4811 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4812 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4813 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4814 int UNUSED written = 0;
4815 IADDR UNUSED pc = abuf->addr;
4816 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4817
4818 {
4819 BI opval = ((EQSI (ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSISI (FLD (f_imm8))), 0)) ? (1) : (0));
4820 SET_H_TBIT (opval);
4821 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4822 }
4823
4824 #undef FLD
4825 }
4826 NEXT (vpc);
4827
4828 CASE (sem, INSN_TSTB_COMPACT) : /* tst.b #$imm8, @(r0, gbr) */
4829 {
4830 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4831 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4832 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4833 int UNUSED written = 0;
4834 IADDR UNUSED pc = abuf->addr;
4835 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4836
4837 {
4838 DI tmp_addr;
4839 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
4840 {
4841 BI opval = ((EQQI (ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8)), 0)) ? (1) : (0));
4842 SET_H_TBIT (opval);
4843 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4844 }
4845 }
4846
4847 #undef FLD
4848 }
4849 NEXT (vpc);
4850
4851 CASE (sem, INSN_XOR_COMPACT) : /* xor $rm64, $rn64 */
4852 {
4853 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4854 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4855 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4856 int UNUSED written = 0;
4857 IADDR UNUSED pc = abuf->addr;
4858 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4859
4860 {
4861 DI opval = XORDI (GET_H_GR (FLD (f_rn)), GET_H_GR (FLD (f_rm)));
4862 SET_H_GR (FLD (f_rn), opval);
4863 TRACE_RESULT (current_cpu, abuf, "rn64", 'D', opval);
4864 }
4865
4866 #undef FLD
4867 }
4868 NEXT (vpc);
4869
4870 CASE (sem, INSN_XORI_COMPACT) : /* xor #$uimm8, r0 */
4871 {
4872 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4873 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4874 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4875 int UNUSED written = 0;
4876 IADDR UNUSED pc = abuf->addr;
4877 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4878
4879 {
4880 DI opval = XORDI (GET_H_GR (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
4881 SET_H_GR (((UINT) 0), opval);
4882 TRACE_RESULT (current_cpu, abuf, "gr-0", 'D', opval);
4883 }
4884
4885 #undef FLD
4886 }
4887 NEXT (vpc);
4888
4889 CASE (sem, INSN_XORB_COMPACT) : /* xor.b #$imm8, @(r0, gbr) */
4890 {
4891 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4892 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4893 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4894 int UNUSED written = 0;
4895 IADDR UNUSED pc = abuf->addr;
4896 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4897
4898 {
4899 DI tmp_addr;
4900 UQI tmp_data;
4901 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
4902 tmp_data = XORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
4903 {
4904 UQI opval = tmp_data;
4905 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4906 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4907 }
4908 }
4909
4910 #undef FLD
4911 }
4912 NEXT (vpc);
4913
4914 CASE (sem, INSN_XTRCT_COMPACT) : /* xtrct $rm, $rn */
4915 {
4916 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4917 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4918 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4919 int UNUSED written = 0;
4920 IADDR UNUSED pc = abuf->addr;
4921 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4922
4923 {
4924 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rm)), 16), SRLSI (GET_H_GRC (FLD (f_rn)), 16));
4925 SET_H_GRC (FLD (f_rn), opval);
4926 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4927 }
4928
4929 #undef FLD
4930 }
4931 NEXT (vpc);
4932
4933
4934 }
4935 ENDSWITCH (sem) /* End of semantic switch. */
4936
4937 /* At this point `vpc' contains the next insn to execute. */
4938 }
4939
4940 #undef DEFINE_SWITCH
4941 #endif /* DEFINE_SWITCH */