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