1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
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)
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.
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.
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. */
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 },
224 for (i = 0; labels[i].label != 0; ++i)
227 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
229 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
234 #endif /* DEFINE_LABELS */
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". */
246 #define TRACE_RESULT(cpu, abuf, name, type, val)
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)
253 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
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)
264 #else /* ! WITH_SCACHE_PBB */
266 #define NEXT(vpc) BREAK (sem)
269 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
271 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
274 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
277 #endif /* ! WITH_SCACHE_PBB */
281 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
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);
291 /* Update the recorded pc in the cpu state struct.
292 Only necessary for WITH_SCACHE case, but to avoid the
293 conditional compilation .... */
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);
306 CASE (sem, INSN_X_AFTER) : /* --after-- */
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);
316 #if WITH_SCACHE_PBB_SH64_COMPACT
317 sh64_compact_pbb_after (current_cpu, sem_arg);
325 CASE (sem, INSN_X_BEFORE) : /* --before-- */
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);
335 #if WITH_SCACHE_PBB_SH64_COMPACT
336 sh64_compact_pbb_before (current_cpu, sem_arg);
344 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
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);
354 #if WITH_SCACHE_PBB_SH64_COMPACT
356 vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
357 pbb_br_type, pbb_br_npc);
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));
372 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
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);
382 #if WITH_SCACHE_PBB_SH64_COMPACT
383 vpc = sh64_compact_pbb_chain (current_cpu, sem_arg);
394 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
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);
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);
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)));
413 vpc = sh64_compact_pbb_begin (current_cpu, 0);
423 CASE (sem, INSN_ADD_COMPACT) : /* add $rm, $rn */
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);
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);
442 CASE (sem, INSN_ADDI_COMPACT) : /* add #$imm8, $rn */
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);
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);
461 CASE (sem, INSN_ADDC_COMPACT) : /* addc $rm, $rn */
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);
472 tmp_flag = ADDCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
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);
481 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
489 CASE (sem, INSN_ADDV_COMPACT) : /* addv $rm, $rn */
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);
500 tmp_t = ADDOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
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);
509 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
517 CASE (sem, INSN_AND_COMPACT) : /* and $rm64, $rn64 */
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);
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);
536 CASE (sem, INSN_ANDI_COMPACT) : /* and #$uimm8, r0 */
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);
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);
555 CASE (sem, INSN_ANDB_COMPACT) : /* and.b #$imm8, @(r0, gbr) */
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);
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));
570 UQI opval = tmp_data;
571 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
572 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
580 CASE (sem, INSN_BF_COMPACT) : /* bf $disp8 */
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;
588 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
590 if (NOTBI (GET_H_TBIT ())) {
592 UDI opval = FLD (i_disp8);
593 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
595 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
599 abuf->written = written;
600 SEM_BRANCH_FINI (vpc);
605 CASE (sem, INSN_BFS_COMPACT) : /* bf/s $disp8 */
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;
613 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
615 if (NOTBI (GET_H_TBIT ())) {
618 UDI opval = FLD (i_disp8);
619 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
621 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
626 abuf->written = written;
627 SEM_BRANCH_FINI (vpc);
632 CASE (sem, INSN_BRA_COMPACT) : /* bra $disp12 */
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;
640 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
650 SEM_BRANCH_FINI (vpc);
655 CASE (sem, INSN_BRAF_COMPACT) : /* braf $rn */
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;
663 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
673 SEM_BRANCH_FINI (vpc);
678 CASE (sem, INSN_BRK_COMPACT) : /* brk */
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);
687 sh64_break (current_cpu, pc);
693 CASE (sem, INSN_BSR_COMPACT) : /* bsr $disp12 */
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;
701 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
706 SI opval = ADDDI (pc, 4);
708 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
718 SEM_BRANCH_FINI (vpc);
723 CASE (sem, INSN_BSRF_COMPACT) : /* bsrf $rn */
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;
731 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
736 SI opval = ADDDI (pc, 4);
738 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
748 SEM_BRANCH_FINI (vpc);
753 CASE (sem, INSN_BT_COMPACT) : /* bt $disp8 */
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;
761 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
765 UDI opval = FLD (i_disp8);
766 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
768 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
772 abuf->written = written;
773 SEM_BRANCH_FINI (vpc);
778 CASE (sem, INSN_BTS_COMPACT) : /* bt/s $disp8 */
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;
786 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
791 UDI opval = FLD (i_disp8);
792 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
794 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
799 abuf->written = written;
800 SEM_BRANCH_FINI (vpc);
805 CASE (sem, INSN_CLRMAC_COMPACT) : /* clrmac */
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);
818 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
823 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
831 CASE (sem, INSN_CLRS_COMPACT) : /* clrs */
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);
843 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
850 CASE (sem, INSN_CLRT_COMPACT) : /* clrt */
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);
862 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
869 CASE (sem, INSN_CMPEQ_COMPACT) : /* cmp/eq $rm, $rn */
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);
879 BI opval = EQSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
881 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
888 CASE (sem, INSN_CMPEQI_COMPACT) : /* cmp/eq #$imm8, r0 */
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);
898 BI opval = EQSI (GET_H_GRC (((UINT) 0)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
900 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
907 CASE (sem, INSN_CMPGE_COMPACT) : /* cmp/ge $rm, $rn */
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);
917 BI opval = GESI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
919 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
926 CASE (sem, INSN_CMPGT_COMPACT) : /* cmp/gt $rm, $rn */
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);
936 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
938 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
945 CASE (sem, INSN_CMPHI_COMPACT) : /* cmp/hi $rm, $rn */
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);
955 BI opval = GTUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
957 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
964 CASE (sem, INSN_CMPHS_COMPACT) : /* cmp/hs $rm, $rn */
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);
974 BI opval = GEUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
976 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
983 CASE (sem, INSN_CMPPL_COMPACT) : /* cmp/pl $rn */
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);
993 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), 0);
995 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1002 CASE (sem, INSN_CMPPZ_COMPACT) : /* cmp/pz $rn */
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);
1012 BI opval = GESI (GET_H_GRC (FLD (f_rn)), 0);
1014 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1021 CASE (sem, INSN_CMPSTR_COMPACT) : /* cmp/str $rm, $rn */
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);
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);
1039 BI opval = ((GTUBI (tmp_t, 0)) ? (1) : (0));
1041 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1049 CASE (sem, INSN_DIV0S_COMPACT) : /* div0s $rm, $rn */
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);
1060 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1062 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1065 BI opval = SRLSI (GET_H_GRC (FLD (f_rm)), 31);
1067 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
1070 BI opval = ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm)), 31), SRLSI (GET_H_GRC (FLD (f_rn)), 31))) ? (0) : (1));
1072 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1080 CASE (sem, INSN_DIV0U_COMPACT) : /* div0u */
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);
1093 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1098 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1103 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
1111 CASE (sem, INSN_DIV1_COMPACT) : /* div1 $rm, $rn */
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);
1124 tmp_oldq = GET_H_QBIT ();
1126 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1128 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
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);
1135 if (NOTBI (tmp_oldq)) {
1136 if (NOTBI (GET_H_MBIT ())) {
1138 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
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);
1144 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1145 if (NOTBI (GET_H_QBIT ())) {
1147 BI opval = ((tmp_tmp1) ? (1) : (0));
1149 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1153 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1155 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1161 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
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);
1167 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1168 if (NOTBI (GET_H_QBIT ())) {
1170 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1172 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1176 BI opval = ((tmp_tmp1) ? (1) : (0));
1178 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1184 if (NOTBI (GET_H_MBIT ())) {
1186 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
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);
1192 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1193 if (NOTBI (GET_H_QBIT ())) {
1195 BI opval = ((tmp_tmp1) ? (1) : (0));
1197 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1201 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1203 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1209 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
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);
1215 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1216 if (NOTBI (GET_H_QBIT ())) {
1218 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1220 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1224 BI opval = ((tmp_tmp1) ? (1) : (0));
1226 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1233 BI opval = ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1235 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1243 CASE (sem, INSN_DMULSL_COMPACT) : /* dmuls.l $rm, $rn */
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);
1254 tmp_result = MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm))), EXTSIDI (GET_H_GRC (FLD (f_rn))));
1256 SI opval = SUBWORDDISI (tmp_result, 0);
1258 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1261 SI opval = SUBWORDDISI (tmp_result, 1);
1263 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1271 CASE (sem, INSN_DMULUL_COMPACT) : /* dmulu.l $rm, $rn */
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);
1282 tmp_result = MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm))), ZEXTSIDI (GET_H_GRC (FLD (f_rn))));
1284 SI opval = SUBWORDDISI (tmp_result, 0);
1286 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1289 SI opval = SUBWORDDISI (tmp_result, 1);
1291 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1299 CASE (sem, INSN_DT_COMPACT) : /* dt $rn */
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);
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);
1315 BI opval = EQSI (GET_H_GRC (FLD (f_rn)), 0);
1317 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1325 CASE (sem, INSN_EXTSB_COMPACT) : /* exts.b $rm, $rn */
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);
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);
1344 CASE (sem, INSN_EXTSW_COMPACT) : /* exts.w $rm, $rn */
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);
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);
1363 CASE (sem, INSN_EXTUB_COMPACT) : /* extu.b $rm, $rn */
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);
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);
1382 CASE (sem, INSN_EXTUW_COMPACT) : /* extu.w $rm, $rn */
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);
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);
1401 CASE (sem, INSN_FABS_COMPACT) : /* fabs $fsdn */
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);
1410 if (GET_H_PRBIT ()) {
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);
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);
1426 abuf->written = written;
1431 CASE (sem, INSN_FADD_COMPACT) : /* fadd $fsdm, $fsdn */
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);
1440 if (GET_H_PRBIT ()) {
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);
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);
1456 abuf->written = written;
1461 CASE (sem, INSN_FCMPEQ_COMPACT) : /* fcmp/eq $fsdm, $fsdn */
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);
1470 if (GET_H_PRBIT ()) {
1472 BI opval = sh64_fcmpeqd (current_cpu, GET_H_DR (FLD (f_rm)), GET_H_DR (FLD (f_rn)));
1474 written |= (1 << 7);
1475 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1479 BI opval = sh64_fcmpeqs (current_cpu, GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
1481 written |= (1 << 7);
1482 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1486 abuf->written = written;
1491 CASE (sem, INSN_FCMPGT_COMPACT) : /* fcmp/gt $fsdm, $fsdn */
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);
1500 if (GET_H_PRBIT ()) {
1502 BI opval = sh64_fcmpgtd (current_cpu, GET_H_DR (FLD (f_rn)), GET_H_DR (FLD (f_rm)));
1504 written |= (1 << 7);
1505 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1509 BI opval = sh64_fcmpgts (current_cpu, GET_H_FRC (FLD (f_rn)), GET_H_FRC (FLD (f_rm)));
1511 written |= (1 << 7);
1512 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1516 abuf->written = written;
1521 CASE (sem, INSN_FCNVDS_COMPACT) : /* fcnvds $drn, fpul */
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);
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);
1540 CASE (sem, INSN_FCNVSD_COMPACT) : /* fcnvsd fpul, $drn */
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);
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);
1559 CASE (sem, INSN_FDIV_COMPACT) : /* fdiv $fsdm, $fsdn */
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);
1568 if (GET_H_PRBIT ()) {
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);
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);
1584 abuf->written = written;
1589 CASE (sem, INSN_FIPR_COMPACT) : /* fipr $fvm, $fvn */
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);
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))));
1610 SET_H_FRC (ADDQI (tmp_n, 3), opval);
1611 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-3", 'f', opval);
1619 CASE (sem, INSN_FLDS_COMPACT) : /* flds $frn */
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);
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);
1638 CASE (sem, INSN_FLDI0_COMPACT) : /* fldi0 $frn */
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);
1648 SF opval = sh64_fldi0 (current_cpu);
1649 SET_H_FRC (FLD (f_rn), opval);
1650 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1657 CASE (sem, INSN_FLDI1_COMPACT) : /* fldi1 $frn */
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);
1667 SF opval = sh64_fldi1 (current_cpu);
1668 SET_H_FRC (FLD (f_rn), opval);
1669 TRACE_RESULT (current_cpu, abuf, "frn", 'f', opval);
1676 CASE (sem, INSN_FLOAT_COMPACT) : /* float fpul, $fsdn */
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);
1685 if (GET_H_PRBIT ()) {
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);
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);
1701 abuf->written = written;
1706 CASE (sem, INSN_FMAC_COMPACT) : /* fmac fr0, $frm, $frn */
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);
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);
1725 CASE (sem, INSN_FMOV1_COMPACT) : /* fmov $frm, $frn */
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);
1734 if (NOTBI (GET_H_SZBIT ())) {
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);
1742 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
1743 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
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);
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);
1759 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
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);
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);
1777 abuf->written = written;
1782 CASE (sem, INSN_FMOV2_COMPACT) : /* fmov @$rm, $frn */
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);
1791 if (NOTBI (GET_H_SZBIT ())) {
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);
1799 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
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);
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);
1816 abuf->written = written;
1821 CASE (sem, INSN_FMOV3_COMPACT) : /* fmov @${rm}+, frn */
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);
1830 if (NOTBI (GET_H_SZBIT ())) {
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);
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);
1847 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
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);
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);
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);
1871 abuf->written = written;
1876 CASE (sem, INSN_FMOV4_COMPACT) : /* fmov @(r0, $rm), $frn */
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);
1885 if (NOTBI (GET_H_SZBIT ())) {
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);
1893 if (EQSI (ANDSI (FLD (f_rn), 1), 1)) {
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);
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);
1910 abuf->written = written;
1915 CASE (sem, INSN_FMOV5_COMPACT) : /* fmov $frm, @$rn */
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);
1924 if (NOTBI (GET_H_SZBIT ())) {
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);
1932 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
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);
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);
1949 abuf->written = written;
1954 CASE (sem, INSN_FMOV6_COMPACT) : /* fmov $frm, @-$rn */
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);
1963 if (NOTBI (GET_H_SZBIT ())) {
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);
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);
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);
1986 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
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);
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);
2004 abuf->written = written;
2009 CASE (sem, INSN_FMOV7_COMPACT) : /* fmov $frm, @(r0, $rn) */
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);
2018 if (NOTBI (GET_H_SZBIT ())) {
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);
2026 if (EQSI (ANDSI (FLD (f_rm), 1), 1)) {
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);
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);
2043 abuf->written = written;
2048 CASE (sem, INSN_FMUL_COMPACT) : /* fmul $fsdm, $fsdn */
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);
2057 if (GET_H_PRBIT ()) {
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);
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);
2073 abuf->written = written;
2078 CASE (sem, INSN_FNEG_COMPACT) : /* fneg $fsdn */
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);
2087 if (GET_H_PRBIT ()) {
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);
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);
2103 abuf->written = written;
2108 CASE (sem, INSN_FRCHG_COMPACT) : /* frchg */
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);
2118 BI opval = NOTBI (GET_H_FRBIT ());
2119 SET_H_FRBIT (opval);
2120 TRACE_RESULT (current_cpu, abuf, "frbit", 'x', opval);
2127 CASE (sem, INSN_FSCHG_COMPACT) : /* fschg */
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);
2137 BI opval = NOTBI (GET_H_SZBIT ());
2138 SET_H_SZBIT (opval);
2139 TRACE_RESULT (current_cpu, abuf, "szbit", 'x', opval);
2146 CASE (sem, INSN_FSQRT_COMPACT) : /* fsqrt $fsdn */
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);
2155 if (GET_H_PRBIT ()) {
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);
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);
2171 abuf->written = written;
2176 CASE (sem, INSN_FSTS_COMPACT) : /* fsts fpul, $frn */
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);
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);
2195 CASE (sem, INSN_FSUB_COMPACT) : /* fsub $fsdm, $fsdn */
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);
2204 if (GET_H_PRBIT ()) {
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);
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);
2220 abuf->written = written;
2225 CASE (sem, INSN_FTRC_COMPACT) : /* ftrc $fsdn, fpul */
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);
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);
2244 CASE (sem, INSN_FTRV_COMPACT) : /* ftrv xmtrx, $fvn */
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);
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))));
2263 SET_H_FRC (tmp_n, opval);
2264 TRACE_RESULT (current_cpu, abuf, "frc-n", 'f', opval);
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))));
2272 SET_H_FRC (ADDQI (tmp_n, 1), opval);
2273 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-1", 'f', opval);
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))));
2281 SET_H_FRC (ADDQI (tmp_n, 2), opval);
2282 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-2", 'f', opval);
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))));
2290 SET_H_FRC (ADDQI (tmp_n, 3), opval);
2291 TRACE_RESULT (current_cpu, abuf, "frc-add--DFLT-n-3", 'f', opval);
2299 CASE (sem, INSN_JMP_COMPACT) : /* jmp @$rn */
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;
2307 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
2317 SEM_BRANCH_FINI (vpc);
2322 CASE (sem, INSN_JSR_COMPACT) : /* jsr @$rn */
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;
2330 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2335 SI opval = ADDDI (pc, 4);
2337 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
2347 SEM_BRANCH_FINI (vpc);
2352 CASE (sem, INSN_LDC_COMPACT) : /* ldc $rn, gbr */
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);
2362 SI opval = GET_H_GRC (FLD (f_rn));
2364 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
2371 CASE (sem, INSN_LDCL_COMPACT) : /* ldc.l @${rn}+, gbr */
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);
2382 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2384 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
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);
2397 CASE (sem, INSN_LDS_FPSCR_COMPACT) : /* lds $rn, fpscr */
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);
2407 SI opval = GET_H_GRC (FLD (f_rn));
2408 SET_H_FPCCR (opval);
2409 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2416 CASE (sem, INSN_LDSL_FPSCR_COMPACT) : /* lds.l @${rn}+, fpscr */
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);
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);
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);
2442 CASE (sem, INSN_LDS_FPUL_COMPACT) : /* lds $rn, fpul */
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);
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);
2461 CASE (sem, INSN_LDSL_FPUL_COMPACT) : /* lds.l @${rn}+, fpul */
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);
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);
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);
2487 CASE (sem, INSN_LDS_MACH_COMPACT) : /* lds $rn, mach */
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);
2497 SI opval = GET_H_GRC (FLD (f_rn));
2499 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2506 CASE (sem, INSN_LDSL_MACH_COMPACT) : /* lds.l @${rn}+, mach */
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);
2517 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2519 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
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);
2532 CASE (sem, INSN_LDS_MACL_COMPACT) : /* lds $rn, macl */
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);
2542 SI opval = GET_H_GRC (FLD (f_rn));
2544 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2551 CASE (sem, INSN_LDSL_MACL_COMPACT) : /* lds.l @${rn}+, macl */
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);
2562 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2564 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
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);
2577 CASE (sem, INSN_LDS_PR_COMPACT) : /* lds $rn, pr */
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);
2587 SI opval = GET_H_GRC (FLD (f_rn));
2589 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2596 CASE (sem, INSN_LDSL_PR_COMPACT) : /* lds.l @${rn}+, pr */
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);
2607 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2609 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
2622 CASE (sem, INSN_MACL_COMPACT) : /* mac.l @${rm}+, @${rn}+ */
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);
2637 tmp_x = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
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);
2643 if (EQSI (FLD (f_rn), FLD (f_rm))) {
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);
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);
2658 tmp_y = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
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);
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);
2669 if (GET_H_SBIT ()) {
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;
2678 if (LTDI (tmp_result, tmp_min)) {
2679 tmp_result = tmp_min;
2685 SI opval = SUBWORDDISI (tmp_result, 0);
2687 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2690 SI opval = SUBWORDDISI (tmp_result, 1);
2692 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2697 abuf->written = written;
2702 CASE (sem, INSN_MACW_COMPACT) : /* mac.w @${rm}+, @${rn}+ */
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);
2717 tmp_x = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
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);
2723 if (EQSI (FLD (f_rn), FLD (f_rm))) {
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);
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);
2738 tmp_y = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
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);
2745 tmp_tmpry = MULSI (ZEXTHISI (tmp_x), ZEXTHISI (tmp_y));
2746 if (GET_H_SBIT ()) {
2748 if (ADDOFSI (tmp_tmpry, GET_H_MACL (), 0)) {
2752 written |= (1 << 9);
2753 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2757 SI opval = ADDSI (tmp_tmpry, GET_H_MACL ());
2759 written |= (1 << 10);
2760 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2765 tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2766 tmp_result = ADDDI (tmp_mac, EXTSIDI (tmp_tmpry));
2768 SI opval = SUBWORDDISI (tmp_result, 0);
2770 written |= (1 << 9);
2771 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2774 SI opval = SUBWORDDISI (tmp_result, 1);
2776 written |= (1 << 10);
2777 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2783 abuf->written = written;
2788 CASE (sem, INSN_MOV_COMPACT) : /* mov $rm64, $rn64 */
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);
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);
2807 CASE (sem, INSN_MOVI_COMPACT) : /* mov #$imm8, $rn */
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);
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);
2826 CASE (sem, INSN_MOVB1_COMPACT) : /* mov.b $rm, @$rn */
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);
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);
2845 CASE (sem, INSN_MOVB2_COMPACT) : /* mov.b $rm, @-$rn */
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);
2856 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
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);
2863 SI opval = tmp_addr;
2864 SET_H_GRC (FLD (f_rn), opval);
2865 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2873 CASE (sem, INSN_MOVB3_COMPACT) : /* mov.b $rm, @(r0,$rn) */
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);
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);
2892 CASE (sem, INSN_MOVB4_COMPACT) : /* mov.b r0, @($imm8, gbr) */
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);
2903 tmp_addr = ADDSI (GET_H_GBR (), FLD (f_imm8));
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);
2915 CASE (sem, INSN_MOVB5_COMPACT) : /* mov.b r0, @($imm4, $rm) */
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);
2926 tmp_addr = ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4));
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);
2938 CASE (sem, INSN_MOVB6_COMPACT) : /* mov.b @$rm, $rn */
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);
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);
2957 CASE (sem, INSN_MOVB7_COMPACT) : /* mov.b @${rm}+, $rn */
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);
2968 tmp_data = GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2969 if (EQSI (FLD (f_rm), FLD (f_rn))) {
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);
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);
2985 SI opval = EXTQISI (tmp_data);
2986 SET_H_GRC (FLD (f_rn), opval);
2987 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
2991 abuf->written = written;
2996 CASE (sem, INSN_MOVB8_COMPACT) : /* mov.b @(r0, $rm), $rn */
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);
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);
3015 CASE (sem, INSN_MOVB9_COMPACT) : /* mov.b @($imm8, gbr), r0 */
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);
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);
3034 CASE (sem, INSN_MOVB10_COMPACT) : /* mov.b @($imm4, $rm), r0 */
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);
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);
3053 CASE (sem, INSN_MOVL1_COMPACT) : /* mov.l $rm, @$rn */
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);
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);
3072 CASE (sem, INSN_MOVL2_COMPACT) : /* mov.l $rm, @-$rn */
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);
3083 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
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);
3090 SI opval = tmp_addr;
3091 SET_H_GRC (FLD (f_rn), opval);
3092 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3100 CASE (sem, INSN_MOVL3_COMPACT) : /* mov.l $rm, @(r0, $rn) */
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);
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);
3119 CASE (sem, INSN_MOVL4_COMPACT) : /* mov.l r0, @($imm8x4, gbr) */
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);
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);
3138 CASE (sem, INSN_MOVL5_COMPACT) : /* mov.l $rm, @($imm4x4, $rn) */
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);
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);
3157 CASE (sem, INSN_MOVL6_COMPACT) : /* mov.l @$rm, $rn */
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);
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);
3176 CASE (sem, INSN_MOVL7_COMPACT) : /* mov.l @${rm}+, $rn */
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);
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);
3191 if (EQSI (FLD (f_rm), FLD (f_rn))) {
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);
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);
3208 abuf->written = written;
3213 CASE (sem, INSN_MOVL8_COMPACT) : /* mov.l @(r0, $rm), $rn */
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);
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);
3232 CASE (sem, INSN_MOVL9_COMPACT) : /* mov.l @($imm8x4, gbr), r0 */
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);
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);
3251 CASE (sem, INSN_MOVL10_COMPACT) : /* mov.l @($imm8x4, pc), $rn */
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);
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);
3270 CASE (sem, INSN_MOVL11_COMPACT) : /* mov.l @($imm4x4, $rm), $rn */
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);
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);
3289 CASE (sem, INSN_MOVW1_COMPACT) : /* mov.w $rm, @$rn */
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);
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);
3308 CASE (sem, INSN_MOVW2_COMPACT) : /* mov.w $rm, @-$rn */
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);
3319 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 2);
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);
3326 SI opval = tmp_addr;
3327 SET_H_GRC (FLD (f_rn), opval);
3328 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3336 CASE (sem, INSN_MOVW3_COMPACT) : /* mov.w $rm, @(r0, $rn) */
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);
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);
3355 CASE (sem, INSN_MOVW4_COMPACT) : /* mov.w r0, @($imm8x2, gbr) */
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);
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);
3374 CASE (sem, INSN_MOVW5_COMPACT) : /* mov.w r0, @($imm4x2, $rn) */
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);
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);
3393 CASE (sem, INSN_MOVW6_COMPACT) : /* mov.w @$rm, $rn */
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);
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);
3412 CASE (sem, INSN_MOVW7_COMPACT) : /* mov.w @${rm}+, $rn */
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);
3423 tmp_data = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3424 if (EQSI (FLD (f_rm), FLD (f_rn))) {
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);
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);
3440 SI opval = EXTHISI (tmp_data);
3441 SET_H_GRC (FLD (f_rn), opval);
3442 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3446 abuf->written = written;
3451 CASE (sem, INSN_MOVW8_COMPACT) : /* mov.w @(r0, $rm), $rn */
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);
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);
3470 CASE (sem, INSN_MOVW9_COMPACT) : /* mov.w @($imm8x2, gbr), r0 */
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);
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);
3489 CASE (sem, INSN_MOVW10_COMPACT) : /* mov.w @($imm8x2, pc), $rn */
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);
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);
3508 CASE (sem, INSN_MOVW11_COMPACT) : /* mov.w @($imm4x2, $rm), r0 */
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);
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);
3527 CASE (sem, INSN_MOVA_COMPACT) : /* mova @($imm8x4, pc), r0 */
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);
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);
3546 CASE (sem, INSN_MOVCAL_COMPACT) : /* movca.l r0, @$rn */
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);
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);
3565 CASE (sem, INSN_MOVT_COMPACT) : /* movt $rn */
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);
3575 SI opval = ZEXTBISI (GET_H_TBIT ());
3576 SET_H_GRC (FLD (f_rn), opval);
3577 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
3584 CASE (sem, INSN_MULL_COMPACT) : /* mul.l $rm, $rn */
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);
3594 SI opval = MULSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
3596 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3603 CASE (sem, INSN_MULSW_COMPACT) : /* muls.w $rm, $rn */
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);
3613 SI opval = MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3615 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3622 CASE (sem, INSN_MULUW_COMPACT) : /* mulu.w $rm, $rn */
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);
3632 SI opval = MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3634 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3641 CASE (sem, INSN_NEG_COMPACT) : /* neg $rm, $rn */
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);
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);
3660 CASE (sem, INSN_NEGC_COMPACT) : /* negc $rm, $rn */
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);
3671 tmp_flag = SUBCFSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
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);
3678 BI opval = tmp_flag;
3680 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3688 CASE (sem, INSN_NOP_COMPACT) : /* nop */
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);
3703 CASE (sem, INSN_NOT_COMPACT) : /* not $rm64, $rn64 */
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);
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);
3722 CASE (sem, INSN_OCBI_COMPACT) : /* ocbi @$rn */
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);
3737 CASE (sem, INSN_OCBP_COMPACT) : /* ocbp @$rn */
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);
3752 CASE (sem, INSN_OCBWB_COMPACT) : /* ocbwb @$rn */
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);
3767 CASE (sem, INSN_OR_COMPACT) : /* or $rm64, $rn64 */
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);
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);
3786 CASE (sem, INSN_ORI_COMPACT) : /* or #$uimm8, r0 */
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);
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);
3805 CASE (sem, INSN_ORB_COMPACT) : /* or.b #$imm8, @(r0, gbr) */
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);
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));
3820 UQI opval = tmp_data;
3821 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
3822 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3830 CASE (sem, INSN_PREF_COMPACT) : /* pref @$rn */
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);
3845 CASE (sem, INSN_ROTCL_COMPACT) : /* rotcl $rn */
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);
3856 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
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);
3863 BI opval = ((tmp_temp) ? (1) : (0));
3865 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3873 CASE (sem, INSN_ROTCR_COMPACT) : /* rotcr $rn */
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);
3885 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
3886 tmp_temp = GET_H_TBIT ();
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);
3893 BI opval = ((tmp_lsbit) ? (1) : (0));
3895 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3903 CASE (sem, INSN_ROTL_COMPACT) : /* rotl $rn */
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);
3914 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
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);
3921 BI opval = ((tmp_temp) ? (1) : (0));
3923 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3931 CASE (sem, INSN_ROTR_COMPACT) : /* rotr $rn */
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);
3943 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
3944 tmp_temp = tmp_lsbit;
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);
3951 BI opval = ((tmp_lsbit) ? (1) : (0));
3953 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3961 CASE (sem, INSN_RTS_COMPACT) : /* rts */
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;
3969 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3979 SEM_BRANCH_FINI (vpc);
3984 CASE (sem, INSN_SETS_COMPACT) : /* sets */
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);
3996 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
4003 CASE (sem, INSN_SETT_COMPACT) : /* sett */
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);
4015 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4022 CASE (sem, INSN_SHAD_COMPACT) : /* shad $rm, $rn */
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);
4033 tmp_shamt = ANDQI (GET_H_GRC (FLD (f_rm)), 31);
4034 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
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);
4042 if (NEQI (tmp_shamt, 0)) {
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);
4050 if (LTSI (GET_H_GRC (FLD (f_rn)), 0)) {
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);
4060 SET_H_GRC (FLD (f_rn), opval);
4061 written |= (1 << 3);
4062 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4069 abuf->written = written;
4074 CASE (sem, INSN_SHAL_COMPACT) : /* shal $rn */
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);
4085 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
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);
4092 BI opval = ((tmp_t) ? (1) : (0));
4094 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4102 CASE (sem, INSN_SHAR_COMPACT) : /* shar $rn */
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);
4113 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
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);
4120 BI opval = ((tmp_t) ? (1) : (0));
4122 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4130 CASE (sem, INSN_SHLD_COMPACT) : /* shld $rm, $rn */
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);
4141 tmp_shamt = ANDQI (GET_H_GRC (FLD (f_rm)), 31);
4142 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
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);
4150 if (NEQI (tmp_shamt, 0)) {
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);
4160 SET_H_GRC (FLD (f_rn), opval);
4161 written |= (1 << 3);
4162 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4168 abuf->written = written;
4173 CASE (sem, INSN_SHLL_COMPACT) : /* shll $rn */
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);
4184 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
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);
4191 BI opval = ((tmp_t) ? (1) : (0));
4193 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4201 CASE (sem, INSN_SHLL2_COMPACT) : /* shll2 $rn */
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);
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);
4220 CASE (sem, INSN_SHLL8_COMPACT) : /* shll8 $rn */
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);
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);
4239 CASE (sem, INSN_SHLL16_COMPACT) : /* shll16 $rn */
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);
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);
4258 CASE (sem, INSN_SHLR_COMPACT) : /* shlr $rn */
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);
4269 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
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);
4276 BI opval = ((tmp_t) ? (1) : (0));
4278 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4286 CASE (sem, INSN_SHLR2_COMPACT) : /* shlr2 $rn */
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);
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);
4305 CASE (sem, INSN_SHLR8_COMPACT) : /* shlr8 $rn */
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);
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);
4324 CASE (sem, INSN_SHLR16_COMPACT) : /* shlr16 $rn */
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);
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);
4343 CASE (sem, INSN_STC_GBR_COMPACT) : /* stc gbr, $rn */
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);
4353 SI opval = GET_H_GBR ();
4354 SET_H_GRC (FLD (f_rn), opval);
4355 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4362 CASE (sem, INSN_STCL_GBR_COMPACT) : /* stc.l gbr, @-$rn */
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);
4373 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4375 SI opval = GET_H_GBR ();
4376 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4377 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4380 SI opval = tmp_addr;
4381 SET_H_GRC (FLD (f_rn), opval);
4382 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4390 CASE (sem, INSN_STS_FPSCR_COMPACT) : /* sts fpscr, $rn */
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);
4400 SI opval = GET_H_FPCCR ();
4401 SET_H_GRC (FLD (f_rn), opval);
4402 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4409 CASE (sem, INSN_STSL_FPSCR_COMPACT) : /* sts.l fpscr, @-$rn */
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);
4420 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4422 SI opval = GET_H_FPCCR ();
4423 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4424 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4427 SI opval = tmp_addr;
4428 SET_H_GRC (FLD (f_rn), opval);
4429 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4437 CASE (sem, INSN_STS_FPUL_COMPACT) : /* sts fpul, $rn */
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);
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);
4456 CASE (sem, INSN_STSL_FPUL_COMPACT) : /* sts.l fpul, @-$rn */
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);
4467 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
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);
4474 SI opval = tmp_addr;
4475 SET_H_GRC (FLD (f_rn), opval);
4476 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4484 CASE (sem, INSN_STS_MACH_COMPACT) : /* sts mach, $rn */
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);
4494 SI opval = GET_H_MACH ();
4495 SET_H_GRC (FLD (f_rn), opval);
4496 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4503 CASE (sem, INSN_STSL_MACH_COMPACT) : /* sts.l mach, @-$rn */
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);
4514 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4516 SI opval = GET_H_MACH ();
4517 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4518 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4521 SI opval = tmp_addr;
4522 SET_H_GRC (FLD (f_rn), opval);
4523 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4531 CASE (sem, INSN_STS_MACL_COMPACT) : /* sts macl, $rn */
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);
4541 SI opval = GET_H_MACL ();
4542 SET_H_GRC (FLD (f_rn), opval);
4543 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4550 CASE (sem, INSN_STSL_MACL_COMPACT) : /* sts.l macl, @-$rn */
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);
4561 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4563 SI opval = GET_H_MACL ();
4564 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4565 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4568 SI opval = tmp_addr;
4569 SET_H_GRC (FLD (f_rn), opval);
4570 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4578 CASE (sem, INSN_STS_PR_COMPACT) : /* sts pr, $rn */
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);
4588 SI opval = GET_H_PR ();
4589 SET_H_GRC (FLD (f_rn), opval);
4590 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4597 CASE (sem, INSN_STSL_PR_COMPACT) : /* sts.l pr, @-$rn */
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);
4608 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4610 SI opval = GET_H_PR ();
4611 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4612 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4615 SI opval = tmp_addr;
4616 SET_H_GRC (FLD (f_rn), opval);
4617 TRACE_RESULT (current_cpu, abuf, "rn", 'x', opval);
4625 CASE (sem, INSN_SUB_COMPACT) : /* sub $rm, $rn */
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);
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);
4644 CASE (sem, INSN_SUBC_COMPACT) : /* subc $rm, $rn */
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);
4655 tmp_flag = SUBCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
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);
4662 BI opval = tmp_flag;
4664 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4672 CASE (sem, INSN_SUBV_COMPACT) : /* subv $rm, $rn */
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);
4683 tmp_t = SUBOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
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);
4690 BI opval = ((tmp_t) ? (1) : (0));
4692 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4700 CASE (sem, INSN_SWAPB_COMPACT) : /* swap.b $rm, $rn */
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);
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);
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);
4727 CASE (sem, INSN_SWAPW_COMPACT) : /* swap.w $rm, $rn */
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);
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);
4746 CASE (sem, INSN_TASB_COMPACT) : /* tas.b @$rn */
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);
4757 tmp_byte = GETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
4759 BI opval = ((EQQI (tmp_byte, 0)) ? (1) : (0));
4761 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4763 tmp_byte = ORQI (tmp_byte, 128);
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);
4775 CASE (sem, INSN_TRAPA_COMPACT) : /* trapa #$uimm8 */
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);
4784 sh64_compact_trapa (current_cpu, FLD (f_imm8), pc);
4790 CASE (sem, INSN_TST_COMPACT) : /* tst $rm, $rn */
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);
4800 BI opval = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn))), 0)) ? (1) : (0));
4802 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4809 CASE (sem, INSN_TSTI_COMPACT) : /* tst #$uimm8, r0 */
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);
4819 BI opval = ((EQSI (ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSISI (FLD (f_imm8))), 0)) ? (1) : (0));
4821 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4828 CASE (sem, INSN_TSTB_COMPACT) : /* tst.b #$imm8, @(r0, gbr) */
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);
4839 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
4841 BI opval = ((EQQI (ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8)), 0)) ? (1) : (0));
4843 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4851 CASE (sem, INSN_XOR_COMPACT) : /* xor $rm64, $rn64 */
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);
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);
4870 CASE (sem, INSN_XORI_COMPACT) : /* xor #$uimm8, r0 */
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);
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);
4889 CASE (sem, INSN_XORB_COMPACT) : /* xor.b #$imm8, @(r0, gbr) */
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);
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));
4904 UQI opval = tmp_data;
4905 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4906 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4914 CASE (sem, INSN_XTRCT_COMPACT) : /* xtrct $rm, $rn */
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);
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);
4935 ENDSWITCH (sem) /* End of semantic switch. */
4937 /* At this point `vpc' contains the next insn to execute. */
4940 #undef DEFINE_SWITCH
4941 #endif /* DEFINE_SWITCH */