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