1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
35 { SH64_COMPACT_INSN_X_INVALID
, && case_sem_INSN_X_INVALID
},
36 { SH64_COMPACT_INSN_X_AFTER
, && case_sem_INSN_X_AFTER
},
37 { SH64_COMPACT_INSN_X_BEFORE
, && case_sem_INSN_X_BEFORE
},
38 { SH64_COMPACT_INSN_X_CTI_CHAIN
, && case_sem_INSN_X_CTI_CHAIN
},
39 { SH64_COMPACT_INSN_X_CHAIN
, && case_sem_INSN_X_CHAIN
},
40 { SH64_COMPACT_INSN_X_BEGIN
, && case_sem_INSN_X_BEGIN
},
41 { SH64_COMPACT_INSN_ADD_COMPACT
, && case_sem_INSN_ADD_COMPACT
},
42 { SH64_COMPACT_INSN_ADDI_COMPACT
, && case_sem_INSN_ADDI_COMPACT
},
43 { SH64_COMPACT_INSN_ADDC_COMPACT
, && case_sem_INSN_ADDC_COMPACT
},
44 { SH64_COMPACT_INSN_ADDV_COMPACT
, && case_sem_INSN_ADDV_COMPACT
},
45 { SH64_COMPACT_INSN_AND_COMPACT
, && case_sem_INSN_AND_COMPACT
},
46 { SH64_COMPACT_INSN_ANDI_COMPACT
, && case_sem_INSN_ANDI_COMPACT
},
47 { SH64_COMPACT_INSN_ANDB_COMPACT
, && case_sem_INSN_ANDB_COMPACT
},
48 { SH64_COMPACT_INSN_BF_COMPACT
, && case_sem_INSN_BF_COMPACT
},
49 { SH64_COMPACT_INSN_BFS_COMPACT
, && case_sem_INSN_BFS_COMPACT
},
50 { SH64_COMPACT_INSN_BRA_COMPACT
, && case_sem_INSN_BRA_COMPACT
},
51 { SH64_COMPACT_INSN_BRAF_COMPACT
, && case_sem_INSN_BRAF_COMPACT
},
52 { SH64_COMPACT_INSN_BRK_COMPACT
, && case_sem_INSN_BRK_COMPACT
},
53 { SH64_COMPACT_INSN_BSR_COMPACT
, && case_sem_INSN_BSR_COMPACT
},
54 { SH64_COMPACT_INSN_BSRF_COMPACT
, && case_sem_INSN_BSRF_COMPACT
},
55 { SH64_COMPACT_INSN_BT_COMPACT
, && case_sem_INSN_BT_COMPACT
},
56 { SH64_COMPACT_INSN_BTS_COMPACT
, && case_sem_INSN_BTS_COMPACT
},
57 { SH64_COMPACT_INSN_CLRMAC_COMPACT
, && case_sem_INSN_CLRMAC_COMPACT
},
58 { SH64_COMPACT_INSN_CLRS_COMPACT
, && case_sem_INSN_CLRS_COMPACT
},
59 { SH64_COMPACT_INSN_CLRT_COMPACT
, && case_sem_INSN_CLRT_COMPACT
},
60 { SH64_COMPACT_INSN_CMPEQ_COMPACT
, && case_sem_INSN_CMPEQ_COMPACT
},
61 { SH64_COMPACT_INSN_CMPEQI_COMPACT
, && case_sem_INSN_CMPEQI_COMPACT
},
62 { SH64_COMPACT_INSN_CMPGE_COMPACT
, && case_sem_INSN_CMPGE_COMPACT
},
63 { SH64_COMPACT_INSN_CMPGT_COMPACT
, && case_sem_INSN_CMPGT_COMPACT
},
64 { SH64_COMPACT_INSN_CMPHI_COMPACT
, && case_sem_INSN_CMPHI_COMPACT
},
65 { SH64_COMPACT_INSN_CMPHS_COMPACT
, && case_sem_INSN_CMPHS_COMPACT
},
66 { SH64_COMPACT_INSN_CMPPL_COMPACT
, && case_sem_INSN_CMPPL_COMPACT
},
67 { SH64_COMPACT_INSN_CMPPZ_COMPACT
, && case_sem_INSN_CMPPZ_COMPACT
},
68 { SH64_COMPACT_INSN_CMPSTR_COMPACT
, && case_sem_INSN_CMPSTR_COMPACT
},
69 { SH64_COMPACT_INSN_DIV0S_COMPACT
, && case_sem_INSN_DIV0S_COMPACT
},
70 { SH64_COMPACT_INSN_DIV0U_COMPACT
, && case_sem_INSN_DIV0U_COMPACT
},
71 { SH64_COMPACT_INSN_DIV1_COMPACT
, && case_sem_INSN_DIV1_COMPACT
},
72 { SH64_COMPACT_INSN_DIVU_COMPACT
, && case_sem_INSN_DIVU_COMPACT
},
73 { SH64_COMPACT_INSN_MULR_COMPACT
, && case_sem_INSN_MULR_COMPACT
},
74 { SH64_COMPACT_INSN_DMULSL_COMPACT
, && case_sem_INSN_DMULSL_COMPACT
},
75 { SH64_COMPACT_INSN_DMULUL_COMPACT
, && case_sem_INSN_DMULUL_COMPACT
},
76 { SH64_COMPACT_INSN_DT_COMPACT
, && case_sem_INSN_DT_COMPACT
},
77 { SH64_COMPACT_INSN_EXTSB_COMPACT
, && case_sem_INSN_EXTSB_COMPACT
},
78 { SH64_COMPACT_INSN_EXTSW_COMPACT
, && case_sem_INSN_EXTSW_COMPACT
},
79 { SH64_COMPACT_INSN_EXTUB_COMPACT
, && case_sem_INSN_EXTUB_COMPACT
},
80 { SH64_COMPACT_INSN_EXTUW_COMPACT
, && case_sem_INSN_EXTUW_COMPACT
},
81 { SH64_COMPACT_INSN_FABS_COMPACT
, && case_sem_INSN_FABS_COMPACT
},
82 { SH64_COMPACT_INSN_FADD_COMPACT
, && case_sem_INSN_FADD_COMPACT
},
83 { SH64_COMPACT_INSN_FCMPEQ_COMPACT
, && case_sem_INSN_FCMPEQ_COMPACT
},
84 { SH64_COMPACT_INSN_FCMPGT_COMPACT
, && case_sem_INSN_FCMPGT_COMPACT
},
85 { SH64_COMPACT_INSN_FCNVDS_COMPACT
, && case_sem_INSN_FCNVDS_COMPACT
},
86 { SH64_COMPACT_INSN_FCNVSD_COMPACT
, && case_sem_INSN_FCNVSD_COMPACT
},
87 { SH64_COMPACT_INSN_FDIV_COMPACT
, && case_sem_INSN_FDIV_COMPACT
},
88 { SH64_COMPACT_INSN_FIPR_COMPACT
, && case_sem_INSN_FIPR_COMPACT
},
89 { SH64_COMPACT_INSN_FLDS_COMPACT
, && case_sem_INSN_FLDS_COMPACT
},
90 { SH64_COMPACT_INSN_FLDI0_COMPACT
, && case_sem_INSN_FLDI0_COMPACT
},
91 { SH64_COMPACT_INSN_FLDI1_COMPACT
, && case_sem_INSN_FLDI1_COMPACT
},
92 { SH64_COMPACT_INSN_FLOAT_COMPACT
, && case_sem_INSN_FLOAT_COMPACT
},
93 { SH64_COMPACT_INSN_FMAC_COMPACT
, && case_sem_INSN_FMAC_COMPACT
},
94 { SH64_COMPACT_INSN_FMOV1_COMPACT
, && case_sem_INSN_FMOV1_COMPACT
},
95 { SH64_COMPACT_INSN_FMOV2_COMPACT
, && case_sem_INSN_FMOV2_COMPACT
},
96 { SH64_COMPACT_INSN_FMOV3_COMPACT
, && case_sem_INSN_FMOV3_COMPACT
},
97 { SH64_COMPACT_INSN_FMOV4_COMPACT
, && case_sem_INSN_FMOV4_COMPACT
},
98 { SH64_COMPACT_INSN_FMOV5_COMPACT
, && case_sem_INSN_FMOV5_COMPACT
},
99 { SH64_COMPACT_INSN_FMOV6_COMPACT
, && case_sem_INSN_FMOV6_COMPACT
},
100 { SH64_COMPACT_INSN_FMOV7_COMPACT
, && case_sem_INSN_FMOV7_COMPACT
},
101 { SH64_COMPACT_INSN_FMOV8_COMPACT
, && case_sem_INSN_FMOV8_COMPACT
},
102 { SH64_COMPACT_INSN_FMOV9_COMPACT
, && case_sem_INSN_FMOV9_COMPACT
},
103 { SH64_COMPACT_INSN_FMUL_COMPACT
, && case_sem_INSN_FMUL_COMPACT
},
104 { SH64_COMPACT_INSN_FNEG_COMPACT
, && case_sem_INSN_FNEG_COMPACT
},
105 { SH64_COMPACT_INSN_FRCHG_COMPACT
, && case_sem_INSN_FRCHG_COMPACT
},
106 { SH64_COMPACT_INSN_FSCHG_COMPACT
, && case_sem_INSN_FSCHG_COMPACT
},
107 { SH64_COMPACT_INSN_FSQRT_COMPACT
, && case_sem_INSN_FSQRT_COMPACT
},
108 { SH64_COMPACT_INSN_FSTS_COMPACT
, && case_sem_INSN_FSTS_COMPACT
},
109 { SH64_COMPACT_INSN_FSUB_COMPACT
, && case_sem_INSN_FSUB_COMPACT
},
110 { SH64_COMPACT_INSN_FTRC_COMPACT
, && case_sem_INSN_FTRC_COMPACT
},
111 { SH64_COMPACT_INSN_FTRV_COMPACT
, && case_sem_INSN_FTRV_COMPACT
},
112 { SH64_COMPACT_INSN_JMP_COMPACT
, && case_sem_INSN_JMP_COMPACT
},
113 { SH64_COMPACT_INSN_JSR_COMPACT
, && case_sem_INSN_JSR_COMPACT
},
114 { SH64_COMPACT_INSN_LDC_GBR_COMPACT
, && case_sem_INSN_LDC_GBR_COMPACT
},
115 { SH64_COMPACT_INSN_LDC_VBR_COMPACT
, && case_sem_INSN_LDC_VBR_COMPACT
},
116 { SH64_COMPACT_INSN_LDC_SR_COMPACT
, && case_sem_INSN_LDC_SR_COMPACT
},
117 { SH64_COMPACT_INSN_LDCL_GBR_COMPACT
, && case_sem_INSN_LDCL_GBR_COMPACT
},
118 { SH64_COMPACT_INSN_LDCL_VBR_COMPACT
, && case_sem_INSN_LDCL_VBR_COMPACT
},
119 { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT
, && case_sem_INSN_LDS_FPSCR_COMPACT
},
120 { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT
, && case_sem_INSN_LDSL_FPSCR_COMPACT
},
121 { SH64_COMPACT_INSN_LDS_FPUL_COMPACT
, && case_sem_INSN_LDS_FPUL_COMPACT
},
122 { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT
, && case_sem_INSN_LDSL_FPUL_COMPACT
},
123 { SH64_COMPACT_INSN_LDS_MACH_COMPACT
, && case_sem_INSN_LDS_MACH_COMPACT
},
124 { SH64_COMPACT_INSN_LDSL_MACH_COMPACT
, && case_sem_INSN_LDSL_MACH_COMPACT
},
125 { SH64_COMPACT_INSN_LDS_MACL_COMPACT
, && case_sem_INSN_LDS_MACL_COMPACT
},
126 { SH64_COMPACT_INSN_LDSL_MACL_COMPACT
, && case_sem_INSN_LDSL_MACL_COMPACT
},
127 { SH64_COMPACT_INSN_LDS_PR_COMPACT
, && case_sem_INSN_LDS_PR_COMPACT
},
128 { SH64_COMPACT_INSN_LDSL_PR_COMPACT
, && case_sem_INSN_LDSL_PR_COMPACT
},
129 { SH64_COMPACT_INSN_MACL_COMPACT
, && case_sem_INSN_MACL_COMPACT
},
130 { SH64_COMPACT_INSN_MACW_COMPACT
, && case_sem_INSN_MACW_COMPACT
},
131 { SH64_COMPACT_INSN_MOV_COMPACT
, && case_sem_INSN_MOV_COMPACT
},
132 { SH64_COMPACT_INSN_MOVI_COMPACT
, && case_sem_INSN_MOVI_COMPACT
},
133 { SH64_COMPACT_INSN_MOVI20_COMPACT
, && case_sem_INSN_MOVI20_COMPACT
},
134 { SH64_COMPACT_INSN_MOVB1_COMPACT
, && case_sem_INSN_MOVB1_COMPACT
},
135 { SH64_COMPACT_INSN_MOVB2_COMPACT
, && case_sem_INSN_MOVB2_COMPACT
},
136 { SH64_COMPACT_INSN_MOVB3_COMPACT
, && case_sem_INSN_MOVB3_COMPACT
},
137 { SH64_COMPACT_INSN_MOVB4_COMPACT
, && case_sem_INSN_MOVB4_COMPACT
},
138 { SH64_COMPACT_INSN_MOVB5_COMPACT
, && case_sem_INSN_MOVB5_COMPACT
},
139 { SH64_COMPACT_INSN_MOVB6_COMPACT
, && case_sem_INSN_MOVB6_COMPACT
},
140 { SH64_COMPACT_INSN_MOVB7_COMPACT
, && case_sem_INSN_MOVB7_COMPACT
},
141 { SH64_COMPACT_INSN_MOVB8_COMPACT
, && case_sem_INSN_MOVB8_COMPACT
},
142 { SH64_COMPACT_INSN_MOVB9_COMPACT
, && case_sem_INSN_MOVB9_COMPACT
},
143 { SH64_COMPACT_INSN_MOVB10_COMPACT
, && case_sem_INSN_MOVB10_COMPACT
},
144 { SH64_COMPACT_INSN_MOVL1_COMPACT
, && case_sem_INSN_MOVL1_COMPACT
},
145 { SH64_COMPACT_INSN_MOVL2_COMPACT
, && case_sem_INSN_MOVL2_COMPACT
},
146 { SH64_COMPACT_INSN_MOVL3_COMPACT
, && case_sem_INSN_MOVL3_COMPACT
},
147 { SH64_COMPACT_INSN_MOVL4_COMPACT
, && case_sem_INSN_MOVL4_COMPACT
},
148 { SH64_COMPACT_INSN_MOVL5_COMPACT
, && case_sem_INSN_MOVL5_COMPACT
},
149 { SH64_COMPACT_INSN_MOVL6_COMPACT
, && case_sem_INSN_MOVL6_COMPACT
},
150 { SH64_COMPACT_INSN_MOVL7_COMPACT
, && case_sem_INSN_MOVL7_COMPACT
},
151 { SH64_COMPACT_INSN_MOVL8_COMPACT
, && case_sem_INSN_MOVL8_COMPACT
},
152 { SH64_COMPACT_INSN_MOVL9_COMPACT
, && case_sem_INSN_MOVL9_COMPACT
},
153 { SH64_COMPACT_INSN_MOVL10_COMPACT
, && case_sem_INSN_MOVL10_COMPACT
},
154 { SH64_COMPACT_INSN_MOVL11_COMPACT
, && case_sem_INSN_MOVL11_COMPACT
},
155 { SH64_COMPACT_INSN_MOVL12_COMPACT
, && case_sem_INSN_MOVL12_COMPACT
},
156 { SH64_COMPACT_INSN_MOVL13_COMPACT
, && case_sem_INSN_MOVL13_COMPACT
},
157 { SH64_COMPACT_INSN_MOVW1_COMPACT
, && case_sem_INSN_MOVW1_COMPACT
},
158 { SH64_COMPACT_INSN_MOVW2_COMPACT
, && case_sem_INSN_MOVW2_COMPACT
},
159 { SH64_COMPACT_INSN_MOVW3_COMPACT
, && case_sem_INSN_MOVW3_COMPACT
},
160 { SH64_COMPACT_INSN_MOVW4_COMPACT
, && case_sem_INSN_MOVW4_COMPACT
},
161 { SH64_COMPACT_INSN_MOVW5_COMPACT
, && case_sem_INSN_MOVW5_COMPACT
},
162 { SH64_COMPACT_INSN_MOVW6_COMPACT
, && case_sem_INSN_MOVW6_COMPACT
},
163 { SH64_COMPACT_INSN_MOVW7_COMPACT
, && case_sem_INSN_MOVW7_COMPACT
},
164 { SH64_COMPACT_INSN_MOVW8_COMPACT
, && case_sem_INSN_MOVW8_COMPACT
},
165 { SH64_COMPACT_INSN_MOVW9_COMPACT
, && case_sem_INSN_MOVW9_COMPACT
},
166 { SH64_COMPACT_INSN_MOVW10_COMPACT
, && case_sem_INSN_MOVW10_COMPACT
},
167 { SH64_COMPACT_INSN_MOVW11_COMPACT
, && case_sem_INSN_MOVW11_COMPACT
},
168 { SH64_COMPACT_INSN_MOVA_COMPACT
, && case_sem_INSN_MOVA_COMPACT
},
169 { SH64_COMPACT_INSN_MOVCAL_COMPACT
, && case_sem_INSN_MOVCAL_COMPACT
},
170 { SH64_COMPACT_INSN_MOVCOL_COMPACT
, && case_sem_INSN_MOVCOL_COMPACT
},
171 { SH64_COMPACT_INSN_MOVT_COMPACT
, && case_sem_INSN_MOVT_COMPACT
},
172 { SH64_COMPACT_INSN_MOVUAL_COMPACT
, && case_sem_INSN_MOVUAL_COMPACT
},
173 { SH64_COMPACT_INSN_MOVUAL2_COMPACT
, && case_sem_INSN_MOVUAL2_COMPACT
},
174 { SH64_COMPACT_INSN_MULL_COMPACT
, && case_sem_INSN_MULL_COMPACT
},
175 { SH64_COMPACT_INSN_MULSW_COMPACT
, && case_sem_INSN_MULSW_COMPACT
},
176 { SH64_COMPACT_INSN_MULUW_COMPACT
, && case_sem_INSN_MULUW_COMPACT
},
177 { SH64_COMPACT_INSN_NEG_COMPACT
, && case_sem_INSN_NEG_COMPACT
},
178 { SH64_COMPACT_INSN_NEGC_COMPACT
, && case_sem_INSN_NEGC_COMPACT
},
179 { SH64_COMPACT_INSN_NOP_COMPACT
, && case_sem_INSN_NOP_COMPACT
},
180 { SH64_COMPACT_INSN_NOT_COMPACT
, && case_sem_INSN_NOT_COMPACT
},
181 { SH64_COMPACT_INSN_OCBI_COMPACT
, && case_sem_INSN_OCBI_COMPACT
},
182 { SH64_COMPACT_INSN_OCBP_COMPACT
, && case_sem_INSN_OCBP_COMPACT
},
183 { SH64_COMPACT_INSN_OCBWB_COMPACT
, && case_sem_INSN_OCBWB_COMPACT
},
184 { SH64_COMPACT_INSN_OR_COMPACT
, && case_sem_INSN_OR_COMPACT
},
185 { SH64_COMPACT_INSN_ORI_COMPACT
, && case_sem_INSN_ORI_COMPACT
},
186 { SH64_COMPACT_INSN_ORB_COMPACT
, && case_sem_INSN_ORB_COMPACT
},
187 { SH64_COMPACT_INSN_PREF_COMPACT
, && case_sem_INSN_PREF_COMPACT
},
188 { SH64_COMPACT_INSN_ROTCL_COMPACT
, && case_sem_INSN_ROTCL_COMPACT
},
189 { SH64_COMPACT_INSN_ROTCR_COMPACT
, && case_sem_INSN_ROTCR_COMPACT
},
190 { SH64_COMPACT_INSN_ROTL_COMPACT
, && case_sem_INSN_ROTL_COMPACT
},
191 { SH64_COMPACT_INSN_ROTR_COMPACT
, && case_sem_INSN_ROTR_COMPACT
},
192 { SH64_COMPACT_INSN_RTS_COMPACT
, && case_sem_INSN_RTS_COMPACT
},
193 { SH64_COMPACT_INSN_SETS_COMPACT
, && case_sem_INSN_SETS_COMPACT
},
194 { SH64_COMPACT_INSN_SETT_COMPACT
, && case_sem_INSN_SETT_COMPACT
},
195 { SH64_COMPACT_INSN_SHAD_COMPACT
, && case_sem_INSN_SHAD_COMPACT
},
196 { SH64_COMPACT_INSN_SHAL_COMPACT
, && case_sem_INSN_SHAL_COMPACT
},
197 { SH64_COMPACT_INSN_SHAR_COMPACT
, && case_sem_INSN_SHAR_COMPACT
},
198 { SH64_COMPACT_INSN_SHLD_COMPACT
, && case_sem_INSN_SHLD_COMPACT
},
199 { SH64_COMPACT_INSN_SHLL_COMPACT
, && case_sem_INSN_SHLL_COMPACT
},
200 { SH64_COMPACT_INSN_SHLL2_COMPACT
, && case_sem_INSN_SHLL2_COMPACT
},
201 { SH64_COMPACT_INSN_SHLL8_COMPACT
, && case_sem_INSN_SHLL8_COMPACT
},
202 { SH64_COMPACT_INSN_SHLL16_COMPACT
, && case_sem_INSN_SHLL16_COMPACT
},
203 { SH64_COMPACT_INSN_SHLR_COMPACT
, && case_sem_INSN_SHLR_COMPACT
},
204 { SH64_COMPACT_INSN_SHLR2_COMPACT
, && case_sem_INSN_SHLR2_COMPACT
},
205 { SH64_COMPACT_INSN_SHLR8_COMPACT
, && case_sem_INSN_SHLR8_COMPACT
},
206 { SH64_COMPACT_INSN_SHLR16_COMPACT
, && case_sem_INSN_SHLR16_COMPACT
},
207 { SH64_COMPACT_INSN_STC_GBR_COMPACT
, && case_sem_INSN_STC_GBR_COMPACT
},
208 { SH64_COMPACT_INSN_STC_VBR_COMPACT
, && case_sem_INSN_STC_VBR_COMPACT
},
209 { SH64_COMPACT_INSN_STCL_GBR_COMPACT
, && case_sem_INSN_STCL_GBR_COMPACT
},
210 { SH64_COMPACT_INSN_STCL_VBR_COMPACT
, && case_sem_INSN_STCL_VBR_COMPACT
},
211 { SH64_COMPACT_INSN_STS_FPSCR_COMPACT
, && case_sem_INSN_STS_FPSCR_COMPACT
},
212 { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT
, && case_sem_INSN_STSL_FPSCR_COMPACT
},
213 { SH64_COMPACT_INSN_STS_FPUL_COMPACT
, && case_sem_INSN_STS_FPUL_COMPACT
},
214 { SH64_COMPACT_INSN_STSL_FPUL_COMPACT
, && case_sem_INSN_STSL_FPUL_COMPACT
},
215 { SH64_COMPACT_INSN_STS_MACH_COMPACT
, && case_sem_INSN_STS_MACH_COMPACT
},
216 { SH64_COMPACT_INSN_STSL_MACH_COMPACT
, && case_sem_INSN_STSL_MACH_COMPACT
},
217 { SH64_COMPACT_INSN_STS_MACL_COMPACT
, && case_sem_INSN_STS_MACL_COMPACT
},
218 { SH64_COMPACT_INSN_STSL_MACL_COMPACT
, && case_sem_INSN_STSL_MACL_COMPACT
},
219 { SH64_COMPACT_INSN_STS_PR_COMPACT
, && case_sem_INSN_STS_PR_COMPACT
},
220 { SH64_COMPACT_INSN_STSL_PR_COMPACT
, && case_sem_INSN_STSL_PR_COMPACT
},
221 { SH64_COMPACT_INSN_SUB_COMPACT
, && case_sem_INSN_SUB_COMPACT
},
222 { SH64_COMPACT_INSN_SUBC_COMPACT
, && case_sem_INSN_SUBC_COMPACT
},
223 { SH64_COMPACT_INSN_SUBV_COMPACT
, && case_sem_INSN_SUBV_COMPACT
},
224 { SH64_COMPACT_INSN_SWAPB_COMPACT
, && case_sem_INSN_SWAPB_COMPACT
},
225 { SH64_COMPACT_INSN_SWAPW_COMPACT
, && case_sem_INSN_SWAPW_COMPACT
},
226 { SH64_COMPACT_INSN_TASB_COMPACT
, && case_sem_INSN_TASB_COMPACT
},
227 { SH64_COMPACT_INSN_TRAPA_COMPACT
, && case_sem_INSN_TRAPA_COMPACT
},
228 { SH64_COMPACT_INSN_TST_COMPACT
, && case_sem_INSN_TST_COMPACT
},
229 { SH64_COMPACT_INSN_TSTI_COMPACT
, && case_sem_INSN_TSTI_COMPACT
},
230 { SH64_COMPACT_INSN_TSTB_COMPACT
, && case_sem_INSN_TSTB_COMPACT
},
231 { SH64_COMPACT_INSN_XOR_COMPACT
, && case_sem_INSN_XOR_COMPACT
},
232 { SH64_COMPACT_INSN_XORI_COMPACT
, && case_sem_INSN_XORI_COMPACT
},
233 { SH64_COMPACT_INSN_XORB_COMPACT
, && case_sem_INSN_XORB_COMPACT
},
234 { SH64_COMPACT_INSN_XTRCT_COMPACT
, && case_sem_INSN_XTRCT_COMPACT
},
239 for (i
= 0; labels
[i
].label
!= 0; ++i
)
242 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
244 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
249 #endif /* DEFINE_LABELS */
253 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
254 off frills like tracing and profiling. */
255 /* FIXME: A better way would be to have TRACE_RESULT check for something
256 that can cause it to be optimized out. Another way would be to emit
257 special handlers into the instruction "stream". */
261 #define TRACE_RESULT(cpu, abuf, name, type, val)
265 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
271 /* Branch to next handler without going around main loop. */
272 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
273 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
275 #else /* ! WITH_SCACHE_PBB */
277 #define NEXT(vpc) BREAK (sem)
280 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
282 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
285 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
288 #endif /* ! WITH_SCACHE_PBB */
292 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
294 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
295 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
296 #define FLD(f) abuf->fields.sfmt_empty.f
297 int UNUSED written
= 0;
298 IADDR UNUSED pc
= abuf
->addr
;
299 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
302 /* Update the recorded pc in the cpu state struct.
303 Only necessary for WITH_SCACHE case, but to avoid the
304 conditional compilation .... */
306 /* Virtual insns have zero size. Overwrite vpc with address of next insn
307 using the default-insn-bitsize spec. When executing insns in parallel
308 we may want to queue the fault and continue execution. */
309 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
310 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
317 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
319 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
320 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
321 #define FLD(f) abuf->fields.sfmt_empty.f
322 int UNUSED written
= 0;
323 IADDR UNUSED pc
= abuf
->addr
;
324 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
327 #if WITH_SCACHE_PBB_SH64_COMPACT
328 sh64_compact_pbb_after (current_cpu
, sem_arg
);
336 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
338 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
339 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
340 #define FLD(f) abuf->fields.sfmt_empty.f
341 int UNUSED written
= 0;
342 IADDR UNUSED pc
= abuf
->addr
;
343 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
346 #if WITH_SCACHE_PBB_SH64_COMPACT
347 sh64_compact_pbb_before (current_cpu
, sem_arg
);
355 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
357 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
359 #define FLD(f) abuf->fields.sfmt_empty.f
360 int UNUSED written
= 0;
361 IADDR UNUSED pc
= abuf
->addr
;
362 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
365 #if WITH_SCACHE_PBB_SH64_COMPACT
367 vpc
= sh64_compact_pbb_cti_chain (current_cpu
, sem_arg
,
368 pbb_br_type
, pbb_br_npc
);
371 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
372 vpc
= sh64_compact_pbb_cti_chain (current_cpu
, sem_arg
,
373 CPU_PBB_BR_TYPE (current_cpu
),
374 CPU_PBB_BR_NPC (current_cpu
));
383 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
385 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
386 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
387 #define FLD(f) abuf->fields.sfmt_empty.f
388 int UNUSED written
= 0;
389 IADDR UNUSED pc
= abuf
->addr
;
390 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
393 #if WITH_SCACHE_PBB_SH64_COMPACT
394 vpc
= sh64_compact_pbb_chain (current_cpu
, sem_arg
);
405 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
407 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
408 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
409 #define FLD(f) abuf->fields.sfmt_empty.f
410 int UNUSED written
= 0;
411 IADDR UNUSED pc
= abuf
->addr
;
412 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
415 #if WITH_SCACHE_PBB_SH64_COMPACT
416 #if defined DEFINE_SWITCH || defined FAST_P
417 /* In the switch case FAST_P is a constant, allowing several optimizations
418 in any called inline functions. */
419 vpc
= sh64_compact_pbb_begin (current_cpu
, FAST_P
);
421 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
422 vpc
= sh64_compact_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
424 vpc
= sh64_compact_pbb_begin (current_cpu
, 0);
434 CASE (sem
, INSN_ADD_COMPACT
) : /* add $rm, $rn */
436 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
437 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
438 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
439 int UNUSED written
= 0;
440 IADDR UNUSED pc
= abuf
->addr
;
441 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
444 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
445 SET_H_GRC (FLD (f_rn
), opval
);
446 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
453 CASE (sem
, INSN_ADDI_COMPACT
) : /* add #$imm8, $rn */
455 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
456 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
457 #define FLD(f) abuf->fields.sfmt_addi_compact.f
458 int UNUSED written
= 0;
459 IADDR UNUSED pc
= abuf
->addr
;
460 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
463 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), EXTQISI (ANDQI (FLD (f_imm8
), 255)));
464 SET_H_GRC (FLD (f_rn
), opval
);
465 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
472 CASE (sem
, INSN_ADDC_COMPACT
) : /* addc $rm, $rn */
474 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
475 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
476 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
477 int UNUSED written
= 0;
478 IADDR UNUSED pc
= abuf
->addr
;
479 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
483 tmp_flag
= ADDCFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
485 SI opval
= ADDCSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
486 SET_H_GRC (FLD (f_rn
), opval
);
487 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
492 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
500 CASE (sem
, INSN_ADDV_COMPACT
) : /* addv $rm, $rn */
502 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
504 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
505 int UNUSED written
= 0;
506 IADDR UNUSED pc
= abuf
->addr
;
507 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
511 tmp_t
= ADDOFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), 0);
513 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
514 SET_H_GRC (FLD (f_rn
), opval
);
515 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
520 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
528 CASE (sem
, INSN_AND_COMPACT
) : /* and $rm64, $rn64 */
530 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
531 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
532 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
533 int UNUSED written
= 0;
534 IADDR UNUSED pc
= abuf
->addr
;
535 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
538 DI opval
= ANDDI (GET_H_GR (FLD (f_rm
)), GET_H_GR (FLD (f_rn
)));
539 SET_H_GR (FLD (f_rn
), opval
);
540 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
547 CASE (sem
, INSN_ANDI_COMPACT
) : /* and #$uimm8, r0 */
549 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
550 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
551 #define FLD(f) abuf->fields.sfmt_addi_compact.f
552 int UNUSED written
= 0;
553 IADDR UNUSED pc
= abuf
->addr
;
554 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
557 SI opval
= ANDSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
558 SET_H_GRC (((UINT
) 0), opval
);
559 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
566 CASE (sem
, INSN_ANDB_COMPACT
) : /* and.b #$imm8, @(r0, gbr) */
568 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
569 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
570 #define FLD(f) abuf->fields.sfmt_addi_compact.f
571 int UNUSED written
= 0;
572 IADDR UNUSED pc
= abuf
->addr
;
573 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
578 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
579 tmp_data
= ANDQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
581 UQI opval
= tmp_data
;
582 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
583 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
591 CASE (sem
, INSN_BF_COMPACT
) : /* bf $disp8 */
593 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
594 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
595 #define FLD(f) abuf->fields.sfmt_bf_compact.f
596 int UNUSED written
= 0;
597 IADDR UNUSED pc
= abuf
->addr
;
599 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
601 if (NOTBI (GET_H_TBIT ())) {
603 UDI opval
= FLD (i_disp8
);
604 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
606 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
610 abuf
->written
= written
;
611 SEM_BRANCH_FINI (vpc
);
616 CASE (sem
, INSN_BFS_COMPACT
) : /* bf/s $disp8 */
618 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
619 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
620 #define FLD(f) abuf->fields.sfmt_bf_compact.f
621 int UNUSED written
= 0;
622 IADDR UNUSED pc
= abuf
->addr
;
624 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
626 if (NOTBI (GET_H_TBIT ())) {
629 UDI opval
= ADDDI (pc
, 2);
630 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
632 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
637 UDI opval
= FLD (i_disp8
);
638 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
640 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
646 abuf
->written
= written
;
647 SEM_BRANCH_FINI (vpc
);
652 CASE (sem
, INSN_BRA_COMPACT
) : /* bra $disp12 */
654 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
655 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
656 #define FLD(f) abuf->fields.sfmt_bra_compact.f
657 int UNUSED written
= 0;
658 IADDR UNUSED pc
= abuf
->addr
;
660 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
664 UDI opval
= ADDDI (pc
, 2);
665 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
666 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
671 UDI opval
= FLD (i_disp12
);
672 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
673 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
678 SEM_BRANCH_FINI (vpc
);
683 CASE (sem
, INSN_BRAF_COMPACT
) : /* braf $rn */
685 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
686 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
687 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
688 int UNUSED written
= 0;
689 IADDR UNUSED pc
= abuf
->addr
;
691 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
695 UDI opval
= ADDDI (pc
, 2);
696 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
697 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
702 UDI opval
= ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn
))), ADDDI (pc
, 4));
703 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
704 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
709 SEM_BRANCH_FINI (vpc
);
714 CASE (sem
, INSN_BRK_COMPACT
) : /* brk */
716 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
717 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
718 #define FLD(f) abuf->fields.sfmt_empty.f
719 int UNUSED written
= 0;
720 IADDR UNUSED pc
= abuf
->addr
;
721 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
723 sh64_break (current_cpu
, pc
);
729 CASE (sem
, INSN_BSR_COMPACT
) : /* bsr $disp12 */
731 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
732 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
733 #define FLD(f) abuf->fields.sfmt_bra_compact.f
734 int UNUSED written
= 0;
735 IADDR UNUSED pc
= abuf
->addr
;
737 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
742 SI opval
= ADDDI (pc
, 4);
744 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
748 UDI opval
= ADDDI (pc
, 2);
749 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
750 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
755 UDI opval
= FLD (i_disp12
);
756 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
757 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
762 SEM_BRANCH_FINI (vpc
);
767 CASE (sem
, INSN_BSRF_COMPACT
) : /* bsrf $rn */
769 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
770 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
771 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
772 int UNUSED written
= 0;
773 IADDR UNUSED pc
= abuf
->addr
;
775 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
780 SI opval
= ADDDI (pc
, 4);
782 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
786 UDI opval
= ADDDI (pc
, 2);
787 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
788 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
793 UDI opval
= ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn
))), ADDDI (pc
, 4));
794 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
795 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
800 SEM_BRANCH_FINI (vpc
);
805 CASE (sem
, INSN_BT_COMPACT
) : /* bt $disp8 */
807 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
808 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
809 #define FLD(f) abuf->fields.sfmt_bf_compact.f
810 int UNUSED written
= 0;
811 IADDR UNUSED pc
= abuf
->addr
;
813 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
817 UDI opval
= FLD (i_disp8
);
818 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
820 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
824 abuf
->written
= written
;
825 SEM_BRANCH_FINI (vpc
);
830 CASE (sem
, INSN_BTS_COMPACT
) : /* bt/s $disp8 */
832 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
833 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
834 #define FLD(f) abuf->fields.sfmt_bf_compact.f
835 int UNUSED written
= 0;
836 IADDR UNUSED pc
= abuf
->addr
;
838 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
843 UDI opval
= ADDDI (pc
, 2);
844 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
846 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
851 UDI opval
= FLD (i_disp8
);
852 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
854 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
860 abuf
->written
= written
;
861 SEM_BRANCH_FINI (vpc
);
866 CASE (sem
, INSN_CLRMAC_COMPACT
) : /* clrmac */
868 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
869 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
870 #define FLD(f) abuf->fields.sfmt_empty.f
871 int UNUSED written
= 0;
872 IADDR UNUSED pc
= abuf
->addr
;
873 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
879 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
884 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
892 CASE (sem
, INSN_CLRS_COMPACT
) : /* clrs */
894 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
895 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
896 #define FLD(f) abuf->fields.sfmt_empty.f
897 int UNUSED written
= 0;
898 IADDR UNUSED pc
= abuf
->addr
;
899 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
904 TRACE_RESULT (current_cpu
, abuf
, "sbit", 'x', opval
);
911 CASE (sem
, INSN_CLRT_COMPACT
) : /* clrt */
913 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
914 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
915 #define FLD(f) abuf->fields.sfmt_empty.f
916 int UNUSED written
= 0;
917 IADDR UNUSED pc
= abuf
->addr
;
918 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
923 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
930 CASE (sem
, INSN_CMPEQ_COMPACT
) : /* cmp/eq $rm, $rn */
932 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
933 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
934 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
935 int UNUSED written
= 0;
936 IADDR UNUSED pc
= abuf
->addr
;
937 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
940 BI opval
= EQSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
942 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
949 CASE (sem
, INSN_CMPEQI_COMPACT
) : /* cmp/eq #$imm8, r0 */
951 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
952 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
953 #define FLD(f) abuf->fields.sfmt_addi_compact.f
954 int UNUSED written
= 0;
955 IADDR UNUSED pc
= abuf
->addr
;
956 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
959 BI opval
= EQSI (GET_H_GRC (((UINT
) 0)), EXTQISI (ANDQI (FLD (f_imm8
), 255)));
961 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
968 CASE (sem
, INSN_CMPGE_COMPACT
) : /* cmp/ge $rm, $rn */
970 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
971 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
972 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
973 int UNUSED written
= 0;
974 IADDR UNUSED pc
= abuf
->addr
;
975 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
978 BI opval
= GESI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
980 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
987 CASE (sem
, INSN_CMPGT_COMPACT
) : /* cmp/gt $rm, $rn */
989 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
990 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
991 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
992 int UNUSED written
= 0;
993 IADDR UNUSED pc
= abuf
->addr
;
994 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
997 BI opval
= GTSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
999 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1006 CASE (sem
, INSN_CMPHI_COMPACT
) : /* cmp/hi $rm, $rn */
1008 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1009 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1010 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1011 int UNUSED written
= 0;
1012 IADDR UNUSED pc
= abuf
->addr
;
1013 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1016 BI opval
= GTUSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1018 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1025 CASE (sem
, INSN_CMPHS_COMPACT
) : /* cmp/hs $rm, $rn */
1027 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1028 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1029 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1030 int UNUSED written
= 0;
1031 IADDR UNUSED pc
= abuf
->addr
;
1032 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1035 BI opval
= GEUSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1037 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1044 CASE (sem
, INSN_CMPPL_COMPACT
) : /* cmp/pl $rn */
1046 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1047 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1048 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1049 int UNUSED written
= 0;
1050 IADDR UNUSED pc
= abuf
->addr
;
1051 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1054 BI opval
= GTSI (GET_H_GRC (FLD (f_rn
)), 0);
1056 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1063 CASE (sem
, INSN_CMPPZ_COMPACT
) : /* cmp/pz $rn */
1065 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1066 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1067 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1068 int UNUSED written
= 0;
1069 IADDR UNUSED pc
= abuf
->addr
;
1070 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1073 BI opval
= GESI (GET_H_GRC (FLD (f_rn
)), 0);
1075 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1082 CASE (sem
, INSN_CMPSTR_COMPACT
) : /* cmp/str $rm, $rn */
1084 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1085 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1086 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1087 int UNUSED written
= 0;
1088 IADDR UNUSED pc
= abuf
->addr
;
1089 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1094 tmp_temp
= XORSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
1095 tmp_t
= EQSI (ANDSI (tmp_temp
, 0xff000000), 0);
1096 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 16711680), 0), tmp_t
);
1097 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 65280), 0), tmp_t
);
1098 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 255), 0), tmp_t
);
1100 BI opval
= ((GTUBI (tmp_t
, 0)) ? (1) : (0));
1102 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1110 CASE (sem
, INSN_DIV0S_COMPACT
) : /* div0s $rm, $rn */
1112 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1113 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1114 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1115 int UNUSED written
= 0;
1116 IADDR UNUSED pc
= abuf
->addr
;
1117 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1121 BI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
1123 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1126 BI opval
= SRLSI (GET_H_GRC (FLD (f_rm
)), 31);
1128 TRACE_RESULT (current_cpu
, abuf
, "mbit", 'x', opval
);
1131 BI opval
= ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm
)), 31), SRLSI (GET_H_GRC (FLD (f_rn
)), 31))) ? (0) : (1));
1133 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1141 CASE (sem
, INSN_DIV0U_COMPACT
) : /* div0u */
1143 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1144 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1145 #define FLD(f) abuf->fields.sfmt_empty.f
1146 int UNUSED written
= 0;
1147 IADDR UNUSED pc
= abuf
->addr
;
1148 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1154 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1159 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1164 TRACE_RESULT (current_cpu
, abuf
, "mbit", 'x', opval
);
1172 CASE (sem
, INSN_DIV1_COMPACT
) : /* div1 $rm, $rn */
1174 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1175 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1176 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1177 int UNUSED written
= 0;
1178 IADDR UNUSED pc
= abuf
->addr
;
1179 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1185 tmp_oldq
= GET_H_QBIT ();
1187 BI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
1189 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1192 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), ZEXTBISI (GET_H_TBIT ()));
1193 SET_H_GRC (FLD (f_rn
), opval
);
1194 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1196 if (NOTBI (tmp_oldq
)) {
1197 if (NOTBI (GET_H_MBIT ())) {
1199 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1201 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1202 SET_H_GRC (FLD (f_rn
), opval
);
1203 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1205 tmp_tmp1
= GTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1206 if (NOTBI (GET_H_QBIT ())) {
1208 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1210 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1214 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1216 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1222 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1224 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1225 SET_H_GRC (FLD (f_rn
), opval
);
1226 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1228 tmp_tmp1
= LTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1229 if (NOTBI (GET_H_QBIT ())) {
1231 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1233 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1237 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1239 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1245 if (NOTBI (GET_H_MBIT ())) {
1247 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1249 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
1250 SET_H_GRC (FLD (f_rn
), opval
);
1251 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1253 tmp_tmp1
= LTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1254 if (NOTBI (GET_H_QBIT ())) {
1256 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1258 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1262 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1264 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1270 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1272 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1273 SET_H_GRC (FLD (f_rn
), opval
);
1274 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1276 tmp_tmp1
= GTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1277 if (NOTBI (GET_H_QBIT ())) {
1279 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1281 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1285 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1287 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1294 BI opval
= ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1296 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1304 CASE (sem
, INSN_DIVU_COMPACT
) : /* divu r0, $rn */
1306 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1307 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1308 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1309 int UNUSED written
= 0;
1310 IADDR UNUSED pc
= abuf
->addr
;
1311 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1314 SI opval
= UDIVSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (((UINT
) 0)));
1315 SET_H_GRC (FLD (f_rn
), opval
);
1316 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1323 CASE (sem
, INSN_MULR_COMPACT
) : /* mulr r0, $rn */
1325 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1326 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1327 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1328 int UNUSED written
= 0;
1329 IADDR UNUSED pc
= abuf
->addr
;
1330 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1333 SI opval
= MULSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (((UINT
) 0)));
1334 SET_H_GRC (FLD (f_rn
), opval
);
1335 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1342 CASE (sem
, INSN_DMULSL_COMPACT
) : /* dmuls.l $rm, $rn */
1344 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1345 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1346 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1347 int UNUSED written
= 0;
1348 IADDR UNUSED pc
= abuf
->addr
;
1349 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1353 tmp_result
= MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm
))), EXTSIDI (GET_H_GRC (FLD (f_rn
))));
1355 SI opval
= SUBWORDDISI (tmp_result
, 0);
1357 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
1360 SI opval
= SUBWORDDISI (tmp_result
, 1);
1362 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
1370 CASE (sem
, INSN_DMULUL_COMPACT
) : /* dmulu.l $rm, $rn */
1372 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1373 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1374 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1375 int UNUSED written
= 0;
1376 IADDR UNUSED pc
= abuf
->addr
;
1377 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1381 tmp_result
= MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm
))), ZEXTSIDI (GET_H_GRC (FLD (f_rn
))));
1383 SI opval
= SUBWORDDISI (tmp_result
, 0);
1385 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
1388 SI opval
= SUBWORDDISI (tmp_result
, 1);
1390 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
1398 CASE (sem
, INSN_DT_COMPACT
) : /* dt $rn */
1400 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1401 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1402 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1403 int UNUSED written
= 0;
1404 IADDR UNUSED pc
= abuf
->addr
;
1405 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1409 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 1);
1410 SET_H_GRC (FLD (f_rn
), opval
);
1411 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1414 BI opval
= EQSI (GET_H_GRC (FLD (f_rn
)), 0);
1416 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1424 CASE (sem
, INSN_EXTSB_COMPACT
) : /* exts.b $rm, $rn */
1426 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1427 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1428 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1429 int UNUSED written
= 0;
1430 IADDR UNUSED pc
= abuf
->addr
;
1431 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1434 SI opval
= EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3));
1435 SET_H_GRC (FLD (f_rn
), opval
);
1436 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1443 CASE (sem
, INSN_EXTSW_COMPACT
) : /* exts.w $rm, $rn */
1445 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1446 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1447 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1448 int UNUSED written
= 0;
1449 IADDR UNUSED pc
= abuf
->addr
;
1450 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1453 SI opval
= EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1));
1454 SET_H_GRC (FLD (f_rn
), opval
);
1455 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1462 CASE (sem
, INSN_EXTUB_COMPACT
) : /* extu.b $rm, $rn */
1464 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1465 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1466 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1467 int UNUSED written
= 0;
1468 IADDR UNUSED pc
= abuf
->addr
;
1469 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1472 SI opval
= ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3));
1473 SET_H_GRC (FLD (f_rn
), opval
);
1474 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1481 CASE (sem
, INSN_EXTUW_COMPACT
) : /* extu.w $rm, $rn */
1483 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1484 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1485 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1486 int UNUSED written
= 0;
1487 IADDR UNUSED pc
= abuf
->addr
;
1488 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1491 SI opval
= ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1));
1492 SET_H_GRC (FLD (f_rn
), opval
);
1493 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1500 CASE (sem
, INSN_FABS_COMPACT
) : /* fabs $fsdn */
1502 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1504 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1505 int UNUSED written
= 0;
1506 IADDR UNUSED pc
= abuf
->addr
;
1507 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1509 if (GET_H_PRBIT ()) {
1511 DF opval
= sh64_fabsd (current_cpu
, GET_H_FSD (FLD (f_rn
)));
1512 SET_H_FSD (FLD (f_rn
), opval
);
1513 written
|= (1 << 2);
1514 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1518 DF opval
= sh64_fabss (current_cpu
, GET_H_FSD (FLD (f_rn
)));
1519 SET_H_FSD (FLD (f_rn
), opval
);
1520 written
|= (1 << 2);
1521 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1525 abuf
->written
= written
;
1530 CASE (sem
, INSN_FADD_COMPACT
) : /* fadd $fsdm, $fsdn */
1532 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1533 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1534 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1535 int UNUSED written
= 0;
1536 IADDR UNUSED pc
= abuf
->addr
;
1537 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1539 if (GET_H_PRBIT ()) {
1541 DF opval
= sh64_faddd (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1542 SET_H_FSD (FLD (f_rn
), opval
);
1543 written
|= (1 << 3);
1544 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1548 DF opval
= sh64_fadds (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1549 SET_H_FSD (FLD (f_rn
), opval
);
1550 written
|= (1 << 3);
1551 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1555 abuf
->written
= written
;
1560 CASE (sem
, INSN_FCMPEQ_COMPACT
) : /* fcmp/eq $fsdm, $fsdn */
1562 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1563 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1564 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1565 int UNUSED written
= 0;
1566 IADDR UNUSED pc
= abuf
->addr
;
1567 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1569 if (GET_H_PRBIT ()) {
1571 BI opval
= sh64_fcmpeqd (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1573 written
|= (1 << 3);
1574 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1578 BI opval
= sh64_fcmpeqs (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1580 written
|= (1 << 3);
1581 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1585 abuf
->written
= written
;
1590 CASE (sem
, INSN_FCMPGT_COMPACT
) : /* fcmp/gt $fsdm, $fsdn */
1592 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1593 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1594 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1595 int UNUSED written
= 0;
1596 IADDR UNUSED pc
= abuf
->addr
;
1597 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1599 if (GET_H_PRBIT ()) {
1601 BI opval
= sh64_fcmpgtd (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1603 written
|= (1 << 3);
1604 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1608 BI opval
= sh64_fcmpgts (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1610 written
|= (1 << 3);
1611 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1615 abuf
->written
= written
;
1620 CASE (sem
, INSN_FCNVDS_COMPACT
) : /* fcnvds $drn, fpul */
1622 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1623 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1624 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1625 int UNUSED written
= 0;
1626 IADDR UNUSED pc
= abuf
->addr
;
1627 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1630 SF opval
= sh64_fcnvds (current_cpu
, GET_H_DRC (FLD (f_dn
)));
1631 CPU (h_fr
[((UINT
) 32)]) = opval
;
1632 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1639 CASE (sem
, INSN_FCNVSD_COMPACT
) : /* fcnvsd fpul, $drn */
1641 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1642 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1643 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1644 int UNUSED written
= 0;
1645 IADDR UNUSED pc
= abuf
->addr
;
1646 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1649 DF opval
= sh64_fcnvsd (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1650 SET_H_DRC (FLD (f_dn
), opval
);
1651 TRACE_RESULT (current_cpu
, abuf
, "drc", 'f', opval
);
1658 CASE (sem
, INSN_FDIV_COMPACT
) : /* fdiv $fsdm, $fsdn */
1660 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1661 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1662 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1663 int UNUSED written
= 0;
1664 IADDR UNUSED pc
= abuf
->addr
;
1665 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1667 if (GET_H_PRBIT ()) {
1669 DF opval
= sh64_fdivd (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1670 SET_H_FSD (FLD (f_rn
), opval
);
1671 written
|= (1 << 3);
1672 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1676 DF opval
= sh64_fdivs (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1677 SET_H_FSD (FLD (f_rn
), opval
);
1678 written
|= (1 << 3);
1679 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1683 abuf
->written
= written
;
1688 CASE (sem
, INSN_FIPR_COMPACT
) : /* fipr $fvm, $fvn */
1690 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1691 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1692 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
1693 int UNUSED written
= 0;
1694 IADDR UNUSED pc
= abuf
->addr
;
1695 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1697 sh64_fipr (current_cpu
, FLD (f_vm
), FLD (f_vn
));
1703 CASE (sem
, INSN_FLDS_COMPACT
) : /* flds $frn, fpul */
1705 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1706 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1707 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1708 int UNUSED written
= 0;
1709 IADDR UNUSED pc
= abuf
->addr
;
1710 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1713 SF opval
= GET_H_FRC (FLD (f_rn
));
1714 CPU (h_fr
[((UINT
) 32)]) = opval
;
1715 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1722 CASE (sem
, INSN_FLDI0_COMPACT
) : /* fldi0 $frn */
1724 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1725 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1726 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1727 int UNUSED written
= 0;
1728 IADDR UNUSED pc
= abuf
->addr
;
1729 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1732 SF opval
= sh64_fldi0 (current_cpu
);
1733 SET_H_FRC (FLD (f_rn
), opval
);
1734 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
1741 CASE (sem
, INSN_FLDI1_COMPACT
) : /* fldi1 $frn */
1743 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1744 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1745 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1746 int UNUSED written
= 0;
1747 IADDR UNUSED pc
= abuf
->addr
;
1748 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1751 SF opval
= sh64_fldi1 (current_cpu
);
1752 SET_H_FRC (FLD (f_rn
), opval
);
1753 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
1760 CASE (sem
, INSN_FLOAT_COMPACT
) : /* float fpul, $fsdn */
1762 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1763 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1764 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1765 int UNUSED written
= 0;
1766 IADDR UNUSED pc
= abuf
->addr
;
1767 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1769 if (GET_H_PRBIT ()) {
1771 DF opval
= sh64_floatld (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1772 SET_H_FSD (FLD (f_rn
), opval
);
1773 written
|= (1 << 2);
1774 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1778 DF opval
= sh64_floatls (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1779 SET_H_FSD (FLD (f_rn
), opval
);
1780 written
|= (1 << 2);
1781 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1785 abuf
->written
= written
;
1790 CASE (sem
, INSN_FMAC_COMPACT
) : /* fmac fr0, $frm, $frn */
1792 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1793 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1794 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1795 int UNUSED written
= 0;
1796 IADDR UNUSED pc
= abuf
->addr
;
1797 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1800 SF opval
= sh64_fmacs (current_cpu
, GET_H_FRC (((UINT
) 0)), GET_H_FRC (FLD (f_rm
)), GET_H_FRC (FLD (f_rn
)));
1801 SET_H_FRC (FLD (f_rn
), opval
);
1802 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
1809 CASE (sem
, INSN_FMOV1_COMPACT
) : /* fmov $fmovm, $fmovn */
1811 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1812 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1813 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1814 int UNUSED written
= 0;
1815 IADDR UNUSED pc
= abuf
->addr
;
1816 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1819 DF opval
= GET_H_FMOV (FLD (f_rm
));
1820 SET_H_FMOV (FLD (f_rn
), opval
);
1821 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1828 CASE (sem
, INSN_FMOV2_COMPACT
) : /* fmov @$rm, $fmovn */
1830 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1831 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1832 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1833 int UNUSED written
= 0;
1834 IADDR UNUSED pc
= abuf
->addr
;
1835 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1837 if (NOTBI (GET_H_SZBIT ())) {
1839 DF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1840 SET_H_FMOV (FLD (f_rn
), opval
);
1841 written
|= (1 << 4);
1842 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1846 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1847 SET_H_FMOV (FLD (f_rn
), opval
);
1848 written
|= (1 << 4);
1849 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1853 abuf
->written
= written
;
1858 CASE (sem
, INSN_FMOV3_COMPACT
) : /* fmov @${rm}+, fmovn */
1860 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1861 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1862 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1863 int UNUSED written
= 0;
1864 IADDR UNUSED pc
= abuf
->addr
;
1865 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1867 if (NOTBI (GET_H_SZBIT ())) {
1870 DF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1871 SET_H_FMOV (FLD (f_rn
), opval
);
1872 written
|= (1 << 4);
1873 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1876 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
1877 SET_H_GRC (FLD (f_rm
), opval
);
1878 written
|= (1 << 5);
1879 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1885 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1886 SET_H_FMOV (FLD (f_rn
), opval
);
1887 written
|= (1 << 4);
1888 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1891 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 8);
1892 SET_H_GRC (FLD (f_rm
), opval
);
1893 written
|= (1 << 5);
1894 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1899 abuf
->written
= written
;
1904 CASE (sem
, INSN_FMOV4_COMPACT
) : /* fmov @(r0, $rm), $fmovn */
1906 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1907 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1908 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1909 int UNUSED written
= 0;
1910 IADDR UNUSED pc
= abuf
->addr
;
1911 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1913 if (NOTBI (GET_H_SZBIT ())) {
1915 DF opval
= GETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1916 SET_H_FMOV (FLD (f_rn
), opval
);
1917 written
|= (1 << 5);
1918 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1922 DF opval
= GETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1923 SET_H_FMOV (FLD (f_rn
), opval
);
1924 written
|= (1 << 5);
1925 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1929 abuf
->written
= written
;
1934 CASE (sem
, INSN_FMOV5_COMPACT
) : /* fmov $fmovm, @$rn */
1936 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1937 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1938 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1939 int UNUSED written
= 0;
1940 IADDR UNUSED pc
= abuf
->addr
;
1941 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1943 if (NOTBI (GET_H_SZBIT ())) {
1945 SF opval
= GET_H_FMOV (FLD (f_rm
));
1946 SETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1947 written
|= (1 << 4);
1948 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1952 DF opval
= GET_H_FMOV (FLD (f_rm
));
1953 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1954 written
|= (1 << 3);
1955 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1959 abuf
->written
= written
;
1964 CASE (sem
, INSN_FMOV6_COMPACT
) : /* fmov $fmovm, @-$rn */
1966 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1968 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1969 int UNUSED written
= 0;
1970 IADDR UNUSED pc
= abuf
->addr
;
1971 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1973 if (NOTBI (GET_H_SZBIT ())) {
1976 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
1977 SET_H_GRC (FLD (f_rn
), opval
);
1978 written
|= (1 << 5);
1979 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1982 SF opval
= GET_H_FMOV (FLD (f_rm
));
1983 SETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1984 written
|= (1 << 4);
1985 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1991 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 8);
1992 SET_H_GRC (FLD (f_rn
), opval
);
1993 written
|= (1 << 5);
1994 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1997 DF opval
= GET_H_FMOV (FLD (f_rm
));
1998 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1999 written
|= (1 << 3);
2000 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2005 abuf
->written
= written
;
2010 CASE (sem
, INSN_FMOV7_COMPACT
) : /* fmov $fmovm, @(r0, $rn) */
2012 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2013 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2014 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2015 int UNUSED written
= 0;
2016 IADDR UNUSED pc
= abuf
->addr
;
2017 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2019 if (NOTBI (GET_H_SZBIT ())) {
2021 SF opval
= GET_H_FMOV (FLD (f_rm
));
2022 SETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2023 written
|= (1 << 5);
2024 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2028 DF opval
= GET_H_FMOV (FLD (f_rm
));
2029 SETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2030 written
|= (1 << 4);
2031 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2035 abuf
->written
= written
;
2040 CASE (sem
, INSN_FMOV8_COMPACT
) : /* fmov.d @($imm12x8, $rm), $drn */
2042 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2043 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2044 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
2045 int UNUSED written
= 0;
2046 IADDR UNUSED pc
= abuf
->addr
;
2047 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2050 DF opval
= GETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm12x8
)));
2051 SET_H_DRC (FLD (f_dn
), opval
);
2052 TRACE_RESULT (current_cpu
, abuf
, "drc", 'f', opval
);
2059 CASE (sem
, INSN_FMOV9_COMPACT
) : /* mov.l $drm, @($imm12x8, $rn) */
2061 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2063 #define FLD(f) abuf->fields.sfmt_fmov9_compact.f
2064 int UNUSED written
= 0;
2065 IADDR UNUSED pc
= abuf
->addr
;
2066 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2069 DF opval
= GET_H_DRC (FLD (f_dm
));
2070 SETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm12x8
)), opval
);
2071 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2078 CASE (sem
, INSN_FMUL_COMPACT
) : /* fmul $fsdm, $fsdn */
2080 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2081 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2082 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2083 int UNUSED written
= 0;
2084 IADDR UNUSED pc
= abuf
->addr
;
2085 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2087 if (GET_H_PRBIT ()) {
2089 DF opval
= sh64_fmuld (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
2090 SET_H_FSD (FLD (f_rn
), opval
);
2091 written
|= (1 << 3);
2092 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2096 DF opval
= sh64_fmuls (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
2097 SET_H_FSD (FLD (f_rn
), opval
);
2098 written
|= (1 << 3);
2099 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2103 abuf
->written
= written
;
2108 CASE (sem
, INSN_FNEG_COMPACT
) : /* fneg $fsdn */
2110 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2111 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2112 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2113 int UNUSED written
= 0;
2114 IADDR UNUSED pc
= abuf
->addr
;
2115 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2117 if (GET_H_PRBIT ()) {
2119 DF opval
= sh64_fnegd (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2120 SET_H_FSD (FLD (f_rn
), opval
);
2121 written
|= (1 << 2);
2122 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2126 DF opval
= sh64_fnegs (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2127 SET_H_FSD (FLD (f_rn
), opval
);
2128 written
|= (1 << 2);
2129 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2133 abuf
->written
= written
;
2138 CASE (sem
, INSN_FRCHG_COMPACT
) : /* frchg */
2140 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2141 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2142 #define FLD(f) abuf->fields.sfmt_empty.f
2143 int UNUSED written
= 0;
2144 IADDR UNUSED pc
= abuf
->addr
;
2145 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2148 BI opval
= NOTBI (GET_H_FRBIT ());
2149 SET_H_FRBIT (opval
);
2150 TRACE_RESULT (current_cpu
, abuf
, "frbit", 'x', opval
);
2157 CASE (sem
, INSN_FSCHG_COMPACT
) : /* fschg */
2159 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2160 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2161 #define FLD(f) abuf->fields.sfmt_empty.f
2162 int UNUSED written
= 0;
2163 IADDR UNUSED pc
= abuf
->addr
;
2164 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2167 BI opval
= NOTBI (GET_H_SZBIT ());
2168 SET_H_SZBIT (opval
);
2169 TRACE_RESULT (current_cpu
, abuf
, "szbit", 'x', opval
);
2176 CASE (sem
, INSN_FSQRT_COMPACT
) : /* fsqrt $fsdn */
2178 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2180 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2181 int UNUSED written
= 0;
2182 IADDR UNUSED pc
= abuf
->addr
;
2183 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2185 if (GET_H_PRBIT ()) {
2187 DF opval
= sh64_fsqrtd (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2188 SET_H_FSD (FLD (f_rn
), opval
);
2189 written
|= (1 << 2);
2190 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2194 DF opval
= sh64_fsqrts (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2195 SET_H_FSD (FLD (f_rn
), opval
);
2196 written
|= (1 << 2);
2197 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2201 abuf
->written
= written
;
2206 CASE (sem
, INSN_FSTS_COMPACT
) : /* fsts fpul, $frn */
2208 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2210 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2211 int UNUSED written
= 0;
2212 IADDR UNUSED pc
= abuf
->addr
;
2213 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2216 SF opval
= CPU (h_fr
[((UINT
) 32)]);
2217 SET_H_FRC (FLD (f_rn
), opval
);
2218 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
2225 CASE (sem
, INSN_FSUB_COMPACT
) : /* fsub $fsdm, $fsdn */
2227 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2228 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2229 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2230 int UNUSED written
= 0;
2231 IADDR UNUSED pc
= abuf
->addr
;
2232 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2234 if (GET_H_PRBIT ()) {
2236 DF opval
= sh64_fsubd (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
2237 SET_H_FSD (FLD (f_rn
), opval
);
2238 written
|= (1 << 3);
2239 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2243 DF opval
= sh64_fsubs (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
2244 SET_H_FSD (FLD (f_rn
), opval
);
2245 written
|= (1 << 3);
2246 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2250 abuf
->written
= written
;
2255 CASE (sem
, INSN_FTRC_COMPACT
) : /* ftrc $fsdn, fpul */
2257 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2258 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2259 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2260 int UNUSED written
= 0;
2261 IADDR UNUSED pc
= abuf
->addr
;
2262 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2265 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
)))));
2266 CPU (h_fr
[((UINT
) 32)]) = opval
;
2267 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
2274 CASE (sem
, INSN_FTRV_COMPACT
) : /* ftrv xmtrx, $fvn */
2276 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2277 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2278 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
2279 int UNUSED written
= 0;
2280 IADDR UNUSED pc
= abuf
->addr
;
2281 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2283 sh64_ftrv (current_cpu
, FLD (f_vn
));
2289 CASE (sem
, INSN_JMP_COMPACT
) : /* jmp @$rn */
2291 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2292 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2293 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2294 int UNUSED written
= 0;
2295 IADDR UNUSED pc
= abuf
->addr
;
2297 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2301 UDI opval
= ADDDI (pc
, 2);
2302 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2303 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2308 UDI opval
= GET_H_GRC (FLD (f_rn
));
2309 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2310 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2316 SEM_BRANCH_FINI (vpc
);
2321 CASE (sem
, INSN_JSR_COMPACT
) : /* jsr @$rn */
2323 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2324 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2325 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2326 int UNUSED written
= 0;
2327 IADDR UNUSED pc
= abuf
->addr
;
2329 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2334 SI opval
= ADDDI (pc
, 4);
2336 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2340 UDI opval
= ADDDI (pc
, 2);
2341 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2342 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2347 UDI opval
= GET_H_GRC (FLD (f_rn
));
2348 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2349 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2355 SEM_BRANCH_FINI (vpc
);
2360 CASE (sem
, INSN_LDC_GBR_COMPACT
) : /* ldc $rn, gbr */
2362 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2363 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2364 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2365 int UNUSED written
= 0;
2366 IADDR UNUSED pc
= abuf
->addr
;
2367 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2370 SI opval
= GET_H_GRC (FLD (f_rn
));
2372 TRACE_RESULT (current_cpu
, abuf
, "gbr", 'x', opval
);
2379 CASE (sem
, INSN_LDC_VBR_COMPACT
) : /* ldc $rn, vbr */
2381 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2382 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2383 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2384 int UNUSED written
= 0;
2385 IADDR UNUSED pc
= abuf
->addr
;
2386 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2389 SI opval
= GET_H_GRC (FLD (f_rn
));
2391 TRACE_RESULT (current_cpu
, abuf
, "vbr", 'x', opval
);
2398 CASE (sem
, INSN_LDC_SR_COMPACT
) : /* ldc $rn, sr */
2400 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2401 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2402 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2403 int UNUSED written
= 0;
2404 IADDR UNUSED pc
= abuf
->addr
;
2405 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2408 SI opval
= GET_H_GRC (FLD (f_rn
));
2410 TRACE_RESULT (current_cpu
, abuf
, "sr", 'x', opval
);
2417 CASE (sem
, INSN_LDCL_GBR_COMPACT
) : /* ldc.l @${rn}+, gbr */
2419 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2420 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2421 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2422 int UNUSED written
= 0;
2423 IADDR UNUSED pc
= abuf
->addr
;
2424 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2428 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2430 TRACE_RESULT (current_cpu
, abuf
, "gbr", 'x', opval
);
2433 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2434 SET_H_GRC (FLD (f_rn
), opval
);
2435 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2443 CASE (sem
, INSN_LDCL_VBR_COMPACT
) : /* ldc.l @${rn}+, vbr */
2445 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2446 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2447 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2448 int UNUSED written
= 0;
2449 IADDR UNUSED pc
= abuf
->addr
;
2450 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2454 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2456 TRACE_RESULT (current_cpu
, abuf
, "vbr", 'x', opval
);
2459 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2460 SET_H_GRC (FLD (f_rn
), opval
);
2461 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2469 CASE (sem
, INSN_LDS_FPSCR_COMPACT
) : /* lds $rn, fpscr */
2471 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2472 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2473 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2474 int UNUSED written
= 0;
2475 IADDR UNUSED pc
= abuf
->addr
;
2476 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2479 SI opval
= GET_H_GRC (FLD (f_rn
));
2480 CPU (h_fpscr
) = opval
;
2481 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
2488 CASE (sem
, INSN_LDSL_FPSCR_COMPACT
) : /* lds.l @${rn}+, fpscr */
2490 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2491 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2492 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2493 int UNUSED written
= 0;
2494 IADDR UNUSED pc
= abuf
->addr
;
2495 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2499 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2500 CPU (h_fpscr
) = opval
;
2501 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
2504 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2505 SET_H_GRC (FLD (f_rn
), opval
);
2506 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2514 CASE (sem
, INSN_LDS_FPUL_COMPACT
) : /* lds $rn, fpul */
2516 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2517 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2518 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2519 int UNUSED written
= 0;
2520 IADDR UNUSED pc
= abuf
->addr
;
2521 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2524 SF opval
= SUBWORDSISF (GET_H_GRC (FLD (f_rn
)));
2525 CPU (h_fr
[((UINT
) 32)]) = opval
;
2526 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
2533 CASE (sem
, INSN_LDSL_FPUL_COMPACT
) : /* lds.l @${rn}+, fpul */
2535 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2536 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2537 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2538 int UNUSED written
= 0;
2539 IADDR UNUSED pc
= abuf
->addr
;
2540 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2544 SF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2545 CPU (h_fr
[((UINT
) 32)]) = opval
;
2546 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
2549 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2550 SET_H_GRC (FLD (f_rn
), opval
);
2551 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2559 CASE (sem
, INSN_LDS_MACH_COMPACT
) : /* lds $rn, mach */
2561 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2562 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2563 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2564 int UNUSED written
= 0;
2565 IADDR UNUSED pc
= abuf
->addr
;
2566 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2569 SI opval
= GET_H_GRC (FLD (f_rn
));
2571 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2578 CASE (sem
, INSN_LDSL_MACH_COMPACT
) : /* lds.l @${rn}+, mach */
2580 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2581 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2582 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2583 int UNUSED written
= 0;
2584 IADDR UNUSED pc
= abuf
->addr
;
2585 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2589 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2591 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2594 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2595 SET_H_GRC (FLD (f_rn
), opval
);
2596 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2604 CASE (sem
, INSN_LDS_MACL_COMPACT
) : /* lds $rn, macl */
2606 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2607 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2608 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2609 int UNUSED written
= 0;
2610 IADDR UNUSED pc
= abuf
->addr
;
2611 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2614 SI opval
= GET_H_GRC (FLD (f_rn
));
2616 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2623 CASE (sem
, INSN_LDSL_MACL_COMPACT
) : /* lds.l @${rn}+, macl */
2625 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2626 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2627 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2628 int UNUSED written
= 0;
2629 IADDR UNUSED pc
= abuf
->addr
;
2630 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2634 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2636 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2639 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2640 SET_H_GRC (FLD (f_rn
), opval
);
2641 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2649 CASE (sem
, INSN_LDS_PR_COMPACT
) : /* lds $rn, pr */
2651 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2652 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2653 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2654 int UNUSED written
= 0;
2655 IADDR UNUSED pc
= abuf
->addr
;
2656 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2659 SI opval
= GET_H_GRC (FLD (f_rn
));
2661 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2668 CASE (sem
, INSN_LDSL_PR_COMPACT
) : /* lds.l @${rn}+, pr */
2670 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2671 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2672 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2673 int UNUSED written
= 0;
2674 IADDR UNUSED pc
= abuf
->addr
;
2675 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2679 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2681 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2684 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2685 SET_H_GRC (FLD (f_rn
), opval
);
2686 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2694 CASE (sem
, INSN_MACL_COMPACT
) : /* mac.l @${rm}+, @${rn}+ */
2696 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2697 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2698 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2699 int UNUSED written
= 0;
2700 IADDR UNUSED pc
= abuf
->addr
;
2701 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2709 tmp_x
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2711 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2712 SET_H_GRC (FLD (f_rn
), opval
);
2713 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2715 if (EQSI (FLD (f_rn
), FLD (f_rm
))) {
2718 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2719 SET_H_GRC (FLD (f_rn
), opval
);
2720 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2723 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
2724 SET_H_GRC (FLD (f_rm
), opval
);
2725 written
|= (1 << 11);
2726 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2730 tmp_y
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2732 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
2733 SET_H_GRC (FLD (f_rm
), opval
);
2734 written
|= (1 << 11);
2735 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2737 tmp_tmpry
= MULDI (ZEXTSIDI (tmp_x
), ZEXTSIDI (tmp_y
));
2738 tmp_mac
= ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2739 tmp_result
= ADDDI (tmp_mac
, tmp_tmpry
);
2741 if (GET_H_SBIT ()) {
2745 tmp_max
= SRLDI (INVDI (0), 16);
2746 tmp_min
= SRLDI (INVDI (0), 15);
2747 if (GTDI (tmp_result
, tmp_max
)) {
2748 tmp_result
= tmp_max
;
2750 if (LTDI (tmp_result
, tmp_min
)) {
2751 tmp_result
= tmp_min
;
2757 SI opval
= SUBWORDDISI (tmp_result
, 0);
2759 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2762 SI opval
= SUBWORDDISI (tmp_result
, 1);
2764 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2769 abuf
->written
= written
;
2774 CASE (sem
, INSN_MACW_COMPACT
) : /* mac.w @${rm}+, @${rn}+ */
2776 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2777 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2778 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2779 int UNUSED written
= 0;
2780 IADDR UNUSED pc
= abuf
->addr
;
2781 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2789 tmp_x
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2791 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 2);
2792 SET_H_GRC (FLD (f_rn
), opval
);
2793 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2795 if (EQSI (FLD (f_rn
), FLD (f_rm
))) {
2798 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 2);
2799 SET_H_GRC (FLD (f_rn
), opval
);
2800 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2803 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
2804 SET_H_GRC (FLD (f_rm
), opval
);
2805 written
|= (1 << 11);
2806 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2810 tmp_y
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2812 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
2813 SET_H_GRC (FLD (f_rm
), opval
);
2814 written
|= (1 << 11);
2815 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2817 tmp_tmpry
= MULSI (ZEXTHISI (tmp_x
), ZEXTHISI (tmp_y
));
2818 if (GET_H_SBIT ()) {
2820 if (ADDOFSI (tmp_tmpry
, GET_H_MACL (), 0)) {
2824 written
|= (1 << 9);
2825 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2829 SI opval
= ADDSI (tmp_tmpry
, GET_H_MACL ());
2831 written
|= (1 << 10);
2832 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2837 tmp_mac
= ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2838 tmp_result
= ADDDI (tmp_mac
, EXTSIDI (tmp_tmpry
));
2840 SI opval
= SUBWORDDISI (tmp_result
, 0);
2842 written
|= (1 << 9);
2843 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2846 SI opval
= SUBWORDDISI (tmp_result
, 1);
2848 written
|= (1 << 10);
2849 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2855 abuf
->written
= written
;
2860 CASE (sem
, INSN_MOV_COMPACT
) : /* mov $rm64, $rn64 */
2862 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2863 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2864 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2865 int UNUSED written
= 0;
2866 IADDR UNUSED pc
= abuf
->addr
;
2867 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2870 DI opval
= GET_H_GR (FLD (f_rm
));
2871 SET_H_GR (FLD (f_rn
), opval
);
2872 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2879 CASE (sem
, INSN_MOVI_COMPACT
) : /* mov #$imm8, $rn */
2881 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2882 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2883 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2884 int UNUSED written
= 0;
2885 IADDR UNUSED pc
= abuf
->addr
;
2886 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2889 SI opval
= EXTQIDI (ANDQI (FLD (f_imm8
), 255));
2890 SET_H_GRC (FLD (f_rn
), opval
);
2891 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2898 CASE (sem
, INSN_MOVI20_COMPACT
) : /* movi20 #$imm20, $rn */
2900 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2901 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2902 #define FLD(f) abuf->fields.sfmt_movi20_compact.f
2903 int UNUSED written
= 0;
2904 IADDR UNUSED pc
= abuf
->addr
;
2905 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2908 SI opval
= FLD (f_imm20
);
2909 SET_H_GRC (FLD (f_rn
), opval
);
2910 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2917 CASE (sem
, INSN_MOVB1_COMPACT
) : /* mov.b $rm, @$rn */
2919 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2920 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2921 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2922 int UNUSED written
= 0;
2923 IADDR UNUSED pc
= abuf
->addr
;
2924 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2927 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2928 SETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
2929 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2936 CASE (sem
, INSN_MOVB2_COMPACT
) : /* mov.b $rm, @-$rn */
2938 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2939 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2940 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2941 int UNUSED written
= 0;
2942 IADDR UNUSED pc
= abuf
->addr
;
2943 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2947 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 1);
2949 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2950 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2951 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2954 SI opval
= tmp_addr
;
2955 SET_H_GRC (FLD (f_rn
), opval
);
2956 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2964 CASE (sem
, INSN_MOVB3_COMPACT
) : /* mov.b $rm, @(r0,$rn) */
2966 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2968 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2969 int UNUSED written
= 0;
2970 IADDR UNUSED pc
= abuf
->addr
;
2971 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2974 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2975 SETMEMUQI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2976 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2983 CASE (sem
, INSN_MOVB4_COMPACT
) : /* mov.b r0, @($imm8, gbr) */
2985 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2986 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2987 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2988 int UNUSED written
= 0;
2989 IADDR UNUSED pc
= abuf
->addr
;
2990 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2994 tmp_addr
= ADDSI (GET_H_GBR (), FLD (f_imm8
));
2996 UQI opval
= SUBWORDSIUQI (GET_H_GRC (((UINT
) 0)), 3);
2997 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2998 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3006 CASE (sem
, INSN_MOVB5_COMPACT
) : /* mov.b r0, @($imm4, $rm) */
3008 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3009 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3010 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
3011 int UNUSED written
= 0;
3012 IADDR UNUSED pc
= abuf
->addr
;
3013 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3017 tmp_addr
= ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4
));
3019 UQI opval
= SUBWORDSIUQI (GET_H_GRC (((UINT
) 0)), 3);
3020 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
3021 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3029 CASE (sem
, INSN_MOVB6_COMPACT
) : /* mov.b @$rm, $rn */
3031 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3032 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3033 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3034 int UNUSED written
= 0;
3035 IADDR UNUSED pc
= abuf
->addr
;
3036 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3039 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
))));
3040 SET_H_GRC (FLD (f_rn
), opval
);
3041 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3048 CASE (sem
, INSN_MOVB7_COMPACT
) : /* mov.b @${rm}+, $rn */
3050 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3051 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3052 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3053 int UNUSED written
= 0;
3054 IADDR UNUSED pc
= abuf
->addr
;
3055 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3059 tmp_data
= GETMEMQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3060 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3062 SI opval
= EXTQISI (tmp_data
);
3063 SET_H_GRC (FLD (f_rm
), opval
);
3064 written
|= (1 << 4);
3065 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3069 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 1);
3070 SET_H_GRC (FLD (f_rm
), opval
);
3071 written
|= (1 << 4);
3072 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3076 SI opval
= EXTQISI (tmp_data
);
3077 SET_H_GRC (FLD (f_rn
), opval
);
3078 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3082 abuf
->written
= written
;
3087 CASE (sem
, INSN_MOVB8_COMPACT
) : /* mov.b @(r0, $rm), $rn */
3089 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3090 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3091 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3092 int UNUSED written
= 0;
3093 IADDR UNUSED pc
= abuf
->addr
;
3094 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3097 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
)))));
3098 SET_H_GRC (FLD (f_rn
), opval
);
3099 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3106 CASE (sem
, INSN_MOVB9_COMPACT
) : /* mov.b @($imm8, gbr), r0 */
3108 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3109 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3110 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3111 int UNUSED written
= 0;
3112 IADDR UNUSED pc
= abuf
->addr
;
3113 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3116 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8
))));
3117 SET_H_GRC (((UINT
) 0), opval
);
3118 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3125 CASE (sem
, INSN_MOVB10_COMPACT
) : /* mov.b @($imm4, $rm), r0 */
3127 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3128 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3129 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
3130 int UNUSED written
= 0;
3131 IADDR UNUSED pc
= abuf
->addr
;
3132 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3135 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4
))));
3136 SET_H_GRC (((UINT
) 0), opval
);
3137 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3144 CASE (sem
, INSN_MOVL1_COMPACT
) : /* mov.l $rm, @$rn */
3146 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3147 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3148 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3149 int UNUSED written
= 0;
3150 IADDR UNUSED pc
= abuf
->addr
;
3151 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3154 SI opval
= GET_H_GRC (FLD (f_rm
));
3155 SETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3156 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3163 CASE (sem
, INSN_MOVL2_COMPACT
) : /* mov.l $rm, @-$rn */
3165 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3166 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3167 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3168 int UNUSED written
= 0;
3169 IADDR UNUSED pc
= abuf
->addr
;
3170 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3174 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
3176 SI opval
= GET_H_GRC (FLD (f_rm
));
3177 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
3178 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3181 SI opval
= tmp_addr
;
3182 SET_H_GRC (FLD (f_rn
), opval
);
3183 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3191 CASE (sem
, INSN_MOVL3_COMPACT
) : /* mov.l $rm, @(r0, $rn) */
3193 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3194 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3195 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3196 int UNUSED written
= 0;
3197 IADDR UNUSED pc
= abuf
->addr
;
3198 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3201 SI opval
= GET_H_GRC (FLD (f_rm
));
3202 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
3203 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3210 CASE (sem
, INSN_MOVL4_COMPACT
) : /* mov.l r0, @($imm8x4, gbr) */
3212 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3214 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3215 int UNUSED written
= 0;
3216 IADDR UNUSED pc
= abuf
->addr
;
3217 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3220 SI opval
= GET_H_GRC (((UINT
) 0));
3221 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x4
)), opval
);
3222 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3229 CASE (sem
, INSN_MOVL5_COMPACT
) : /* mov.l $rm, @($imm4x4, $rn) */
3231 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3232 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3233 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3234 int UNUSED written
= 0;
3235 IADDR UNUSED pc
= abuf
->addr
;
3236 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3239 SI opval
= GET_H_GRC (FLD (f_rm
));
3240 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm4x4
)), opval
);
3241 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3248 CASE (sem
, INSN_MOVL6_COMPACT
) : /* mov.l @$rm, $rn */
3250 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3251 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3252 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3253 int UNUSED written
= 0;
3254 IADDR UNUSED pc
= abuf
->addr
;
3255 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3258 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3259 SET_H_GRC (FLD (f_rn
), opval
);
3260 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3267 CASE (sem
, INSN_MOVL7_COMPACT
) : /* mov.l @${rm}+, $rn */
3269 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3270 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3271 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3272 int UNUSED written
= 0;
3273 IADDR UNUSED pc
= abuf
->addr
;
3274 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3278 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3279 SET_H_GRC (FLD (f_rn
), opval
);
3280 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3282 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3284 SI opval
= GET_H_GRC (FLD (f_rn
));
3285 SET_H_GRC (FLD (f_rm
), opval
);
3286 written
|= (1 << 5);
3287 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3291 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
3292 SET_H_GRC (FLD (f_rm
), opval
);
3293 written
|= (1 << 5);
3294 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3299 abuf
->written
= written
;
3304 CASE (sem
, INSN_MOVL8_COMPACT
) : /* mov.l @(r0, $rm), $rn */
3306 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3307 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3308 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3309 int UNUSED written
= 0;
3310 IADDR UNUSED pc
= abuf
->addr
;
3311 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3314 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
3315 SET_H_GRC (FLD (f_rn
), opval
);
3316 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3323 CASE (sem
, INSN_MOVL9_COMPACT
) : /* mov.l @($imm8x4, gbr), r0 */
3325 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3326 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3327 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3328 int UNUSED written
= 0;
3329 IADDR UNUSED pc
= abuf
->addr
;
3330 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3333 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x4
)));
3334 SET_H_GRC (((UINT
) 0), opval
);
3335 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3342 CASE (sem
, INSN_MOVL10_COMPACT
) : /* mov.l @($imm8x4, pc), $rn */
3344 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3345 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3346 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3347 int UNUSED written
= 0;
3348 IADDR UNUSED pc
= abuf
->addr
;
3349 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3352 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_imm8x4
), ANDDI (ADDDI (pc
, 4), INVSI (3))));
3353 SET_H_GRC (FLD (f_rn
), opval
);
3354 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3361 CASE (sem
, INSN_MOVL11_COMPACT
) : /* mov.l @($imm4x4, $rm), $rn */
3363 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3364 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3365 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3366 int UNUSED written
= 0;
3367 IADDR UNUSED pc
= abuf
->addr
;
3368 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3371 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x4
)));
3372 SET_H_GRC (FLD (f_rn
), opval
);
3373 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3380 CASE (sem
, INSN_MOVL12_COMPACT
) : /* mov.l @($imm12x4, $rm), $rn */
3382 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3383 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3384 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3385 int UNUSED written
= 0;
3386 IADDR UNUSED pc
= abuf
->addr
;
3387 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3390 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm12x4
)));
3391 SET_H_GRC (FLD (f_rn
), opval
);
3392 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3399 CASE (sem
, INSN_MOVL13_COMPACT
) : /* mov.l $rm, @($imm12x4, $rn) */
3401 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3402 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3403 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3404 int UNUSED written
= 0;
3405 IADDR UNUSED pc
= abuf
->addr
;
3406 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3409 SI opval
= GET_H_GRC (FLD (f_rm
));
3410 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm12x4
)), opval
);
3411 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3418 CASE (sem
, INSN_MOVW1_COMPACT
) : /* mov.w $rm, @$rn */
3420 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3421 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3422 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3423 int UNUSED written
= 0;
3424 IADDR UNUSED pc
= abuf
->addr
;
3425 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3428 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3429 SETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3430 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3437 CASE (sem
, INSN_MOVW2_COMPACT
) : /* mov.w $rm, @-$rn */
3439 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3440 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3441 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3442 int UNUSED written
= 0;
3443 IADDR UNUSED pc
= abuf
->addr
;
3444 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3448 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 2);
3450 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3451 SETMEMHI (current_cpu
, pc
, tmp_addr
, opval
);
3452 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3455 SI opval
= tmp_addr
;
3456 SET_H_GRC (FLD (f_rn
), opval
);
3457 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3465 CASE (sem
, INSN_MOVW3_COMPACT
) : /* mov.w $rm, @(r0, $rn) */
3467 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3468 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3469 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3470 int UNUSED written
= 0;
3471 IADDR UNUSED pc
= abuf
->addr
;
3472 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3475 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3476 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
3477 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3484 CASE (sem
, INSN_MOVW4_COMPACT
) : /* mov.w r0, @($imm8x2, gbr) */
3486 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3487 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3488 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3489 int UNUSED written
= 0;
3490 IADDR UNUSED pc
= abuf
->addr
;
3491 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3494 HI opval
= SUBWORDSIHI (GET_H_GRC (((UINT
) 0)), 1);
3495 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x2
)), opval
);
3496 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3503 CASE (sem
, INSN_MOVW5_COMPACT
) : /* mov.w r0, @($imm4x2, $rm) */
3505 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3506 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3507 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3508 int UNUSED written
= 0;
3509 IADDR UNUSED pc
= abuf
->addr
;
3510 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3513 HI opval
= SUBWORDSIHI (GET_H_GRC (((UINT
) 0)), 1);
3514 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x2
)), opval
);
3515 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3522 CASE (sem
, INSN_MOVW6_COMPACT
) : /* mov.w @$rm, $rn */
3524 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3525 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3526 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3527 int UNUSED written
= 0;
3528 IADDR UNUSED pc
= abuf
->addr
;
3529 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3532 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
))));
3533 SET_H_GRC (FLD (f_rn
), opval
);
3534 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3541 CASE (sem
, INSN_MOVW7_COMPACT
) : /* mov.w @${rm}+, $rn */
3543 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3544 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3545 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3546 int UNUSED written
= 0;
3547 IADDR UNUSED pc
= abuf
->addr
;
3548 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3552 tmp_data
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3553 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3555 SI opval
= EXTHISI (tmp_data
);
3556 SET_H_GRC (FLD (f_rm
), opval
);
3557 written
|= (1 << 4);
3558 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3562 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
3563 SET_H_GRC (FLD (f_rm
), opval
);
3564 written
|= (1 << 4);
3565 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3569 SI opval
= EXTHISI (tmp_data
);
3570 SET_H_GRC (FLD (f_rn
), opval
);
3571 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3575 abuf
->written
= written
;
3580 CASE (sem
, INSN_MOVW8_COMPACT
) : /* mov.w @(r0, $rm), $rn */
3582 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3583 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3584 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3585 int UNUSED written
= 0;
3586 IADDR UNUSED pc
= abuf
->addr
;
3587 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3590 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
)))));
3591 SET_H_GRC (FLD (f_rn
), opval
);
3592 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3599 CASE (sem
, INSN_MOVW9_COMPACT
) : /* mov.w @($imm8x2, gbr), r0 */
3601 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3602 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3603 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3604 int UNUSED written
= 0;
3605 IADDR UNUSED pc
= abuf
->addr
;
3606 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3609 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x2
))));
3610 SET_H_GRC (((UINT
) 0), opval
);
3611 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3618 CASE (sem
, INSN_MOVW10_COMPACT
) : /* mov.w @($imm8x2, pc), $rn */
3620 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3621 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3622 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3623 int UNUSED written
= 0;
3624 IADDR UNUSED pc
= abuf
->addr
;
3625 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3628 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDDI (ADDDI (pc
, 4), FLD (f_imm8x2
))));
3629 SET_H_GRC (FLD (f_rn
), opval
);
3630 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3637 CASE (sem
, INSN_MOVW11_COMPACT
) : /* mov.w @($imm4x2, $rm), r0 */
3639 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3640 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3641 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3642 int UNUSED written
= 0;
3643 IADDR UNUSED pc
= abuf
->addr
;
3644 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3647 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x2
))));
3648 SET_H_GRC (((UINT
) 0), opval
);
3649 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3656 CASE (sem
, INSN_MOVA_COMPACT
) : /* mova @($imm8x4, pc), r0 */
3658 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3659 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3660 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3661 int UNUSED written
= 0;
3662 IADDR UNUSED pc
= abuf
->addr
;
3663 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3666 SI opval
= ADDDI (ANDDI (ADDDI (pc
, 4), INVSI (3)), FLD (f_imm8x4
));
3667 SET_H_GRC (((UINT
) 0), opval
);
3668 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3675 CASE (sem
, INSN_MOVCAL_COMPACT
) : /* movca.l r0, @$rn */
3677 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3678 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3679 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3680 int UNUSED written
= 0;
3681 IADDR UNUSED pc
= abuf
->addr
;
3682 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3685 SI opval
= GET_H_GRC (((UINT
) 0));
3686 SETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3687 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3694 CASE (sem
, INSN_MOVCOL_COMPACT
) : /* movco.l r0, @$rn */
3696 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3697 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3698 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3699 int UNUSED written
= 0;
3700 IADDR UNUSED pc
= abuf
->addr
;
3701 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3704 SI opval
= GET_H_GRC (FLD (f_rn
));
3705 SET_H_GRC (FLD (f_rn
), opval
);
3706 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3713 CASE (sem
, INSN_MOVT_COMPACT
) : /* movt $rn */
3715 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3716 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3717 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3718 int UNUSED written
= 0;
3719 IADDR UNUSED pc
= abuf
->addr
;
3720 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3723 SI opval
= ZEXTBISI (GET_H_TBIT ());
3724 SET_H_GRC (FLD (f_rn
), opval
);
3725 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3732 CASE (sem
, INSN_MOVUAL_COMPACT
) : /* movua.l @$rn, r0 */
3734 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3735 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3736 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3737 int UNUSED written
= 0;
3738 IADDR UNUSED pc
= abuf
->addr
;
3739 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3742 SI opval
= sh64_movua (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
3743 SET_H_GRC (((UINT
) 0), opval
);
3744 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3751 CASE (sem
, INSN_MOVUAL2_COMPACT
) : /* movua.l @$rn+, r0 */
3753 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3754 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3755 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3756 int UNUSED written
= 0;
3757 IADDR UNUSED pc
= abuf
->addr
;
3758 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3762 SI opval
= sh64_movua (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
3763 SET_H_GRC (((UINT
) 0), opval
);
3764 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3767 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
3768 SET_H_GRC (FLD (f_rn
), opval
);
3769 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3777 CASE (sem
, INSN_MULL_COMPACT
) : /* mul.l $rm, $rn */
3779 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3780 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3781 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3782 int UNUSED written
= 0;
3783 IADDR UNUSED pc
= abuf
->addr
;
3784 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3787 SI opval
= MULSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
3789 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3796 CASE (sem
, INSN_MULSW_COMPACT
) : /* muls.w $rm, $rn */
3798 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3799 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3800 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3801 int UNUSED written
= 0;
3802 IADDR UNUSED pc
= abuf
->addr
;
3803 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3806 SI opval
= MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn
)), 1)));
3808 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3815 CASE (sem
, INSN_MULUW_COMPACT
) : /* mulu.w $rm, $rn */
3817 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3818 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3819 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3820 int UNUSED written
= 0;
3821 IADDR UNUSED pc
= abuf
->addr
;
3822 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3825 SI opval
= MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn
)), 1)));
3827 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3834 CASE (sem
, INSN_NEG_COMPACT
) : /* neg $rm, $rn */
3836 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3837 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3838 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3839 int UNUSED written
= 0;
3840 IADDR UNUSED pc
= abuf
->addr
;
3841 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3844 SI opval
= NEGSI (GET_H_GRC (FLD (f_rm
)));
3845 SET_H_GRC (FLD (f_rn
), opval
);
3846 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3853 CASE (sem
, INSN_NEGC_COMPACT
) : /* negc $rm, $rn */
3855 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3856 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3857 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3858 int UNUSED written
= 0;
3859 IADDR UNUSED pc
= abuf
->addr
;
3860 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3864 tmp_flag
= SUBCFSI (0, GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
3866 SI opval
= SUBCSI (0, GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
3867 SET_H_GRC (FLD (f_rn
), opval
);
3868 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3871 BI opval
= tmp_flag
;
3873 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3881 CASE (sem
, INSN_NOP_COMPACT
) : /* nop */
3883 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3884 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3885 #define FLD(f) abuf->fields.sfmt_empty.f
3886 int UNUSED written
= 0;
3887 IADDR UNUSED pc
= abuf
->addr
;
3888 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3896 CASE (sem
, INSN_NOT_COMPACT
) : /* not $rm64, $rn64 */
3898 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3899 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3900 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3901 int UNUSED written
= 0;
3902 IADDR UNUSED pc
= abuf
->addr
;
3903 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3906 DI opval
= INVDI (GET_H_GR (FLD (f_rm
)));
3907 SET_H_GR (FLD (f_rn
), opval
);
3908 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3915 CASE (sem
, INSN_OCBI_COMPACT
) : /* ocbi @$rn */
3917 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3918 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3919 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3920 int UNUSED written
= 0;
3921 IADDR UNUSED pc
= abuf
->addr
;
3922 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3926 SI opval
= GET_H_GRC (FLD (f_rn
));
3927 SET_H_GRC (FLD (f_rn
), opval
);
3928 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3937 CASE (sem
, INSN_OCBP_COMPACT
) : /* ocbp @$rn */
3939 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3940 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3941 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3942 int UNUSED written
= 0;
3943 IADDR UNUSED pc
= abuf
->addr
;
3944 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3948 SI opval
= GET_H_GRC (FLD (f_rn
));
3949 SET_H_GRC (FLD (f_rn
), opval
);
3950 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3959 CASE (sem
, INSN_OCBWB_COMPACT
) : /* ocbwb @$rn */
3961 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3962 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3963 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3964 int UNUSED written
= 0;
3965 IADDR UNUSED pc
= abuf
->addr
;
3966 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3970 SI opval
= GET_H_GRC (FLD (f_rn
));
3971 SET_H_GRC (FLD (f_rn
), opval
);
3972 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3981 CASE (sem
, INSN_OR_COMPACT
) : /* or $rm64, $rn64 */
3983 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3984 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3985 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3986 int UNUSED written
= 0;
3987 IADDR UNUSED pc
= abuf
->addr
;
3988 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3991 DI opval
= ORDI (GET_H_GR (FLD (f_rm
)), GET_H_GR (FLD (f_rn
)));
3992 SET_H_GR (FLD (f_rn
), opval
);
3993 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4000 CASE (sem
, INSN_ORI_COMPACT
) : /* or #$uimm8, r0 */
4002 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4003 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4004 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4005 int UNUSED written
= 0;
4006 IADDR UNUSED pc
= abuf
->addr
;
4007 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4010 SI opval
= ORSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
4011 SET_H_GRC (((UINT
) 0), opval
);
4012 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4019 CASE (sem
, INSN_ORB_COMPACT
) : /* or.b #$imm8, @(r0, gbr) */
4021 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4022 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4023 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4024 int UNUSED written
= 0;
4025 IADDR UNUSED pc
= abuf
->addr
;
4026 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4031 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
4032 tmp_data
= ORQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
4034 UQI opval
= tmp_data
;
4035 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
4036 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4044 CASE (sem
, INSN_PREF_COMPACT
) : /* pref @$rn */
4046 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4047 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4048 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4049 int UNUSED written
= 0;
4050 IADDR UNUSED pc
= abuf
->addr
;
4051 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4053 sh64_pref (current_cpu
, GET_H_GRC (FLD (f_rn
)));
4059 CASE (sem
, INSN_ROTCL_COMPACT
) : /* rotcl $rn */
4061 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4063 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4064 int UNUSED written
= 0;
4065 IADDR UNUSED pc
= abuf
->addr
;
4066 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4070 tmp_temp
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4072 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), GET_H_TBIT ());
4073 SET_H_GRC (FLD (f_rn
), opval
);
4074 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4077 BI opval
= ((tmp_temp
) ? (1) : (0));
4079 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4087 CASE (sem
, INSN_ROTCR_COMPACT
) : /* rotcr $rn */
4089 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4090 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4091 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4092 int UNUSED written
= 0;
4093 IADDR UNUSED pc
= abuf
->addr
;
4094 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4099 tmp_lsbit
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn
)), 1), 0)) ? (0) : (1));
4100 tmp_temp
= GET_H_TBIT ();
4102 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rn
)), 1), SLLSI (tmp_temp
, 31));
4103 SET_H_GRC (FLD (f_rn
), opval
);
4104 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4107 BI opval
= ((tmp_lsbit
) ? (1) : (0));
4109 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4117 CASE (sem
, INSN_ROTL_COMPACT
) : /* rotl $rn */
4119 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4120 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4121 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4122 int UNUSED written
= 0;
4123 IADDR UNUSED pc
= abuf
->addr
;
4124 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4128 tmp_temp
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4130 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), tmp_temp
);
4131 SET_H_GRC (FLD (f_rn
), opval
);
4132 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4135 BI opval
= ((tmp_temp
) ? (1) : (0));
4137 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4145 CASE (sem
, INSN_ROTR_COMPACT
) : /* rotr $rn */
4147 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4148 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4149 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4150 int UNUSED written
= 0;
4151 IADDR UNUSED pc
= abuf
->addr
;
4152 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4157 tmp_lsbit
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn
)), 1), 0)) ? (0) : (1));
4158 tmp_temp
= tmp_lsbit
;
4160 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rn
)), 1), SLLSI (tmp_temp
, 31));
4161 SET_H_GRC (FLD (f_rn
), opval
);
4162 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4165 BI opval
= ((tmp_lsbit
) ? (1) : (0));
4167 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4175 CASE (sem
, INSN_RTS_COMPACT
) : /* rts */
4177 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4178 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4179 #define FLD(f) abuf->fields.sfmt_empty.f
4180 int UNUSED written
= 0;
4181 IADDR UNUSED pc
= abuf
->addr
;
4183 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4187 UDI opval
= ADDDI (pc
, 2);
4188 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4189 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
4194 UDI opval
= GET_H_PR ();
4195 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4196 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
4202 SEM_BRANCH_FINI (vpc
);
4207 CASE (sem
, INSN_SETS_COMPACT
) : /* sets */
4209 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4210 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4211 #define FLD(f) abuf->fields.sfmt_empty.f
4212 int UNUSED written
= 0;
4213 IADDR UNUSED pc
= abuf
->addr
;
4214 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4219 TRACE_RESULT (current_cpu
, abuf
, "sbit", 'x', opval
);
4226 CASE (sem
, INSN_SETT_COMPACT
) : /* sett */
4228 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4229 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4230 #define FLD(f) abuf->fields.sfmt_empty.f
4231 int UNUSED written
= 0;
4232 IADDR UNUSED pc
= abuf
->addr
;
4233 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4238 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4245 CASE (sem
, INSN_SHAD_COMPACT
) : /* shad $rm, $rn */
4247 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4248 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4249 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4250 int UNUSED written
= 0;
4251 IADDR UNUSED pc
= abuf
->addr
;
4252 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4256 tmp_shamt
= ANDSI (GET_H_GRC (FLD (f_rm
)), 31);
4257 if (GESI (GET_H_GRC (FLD (f_rm
)), 0)) {
4259 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), tmp_shamt
);
4260 SET_H_GRC (FLD (f_rn
), opval
);
4261 written
|= (1 << 2);
4262 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4265 if (NESI (tmp_shamt
, 0)) {
4267 SI opval
= SRASI (GET_H_GRC (FLD (f_rn
)), SUBSI (32, tmp_shamt
));
4268 SET_H_GRC (FLD (f_rn
), opval
);
4269 written
|= (1 << 2);
4270 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4273 if (LTSI (GET_H_GRC (FLD (f_rn
)), 0)) {
4275 SI opval
= NEGSI (1);
4276 SET_H_GRC (FLD (f_rn
), opval
);
4277 written
|= (1 << 2);
4278 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4283 SET_H_GRC (FLD (f_rn
), opval
);
4284 written
|= (1 << 2);
4285 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4292 abuf
->written
= written
;
4297 CASE (sem
, INSN_SHAL_COMPACT
) : /* shal $rn */
4299 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4300 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4301 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4302 int UNUSED written
= 0;
4303 IADDR UNUSED pc
= abuf
->addr
;
4304 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4308 tmp_t
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4310 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 1);
4311 SET_H_GRC (FLD (f_rn
), opval
);
4312 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4315 BI opval
= ((tmp_t
) ? (1) : (0));
4317 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4325 CASE (sem
, INSN_SHAR_COMPACT
) : /* shar $rn */
4327 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4328 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4329 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4330 int UNUSED written
= 0;
4331 IADDR UNUSED pc
= abuf
->addr
;
4332 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4336 tmp_t
= ANDSI (GET_H_GRC (FLD (f_rn
)), 1);
4338 SI opval
= SRASI (GET_H_GRC (FLD (f_rn
)), 1);
4339 SET_H_GRC (FLD (f_rn
), opval
);
4340 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4343 BI opval
= ((tmp_t
) ? (1) : (0));
4345 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4353 CASE (sem
, INSN_SHLD_COMPACT
) : /* shld $rm, $rn */
4355 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4356 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4357 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4358 int UNUSED written
= 0;
4359 IADDR UNUSED pc
= abuf
->addr
;
4360 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4364 tmp_shamt
= ANDSI (GET_H_GRC (FLD (f_rm
)), 31);
4365 if (GESI (GET_H_GRC (FLD (f_rm
)), 0)) {
4367 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), tmp_shamt
);
4368 SET_H_GRC (FLD (f_rn
), opval
);
4369 written
|= (1 << 2);
4370 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4373 if (NESI (tmp_shamt
, 0)) {
4375 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), SUBSI (32, tmp_shamt
));
4376 SET_H_GRC (FLD (f_rn
), opval
);
4377 written
|= (1 << 2);
4378 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4383 SET_H_GRC (FLD (f_rn
), opval
);
4384 written
|= (1 << 2);
4385 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4391 abuf
->written
= written
;
4396 CASE (sem
, INSN_SHLL_COMPACT
) : /* shll $rn */
4398 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4399 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4400 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4401 int UNUSED written
= 0;
4402 IADDR UNUSED pc
= abuf
->addr
;
4403 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4407 tmp_t
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4409 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 1);
4410 SET_H_GRC (FLD (f_rn
), opval
);
4411 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4414 BI opval
= ((tmp_t
) ? (1) : (0));
4416 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4424 CASE (sem
, INSN_SHLL2_COMPACT
) : /* shll2 $rn */
4426 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4427 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4428 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4429 int UNUSED written
= 0;
4430 IADDR UNUSED pc
= abuf
->addr
;
4431 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4434 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 2);
4435 SET_H_GRC (FLD (f_rn
), opval
);
4436 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4443 CASE (sem
, INSN_SHLL8_COMPACT
) : /* shll8 $rn */
4445 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4446 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4447 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4448 int UNUSED written
= 0;
4449 IADDR UNUSED pc
= abuf
->addr
;
4450 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4453 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 8);
4454 SET_H_GRC (FLD (f_rn
), opval
);
4455 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4462 CASE (sem
, INSN_SHLL16_COMPACT
) : /* shll16 $rn */
4464 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4465 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4466 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4467 int UNUSED written
= 0;
4468 IADDR UNUSED pc
= abuf
->addr
;
4469 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4472 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 16);
4473 SET_H_GRC (FLD (f_rn
), opval
);
4474 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4481 CASE (sem
, INSN_SHLR_COMPACT
) : /* shlr $rn */
4483 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4484 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4485 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4486 int UNUSED written
= 0;
4487 IADDR UNUSED pc
= abuf
->addr
;
4488 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4492 tmp_t
= ANDSI (GET_H_GRC (FLD (f_rn
)), 1);
4494 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 1);
4495 SET_H_GRC (FLD (f_rn
), opval
);
4496 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4499 BI opval
= ((tmp_t
) ? (1) : (0));
4501 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4509 CASE (sem
, INSN_SHLR2_COMPACT
) : /* shlr2 $rn */
4511 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4512 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4513 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4514 int UNUSED written
= 0;
4515 IADDR UNUSED pc
= abuf
->addr
;
4516 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4519 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 2);
4520 SET_H_GRC (FLD (f_rn
), opval
);
4521 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4528 CASE (sem
, INSN_SHLR8_COMPACT
) : /* shlr8 $rn */
4530 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4531 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4532 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4533 int UNUSED written
= 0;
4534 IADDR UNUSED pc
= abuf
->addr
;
4535 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4538 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 8);
4539 SET_H_GRC (FLD (f_rn
), opval
);
4540 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4547 CASE (sem
, INSN_SHLR16_COMPACT
) : /* shlr16 $rn */
4549 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4550 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4551 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4552 int UNUSED written
= 0;
4553 IADDR UNUSED pc
= abuf
->addr
;
4554 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4557 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 16);
4558 SET_H_GRC (FLD (f_rn
), opval
);
4559 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4566 CASE (sem
, INSN_STC_GBR_COMPACT
) : /* stc gbr, $rn */
4568 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4569 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4570 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4571 int UNUSED written
= 0;
4572 IADDR UNUSED pc
= abuf
->addr
;
4573 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4576 SI opval
= GET_H_GBR ();
4577 SET_H_GRC (FLD (f_rn
), opval
);
4578 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4585 CASE (sem
, INSN_STC_VBR_COMPACT
) : /* stc vbr, $rn */
4587 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4588 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4589 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4590 int UNUSED written
= 0;
4591 IADDR UNUSED pc
= abuf
->addr
;
4592 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4595 SI opval
= GET_H_VBR ();
4596 SET_H_GRC (FLD (f_rn
), opval
);
4597 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4604 CASE (sem
, INSN_STCL_GBR_COMPACT
) : /* stc.l gbr, @-$rn */
4606 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4607 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4608 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4609 int UNUSED written
= 0;
4610 IADDR UNUSED pc
= abuf
->addr
;
4611 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4615 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4617 SI opval
= GET_H_GBR ();
4618 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4619 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4622 SI opval
= tmp_addr
;
4623 SET_H_GRC (FLD (f_rn
), opval
);
4624 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4632 CASE (sem
, INSN_STCL_VBR_COMPACT
) : /* stc.l vbr, @-$rn */
4634 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4636 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4637 int UNUSED written
= 0;
4638 IADDR UNUSED pc
= abuf
->addr
;
4639 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4643 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4645 SI opval
= GET_H_VBR ();
4646 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4647 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4650 SI opval
= tmp_addr
;
4651 SET_H_GRC (FLD (f_rn
), opval
);
4652 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4660 CASE (sem
, INSN_STS_FPSCR_COMPACT
) : /* sts fpscr, $rn */
4662 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4663 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4664 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4665 int UNUSED written
= 0;
4666 IADDR UNUSED pc
= abuf
->addr
;
4667 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4670 SI opval
= CPU (h_fpscr
);
4671 SET_H_GRC (FLD (f_rn
), opval
);
4672 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4679 CASE (sem
, INSN_STSL_FPSCR_COMPACT
) : /* sts.l fpscr, @-$rn */
4681 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4682 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4683 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4684 int UNUSED written
= 0;
4685 IADDR UNUSED pc
= abuf
->addr
;
4686 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4690 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4692 SI opval
= CPU (h_fpscr
);
4693 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4694 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4697 SI opval
= tmp_addr
;
4698 SET_H_GRC (FLD (f_rn
), opval
);
4699 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4707 CASE (sem
, INSN_STS_FPUL_COMPACT
) : /* sts fpul, $rn */
4709 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4710 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4711 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4712 int UNUSED written
= 0;
4713 IADDR UNUSED pc
= abuf
->addr
;
4714 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4717 SI opval
= SUBWORDSFSI (CPU (h_fr
[((UINT
) 32)]));
4718 SET_H_GRC (FLD (f_rn
), opval
);
4719 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4726 CASE (sem
, INSN_STSL_FPUL_COMPACT
) : /* sts.l fpul, @-$rn */
4728 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4729 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4730 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4731 int UNUSED written
= 0;
4732 IADDR UNUSED pc
= abuf
->addr
;
4733 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4737 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4739 SF opval
= CPU (h_fr
[((UINT
) 32)]);
4740 SETMEMSF (current_cpu
, pc
, tmp_addr
, opval
);
4741 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
4744 SI opval
= tmp_addr
;
4745 SET_H_GRC (FLD (f_rn
), opval
);
4746 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4754 CASE (sem
, INSN_STS_MACH_COMPACT
) : /* sts mach, $rn */
4756 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4757 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4758 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4759 int UNUSED written
= 0;
4760 IADDR UNUSED pc
= abuf
->addr
;
4761 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4764 SI opval
= GET_H_MACH ();
4765 SET_H_GRC (FLD (f_rn
), opval
);
4766 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4773 CASE (sem
, INSN_STSL_MACH_COMPACT
) : /* sts.l mach, @-$rn */
4775 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4777 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4778 int UNUSED written
= 0;
4779 IADDR UNUSED pc
= abuf
->addr
;
4780 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4784 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4786 SI opval
= GET_H_MACH ();
4787 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4788 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4791 SI opval
= tmp_addr
;
4792 SET_H_GRC (FLD (f_rn
), opval
);
4793 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4801 CASE (sem
, INSN_STS_MACL_COMPACT
) : /* sts macl, $rn */
4803 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4804 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4805 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4806 int UNUSED written
= 0;
4807 IADDR UNUSED pc
= abuf
->addr
;
4808 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4811 SI opval
= GET_H_MACL ();
4812 SET_H_GRC (FLD (f_rn
), opval
);
4813 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4820 CASE (sem
, INSN_STSL_MACL_COMPACT
) : /* sts.l macl, @-$rn */
4822 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4823 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4824 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4825 int UNUSED written
= 0;
4826 IADDR UNUSED pc
= abuf
->addr
;
4827 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4831 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4833 SI opval
= GET_H_MACL ();
4834 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4835 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4838 SI opval
= tmp_addr
;
4839 SET_H_GRC (FLD (f_rn
), opval
);
4840 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4848 CASE (sem
, INSN_STS_PR_COMPACT
) : /* sts pr, $rn */
4850 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4851 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4852 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4853 int UNUSED written
= 0;
4854 IADDR UNUSED pc
= abuf
->addr
;
4855 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4858 SI opval
= GET_H_PR ();
4859 SET_H_GRC (FLD (f_rn
), opval
);
4860 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4867 CASE (sem
, INSN_STSL_PR_COMPACT
) : /* sts.l pr, @-$rn */
4869 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4870 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4871 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4872 int UNUSED written
= 0;
4873 IADDR UNUSED pc
= abuf
->addr
;
4874 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4878 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4880 SI opval
= GET_H_PR ();
4881 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4882 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4885 SI opval
= tmp_addr
;
4886 SET_H_GRC (FLD (f_rn
), opval
);
4887 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4895 CASE (sem
, INSN_SUB_COMPACT
) : /* sub $rm, $rn */
4897 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4899 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4900 int UNUSED written
= 0;
4901 IADDR UNUSED pc
= abuf
->addr
;
4902 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4905 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
4906 SET_H_GRC (FLD (f_rn
), opval
);
4907 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4914 CASE (sem
, INSN_SUBC_COMPACT
) : /* subc $rm, $rn */
4916 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4917 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4918 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4919 int UNUSED written
= 0;
4920 IADDR UNUSED pc
= abuf
->addr
;
4921 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4925 tmp_flag
= SUBCFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
4927 SI opval
= SUBCSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
4928 SET_H_GRC (FLD (f_rn
), opval
);
4929 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4932 BI opval
= tmp_flag
;
4934 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4942 CASE (sem
, INSN_SUBV_COMPACT
) : /* subv $rm, $rn */
4944 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4945 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4946 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4947 int UNUSED written
= 0;
4948 IADDR UNUSED pc
= abuf
->addr
;
4949 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4953 tmp_t
= SUBOFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), 0);
4955 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
4956 SET_H_GRC (FLD (f_rn
), opval
);
4957 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4960 BI opval
= ((tmp_t
) ? (1) : (0));
4962 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4970 CASE (sem
, INSN_SWAPB_COMPACT
) : /* swap.b $rm, $rn */
4972 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4973 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4974 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4975 int UNUSED written
= 0;
4976 IADDR UNUSED pc
= abuf
->addr
;
4977 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4983 tmp_top_half
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 0);
4984 tmp_byte1
= SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 2);
4985 tmp_byte0
= SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3);
4987 SI opval
= ORSI (SLLSI (tmp_top_half
, 16), ORSI (SLLSI (tmp_byte0
, 8), tmp_byte1
));
4988 SET_H_GRC (FLD (f_rn
), opval
);
4989 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4997 CASE (sem
, INSN_SWAPW_COMPACT
) : /* swap.w $rm, $rn */
4999 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5000 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5001 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5002 int UNUSED written
= 0;
5003 IADDR UNUSED pc
= abuf
->addr
;
5004 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5007 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rm
)), 16), SLLSI (GET_H_GRC (FLD (f_rm
)), 16));
5008 SET_H_GRC (FLD (f_rn
), opval
);
5009 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5016 CASE (sem
, INSN_TASB_COMPACT
) : /* tas.b @$rn */
5018 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5019 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5020 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
5021 int UNUSED written
= 0;
5022 IADDR UNUSED pc
= abuf
->addr
;
5023 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5027 tmp_byte
= GETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
5029 BI opval
= ((EQQI (tmp_byte
, 0)) ? (1) : (0));
5031 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5033 tmp_byte
= ORQI (tmp_byte
, 128);
5035 UQI opval
= tmp_byte
;
5036 SETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
5037 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5045 CASE (sem
, INSN_TRAPA_COMPACT
) : /* trapa #$uimm8 */
5047 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5048 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5049 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5050 int UNUSED written
= 0;
5051 IADDR UNUSED pc
= abuf
->addr
;
5052 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5054 sh64_compact_trapa (current_cpu
, FLD (f_imm8
), pc
);
5060 CASE (sem
, INSN_TST_COMPACT
) : /* tst $rm, $rn */
5062 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5063 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5064 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5065 int UNUSED written
= 0;
5066 IADDR UNUSED pc
= abuf
->addr
;
5067 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5070 BI opval
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
))), 0)) ? (1) : (0));
5072 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5079 CASE (sem
, INSN_TSTI_COMPACT
) : /* tst #$uimm8, r0 */
5081 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5082 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5083 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5084 int UNUSED written
= 0;
5085 IADDR UNUSED pc
= abuf
->addr
;
5086 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5089 BI opval
= ((EQSI (ANDSI (GET_H_GRC (((UINT
) 0)), ZEXTSISI (FLD (f_imm8
))), 0)) ? (1) : (0));
5091 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5098 CASE (sem
, INSN_TSTB_COMPACT
) : /* tst.b #$imm8, @(r0, gbr) */
5100 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5101 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5102 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5103 int UNUSED written
= 0;
5104 IADDR UNUSED pc
= abuf
->addr
;
5105 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5109 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
5111 BI opval
= ((EQQI (ANDQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
)), 0)) ? (1) : (0));
5113 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5121 CASE (sem
, INSN_XOR_COMPACT
) : /* xor $rm64, $rn64 */
5123 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5124 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5125 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5126 int UNUSED written
= 0;
5127 IADDR UNUSED pc
= abuf
->addr
;
5128 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5131 DI opval
= XORDI (GET_H_GR (FLD (f_rn
)), GET_H_GR (FLD (f_rm
)));
5132 SET_H_GR (FLD (f_rn
), opval
);
5133 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5140 CASE (sem
, INSN_XORI_COMPACT
) : /* xor #$uimm8, r0 */
5142 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5143 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5144 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5145 int UNUSED written
= 0;
5146 IADDR UNUSED pc
= abuf
->addr
;
5147 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5150 SI opval
= XORSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
5151 SET_H_GRC (((UINT
) 0), opval
);
5152 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5159 CASE (sem
, INSN_XORB_COMPACT
) : /* xor.b #$imm8, @(r0, gbr) */
5161 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5162 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5163 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5164 int UNUSED written
= 0;
5165 IADDR UNUSED pc
= abuf
->addr
;
5166 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5171 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
5172 tmp_data
= XORQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
5174 UQI opval
= tmp_data
;
5175 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5176 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5184 CASE (sem
, INSN_XTRCT_COMPACT
) : /* xtrct $rm, $rn */
5186 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
5187 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5188 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5189 int UNUSED written
= 0;
5190 IADDR UNUSED pc
= abuf
->addr
;
5191 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5194 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rm
)), 16), SRLSI (GET_H_GRC (FLD (f_rn
)), 16));
5195 SET_H_GRC (FLD (f_rn
), opval
);
5196 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5205 ENDSWITCH (sem
) /* End of semantic switch. */
5207 /* At this point `vpc' contains the next insn to execute. */
5210 #undef DEFINE_SWITCH
5211 #endif /* DEFINE_SWITCH */