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 */