1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2005 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
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. */
34 { SH64_COMPACT_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
35 { SH64_COMPACT_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
36 { SH64_COMPACT_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
37 { SH64_COMPACT_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
38 { SH64_COMPACT_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
39 { SH64_COMPACT_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
40 { SH64_COMPACT_INSN_ADD_COMPACT, && case_sem_INSN_ADD_COMPACT },
41 { SH64_COMPACT_INSN_ADDI_COMPACT, && case_sem_INSN_ADDI_COMPACT },
42 { SH64_COMPACT_INSN_ADDC_COMPACT, && case_sem_INSN_ADDC_COMPACT },
43 { SH64_COMPACT_INSN_ADDV_COMPACT, && case_sem_INSN_ADDV_COMPACT },
44 { SH64_COMPACT_INSN_AND_COMPACT, && case_sem_INSN_AND_COMPACT },
45 { SH64_COMPACT_INSN_ANDI_COMPACT, && case_sem_INSN_ANDI_COMPACT },
46 { SH64_COMPACT_INSN_ANDB_COMPACT, && case_sem_INSN_ANDB_COMPACT },
47 { SH64_COMPACT_INSN_BF_COMPACT, && case_sem_INSN_BF_COMPACT },
48 { SH64_COMPACT_INSN_BFS_COMPACT, && case_sem_INSN_BFS_COMPACT },
49 { SH64_COMPACT_INSN_BRA_COMPACT, && case_sem_INSN_BRA_COMPACT },
50 { SH64_COMPACT_INSN_BRAF_COMPACT, && case_sem_INSN_BRAF_COMPACT },
51 { SH64_COMPACT_INSN_BRK_COMPACT, && case_sem_INSN_BRK_COMPACT },
52 { SH64_COMPACT_INSN_BSR_COMPACT, && case_sem_INSN_BSR_COMPACT },
53 { SH64_COMPACT_INSN_BSRF_COMPACT, && case_sem_INSN_BSRF_COMPACT },
54 { SH64_COMPACT_INSN_BT_COMPACT, && case_sem_INSN_BT_COMPACT },
55 { SH64_COMPACT_INSN_BTS_COMPACT, && case_sem_INSN_BTS_COMPACT },
56 { SH64_COMPACT_INSN_CLRMAC_COMPACT, && case_sem_INSN_CLRMAC_COMPACT },
57 { SH64_COMPACT_INSN_CLRS_COMPACT, && case_sem_INSN_CLRS_COMPACT },
58 { SH64_COMPACT_INSN_CLRT_COMPACT, && case_sem_INSN_CLRT_COMPACT },
59 { SH64_COMPACT_INSN_CMPEQ_COMPACT, && case_sem_INSN_CMPEQ_COMPACT },
60 { SH64_COMPACT_INSN_CMPEQI_COMPACT, && case_sem_INSN_CMPEQI_COMPACT },
61 { SH64_COMPACT_INSN_CMPGE_COMPACT, && case_sem_INSN_CMPGE_COMPACT },
62 { SH64_COMPACT_INSN_CMPGT_COMPACT, && case_sem_INSN_CMPGT_COMPACT },
63 { SH64_COMPACT_INSN_CMPHI_COMPACT, && case_sem_INSN_CMPHI_COMPACT },
64 { SH64_COMPACT_INSN_CMPHS_COMPACT, && case_sem_INSN_CMPHS_COMPACT },
65 { SH64_COMPACT_INSN_CMPPL_COMPACT, && case_sem_INSN_CMPPL_COMPACT },
66 { SH64_COMPACT_INSN_CMPPZ_COMPACT, && case_sem_INSN_CMPPZ_COMPACT },
67 { SH64_COMPACT_INSN_CMPSTR_COMPACT, && case_sem_INSN_CMPSTR_COMPACT },
68 { SH64_COMPACT_INSN_DIV0S_COMPACT, && case_sem_INSN_DIV0S_COMPACT },
69 { SH64_COMPACT_INSN_DIV0U_COMPACT, && case_sem_INSN_DIV0U_COMPACT },
70 { SH64_COMPACT_INSN_DIV1_COMPACT, && case_sem_INSN_DIV1_COMPACT },
71 { SH64_COMPACT_INSN_DIVU_COMPACT, && case_sem_INSN_DIVU_COMPACT },
72 { SH64_COMPACT_INSN_MULR_COMPACT, && case_sem_INSN_MULR_COMPACT },
73 { SH64_COMPACT_INSN_DMULSL_COMPACT, && case_sem_INSN_DMULSL_COMPACT },
74 { SH64_COMPACT_INSN_DMULUL_COMPACT, && case_sem_INSN_DMULUL_COMPACT },
75 { SH64_COMPACT_INSN_DT_COMPACT, && case_sem_INSN_DT_COMPACT },
76 { SH64_COMPACT_INSN_EXTSB_COMPACT, && case_sem_INSN_EXTSB_COMPACT },
77 { SH64_COMPACT_INSN_EXTSW_COMPACT, && case_sem_INSN_EXTSW_COMPACT },
78 { SH64_COMPACT_INSN_EXTUB_COMPACT, && case_sem_INSN_EXTUB_COMPACT },
79 { SH64_COMPACT_INSN_EXTUW_COMPACT, && case_sem_INSN_EXTUW_COMPACT },
80 { SH64_COMPACT_INSN_FABS_COMPACT, && case_sem_INSN_FABS_COMPACT },
81 { SH64_COMPACT_INSN_FADD_COMPACT, && case_sem_INSN_FADD_COMPACT },
82 { SH64_COMPACT_INSN_FCMPEQ_COMPACT, && case_sem_INSN_FCMPEQ_COMPACT },
83 { SH64_COMPACT_INSN_FCMPGT_COMPACT, && case_sem_INSN_FCMPGT_COMPACT },
84 { SH64_COMPACT_INSN_FCNVDS_COMPACT, && case_sem_INSN_FCNVDS_COMPACT },
85 { SH64_COMPACT_INSN_FCNVSD_COMPACT, && case_sem_INSN_FCNVSD_COMPACT },
86 { SH64_COMPACT_INSN_FDIV_COMPACT, && case_sem_INSN_FDIV_COMPACT },
87 { SH64_COMPACT_INSN_FIPR_COMPACT, && case_sem_INSN_FIPR_COMPACT },
88 { SH64_COMPACT_INSN_FLDS_COMPACT, && case_sem_INSN_FLDS_COMPACT },
89 { SH64_COMPACT_INSN_FLDI0_COMPACT, && case_sem_INSN_FLDI0_COMPACT },
90 { SH64_COMPACT_INSN_FLDI1_COMPACT, && case_sem_INSN_FLDI1_COMPACT },
91 { SH64_COMPACT_INSN_FLOAT_COMPACT, && case_sem_INSN_FLOAT_COMPACT },
92 { SH64_COMPACT_INSN_FMAC_COMPACT, && case_sem_INSN_FMAC_COMPACT },
93 { SH64_COMPACT_INSN_FMOV1_COMPACT, && case_sem_INSN_FMOV1_COMPACT },
94 { SH64_COMPACT_INSN_FMOV2_COMPACT, && case_sem_INSN_FMOV2_COMPACT },
95 { SH64_COMPACT_INSN_FMOV3_COMPACT, && case_sem_INSN_FMOV3_COMPACT },
96 { SH64_COMPACT_INSN_FMOV4_COMPACT, && case_sem_INSN_FMOV4_COMPACT },
97 { SH64_COMPACT_INSN_FMOV5_COMPACT, && case_sem_INSN_FMOV5_COMPACT },
98 { SH64_COMPACT_INSN_FMOV6_COMPACT, && case_sem_INSN_FMOV6_COMPACT },
99 { SH64_COMPACT_INSN_FMOV7_COMPACT, && case_sem_INSN_FMOV7_COMPACT },
100 { SH64_COMPACT_INSN_FMOV8_COMPACT, && case_sem_INSN_FMOV8_COMPACT },
101 { SH64_COMPACT_INSN_FMOV9_COMPACT, && case_sem_INSN_FMOV9_COMPACT },
102 { SH64_COMPACT_INSN_FMUL_COMPACT, && case_sem_INSN_FMUL_COMPACT },
103 { SH64_COMPACT_INSN_FNEG_COMPACT, && case_sem_INSN_FNEG_COMPACT },
104 { SH64_COMPACT_INSN_FRCHG_COMPACT, && case_sem_INSN_FRCHG_COMPACT },
105 { SH64_COMPACT_INSN_FSCHG_COMPACT, && case_sem_INSN_FSCHG_COMPACT },
106 { SH64_COMPACT_INSN_FSQRT_COMPACT, && case_sem_INSN_FSQRT_COMPACT },
107 { SH64_COMPACT_INSN_FSTS_COMPACT, && case_sem_INSN_FSTS_COMPACT },
108 { SH64_COMPACT_INSN_FSUB_COMPACT, && case_sem_INSN_FSUB_COMPACT },
109 { SH64_COMPACT_INSN_FTRC_COMPACT, && case_sem_INSN_FTRC_COMPACT },
110 { SH64_COMPACT_INSN_FTRV_COMPACT, && case_sem_INSN_FTRV_COMPACT },
111 { SH64_COMPACT_INSN_JMP_COMPACT, && case_sem_INSN_JMP_COMPACT },
112 { SH64_COMPACT_INSN_JSR_COMPACT, && case_sem_INSN_JSR_COMPACT },
113 { SH64_COMPACT_INSN_LDC_GBR_COMPACT, && case_sem_INSN_LDC_GBR_COMPACT },
114 { SH64_COMPACT_INSN_LDC_VBR_COMPACT, && case_sem_INSN_LDC_VBR_COMPACT },
115 { SH64_COMPACT_INSN_LDC_SR_COMPACT, && case_sem_INSN_LDC_SR_COMPACT },
116 { SH64_COMPACT_INSN_LDCL_GBR_COMPACT, && case_sem_INSN_LDCL_GBR_COMPACT },
117 { SH64_COMPACT_INSN_LDCL_VBR_COMPACT, && case_sem_INSN_LDCL_VBR_COMPACT },
118 { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT, && case_sem_INSN_LDS_FPSCR_COMPACT },
119 { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT, && case_sem_INSN_LDSL_FPSCR_COMPACT },
120 { SH64_COMPACT_INSN_LDS_FPUL_COMPACT, && case_sem_INSN_LDS_FPUL_COMPACT },
121 { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT, && case_sem_INSN_LDSL_FPUL_COMPACT },
122 { SH64_COMPACT_INSN_LDS_MACH_COMPACT, && case_sem_INSN_LDS_MACH_COMPACT },
123 { SH64_COMPACT_INSN_LDSL_MACH_COMPACT, && case_sem_INSN_LDSL_MACH_COMPACT },
124 { SH64_COMPACT_INSN_LDS_MACL_COMPACT, && case_sem_INSN_LDS_MACL_COMPACT },
125 { SH64_COMPACT_INSN_LDSL_MACL_COMPACT, && case_sem_INSN_LDSL_MACL_COMPACT },
126 { SH64_COMPACT_INSN_LDS_PR_COMPACT, && case_sem_INSN_LDS_PR_COMPACT },
127 { SH64_COMPACT_INSN_LDSL_PR_COMPACT, && case_sem_INSN_LDSL_PR_COMPACT },
128 { SH64_COMPACT_INSN_MACL_COMPACT, && case_sem_INSN_MACL_COMPACT },
129 { SH64_COMPACT_INSN_MACW_COMPACT, && case_sem_INSN_MACW_COMPACT },
130 { SH64_COMPACT_INSN_MOV_COMPACT, && case_sem_INSN_MOV_COMPACT },
131 { SH64_COMPACT_INSN_MOVI_COMPACT, && case_sem_INSN_MOVI_COMPACT },
132 { SH64_COMPACT_INSN_MOVI20_COMPACT, && case_sem_INSN_MOVI20_COMPACT },
133 { SH64_COMPACT_INSN_MOVB1_COMPACT, && case_sem_INSN_MOVB1_COMPACT },
134 { SH64_COMPACT_INSN_MOVB2_COMPACT, && case_sem_INSN_MOVB2_COMPACT },
135 { SH64_COMPACT_INSN_MOVB3_COMPACT, && case_sem_INSN_MOVB3_COMPACT },
136 { SH64_COMPACT_INSN_MOVB4_COMPACT, && case_sem_INSN_MOVB4_COMPACT },
137 { SH64_COMPACT_INSN_MOVB5_COMPACT, && case_sem_INSN_MOVB5_COMPACT },
138 { SH64_COMPACT_INSN_MOVB6_COMPACT, && case_sem_INSN_MOVB6_COMPACT },
139 { SH64_COMPACT_INSN_MOVB7_COMPACT, && case_sem_INSN_MOVB7_COMPACT },
140 { SH64_COMPACT_INSN_MOVB8_COMPACT, && case_sem_INSN_MOVB8_COMPACT },
141 { SH64_COMPACT_INSN_MOVB9_COMPACT, && case_sem_INSN_MOVB9_COMPACT },
142 { SH64_COMPACT_INSN_MOVB10_COMPACT, && case_sem_INSN_MOVB10_COMPACT },
143 { SH64_COMPACT_INSN_MOVL1_COMPACT, && case_sem_INSN_MOVL1_COMPACT },
144 { SH64_COMPACT_INSN_MOVL2_COMPACT, && case_sem_INSN_MOVL2_COMPACT },
145 { SH64_COMPACT_INSN_MOVL3_COMPACT, && case_sem_INSN_MOVL3_COMPACT },
146 { SH64_COMPACT_INSN_MOVL4_COMPACT, && case_sem_INSN_MOVL4_COMPACT },
147 { SH64_COMPACT_INSN_MOVL5_COMPACT, && case_sem_INSN_MOVL5_COMPACT },
148 { SH64_COMPACT_INSN_MOVL6_COMPACT, && case_sem_INSN_MOVL6_COMPACT },
149 { SH64_COMPACT_INSN_MOVL7_COMPACT, && case_sem_INSN_MOVL7_COMPACT },
150 { SH64_COMPACT_INSN_MOVL8_COMPACT, && case_sem_INSN_MOVL8_COMPACT },
151 { SH64_COMPACT_INSN_MOVL9_COMPACT, && case_sem_INSN_MOVL9_COMPACT },
152 { SH64_COMPACT_INSN_MOVL10_COMPACT, && case_sem_INSN_MOVL10_COMPACT },
153 { SH64_COMPACT_INSN_MOVL11_COMPACT, && case_sem_INSN_MOVL11_COMPACT },
154 { SH64_COMPACT_INSN_MOVL12_COMPACT, && case_sem_INSN_MOVL12_COMPACT },
155 { SH64_COMPACT_INSN_MOVL13_COMPACT, && case_sem_INSN_MOVL13_COMPACT },
156 { SH64_COMPACT_INSN_MOVW1_COMPACT, && case_sem_INSN_MOVW1_COMPACT },
157 { SH64_COMPACT_INSN_MOVW2_COMPACT, && case_sem_INSN_MOVW2_COMPACT },
158 { SH64_COMPACT_INSN_MOVW3_COMPACT, && case_sem_INSN_MOVW3_COMPACT },
159 { SH64_COMPACT_INSN_MOVW4_COMPACT, && case_sem_INSN_MOVW4_COMPACT },
160 { SH64_COMPACT_INSN_MOVW5_COMPACT, && case_sem_INSN_MOVW5_COMPACT },
161 { SH64_COMPACT_INSN_MOVW6_COMPACT, && case_sem_INSN_MOVW6_COMPACT },
162 { SH64_COMPACT_INSN_MOVW7_COMPACT, && case_sem_INSN_MOVW7_COMPACT },
163 { SH64_COMPACT_INSN_MOVW8_COMPACT, && case_sem_INSN_MOVW8_COMPACT },
164 { SH64_COMPACT_INSN_MOVW9_COMPACT, && case_sem_INSN_MOVW9_COMPACT },
165 { SH64_COMPACT_INSN_MOVW10_COMPACT, && case_sem_INSN_MOVW10_COMPACT },
166 { SH64_COMPACT_INSN_MOVW11_COMPACT, && case_sem_INSN_MOVW11_COMPACT },
167 { SH64_COMPACT_INSN_MOVA_COMPACT, && case_sem_INSN_MOVA_COMPACT },
168 { SH64_COMPACT_INSN_MOVCAL_COMPACT, && case_sem_INSN_MOVCAL_COMPACT },
169 { SH64_COMPACT_INSN_MOVCOL_COMPACT, && case_sem_INSN_MOVCOL_COMPACT },
170 { SH64_COMPACT_INSN_MOVT_COMPACT, && case_sem_INSN_MOVT_COMPACT },
171 { SH64_COMPACT_INSN_MOVUAL_COMPACT, && case_sem_INSN_MOVUAL_COMPACT },
172 { SH64_COMPACT_INSN_MOVUAL2_COMPACT, && case_sem_INSN_MOVUAL2_COMPACT },
173 { SH64_COMPACT_INSN_MULL_COMPACT, && case_sem_INSN_MULL_COMPACT },
174 { SH64_COMPACT_INSN_MULSW_COMPACT, && case_sem_INSN_MULSW_COMPACT },
175 { SH64_COMPACT_INSN_MULUW_COMPACT, && case_sem_INSN_MULUW_COMPACT },
176 { SH64_COMPACT_INSN_NEG_COMPACT, && case_sem_INSN_NEG_COMPACT },
177 { SH64_COMPACT_INSN_NEGC_COMPACT, && case_sem_INSN_NEGC_COMPACT },
178 { SH64_COMPACT_INSN_NOP_COMPACT, && case_sem_INSN_NOP_COMPACT },
179 { SH64_COMPACT_INSN_NOT_COMPACT, && case_sem_INSN_NOT_COMPACT },
180 { SH64_COMPACT_INSN_OCBI_COMPACT, && case_sem_INSN_OCBI_COMPACT },
181 { SH64_COMPACT_INSN_OCBP_COMPACT, && case_sem_INSN_OCBP_COMPACT },
182 { SH64_COMPACT_INSN_OCBWB_COMPACT, && case_sem_INSN_OCBWB_COMPACT },
183 { SH64_COMPACT_INSN_OR_COMPACT, && case_sem_INSN_OR_COMPACT },
184 { SH64_COMPACT_INSN_ORI_COMPACT, && case_sem_INSN_ORI_COMPACT },
185 { SH64_COMPACT_INSN_ORB_COMPACT, && case_sem_INSN_ORB_COMPACT },
186 { SH64_COMPACT_INSN_PREF_COMPACT, && case_sem_INSN_PREF_COMPACT },
187 { SH64_COMPACT_INSN_ROTCL_COMPACT, && case_sem_INSN_ROTCL_COMPACT },
188 { SH64_COMPACT_INSN_ROTCR_COMPACT, && case_sem_INSN_ROTCR_COMPACT },
189 { SH64_COMPACT_INSN_ROTL_COMPACT, && case_sem_INSN_ROTL_COMPACT },
190 { SH64_COMPACT_INSN_ROTR_COMPACT, && case_sem_INSN_ROTR_COMPACT },
191 { SH64_COMPACT_INSN_RTS_COMPACT, && case_sem_INSN_RTS_COMPACT },
192 { SH64_COMPACT_INSN_SETS_COMPACT, && case_sem_INSN_SETS_COMPACT },
193 { SH64_COMPACT_INSN_SETT_COMPACT, && case_sem_INSN_SETT_COMPACT },
194 { SH64_COMPACT_INSN_SHAD_COMPACT, && case_sem_INSN_SHAD_COMPACT },
195 { SH64_COMPACT_INSN_SHAL_COMPACT, && case_sem_INSN_SHAL_COMPACT },
196 { SH64_COMPACT_INSN_SHAR_COMPACT, && case_sem_INSN_SHAR_COMPACT },
197 { SH64_COMPACT_INSN_SHLD_COMPACT, && case_sem_INSN_SHLD_COMPACT },
198 { SH64_COMPACT_INSN_SHLL_COMPACT, && case_sem_INSN_SHLL_COMPACT },
199 { SH64_COMPACT_INSN_SHLL2_COMPACT, && case_sem_INSN_SHLL2_COMPACT },
200 { SH64_COMPACT_INSN_SHLL8_COMPACT, && case_sem_INSN_SHLL8_COMPACT },
201 { SH64_COMPACT_INSN_SHLL16_COMPACT, && case_sem_INSN_SHLL16_COMPACT },
202 { SH64_COMPACT_INSN_SHLR_COMPACT, && case_sem_INSN_SHLR_COMPACT },
203 { SH64_COMPACT_INSN_SHLR2_COMPACT, && case_sem_INSN_SHLR2_COMPACT },
204 { SH64_COMPACT_INSN_SHLR8_COMPACT, && case_sem_INSN_SHLR8_COMPACT },
205 { SH64_COMPACT_INSN_SHLR16_COMPACT, && case_sem_INSN_SHLR16_COMPACT },
206 { SH64_COMPACT_INSN_STC_GBR_COMPACT, && case_sem_INSN_STC_GBR_COMPACT },
207 { SH64_COMPACT_INSN_STC_VBR_COMPACT, && case_sem_INSN_STC_VBR_COMPACT },
208 { SH64_COMPACT_INSN_STCL_GBR_COMPACT, && case_sem_INSN_STCL_GBR_COMPACT },
209 { SH64_COMPACT_INSN_STCL_VBR_COMPACT, && case_sem_INSN_STCL_VBR_COMPACT },
210 { SH64_COMPACT_INSN_STS_FPSCR_COMPACT, && case_sem_INSN_STS_FPSCR_COMPACT },
211 { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT, && case_sem_INSN_STSL_FPSCR_COMPACT },
212 { SH64_COMPACT_INSN_STS_FPUL_COMPACT, && case_sem_INSN_STS_FPUL_COMPACT },
213 { SH64_COMPACT_INSN_STSL_FPUL_COMPACT, && case_sem_INSN_STSL_FPUL_COMPACT },
214 { SH64_COMPACT_INSN_STS_MACH_COMPACT, && case_sem_INSN_STS_MACH_COMPACT },
215 { SH64_COMPACT_INSN_STSL_MACH_COMPACT, && case_sem_INSN_STSL_MACH_COMPACT },
216 { SH64_COMPACT_INSN_STS_MACL_COMPACT, && case_sem_INSN_STS_MACL_COMPACT },
217 { SH64_COMPACT_INSN_STSL_MACL_COMPACT, && case_sem_INSN_STSL_MACL_COMPACT },
218 { SH64_COMPACT_INSN_STS_PR_COMPACT, && case_sem_INSN_STS_PR_COMPACT },
219 { SH64_COMPACT_INSN_STSL_PR_COMPACT, && case_sem_INSN_STSL_PR_COMPACT },
220 { SH64_COMPACT_INSN_SUB_COMPACT, && case_sem_INSN_SUB_COMPACT },
221 { SH64_COMPACT_INSN_SUBC_COMPACT, && case_sem_INSN_SUBC_COMPACT },
222 { SH64_COMPACT_INSN_SUBV_COMPACT, && case_sem_INSN_SUBV_COMPACT },
223 { SH64_COMPACT_INSN_SWAPB_COMPACT, && case_sem_INSN_SWAPB_COMPACT },
224 { SH64_COMPACT_INSN_SWAPW_COMPACT, && case_sem_INSN_SWAPW_COMPACT },
225 { SH64_COMPACT_INSN_TASB_COMPACT, && case_sem_INSN_TASB_COMPACT },
226 { SH64_COMPACT_INSN_TRAPA_COMPACT, && case_sem_INSN_TRAPA_COMPACT },
227 { SH64_COMPACT_INSN_TST_COMPACT, && case_sem_INSN_TST_COMPACT },
228 { SH64_COMPACT_INSN_TSTI_COMPACT, && case_sem_INSN_TSTI_COMPACT },
229 { SH64_COMPACT_INSN_TSTB_COMPACT, && case_sem_INSN_TSTB_COMPACT },
230 { SH64_COMPACT_INSN_XOR_COMPACT, && case_sem_INSN_XOR_COMPACT },
231 { SH64_COMPACT_INSN_XORI_COMPACT, && case_sem_INSN_XORI_COMPACT },
232 { SH64_COMPACT_INSN_XORB_COMPACT, && case_sem_INSN_XORB_COMPACT },
233 { SH64_COMPACT_INSN_XTRCT_COMPACT, && case_sem_INSN_XTRCT_COMPACT },
238 for (i = 0; labels[i].label != 0; ++i)
241 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
243 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
248 #endif /* DEFINE_LABELS */
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". */
260 #define TRACE_RESULT(cpu, abuf, name, type, val)
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)
267 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
274 /* Branch to next handler without going around main loop. */
275 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
276 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
278 #else /* ! WITH_SCACHE_PBB */
280 #define NEXT(vpc) BREAK (sem)
283 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
285 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
288 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
291 #endif /* ! WITH_SCACHE_PBB */
295 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
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);
305 /* Update the recorded pc in the cpu state struct.
306 Only necessary for WITH_SCACHE case, but to avoid the
307 conditional compilation .... */
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);
320 CASE (sem, INSN_X_AFTER) : /* --after-- */
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);
330 #if WITH_SCACHE_PBB_SH64_COMPACT
331 sh64_compact_pbb_after (current_cpu, sem_arg);
339 CASE (sem, INSN_X_BEFORE) : /* --before-- */
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);
349 #if WITH_SCACHE_PBB_SH64_COMPACT
350 sh64_compact_pbb_before (current_cpu, sem_arg);
358 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
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);
368 #if WITH_SCACHE_PBB_SH64_COMPACT
370 vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
371 pbb_br_type, pbb_br_npc);
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));
386 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
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);
396 #if WITH_SCACHE_PBB_SH64_COMPACT
397 vpc = sh64_compact_pbb_chain (current_cpu, sem_arg);
408 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
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);
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);
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)));
427 vpc = sh64_compact_pbb_begin (current_cpu, 0);
437 CASE (sem, INSN_ADD_COMPACT) : /* add $rm, $rn */
439 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
440 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
441 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
442 int UNUSED written = 0;
443 IADDR UNUSED pc = abuf->addr;
444 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
447 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
448 SET_H_GRC (FLD (f_rn), opval);
449 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
456 CASE (sem, INSN_ADDI_COMPACT) : /* add #$imm8, $rn */
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);
466 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
467 SET_H_GRC (FLD (f_rn), opval);
468 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
475 CASE (sem, INSN_ADDC_COMPACT) : /* addc $rm, $rn */
477 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
478 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
479 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
480 int UNUSED written = 0;
481 IADDR UNUSED pc = abuf->addr;
482 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
486 tmp_flag = ADDCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
488 SI opval = ADDCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
489 SET_H_GRC (FLD (f_rn), opval);
490 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
495 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
503 CASE (sem, INSN_ADDV_COMPACT) : /* addv $rm, $rn */
505 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
506 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
507 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
508 int UNUSED written = 0;
509 IADDR UNUSED pc = abuf->addr;
510 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
514 tmp_t = ADDOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
516 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
517 SET_H_GRC (FLD (f_rn), opval);
518 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
523 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
531 CASE (sem, INSN_AND_COMPACT) : /* and $rm64, $rn64 */
533 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
535 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
536 int UNUSED written = 0;
537 IADDR UNUSED pc = abuf->addr;
538 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
541 DI opval = ANDDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
542 SET_H_GR (FLD (f_rn), opval);
543 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
550 CASE (sem, INSN_ANDI_COMPACT) : /* and #$uimm8, r0 */
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);
560 SI opval = ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
561 SET_H_GRC (((UINT) 0), opval);
562 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
569 CASE (sem, INSN_ANDB_COMPACT) : /* and.b #$imm8, @(r0, gbr) */
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);
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));
584 UQI opval = tmp_data;
585 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
586 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
594 CASE (sem, INSN_BF_COMPACT) : /* bf $disp8 */
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;
602 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
604 if (NOTBI (GET_H_TBIT ())) {
606 UDI opval = FLD (i_disp8);
607 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
609 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
613 abuf->written = written;
614 SEM_BRANCH_FINI (vpc);
619 CASE (sem, INSN_BFS_COMPACT) : /* bf/s $disp8 */
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;
627 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
629 if (NOTBI (GET_H_TBIT ())) {
632 UDI opval = ADDDI (pc, 2);
633 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
635 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
640 UDI opval = FLD (i_disp8);
641 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
643 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
649 abuf->written = written;
650 SEM_BRANCH_FINI (vpc);
655 CASE (sem, INSN_BRA_COMPACT) : /* bra $disp12 */
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;
663 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
681 SEM_BRANCH_FINI (vpc);
686 CASE (sem, INSN_BRAF_COMPACT) : /* braf $rn */
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;
694 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
712 SEM_BRANCH_FINI (vpc);
717 CASE (sem, INSN_BRK_COMPACT) : /* brk */
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);
726 sh64_break (current_cpu, pc);
732 CASE (sem, INSN_BSR_COMPACT) : /* bsr $disp12 */
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;
740 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
745 SI opval = ADDDI (pc, 4);
747 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
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);
765 SEM_BRANCH_FINI (vpc);
770 CASE (sem, INSN_BSRF_COMPACT) : /* bsrf $rn */
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;
778 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
783 SI opval = ADDDI (pc, 4);
785 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
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);
803 SEM_BRANCH_FINI (vpc);
808 CASE (sem, INSN_BT_COMPACT) : /* bt $disp8 */
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;
816 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
820 UDI opval = FLD (i_disp8);
821 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
823 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
827 abuf->written = written;
828 SEM_BRANCH_FINI (vpc);
833 CASE (sem, INSN_BTS_COMPACT) : /* bt/s $disp8 */
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;
841 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
846 UDI opval = ADDDI (pc, 2);
847 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
849 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
854 UDI opval = FLD (i_disp8);
855 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
857 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
863 abuf->written = written;
864 SEM_BRANCH_FINI (vpc);
869 CASE (sem, INSN_CLRMAC_COMPACT) : /* clrmac */
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);
882 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
887 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
895 CASE (sem, INSN_CLRS_COMPACT) : /* clrs */
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);
907 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
914 CASE (sem, INSN_CLRT_COMPACT) : /* clrt */
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);
926 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
933 CASE (sem, INSN_CMPEQ_COMPACT) : /* cmp/eq $rm, $rn */
935 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
936 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
937 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
938 int UNUSED written = 0;
939 IADDR UNUSED pc = abuf->addr;
940 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
943 BI opval = EQSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
945 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
952 CASE (sem, INSN_CMPEQI_COMPACT) : /* cmp/eq #$imm8, r0 */
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);
962 BI opval = EQSI (GET_H_GRC (((UINT) 0)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
964 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
971 CASE (sem, INSN_CMPGE_COMPACT) : /* cmp/ge $rm, $rn */
973 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
974 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
975 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
976 int UNUSED written = 0;
977 IADDR UNUSED pc = abuf->addr;
978 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
981 BI opval = GESI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
983 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
990 CASE (sem, INSN_CMPGT_COMPACT) : /* cmp/gt $rm, $rn */
992 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
993 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
994 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
995 int UNUSED written = 0;
996 IADDR UNUSED pc = abuf->addr;
997 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1000 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1002 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1009 CASE (sem, INSN_CMPHI_COMPACT) : /* cmp/hi $rm, $rn */
1011 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1012 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1013 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1014 int UNUSED written = 0;
1015 IADDR UNUSED pc = abuf->addr;
1016 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1019 BI opval = GTUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1021 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1028 CASE (sem, INSN_CMPHS_COMPACT) : /* cmp/hs $rm, $rn */
1030 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1031 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1032 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1033 int UNUSED written = 0;
1034 IADDR UNUSED pc = abuf->addr;
1035 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1038 BI opval = GEUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1040 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1047 CASE (sem, INSN_CMPPL_COMPACT) : /* cmp/pl $rn */
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);
1057 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), 0);
1059 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1066 CASE (sem, INSN_CMPPZ_COMPACT) : /* cmp/pz $rn */
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);
1076 BI opval = GESI (GET_H_GRC (FLD (f_rn)), 0);
1078 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1085 CASE (sem, INSN_CMPSTR_COMPACT) : /* cmp/str $rm, $rn */
1087 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1088 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1089 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1090 int UNUSED written = 0;
1091 IADDR UNUSED pc = abuf->addr;
1092 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
1103 BI opval = ((GTUBI (tmp_t, 0)) ? (1) : (0));
1105 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1113 CASE (sem, INSN_DIV0S_COMPACT) : /* div0s $rm, $rn */
1115 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1116 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1117 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1118 int UNUSED written = 0;
1119 IADDR UNUSED pc = abuf->addr;
1120 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1124 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1126 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1129 BI opval = SRLSI (GET_H_GRC (FLD (f_rm)), 31);
1131 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
1134 BI opval = ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm)), 31), SRLSI (GET_H_GRC (FLD (f_rn)), 31))) ? (0) : (1));
1136 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1144 CASE (sem, INSN_DIV0U_COMPACT) : /* div0u */
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);
1157 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1162 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1167 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
1175 CASE (sem, INSN_DIV1_COMPACT) : /* div1 $rm, $rn */
1177 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1178 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1179 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1180 int UNUSED written = 0;
1181 IADDR UNUSED pc = abuf->addr;
1182 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1188 tmp_oldq = GET_H_QBIT ();
1190 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1192 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1195 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), ZEXTBISI (GET_H_TBIT ()));
1196 SET_H_GRC (FLD (f_rn), opval);
1197 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1199 if (NOTBI (tmp_oldq)) {
1200 if (NOTBI (GET_H_MBIT ())) {
1202 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1204 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1205 SET_H_GRC (FLD (f_rn), opval);
1206 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1208 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1209 if (NOTBI (GET_H_QBIT ())) {
1211 BI opval = ((tmp_tmp1) ? (1) : (0));
1213 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1217 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1219 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1225 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1227 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1228 SET_H_GRC (FLD (f_rn), opval);
1229 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1231 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1232 if (NOTBI (GET_H_QBIT ())) {
1234 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1236 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1240 BI opval = ((tmp_tmp1) ? (1) : (0));
1242 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1248 if (NOTBI (GET_H_MBIT ())) {
1250 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1252 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
1253 SET_H_GRC (FLD (f_rn), opval);
1254 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1256 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1257 if (NOTBI (GET_H_QBIT ())) {
1259 BI opval = ((tmp_tmp1) ? (1) : (0));
1261 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1265 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1267 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1273 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1275 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1276 SET_H_GRC (FLD (f_rn), opval);
1277 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1279 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1280 if (NOTBI (GET_H_QBIT ())) {
1282 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1284 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1288 BI opval = ((tmp_tmp1) ? (1) : (0));
1290 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1297 BI opval = ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1299 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1307 CASE (sem, INSN_DIVU_COMPACT) : /* divu r0, $rn */
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);
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);
1326 CASE (sem, INSN_MULR_COMPACT) : /* mulr r0, $rn */
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);
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);
1345 CASE (sem, INSN_DMULSL_COMPACT) : /* dmuls.l $rm, $rn */
1347 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1348 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1349 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1350 int UNUSED written = 0;
1351 IADDR UNUSED pc = abuf->addr;
1352 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1356 tmp_result = MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm))), EXTSIDI (GET_H_GRC (FLD (f_rn))));
1358 SI opval = SUBWORDDISI (tmp_result, 0);
1360 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1363 SI opval = SUBWORDDISI (tmp_result, 1);
1365 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1373 CASE (sem, INSN_DMULUL_COMPACT) : /* dmulu.l $rm, $rn */
1375 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1376 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1377 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1378 int UNUSED written = 0;
1379 IADDR UNUSED pc = abuf->addr;
1380 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1384 tmp_result = MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm))), ZEXTSIDI (GET_H_GRC (FLD (f_rn))));
1386 SI opval = SUBWORDDISI (tmp_result, 0);
1388 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1391 SI opval = SUBWORDDISI (tmp_result, 1);
1393 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1401 CASE (sem, INSN_DT_COMPACT) : /* dt $rn */
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);
1412 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
1413 SET_H_GRC (FLD (f_rn), opval);
1414 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1417 BI opval = EQSI (GET_H_GRC (FLD (f_rn)), 0);
1419 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1427 CASE (sem, INSN_EXTSB_COMPACT) : /* exts.b $rm, $rn */
1429 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1430 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1431 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1432 int UNUSED written = 0;
1433 IADDR UNUSED pc = abuf->addr;
1434 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1437 SI opval = EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
1438 SET_H_GRC (FLD (f_rn), opval);
1439 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1446 CASE (sem, INSN_EXTSW_COMPACT) : /* exts.w $rm, $rn */
1448 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1449 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1450 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1451 int UNUSED written = 0;
1452 IADDR UNUSED pc = abuf->addr;
1453 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1456 SI opval = EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
1457 SET_H_GRC (FLD (f_rn), opval);
1458 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1465 CASE (sem, INSN_EXTUB_COMPACT) : /* extu.b $rm, $rn */
1467 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1468 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1469 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1470 int UNUSED written = 0;
1471 IADDR UNUSED pc = abuf->addr;
1472 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1475 SI opval = ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
1476 SET_H_GRC (FLD (f_rn), opval);
1477 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1484 CASE (sem, INSN_EXTUW_COMPACT) : /* extu.w $rm, $rn */
1486 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1487 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1488 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1489 int UNUSED written = 0;
1490 IADDR UNUSED pc = abuf->addr;
1491 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1494 SI opval = ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
1495 SET_H_GRC (FLD (f_rn), opval);
1496 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1503 CASE (sem, INSN_FABS_COMPACT) : /* fabs $fsdn */
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);
1512 if (GET_H_PRBIT ()) {
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);
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);
1528 abuf->written = written;
1533 CASE (sem, INSN_FADD_COMPACT) : /* fadd $fsdm, $fsdn */
1535 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1536 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1537 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1538 int UNUSED written = 0;
1539 IADDR UNUSED pc = abuf->addr;
1540 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1542 if (GET_H_PRBIT ()) {
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);
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);
1558 abuf->written = written;
1563 CASE (sem, INSN_FCMPEQ_COMPACT) : /* fcmp/eq $fsdm, $fsdn */
1565 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1566 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1567 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1568 int UNUSED written = 0;
1569 IADDR UNUSED pc = abuf->addr;
1570 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1572 if (GET_H_PRBIT ()) {
1574 BI opval = sh64_fcmpeqd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1576 written |= (1 << 3);
1577 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1581 BI opval = sh64_fcmpeqs (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1583 written |= (1 << 3);
1584 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1588 abuf->written = written;
1593 CASE (sem, INSN_FCMPGT_COMPACT) : /* fcmp/gt $fsdm, $fsdn */
1595 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1596 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1597 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1598 int UNUSED written = 0;
1599 IADDR UNUSED pc = abuf->addr;
1600 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1602 if (GET_H_PRBIT ()) {
1604 BI opval = sh64_fcmpgtd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
1606 written |= (1 << 3);
1607 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1611 BI opval = sh64_fcmpgts (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
1613 written |= (1 << 3);
1614 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1618 abuf->written = written;
1623 CASE (sem, INSN_FCNVDS_COMPACT) : /* fcnvds $drn, fpul */
1625 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1626 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1627 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1628 int UNUSED written = 0;
1629 IADDR UNUSED pc = abuf->addr;
1630 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1633 SF opval = sh64_fcnvds (current_cpu, GET_H_DRC (FLD (f_dn)));
1634 CPU (h_fr[((UINT) 32)]) = opval;
1635 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1642 CASE (sem, INSN_FCNVSD_COMPACT) : /* fcnvsd fpul, $drn */
1644 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1645 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1646 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1647 int UNUSED written = 0;
1648 IADDR UNUSED pc = abuf->addr;
1649 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1652 DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[((UINT) 32)]));
1653 SET_H_DRC (FLD (f_dn), opval);
1654 TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
1661 CASE (sem, INSN_FDIV_COMPACT) : /* fdiv $fsdm, $fsdn */
1663 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1664 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1665 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1666 int UNUSED written = 0;
1667 IADDR UNUSED pc = abuf->addr;
1668 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1670 if (GET_H_PRBIT ()) {
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);
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);
1686 abuf->written = written;
1691 CASE (sem, INSN_FIPR_COMPACT) : /* fipr $fvm, $fvn */
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);
1700 sh64_fipr (current_cpu, FLD (f_vm), FLD (f_vn));
1706 CASE (sem, INSN_FLDS_COMPACT) : /* flds $frn, fpul */
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);
1716 SF opval = GET_H_FRC (FLD (f_rn));
1717 CPU (h_fr[((UINT) 32)]) = opval;
1718 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1725 CASE (sem, INSN_FLDI0_COMPACT) : /* fldi0 $frn */
1727 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1728 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1729 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1730 int UNUSED written = 0;
1731 IADDR UNUSED pc = abuf->addr;
1732 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1735 SF opval = sh64_fldi0 (current_cpu);
1736 SET_H_FRC (FLD (f_rn), opval);
1737 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
1744 CASE (sem, INSN_FLDI1_COMPACT) : /* fldi1 $frn */
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);
1754 SF opval = sh64_fldi1 (current_cpu);
1755 SET_H_FRC (FLD (f_rn), opval);
1756 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
1763 CASE (sem, INSN_FLOAT_COMPACT) : /* float fpul, $fsdn */
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);
1772 if (GET_H_PRBIT ()) {
1774 DF opval = sh64_floatld (current_cpu, CPU (h_fr[((UINT) 32)]));
1775 SET_H_FSD (FLD (f_rn), opval);
1776 written |= (1 << 2);
1777 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
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);
1788 abuf->written = written;
1793 CASE (sem, INSN_FMAC_COMPACT) : /* fmac fr0, $frm, $frn */
1795 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1796 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1797 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1798 int UNUSED written = 0;
1799 IADDR UNUSED pc = abuf->addr;
1800 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1803 SF opval = sh64_fmacs (current_cpu, GET_H_FRC (((UINT) 0)), GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
1804 SET_H_FRC (FLD (f_rn), opval);
1805 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
1812 CASE (sem, INSN_FMOV1_COMPACT) : /* fmov $fmovm, $fmovn */
1814 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1815 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1816 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1817 int UNUSED written = 0;
1818 IADDR UNUSED pc = abuf->addr;
1819 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
1831 CASE (sem, INSN_FMOV2_COMPACT) : /* fmov @$rm, $fmovn */
1833 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1834 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1835 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1836 int UNUSED written = 0;
1837 IADDR UNUSED pc = abuf->addr;
1838 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1840 if (NOTBI (GET_H_SZBIT ())) {
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);
1849 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1850 SET_H_FMOV (FLD (f_rn), opval);
1851 written |= (1 << 4);
1852 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1856 abuf->written = written;
1861 CASE (sem, INSN_FMOV3_COMPACT) : /* fmov @${rm}+, fmovn */
1863 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1864 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1865 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1866 int UNUSED written = 0;
1867 IADDR UNUSED pc = abuf->addr;
1868 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1870 if (NOTBI (GET_H_SZBIT ())) {
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);
1879 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
1880 SET_H_GRC (FLD (f_rm), opval);
1881 written |= (1 << 5);
1882 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1888 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1889 SET_H_FMOV (FLD (f_rn), opval);
1890 written |= (1 << 4);
1891 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1894 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 8);
1895 SET_H_GRC (FLD (f_rm), opval);
1896 written |= (1 << 5);
1897 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1902 abuf->written = written;
1907 CASE (sem, INSN_FMOV4_COMPACT) : /* fmov @(r0, $rm), $fmovn */
1909 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1910 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1911 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1912 int UNUSED written = 0;
1913 IADDR UNUSED pc = abuf->addr;
1914 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1916 if (NOTBI (GET_H_SZBIT ())) {
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);
1925 DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
1926 SET_H_FMOV (FLD (f_rn), opval);
1927 written |= (1 << 5);
1928 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1932 abuf->written = written;
1937 CASE (sem, INSN_FMOV5_COMPACT) : /* fmov $fmovm, @$rn */
1939 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1940 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1941 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1942 int UNUSED written = 0;
1943 IADDR UNUSED pc = abuf->addr;
1944 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1946 if (NOTBI (GET_H_SZBIT ())) {
1948 SF opval = GET_H_FMOV (FLD (f_rm));
1949 SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1950 written |= (1 << 4);
1951 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1955 DF opval = GET_H_FMOV (FLD (f_rm));
1956 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1957 written |= (1 << 3);
1958 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1962 abuf->written = written;
1967 CASE (sem, INSN_FMOV6_COMPACT) : /* fmov $fmovm, @-$rn */
1969 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1970 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1971 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1972 int UNUSED written = 0;
1973 IADDR UNUSED pc = abuf->addr;
1974 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1976 if (NOTBI (GET_H_SZBIT ())) {
1979 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
1980 SET_H_GRC (FLD (f_rn), opval);
1981 written |= (1 << 5);
1982 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1985 SF opval = GET_H_FMOV (FLD (f_rm));
1986 SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1987 written |= (1 << 4);
1988 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1994 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 8);
1995 SET_H_GRC (FLD (f_rn), opval);
1996 written |= (1 << 5);
1997 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2000 DF opval = GET_H_FMOV (FLD (f_rm));
2001 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
2002 written |= (1 << 3);
2003 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
2008 abuf->written = written;
2013 CASE (sem, INSN_FMOV7_COMPACT) : /* fmov $fmovm, @(r0, $rn) */
2015 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2016 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2017 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2018 int UNUSED written = 0;
2019 IADDR UNUSED pc = abuf->addr;
2020 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2022 if (NOTBI (GET_H_SZBIT ())) {
2024 SF opval = GET_H_FMOV (FLD (f_rm));
2025 SETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2026 written |= (1 << 5);
2027 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
2031 DF opval = GET_H_FMOV (FLD (f_rm));
2032 SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2033 written |= (1 << 4);
2034 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
2038 abuf->written = written;
2043 CASE (sem, INSN_FMOV8_COMPACT) : /* fmov.d @($imm12x8, $rm), $drn */
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);
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);
2062 CASE (sem, INSN_FMOV9_COMPACT) : /* mov.l $drm, @($imm12x8, $rn) */
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);
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);
2081 CASE (sem, INSN_FMUL_COMPACT) : /* fmul $fsdm, $fsdn */
2083 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2084 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2085 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2086 int UNUSED written = 0;
2087 IADDR UNUSED pc = abuf->addr;
2088 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2090 if (GET_H_PRBIT ()) {
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);
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);
2106 abuf->written = written;
2111 CASE (sem, INSN_FNEG_COMPACT) : /* fneg $fsdn */
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);
2120 if (GET_H_PRBIT ()) {
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);
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);
2136 abuf->written = written;
2141 CASE (sem, INSN_FRCHG_COMPACT) : /* frchg */
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);
2151 BI opval = NOTBI (GET_H_FRBIT ());
2152 SET_H_FRBIT (opval);
2153 TRACE_RESULT (current_cpu, abuf, "frbit", 'x', opval);
2160 CASE (sem, INSN_FSCHG_COMPACT) : /* fschg */
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);
2170 BI opval = NOTBI (GET_H_SZBIT ());
2171 SET_H_SZBIT (opval);
2172 TRACE_RESULT (current_cpu, abuf, "szbit", 'x', opval);
2179 CASE (sem, INSN_FSQRT_COMPACT) : /* fsqrt $fsdn */
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);
2188 if (GET_H_PRBIT ()) {
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);
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);
2204 abuf->written = written;
2209 CASE (sem, INSN_FSTS_COMPACT) : /* fsts fpul, $frn */
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);
2219 SF opval = CPU (h_fr[((UINT) 32)]);
2220 SET_H_FRC (FLD (f_rn), opval);
2221 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
2228 CASE (sem, INSN_FSUB_COMPACT) : /* fsub $fsdm, $fsdn */
2230 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2231 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2232 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2233 int UNUSED written = 0;
2234 IADDR UNUSED pc = abuf->addr;
2235 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2237 if (GET_H_PRBIT ()) {
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);
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);
2253 abuf->written = written;
2258 CASE (sem, INSN_FTRC_COMPACT) : /* ftrc $fsdn, fpul */
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);
2268 SF opval = ((GET_H_PRBIT ()) ? (sh64_ftrcdl (current_cpu, GET_H_FSD (FLD (f_rn)))) : (sh64_ftrcsl (current_cpu, GET_H_FSD (FLD (f_rn)))));
2269 CPU (h_fr[((UINT) 32)]) = opval;
2270 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2277 CASE (sem, INSN_FTRV_COMPACT) : /* ftrv xmtrx, $fvn */
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);
2286 sh64_ftrv (current_cpu, FLD (f_vn));
2292 CASE (sem, INSN_JMP_COMPACT) : /* jmp @$rn */
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;
2300 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
2319 SEM_BRANCH_FINI (vpc);
2324 CASE (sem, INSN_JSR_COMPACT) : /* jsr @$rn */
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;
2332 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2337 SI opval = ADDDI (pc, 4);
2339 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
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);
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);
2358 SEM_BRANCH_FINI (vpc);
2363 CASE (sem, INSN_LDC_GBR_COMPACT) : /* ldc $rn, gbr */
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);
2373 SI opval = GET_H_GRC (FLD (f_rn));
2375 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
2382 CASE (sem, INSN_LDC_VBR_COMPACT) : /* ldc $rn, vbr */
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);
2392 SI opval = GET_H_GRC (FLD (f_rn));
2394 TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
2401 CASE (sem, INSN_LDC_SR_COMPACT) : /* ldc $rn, sr */
2403 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2404 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2405 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2406 int UNUSED written = 0;
2407 IADDR UNUSED pc = abuf->addr;
2408 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2411 SI opval = GET_H_GRC (FLD (f_rn));
2413 TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
2420 CASE (sem, INSN_LDCL_GBR_COMPACT) : /* ldc.l @${rn}+, gbr */
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);
2431 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2433 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
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);
2446 CASE (sem, INSN_LDCL_VBR_COMPACT) : /* ldc.l @${rn}+, vbr */
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);
2457 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2459 TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
2462 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2463 SET_H_GRC (FLD (f_rn), opval);
2464 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2472 CASE (sem, INSN_LDS_FPSCR_COMPACT) : /* lds $rn, fpscr */
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);
2482 SI opval = GET_H_GRC (FLD (f_rn));
2483 CPU (h_fpscr) = opval;
2484 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2491 CASE (sem, INSN_LDSL_FPSCR_COMPACT) : /* lds.l @${rn}+, fpscr */
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);
2502 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2503 CPU (h_fpscr) = opval;
2504 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2507 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2508 SET_H_GRC (FLD (f_rn), opval);
2509 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2517 CASE (sem, INSN_LDS_FPUL_COMPACT) : /* lds $rn, fpul */
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);
2527 SF opval = SUBWORDSISF (GET_H_GRC (FLD (f_rn)));
2528 CPU (h_fr[((UINT) 32)]) = opval;
2529 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2536 CASE (sem, INSN_LDSL_FPUL_COMPACT) : /* lds.l @${rn}+, fpul */
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);
2547 SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2548 CPU (h_fr[((UINT) 32)]) = opval;
2549 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2552 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2553 SET_H_GRC (FLD (f_rn), opval);
2554 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2562 CASE (sem, INSN_LDS_MACH_COMPACT) : /* lds $rn, mach */
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);
2572 SI opval = GET_H_GRC (FLD (f_rn));
2574 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2581 CASE (sem, INSN_LDSL_MACH_COMPACT) : /* lds.l @${rn}+, mach */
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);
2592 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2594 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2597 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2598 SET_H_GRC (FLD (f_rn), opval);
2599 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2607 CASE (sem, INSN_LDS_MACL_COMPACT) : /* lds $rn, macl */
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);
2617 SI opval = GET_H_GRC (FLD (f_rn));
2619 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2626 CASE (sem, INSN_LDSL_MACL_COMPACT) : /* lds.l @${rn}+, macl */
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);
2637 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2639 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2642 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2643 SET_H_GRC (FLD (f_rn), opval);
2644 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2652 CASE (sem, INSN_LDS_PR_COMPACT) : /* lds $rn, pr */
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);
2662 SI opval = GET_H_GRC (FLD (f_rn));
2664 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2671 CASE (sem, INSN_LDSL_PR_COMPACT) : /* lds.l @${rn}+, pr */
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);
2682 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2684 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2687 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2688 SET_H_GRC (FLD (f_rn), opval);
2689 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2697 CASE (sem, INSN_MACL_COMPACT) : /* mac.l @${rm}+, @${rn}+ */
2699 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2700 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2701 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2702 int UNUSED written = 0;
2703 IADDR UNUSED pc = abuf->addr;
2704 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2712 tmp_x = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2714 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2715 SET_H_GRC (FLD (f_rn), opval);
2716 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2718 if (EQSI (FLD (f_rn), FLD (f_rm))) {
2721 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2722 SET_H_GRC (FLD (f_rn), opval);
2723 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2726 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
2727 SET_H_GRC (FLD (f_rm), opval);
2728 written |= (1 << 11);
2729 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2733 tmp_y = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2735 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
2736 SET_H_GRC (FLD (f_rm), opval);
2737 written |= (1 << 11);
2738 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
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);
2744 if (GET_H_SBIT ()) {
2748 tmp_max = SRLDI (INVDI (0), 16);
2749 tmp_min = SRLDI (INVDI (0), 15);
2750 if (GTDI (tmp_result, tmp_max)) {
2751 tmp_result = tmp_max;
2753 if (LTDI (tmp_result, tmp_min)) {
2754 tmp_result = tmp_min;
2760 SI opval = SUBWORDDISI (tmp_result, 0);
2762 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2765 SI opval = SUBWORDDISI (tmp_result, 1);
2767 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2772 abuf->written = written;
2777 CASE (sem, INSN_MACW_COMPACT) : /* mac.w @${rm}+, @${rn}+ */
2779 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2781 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2782 int UNUSED written = 0;
2783 IADDR UNUSED pc = abuf->addr;
2784 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2792 tmp_x = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2794 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
2795 SET_H_GRC (FLD (f_rn), opval);
2796 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2798 if (EQSI (FLD (f_rn), FLD (f_rm))) {
2801 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
2802 SET_H_GRC (FLD (f_rn), opval);
2803 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2806 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
2807 SET_H_GRC (FLD (f_rm), opval);
2808 written |= (1 << 11);
2809 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2813 tmp_y = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2815 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
2816 SET_H_GRC (FLD (f_rm), opval);
2817 written |= (1 << 11);
2818 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2820 tmp_tmpry = MULSI (ZEXTHISI (tmp_x), ZEXTHISI (tmp_y));
2821 if (GET_H_SBIT ()) {
2823 if (ADDOFSI (tmp_tmpry, GET_H_MACL (), 0)) {
2827 written |= (1 << 9);
2828 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2832 SI opval = ADDSI (tmp_tmpry, GET_H_MACL ());
2834 written |= (1 << 10);
2835 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2840 tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2841 tmp_result = ADDDI (tmp_mac, EXTSIDI (tmp_tmpry));
2843 SI opval = SUBWORDDISI (tmp_result, 0);
2845 written |= (1 << 9);
2846 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2849 SI opval = SUBWORDDISI (tmp_result, 1);
2851 written |= (1 << 10);
2852 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2858 abuf->written = written;
2863 CASE (sem, INSN_MOV_COMPACT) : /* mov $rm64, $rn64 */
2865 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2866 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2867 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2868 int UNUSED written = 0;
2869 IADDR UNUSED pc = abuf->addr;
2870 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2873 DI opval = GET_H_GR (FLD (f_rm));
2874 SET_H_GR (FLD (f_rn), opval);
2875 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2882 CASE (sem, INSN_MOVI_COMPACT) : /* mov #$imm8, $rn */
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);
2892 SI opval = EXTQIDI (ANDQI (FLD (f_imm8), 255));
2893 SET_H_GRC (FLD (f_rn), opval);
2894 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2901 CASE (sem, INSN_MOVI20_COMPACT) : /* movi20 #$imm20, $rn */
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);
2911 SI opval = FLD (f_imm20);
2912 SET_H_GRC (FLD (f_rn), opval);
2913 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2920 CASE (sem, INSN_MOVB1_COMPACT) : /* mov.b $rm, @$rn */
2922 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2923 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2924 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2925 int UNUSED written = 0;
2926 IADDR UNUSED pc = abuf->addr;
2927 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
2939 CASE (sem, INSN_MOVB2_COMPACT) : /* mov.b $rm, @-$rn */
2941 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2942 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2943 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2944 int UNUSED written = 0;
2945 IADDR UNUSED pc = abuf->addr;
2946 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2950 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
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);
2957 SI opval = tmp_addr;
2958 SET_H_GRC (FLD (f_rn), opval);
2959 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2967 CASE (sem, INSN_MOVB3_COMPACT) : /* mov.b $rm, @(r0,$rn) */
2969 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2970 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2971 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2972 int UNUSED written = 0;
2973 IADDR UNUSED pc = abuf->addr;
2974 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
2986 CASE (sem, INSN_MOVB4_COMPACT) : /* mov.b r0, @($imm8, gbr) */
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);
2997 tmp_addr = ADDSI (GET_H_GBR (), FLD (f_imm8));
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);
3009 CASE (sem, INSN_MOVB5_COMPACT) : /* mov.b r0, @($imm4, $rm) */
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);
3020 tmp_addr = ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4));
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);
3032 CASE (sem, INSN_MOVB6_COMPACT) : /* mov.b @$rm, $rn */
3034 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3035 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3036 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3037 int UNUSED written = 0;
3038 IADDR UNUSED pc = abuf->addr;
3039 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3042 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
3043 SET_H_GRC (FLD (f_rn), opval);
3044 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3051 CASE (sem, INSN_MOVB7_COMPACT) : /* mov.b @${rm}+, $rn */
3053 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3054 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3055 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3056 int UNUSED written = 0;
3057 IADDR UNUSED pc = abuf->addr;
3058 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3062 tmp_data = GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3063 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3065 SI opval = EXTQISI (tmp_data);
3066 SET_H_GRC (FLD (f_rm), opval);
3067 written |= (1 << 4);
3068 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3072 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 1);
3073 SET_H_GRC (FLD (f_rm), opval);
3074 written |= (1 << 4);
3075 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3079 SI opval = EXTQISI (tmp_data);
3080 SET_H_GRC (FLD (f_rn), opval);
3081 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3085 abuf->written = written;
3090 CASE (sem, INSN_MOVB8_COMPACT) : /* mov.b @(r0, $rm), $rn */
3092 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3093 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3094 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3095 int UNUSED written = 0;
3096 IADDR UNUSED pc = abuf->addr;
3097 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3100 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
3101 SET_H_GRC (FLD (f_rn), opval);
3102 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3109 CASE (sem, INSN_MOVB9_COMPACT) : /* mov.b @($imm8, gbr), r0 */
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);
3119 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8))));
3120 SET_H_GRC (((UINT) 0), opval);
3121 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3128 CASE (sem, INSN_MOVB10_COMPACT) : /* mov.b @($imm4, $rm), r0 */
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);
3138 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4))));
3139 SET_H_GRC (((UINT) 0), opval);
3140 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3147 CASE (sem, INSN_MOVL1_COMPACT) : /* mov.l $rm, @$rn */
3149 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3150 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3151 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3152 int UNUSED written = 0;
3153 IADDR UNUSED pc = abuf->addr;
3154 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3166 CASE (sem, INSN_MOVL2_COMPACT) : /* mov.l $rm, @-$rn */
3168 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3169 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3170 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3171 int UNUSED written = 0;
3172 IADDR UNUSED pc = abuf->addr;
3173 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3177 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
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);
3184 SI opval = tmp_addr;
3185 SET_H_GRC (FLD (f_rn), opval);
3186 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3194 CASE (sem, INSN_MOVL3_COMPACT) : /* mov.l $rm, @(r0, $rn) */
3196 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3197 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3198 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3199 int UNUSED written = 0;
3200 IADDR UNUSED pc = abuf->addr;
3201 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3213 CASE (sem, INSN_MOVL4_COMPACT) : /* mov.l r0, @($imm8x4, gbr) */
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);
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);
3232 CASE (sem, INSN_MOVL5_COMPACT) : /* mov.l $rm, @($imm4x4, $rn) */
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);
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);
3251 CASE (sem, INSN_MOVL6_COMPACT) : /* mov.l @$rm, $rn */
3253 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3254 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3255 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3256 int UNUSED written = 0;
3257 IADDR UNUSED pc = abuf->addr;
3258 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3261 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3262 SET_H_GRC (FLD (f_rn), opval);
3263 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3270 CASE (sem, INSN_MOVL7_COMPACT) : /* mov.l @${rm}+, $rn */
3272 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3274 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3275 int UNUSED written = 0;
3276 IADDR UNUSED pc = abuf->addr;
3277 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3281 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3282 SET_H_GRC (FLD (f_rn), opval);
3283 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3285 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3287 SI opval = GET_H_GRC (FLD (f_rn));
3288 SET_H_GRC (FLD (f_rm), opval);
3289 written |= (1 << 5);
3290 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3294 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
3295 SET_H_GRC (FLD (f_rm), opval);
3296 written |= (1 << 5);
3297 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3302 abuf->written = written;
3307 CASE (sem, INSN_MOVL8_COMPACT) : /* mov.l @(r0, $rm), $rn */
3309 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3310 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3311 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3312 int UNUSED written = 0;
3313 IADDR UNUSED pc = abuf->addr;
3314 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3317 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
3318 SET_H_GRC (FLD (f_rn), opval);
3319 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3326 CASE (sem, INSN_MOVL9_COMPACT) : /* mov.l @($imm8x4, gbr), r0 */
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);
3336 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)));
3337 SET_H_GRC (((UINT) 0), opval);
3338 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3345 CASE (sem, INSN_MOVL10_COMPACT) : /* mov.l @($imm8x4, pc), $rn */
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);
3355 SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_imm8x4), ANDDI (ADDDI (pc, 4), INVSI (3))));
3356 SET_H_GRC (FLD (f_rn), opval);
3357 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3364 CASE (sem, INSN_MOVL11_COMPACT) : /* mov.l @($imm4x4, $rm), $rn */
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);
3374 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x4)));
3375 SET_H_GRC (FLD (f_rn), opval);
3376 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3383 CASE (sem, INSN_MOVL12_COMPACT) : /* mov.l @($imm12x4, $rm), $rn */
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);
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);
3402 CASE (sem, INSN_MOVL13_COMPACT) : /* mov.l $rm, @($imm12x4, $rn) */
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);
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);
3421 CASE (sem, INSN_MOVW1_COMPACT) : /* mov.w $rm, @$rn */
3423 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3424 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3425 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3426 int UNUSED written = 0;
3427 IADDR UNUSED pc = abuf->addr;
3428 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3440 CASE (sem, INSN_MOVW2_COMPACT) : /* mov.w $rm, @-$rn */
3442 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3444 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3445 int UNUSED written = 0;
3446 IADDR UNUSED pc = abuf->addr;
3447 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3451 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 2);
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);
3458 SI opval = tmp_addr;
3459 SET_H_GRC (FLD (f_rn), opval);
3460 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3468 CASE (sem, INSN_MOVW3_COMPACT) : /* mov.w $rm, @(r0, $rn) */
3470 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3471 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3472 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3473 int UNUSED written = 0;
3474 IADDR UNUSED pc = abuf->addr;
3475 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3487 CASE (sem, INSN_MOVW4_COMPACT) : /* mov.w r0, @($imm8x2, gbr) */
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);
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);
3506 CASE (sem, INSN_MOVW5_COMPACT) : /* mov.w r0, @($imm4x2, $rm) */
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);
3516 HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
3517 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2)), opval);
3518 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3525 CASE (sem, INSN_MOVW6_COMPACT) : /* mov.w @$rm, $rn */
3527 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3528 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3529 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3530 int UNUSED written = 0;
3531 IADDR UNUSED pc = abuf->addr;
3532 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3535 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
3536 SET_H_GRC (FLD (f_rn), opval);
3537 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3544 CASE (sem, INSN_MOVW7_COMPACT) : /* mov.w @${rm}+, $rn */
3546 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3547 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3548 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3549 int UNUSED written = 0;
3550 IADDR UNUSED pc = abuf->addr;
3551 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3555 tmp_data = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3556 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3558 SI opval = EXTHISI (tmp_data);
3559 SET_H_GRC (FLD (f_rm), opval);
3560 written |= (1 << 4);
3561 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3565 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
3566 SET_H_GRC (FLD (f_rm), opval);
3567 written |= (1 << 4);
3568 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3572 SI opval = EXTHISI (tmp_data);
3573 SET_H_GRC (FLD (f_rn), opval);
3574 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3578 abuf->written = written;
3583 CASE (sem, INSN_MOVW8_COMPACT) : /* mov.w @(r0, $rm), $rn */
3585 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3586 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3587 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3588 int UNUSED written = 0;
3589 IADDR UNUSED pc = abuf->addr;
3590 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3593 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
3594 SET_H_GRC (FLD (f_rn), opval);
3595 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3602 CASE (sem, INSN_MOVW9_COMPACT) : /* mov.w @($imm8x2, gbr), r0 */
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);
3612 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2))));
3613 SET_H_GRC (((UINT) 0), opval);
3614 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3621 CASE (sem, INSN_MOVW10_COMPACT) : /* mov.w @($imm8x2, pc), $rn */
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);
3631 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDDI (ADDDI (pc, 4), FLD (f_imm8x2))));
3632 SET_H_GRC (FLD (f_rn), opval);
3633 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3640 CASE (sem, INSN_MOVW11_COMPACT) : /* mov.w @($imm4x2, $rm), r0 */
3642 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3643 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3644 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3645 int UNUSED written = 0;
3646 IADDR UNUSED pc = abuf->addr;
3647 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3650 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2))));
3651 SET_H_GRC (((UINT) 0), opval);
3652 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3659 CASE (sem, INSN_MOVA_COMPACT) : /* mova @($imm8x4, pc), r0 */
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);
3669 SI opval = ADDDI (ANDDI (ADDDI (pc, 4), INVSI (3)), FLD (f_imm8x4));
3670 SET_H_GRC (((UINT) 0), opval);
3671 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3678 CASE (sem, INSN_MOVCAL_COMPACT) : /* movca.l r0, @$rn */
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);
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);
3697 CASE (sem, INSN_MOVCOL_COMPACT) : /* movco.l r0, @$rn */
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);
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);
3716 CASE (sem, INSN_MOVT_COMPACT) : /* movt $rn */
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);
3726 SI opval = ZEXTBISI (GET_H_TBIT ());
3727 SET_H_GRC (FLD (f_rn), opval);
3728 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3735 CASE (sem, INSN_MOVUAL_COMPACT) : /* movua.l @$rn, r0 */
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);
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);
3754 CASE (sem, INSN_MOVUAL2_COMPACT) : /* movua.l @$rn+, r0 */
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);
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);
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);
3780 CASE (sem, INSN_MULL_COMPACT) : /* mul.l $rm, $rn */
3782 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3783 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3784 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3785 int UNUSED written = 0;
3786 IADDR UNUSED pc = abuf->addr;
3787 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3790 SI opval = MULSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
3792 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3799 CASE (sem, INSN_MULSW_COMPACT) : /* muls.w $rm, $rn */
3801 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3802 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3803 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3804 int UNUSED written = 0;
3805 IADDR UNUSED pc = abuf->addr;
3806 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3809 SI opval = MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3811 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3818 CASE (sem, INSN_MULUW_COMPACT) : /* mulu.w $rm, $rn */
3820 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3821 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3822 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3823 int UNUSED written = 0;
3824 IADDR UNUSED pc = abuf->addr;
3825 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3828 SI opval = MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3830 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3837 CASE (sem, INSN_NEG_COMPACT) : /* neg $rm, $rn */
3839 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3840 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3841 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3842 int UNUSED written = 0;
3843 IADDR UNUSED pc = abuf->addr;
3844 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3847 SI opval = NEGSI (GET_H_GRC (FLD (f_rm)));
3848 SET_H_GRC (FLD (f_rn), opval);
3849 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3856 CASE (sem, INSN_NEGC_COMPACT) : /* negc $rm, $rn */
3858 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3859 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3860 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3861 int UNUSED written = 0;
3862 IADDR UNUSED pc = abuf->addr;
3863 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3867 tmp_flag = SUBCFSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
3869 SI opval = SUBCSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
3870 SET_H_GRC (FLD (f_rn), opval);
3871 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3874 BI opval = tmp_flag;
3876 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3884 CASE (sem, INSN_NOP_COMPACT) : /* nop */
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);
3899 CASE (sem, INSN_NOT_COMPACT) : /* not $rm64, $rn64 */
3901 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3902 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3903 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3904 int UNUSED written = 0;
3905 IADDR UNUSED pc = abuf->addr;
3906 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3909 DI opval = INVDI (GET_H_GR (FLD (f_rm)));
3910 SET_H_GR (FLD (f_rn), opval);
3911 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3918 CASE (sem, INSN_OCBI_COMPACT) : /* ocbi @$rn */
3920 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3921 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3922 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3923 int UNUSED written = 0;
3924 IADDR UNUSED pc = abuf->addr;
3925 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3940 CASE (sem, INSN_OCBP_COMPACT) : /* ocbp @$rn */
3942 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3943 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3944 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3945 int UNUSED written = 0;
3946 IADDR UNUSED pc = abuf->addr;
3947 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3962 CASE (sem, INSN_OCBWB_COMPACT) : /* ocbwb @$rn */
3964 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3965 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3966 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3967 int UNUSED written = 0;
3968 IADDR UNUSED pc = abuf->addr;
3969 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
3984 CASE (sem, INSN_OR_COMPACT) : /* or $rm64, $rn64 */
3986 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3987 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3988 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3989 int UNUSED written = 0;
3990 IADDR UNUSED pc = abuf->addr;
3991 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3994 DI opval = ORDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
3995 SET_H_GR (FLD (f_rn), opval);
3996 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4003 CASE (sem, INSN_ORI_COMPACT) : /* or #$uimm8, r0 */
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);
4013 SI opval = ORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
4014 SET_H_GRC (((UINT) 0), opval);
4015 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4022 CASE (sem, INSN_ORB_COMPACT) : /* or.b #$imm8, @(r0, gbr) */
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);
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));
4037 UQI opval = tmp_data;
4038 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4039 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4047 CASE (sem, INSN_PREF_COMPACT) : /* pref @$rn */
4049 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4050 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4051 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4052 int UNUSED written = 0;
4053 IADDR UNUSED pc = abuf->addr;
4054 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4056 sh64_pref (current_cpu, GET_H_GRC (FLD (f_rn)));
4062 CASE (sem, INSN_ROTCL_COMPACT) : /* rotcl $rn */
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);
4073 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4075 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), GET_H_TBIT ());
4076 SET_H_GRC (FLD (f_rn), opval);
4077 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4080 BI opval = ((tmp_temp) ? (1) : (0));
4082 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4090 CASE (sem, INSN_ROTCR_COMPACT) : /* rotcr $rn */
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);
4102 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
4103 tmp_temp = GET_H_TBIT ();
4105 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
4106 SET_H_GRC (FLD (f_rn), opval);
4107 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4110 BI opval = ((tmp_lsbit) ? (1) : (0));
4112 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4120 CASE (sem, INSN_ROTL_COMPACT) : /* rotl $rn */
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);
4131 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4133 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), tmp_temp);
4134 SET_H_GRC (FLD (f_rn), opval);
4135 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4138 BI opval = ((tmp_temp) ? (1) : (0));
4140 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4148 CASE (sem, INSN_ROTR_COMPACT) : /* rotr $rn */
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);
4160 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
4161 tmp_temp = tmp_lsbit;
4163 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
4164 SET_H_GRC (FLD (f_rn), opval);
4165 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4168 BI opval = ((tmp_lsbit) ? (1) : (0));
4170 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4178 CASE (sem, INSN_RTS_COMPACT) : /* rts */
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;
4186 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
4205 SEM_BRANCH_FINI (vpc);
4210 CASE (sem, INSN_SETS_COMPACT) : /* sets */
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);
4222 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
4229 CASE (sem, INSN_SETT_COMPACT) : /* sett */
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);
4241 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4248 CASE (sem, INSN_SHAD_COMPACT) : /* shad $rm, $rn */
4250 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4251 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4252 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4253 int UNUSED written = 0;
4254 IADDR UNUSED pc = abuf->addr;
4255 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4259 tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
4260 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
4262 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
4263 SET_H_GRC (FLD (f_rn), opval);
4264 written |= (1 << 2);
4265 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4268 if (NESI (tmp_shamt, 0)) {
4270 SI opval = SRASI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
4271 SET_H_GRC (FLD (f_rn), opval);
4272 written |= (1 << 2);
4273 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4276 if (LTSI (GET_H_GRC (FLD (f_rn)), 0)) {
4278 SI opval = NEGSI (1);
4279 SET_H_GRC (FLD (f_rn), opval);
4280 written |= (1 << 2);
4281 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4286 SET_H_GRC (FLD (f_rn), opval);
4287 written |= (1 << 2);
4288 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4295 abuf->written = written;
4300 CASE (sem, INSN_SHAL_COMPACT) : /* shal $rn */
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);
4311 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4313 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
4314 SET_H_GRC (FLD (f_rn), opval);
4315 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4318 BI opval = ((tmp_t) ? (1) : (0));
4320 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4328 CASE (sem, INSN_SHAR_COMPACT) : /* shar $rn */
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);
4339 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
4341 SI opval = SRASI (GET_H_GRC (FLD (f_rn)), 1);
4342 SET_H_GRC (FLD (f_rn), opval);
4343 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4346 BI opval = ((tmp_t) ? (1) : (0));
4348 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4356 CASE (sem, INSN_SHLD_COMPACT) : /* shld $rm, $rn */
4358 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4359 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4360 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4361 int UNUSED written = 0;
4362 IADDR UNUSED pc = abuf->addr;
4363 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4367 tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
4368 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
4370 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
4371 SET_H_GRC (FLD (f_rn), opval);
4372 written |= (1 << 2);
4373 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4376 if (NESI (tmp_shamt, 0)) {
4378 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
4379 SET_H_GRC (FLD (f_rn), opval);
4380 written |= (1 << 2);
4381 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4386 SET_H_GRC (FLD (f_rn), opval);
4387 written |= (1 << 2);
4388 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4394 abuf->written = written;
4399 CASE (sem, INSN_SHLL_COMPACT) : /* shll $rn */
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);
4410 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4412 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
4413 SET_H_GRC (FLD (f_rn), opval);
4414 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4417 BI opval = ((tmp_t) ? (1) : (0));
4419 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4427 CASE (sem, INSN_SHLL2_COMPACT) : /* shll2 $rn */
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);
4437 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 2);
4438 SET_H_GRC (FLD (f_rn), opval);
4439 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4446 CASE (sem, INSN_SHLL8_COMPACT) : /* shll8 $rn */
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);
4456 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 8);
4457 SET_H_GRC (FLD (f_rn), opval);
4458 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4465 CASE (sem, INSN_SHLL16_COMPACT) : /* shll16 $rn */
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);
4475 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 16);
4476 SET_H_GRC (FLD (f_rn), opval);
4477 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4484 CASE (sem, INSN_SHLR_COMPACT) : /* shlr $rn */
4486 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4487 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4488 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4489 int UNUSED written = 0;
4490 IADDR UNUSED pc = abuf->addr;
4491 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4495 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
4497 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 1);
4498 SET_H_GRC (FLD (f_rn), opval);
4499 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4502 BI opval = ((tmp_t) ? (1) : (0));
4504 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4512 CASE (sem, INSN_SHLR2_COMPACT) : /* shlr2 $rn */
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);
4522 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 2);
4523 SET_H_GRC (FLD (f_rn), opval);
4524 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4531 CASE (sem, INSN_SHLR8_COMPACT) : /* shlr8 $rn */
4533 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4535 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4536 int UNUSED written = 0;
4537 IADDR UNUSED pc = abuf->addr;
4538 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4541 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 8);
4542 SET_H_GRC (FLD (f_rn), opval);
4543 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4550 CASE (sem, INSN_SHLR16_COMPACT) : /* shlr16 $rn */
4552 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4553 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4554 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4555 int UNUSED written = 0;
4556 IADDR UNUSED pc = abuf->addr;
4557 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4560 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 16);
4561 SET_H_GRC (FLD (f_rn), opval);
4562 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4569 CASE (sem, INSN_STC_GBR_COMPACT) : /* stc gbr, $rn */
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);
4579 SI opval = GET_H_GBR ();
4580 SET_H_GRC (FLD (f_rn), opval);
4581 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4588 CASE (sem, INSN_STC_VBR_COMPACT) : /* stc vbr, $rn */
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);
4598 SI opval = GET_H_VBR ();
4599 SET_H_GRC (FLD (f_rn), opval);
4600 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4607 CASE (sem, INSN_STCL_GBR_COMPACT) : /* stc.l gbr, @-$rn */
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);
4618 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4620 SI opval = GET_H_GBR ();
4621 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4622 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4625 SI opval = tmp_addr;
4626 SET_H_GRC (FLD (f_rn), opval);
4627 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4635 CASE (sem, INSN_STCL_VBR_COMPACT) : /* stc.l vbr, @-$rn */
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);
4646 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4648 SI opval = GET_H_VBR ();
4649 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4650 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4653 SI opval = tmp_addr;
4654 SET_H_GRC (FLD (f_rn), opval);
4655 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4663 CASE (sem, INSN_STS_FPSCR_COMPACT) : /* sts fpscr, $rn */
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);
4673 SI opval = CPU (h_fpscr);
4674 SET_H_GRC (FLD (f_rn), opval);
4675 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4682 CASE (sem, INSN_STSL_FPSCR_COMPACT) : /* sts.l fpscr, @-$rn */
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);
4693 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4695 SI opval = CPU (h_fpscr);
4696 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4697 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4700 SI opval = tmp_addr;
4701 SET_H_GRC (FLD (f_rn), opval);
4702 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4710 CASE (sem, INSN_STS_FPUL_COMPACT) : /* sts fpul, $rn */
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);
4720 SI opval = SUBWORDSFSI (CPU (h_fr[((UINT) 32)]));
4721 SET_H_GRC (FLD (f_rn), opval);
4722 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4729 CASE (sem, INSN_STSL_FPUL_COMPACT) : /* sts.l fpul, @-$rn */
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);
4740 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
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);
4747 SI opval = tmp_addr;
4748 SET_H_GRC (FLD (f_rn), opval);
4749 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4757 CASE (sem, INSN_STS_MACH_COMPACT) : /* sts mach, $rn */
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);
4767 SI opval = GET_H_MACH ();
4768 SET_H_GRC (FLD (f_rn), opval);
4769 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4776 CASE (sem, INSN_STSL_MACH_COMPACT) : /* sts.l mach, @-$rn */
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);
4787 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4789 SI opval = GET_H_MACH ();
4790 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4791 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4794 SI opval = tmp_addr;
4795 SET_H_GRC (FLD (f_rn), opval);
4796 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4804 CASE (sem, INSN_STS_MACL_COMPACT) : /* sts macl, $rn */
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);
4814 SI opval = GET_H_MACL ();
4815 SET_H_GRC (FLD (f_rn), opval);
4816 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4823 CASE (sem, INSN_STSL_MACL_COMPACT) : /* sts.l macl, @-$rn */
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);
4834 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4836 SI opval = GET_H_MACL ();
4837 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4838 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4841 SI opval = tmp_addr;
4842 SET_H_GRC (FLD (f_rn), opval);
4843 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4851 CASE (sem, INSN_STS_PR_COMPACT) : /* sts pr, $rn */
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);
4861 SI opval = GET_H_PR ();
4862 SET_H_GRC (FLD (f_rn), opval);
4863 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4870 CASE (sem, INSN_STSL_PR_COMPACT) : /* sts.l pr, @-$rn */
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);
4881 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4883 SI opval = GET_H_PR ();
4884 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4885 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4888 SI opval = tmp_addr;
4889 SET_H_GRC (FLD (f_rn), opval);
4890 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4898 CASE (sem, INSN_SUB_COMPACT) : /* sub $rm, $rn */
4900 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4901 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4902 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4903 int UNUSED written = 0;
4904 IADDR UNUSED pc = abuf->addr;
4905 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4908 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
4909 SET_H_GRC (FLD (f_rn), opval);
4910 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4917 CASE (sem, INSN_SUBC_COMPACT) : /* subc $rm, $rn */
4919 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4920 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4921 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4922 int UNUSED written = 0;
4923 IADDR UNUSED pc = abuf->addr;
4924 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4928 tmp_flag = SUBCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
4930 SI opval = SUBCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
4931 SET_H_GRC (FLD (f_rn), opval);
4932 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4935 BI opval = tmp_flag;
4937 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4945 CASE (sem, INSN_SUBV_COMPACT) : /* subv $rm, $rn */
4947 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4948 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4949 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4950 int UNUSED written = 0;
4951 IADDR UNUSED pc = abuf->addr;
4952 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4956 tmp_t = SUBOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
4958 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
4959 SET_H_GRC (FLD (f_rn), opval);
4960 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4963 BI opval = ((tmp_t) ? (1) : (0));
4965 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4973 CASE (sem, INSN_SWAPB_COMPACT) : /* swap.b $rm, $rn */
4975 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4976 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4977 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4978 int UNUSED written = 0;
4979 IADDR UNUSED pc = abuf->addr;
4980 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
4990 SI opval = ORSI (SLLSI (tmp_top_half, 16), ORSI (SLLSI (tmp_byte0, 8), tmp_byte1));
4991 SET_H_GRC (FLD (f_rn), opval);
4992 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5000 CASE (sem, INSN_SWAPW_COMPACT) : /* swap.w $rm, $rn */
5002 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5003 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5004 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5005 int UNUSED written = 0;
5006 IADDR UNUSED pc = abuf->addr;
5007 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5010 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rm)), 16), SLLSI (GET_H_GRC (FLD (f_rm)), 16));
5011 SET_H_GRC (FLD (f_rn), opval);
5012 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5019 CASE (sem, INSN_TASB_COMPACT) : /* tas.b @$rn */
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);
5030 tmp_byte = GETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
5032 BI opval = ((EQQI (tmp_byte, 0)) ? (1) : (0));
5034 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5036 tmp_byte = ORQI (tmp_byte, 128);
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);
5048 CASE (sem, INSN_TRAPA_COMPACT) : /* trapa #$uimm8 */
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);
5057 sh64_compact_trapa (current_cpu, FLD (f_imm8), pc);
5063 CASE (sem, INSN_TST_COMPACT) : /* tst $rm, $rn */
5065 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5066 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5067 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5068 int UNUSED written = 0;
5069 IADDR UNUSED pc = abuf->addr;
5070 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5073 BI opval = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn))), 0)) ? (1) : (0));
5075 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5082 CASE (sem, INSN_TSTI_COMPACT) : /* tst #$uimm8, r0 */
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);
5092 BI opval = ((EQSI (ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSISI (FLD (f_imm8))), 0)) ? (1) : (0));
5094 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5101 CASE (sem, INSN_TSTB_COMPACT) : /* tst.b #$imm8, @(r0, gbr) */
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);
5112 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
5114 BI opval = ((EQQI (ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8)), 0)) ? (1) : (0));
5116 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5124 CASE (sem, INSN_XOR_COMPACT) : /* xor $rm64, $rn64 */
5126 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5127 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5128 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5129 int UNUSED written = 0;
5130 IADDR UNUSED pc = abuf->addr;
5131 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5134 DI opval = XORDI (GET_H_GR (FLD (f_rn)), GET_H_GR (FLD (f_rm)));
5135 SET_H_GR (FLD (f_rn), opval);
5136 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5143 CASE (sem, INSN_XORI_COMPACT) : /* xor #$uimm8, r0 */
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);
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);
5162 CASE (sem, INSN_XORB_COMPACT) : /* xor.b #$imm8, @(r0, gbr) */
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);
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));
5177 UQI opval = tmp_data;
5178 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5179 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5187 CASE (sem, INSN_XTRCT_COMPACT) : /* xtrct $rm, $rn */
5189 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5190 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5191 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5192 int UNUSED written = 0;
5193 IADDR UNUSED pc = abuf->addr;
5194 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5197 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rm)), 16), SRLSI (GET_H_GRC (FLD (f_rn)), 16));
5198 SET_H_GRC (FLD (f_rn), opval);
5199 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5208 ENDSWITCH (sem) /* End of semantic switch. */
5210 /* At this point `vpc' contains the next insn to execute. */
5213 #undef DEFINE_SWITCH
5214 #endif /* DEFINE_SWITCH */