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