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