1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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_DMULSL_COMPACT
, && case_sem_INSN_DMULSL_COMPACT
},
73 { SH64_COMPACT_INSN_DMULUL_COMPACT
, && case_sem_INSN_DMULUL_COMPACT
},
74 { SH64_COMPACT_INSN_DT_COMPACT
, && case_sem_INSN_DT_COMPACT
},
75 { SH64_COMPACT_INSN_EXTSB_COMPACT
, && case_sem_INSN_EXTSB_COMPACT
},
76 { SH64_COMPACT_INSN_EXTSW_COMPACT
, && case_sem_INSN_EXTSW_COMPACT
},
77 { SH64_COMPACT_INSN_EXTUB_COMPACT
, && case_sem_INSN_EXTUB_COMPACT
},
78 { SH64_COMPACT_INSN_EXTUW_COMPACT
, && case_sem_INSN_EXTUW_COMPACT
},
79 { SH64_COMPACT_INSN_FABS_COMPACT
, && case_sem_INSN_FABS_COMPACT
},
80 { SH64_COMPACT_INSN_FADD_COMPACT
, && case_sem_INSN_FADD_COMPACT
},
81 { SH64_COMPACT_INSN_FCMPEQ_COMPACT
, && case_sem_INSN_FCMPEQ_COMPACT
},
82 { SH64_COMPACT_INSN_FCMPGT_COMPACT
, && case_sem_INSN_FCMPGT_COMPACT
},
83 { SH64_COMPACT_INSN_FCNVDS_COMPACT
, && case_sem_INSN_FCNVDS_COMPACT
},
84 { SH64_COMPACT_INSN_FCNVSD_COMPACT
, && case_sem_INSN_FCNVSD_COMPACT
},
85 { SH64_COMPACT_INSN_FDIV_COMPACT
, && case_sem_INSN_FDIV_COMPACT
},
86 { SH64_COMPACT_INSN_FIPR_COMPACT
, && case_sem_INSN_FIPR_COMPACT
},
87 { SH64_COMPACT_INSN_FLDS_COMPACT
, && case_sem_INSN_FLDS_COMPACT
},
88 { SH64_COMPACT_INSN_FLDI0_COMPACT
, && case_sem_INSN_FLDI0_COMPACT
},
89 { SH64_COMPACT_INSN_FLDI1_COMPACT
, && case_sem_INSN_FLDI1_COMPACT
},
90 { SH64_COMPACT_INSN_FLOAT_COMPACT
, && case_sem_INSN_FLOAT_COMPACT
},
91 { SH64_COMPACT_INSN_FMAC_COMPACT
, && case_sem_INSN_FMAC_COMPACT
},
92 { SH64_COMPACT_INSN_FMOV1_COMPACT
, && case_sem_INSN_FMOV1_COMPACT
},
93 { SH64_COMPACT_INSN_FMOV2_COMPACT
, && case_sem_INSN_FMOV2_COMPACT
},
94 { SH64_COMPACT_INSN_FMOV3_COMPACT
, && case_sem_INSN_FMOV3_COMPACT
},
95 { SH64_COMPACT_INSN_FMOV4_COMPACT
, && case_sem_INSN_FMOV4_COMPACT
},
96 { SH64_COMPACT_INSN_FMOV5_COMPACT
, && case_sem_INSN_FMOV5_COMPACT
},
97 { SH64_COMPACT_INSN_FMOV6_COMPACT
, && case_sem_INSN_FMOV6_COMPACT
},
98 { SH64_COMPACT_INSN_FMOV7_COMPACT
, && case_sem_INSN_FMOV7_COMPACT
},
99 { SH64_COMPACT_INSN_FMUL_COMPACT
, && case_sem_INSN_FMUL_COMPACT
},
100 { SH64_COMPACT_INSN_FNEG_COMPACT
, && case_sem_INSN_FNEG_COMPACT
},
101 { SH64_COMPACT_INSN_FRCHG_COMPACT
, && case_sem_INSN_FRCHG_COMPACT
},
102 { SH64_COMPACT_INSN_FSCHG_COMPACT
, && case_sem_INSN_FSCHG_COMPACT
},
103 { SH64_COMPACT_INSN_FSQRT_COMPACT
, && case_sem_INSN_FSQRT_COMPACT
},
104 { SH64_COMPACT_INSN_FSTS_COMPACT
, && case_sem_INSN_FSTS_COMPACT
},
105 { SH64_COMPACT_INSN_FSUB_COMPACT
, && case_sem_INSN_FSUB_COMPACT
},
106 { SH64_COMPACT_INSN_FTRC_COMPACT
, && case_sem_INSN_FTRC_COMPACT
},
107 { SH64_COMPACT_INSN_FTRV_COMPACT
, && case_sem_INSN_FTRV_COMPACT
},
108 { SH64_COMPACT_INSN_JMP_COMPACT
, && case_sem_INSN_JMP_COMPACT
},
109 { SH64_COMPACT_INSN_JSR_COMPACT
, && case_sem_INSN_JSR_COMPACT
},
110 { SH64_COMPACT_INSN_LDC_COMPACT
, && case_sem_INSN_LDC_COMPACT
},
111 { SH64_COMPACT_INSN_LDCL_COMPACT
, && case_sem_INSN_LDCL_COMPACT
},
112 { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT
, && case_sem_INSN_LDS_FPSCR_COMPACT
},
113 { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT
, && case_sem_INSN_LDSL_FPSCR_COMPACT
},
114 { SH64_COMPACT_INSN_LDS_FPUL_COMPACT
, && case_sem_INSN_LDS_FPUL_COMPACT
},
115 { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT
, && case_sem_INSN_LDSL_FPUL_COMPACT
},
116 { SH64_COMPACT_INSN_LDS_MACH_COMPACT
, && case_sem_INSN_LDS_MACH_COMPACT
},
117 { SH64_COMPACT_INSN_LDSL_MACH_COMPACT
, && case_sem_INSN_LDSL_MACH_COMPACT
},
118 { SH64_COMPACT_INSN_LDS_MACL_COMPACT
, && case_sem_INSN_LDS_MACL_COMPACT
},
119 { SH64_COMPACT_INSN_LDSL_MACL_COMPACT
, && case_sem_INSN_LDSL_MACL_COMPACT
},
120 { SH64_COMPACT_INSN_LDS_PR_COMPACT
, && case_sem_INSN_LDS_PR_COMPACT
},
121 { SH64_COMPACT_INSN_LDSL_PR_COMPACT
, && case_sem_INSN_LDSL_PR_COMPACT
},
122 { SH64_COMPACT_INSN_MACL_COMPACT
, && case_sem_INSN_MACL_COMPACT
},
123 { SH64_COMPACT_INSN_MACW_COMPACT
, && case_sem_INSN_MACW_COMPACT
},
124 { SH64_COMPACT_INSN_MOV_COMPACT
, && case_sem_INSN_MOV_COMPACT
},
125 { SH64_COMPACT_INSN_MOVI_COMPACT
, && case_sem_INSN_MOVI_COMPACT
},
126 { SH64_COMPACT_INSN_MOVB1_COMPACT
, && case_sem_INSN_MOVB1_COMPACT
},
127 { SH64_COMPACT_INSN_MOVB2_COMPACT
, && case_sem_INSN_MOVB2_COMPACT
},
128 { SH64_COMPACT_INSN_MOVB3_COMPACT
, && case_sem_INSN_MOVB3_COMPACT
},
129 { SH64_COMPACT_INSN_MOVB4_COMPACT
, && case_sem_INSN_MOVB4_COMPACT
},
130 { SH64_COMPACT_INSN_MOVB5_COMPACT
, && case_sem_INSN_MOVB5_COMPACT
},
131 { SH64_COMPACT_INSN_MOVB6_COMPACT
, && case_sem_INSN_MOVB6_COMPACT
},
132 { SH64_COMPACT_INSN_MOVB7_COMPACT
, && case_sem_INSN_MOVB7_COMPACT
},
133 { SH64_COMPACT_INSN_MOVB8_COMPACT
, && case_sem_INSN_MOVB8_COMPACT
},
134 { SH64_COMPACT_INSN_MOVB9_COMPACT
, && case_sem_INSN_MOVB9_COMPACT
},
135 { SH64_COMPACT_INSN_MOVB10_COMPACT
, && case_sem_INSN_MOVB10_COMPACT
},
136 { SH64_COMPACT_INSN_MOVL1_COMPACT
, && case_sem_INSN_MOVL1_COMPACT
},
137 { SH64_COMPACT_INSN_MOVL2_COMPACT
, && case_sem_INSN_MOVL2_COMPACT
},
138 { SH64_COMPACT_INSN_MOVL3_COMPACT
, && case_sem_INSN_MOVL3_COMPACT
},
139 { SH64_COMPACT_INSN_MOVL4_COMPACT
, && case_sem_INSN_MOVL4_COMPACT
},
140 { SH64_COMPACT_INSN_MOVL5_COMPACT
, && case_sem_INSN_MOVL5_COMPACT
},
141 { SH64_COMPACT_INSN_MOVL6_COMPACT
, && case_sem_INSN_MOVL6_COMPACT
},
142 { SH64_COMPACT_INSN_MOVL7_COMPACT
, && case_sem_INSN_MOVL7_COMPACT
},
143 { SH64_COMPACT_INSN_MOVL8_COMPACT
, && case_sem_INSN_MOVL8_COMPACT
},
144 { SH64_COMPACT_INSN_MOVL9_COMPACT
, && case_sem_INSN_MOVL9_COMPACT
},
145 { SH64_COMPACT_INSN_MOVL10_COMPACT
, && case_sem_INSN_MOVL10_COMPACT
},
146 { SH64_COMPACT_INSN_MOVL11_COMPACT
, && case_sem_INSN_MOVL11_COMPACT
},
147 { SH64_COMPACT_INSN_MOVW1_COMPACT
, && case_sem_INSN_MOVW1_COMPACT
},
148 { SH64_COMPACT_INSN_MOVW2_COMPACT
, && case_sem_INSN_MOVW2_COMPACT
},
149 { SH64_COMPACT_INSN_MOVW3_COMPACT
, && case_sem_INSN_MOVW3_COMPACT
},
150 { SH64_COMPACT_INSN_MOVW4_COMPACT
, && case_sem_INSN_MOVW4_COMPACT
},
151 { SH64_COMPACT_INSN_MOVW5_COMPACT
, && case_sem_INSN_MOVW5_COMPACT
},
152 { SH64_COMPACT_INSN_MOVW6_COMPACT
, && case_sem_INSN_MOVW6_COMPACT
},
153 { SH64_COMPACT_INSN_MOVW7_COMPACT
, && case_sem_INSN_MOVW7_COMPACT
},
154 { SH64_COMPACT_INSN_MOVW8_COMPACT
, && case_sem_INSN_MOVW8_COMPACT
},
155 { SH64_COMPACT_INSN_MOVW9_COMPACT
, && case_sem_INSN_MOVW9_COMPACT
},
156 { SH64_COMPACT_INSN_MOVW10_COMPACT
, && case_sem_INSN_MOVW10_COMPACT
},
157 { SH64_COMPACT_INSN_MOVW11_COMPACT
, && case_sem_INSN_MOVW11_COMPACT
},
158 { SH64_COMPACT_INSN_MOVA_COMPACT
, && case_sem_INSN_MOVA_COMPACT
},
159 { SH64_COMPACT_INSN_MOVCAL_COMPACT
, && case_sem_INSN_MOVCAL_COMPACT
},
160 { SH64_COMPACT_INSN_MOVT_COMPACT
, && case_sem_INSN_MOVT_COMPACT
},
161 { SH64_COMPACT_INSN_MULL_COMPACT
, && case_sem_INSN_MULL_COMPACT
},
162 { SH64_COMPACT_INSN_MULSW_COMPACT
, && case_sem_INSN_MULSW_COMPACT
},
163 { SH64_COMPACT_INSN_MULUW_COMPACT
, && case_sem_INSN_MULUW_COMPACT
},
164 { SH64_COMPACT_INSN_NEG_COMPACT
, && case_sem_INSN_NEG_COMPACT
},
165 { SH64_COMPACT_INSN_NEGC_COMPACT
, && case_sem_INSN_NEGC_COMPACT
},
166 { SH64_COMPACT_INSN_NOP_COMPACT
, && case_sem_INSN_NOP_COMPACT
},
167 { SH64_COMPACT_INSN_NOT_COMPACT
, && case_sem_INSN_NOT_COMPACT
},
168 { SH64_COMPACT_INSN_OCBI_COMPACT
, && case_sem_INSN_OCBI_COMPACT
},
169 { SH64_COMPACT_INSN_OCBP_COMPACT
, && case_sem_INSN_OCBP_COMPACT
},
170 { SH64_COMPACT_INSN_OCBWB_COMPACT
, && case_sem_INSN_OCBWB_COMPACT
},
171 { SH64_COMPACT_INSN_OR_COMPACT
, && case_sem_INSN_OR_COMPACT
},
172 { SH64_COMPACT_INSN_ORI_COMPACT
, && case_sem_INSN_ORI_COMPACT
},
173 { SH64_COMPACT_INSN_ORB_COMPACT
, && case_sem_INSN_ORB_COMPACT
},
174 { SH64_COMPACT_INSN_PREF_COMPACT
, && case_sem_INSN_PREF_COMPACT
},
175 { SH64_COMPACT_INSN_ROTCL_COMPACT
, && case_sem_INSN_ROTCL_COMPACT
},
176 { SH64_COMPACT_INSN_ROTCR_COMPACT
, && case_sem_INSN_ROTCR_COMPACT
},
177 { SH64_COMPACT_INSN_ROTL_COMPACT
, && case_sem_INSN_ROTL_COMPACT
},
178 { SH64_COMPACT_INSN_ROTR_COMPACT
, && case_sem_INSN_ROTR_COMPACT
},
179 { SH64_COMPACT_INSN_RTS_COMPACT
, && case_sem_INSN_RTS_COMPACT
},
180 { SH64_COMPACT_INSN_SETS_COMPACT
, && case_sem_INSN_SETS_COMPACT
},
181 { SH64_COMPACT_INSN_SETT_COMPACT
, && case_sem_INSN_SETT_COMPACT
},
182 { SH64_COMPACT_INSN_SHAD_COMPACT
, && case_sem_INSN_SHAD_COMPACT
},
183 { SH64_COMPACT_INSN_SHAL_COMPACT
, && case_sem_INSN_SHAL_COMPACT
},
184 { SH64_COMPACT_INSN_SHAR_COMPACT
, && case_sem_INSN_SHAR_COMPACT
},
185 { SH64_COMPACT_INSN_SHLD_COMPACT
, && case_sem_INSN_SHLD_COMPACT
},
186 { SH64_COMPACT_INSN_SHLL_COMPACT
, && case_sem_INSN_SHLL_COMPACT
},
187 { SH64_COMPACT_INSN_SHLL2_COMPACT
, && case_sem_INSN_SHLL2_COMPACT
},
188 { SH64_COMPACT_INSN_SHLL8_COMPACT
, && case_sem_INSN_SHLL8_COMPACT
},
189 { SH64_COMPACT_INSN_SHLL16_COMPACT
, && case_sem_INSN_SHLL16_COMPACT
},
190 { SH64_COMPACT_INSN_SHLR_COMPACT
, && case_sem_INSN_SHLR_COMPACT
},
191 { SH64_COMPACT_INSN_SHLR2_COMPACT
, && case_sem_INSN_SHLR2_COMPACT
},
192 { SH64_COMPACT_INSN_SHLR8_COMPACT
, && case_sem_INSN_SHLR8_COMPACT
},
193 { SH64_COMPACT_INSN_SHLR16_COMPACT
, && case_sem_INSN_SHLR16_COMPACT
},
194 { SH64_COMPACT_INSN_STC_GBR_COMPACT
, && case_sem_INSN_STC_GBR_COMPACT
},
195 { SH64_COMPACT_INSN_STCL_GBR_COMPACT
, && case_sem_INSN_STCL_GBR_COMPACT
},
196 { SH64_COMPACT_INSN_STS_FPSCR_COMPACT
, && case_sem_INSN_STS_FPSCR_COMPACT
},
197 { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT
, && case_sem_INSN_STSL_FPSCR_COMPACT
},
198 { SH64_COMPACT_INSN_STS_FPUL_COMPACT
, && case_sem_INSN_STS_FPUL_COMPACT
},
199 { SH64_COMPACT_INSN_STSL_FPUL_COMPACT
, && case_sem_INSN_STSL_FPUL_COMPACT
},
200 { SH64_COMPACT_INSN_STS_MACH_COMPACT
, && case_sem_INSN_STS_MACH_COMPACT
},
201 { SH64_COMPACT_INSN_STSL_MACH_COMPACT
, && case_sem_INSN_STSL_MACH_COMPACT
},
202 { SH64_COMPACT_INSN_STS_MACL_COMPACT
, && case_sem_INSN_STS_MACL_COMPACT
},
203 { SH64_COMPACT_INSN_STSL_MACL_COMPACT
, && case_sem_INSN_STSL_MACL_COMPACT
},
204 { SH64_COMPACT_INSN_STS_PR_COMPACT
, && case_sem_INSN_STS_PR_COMPACT
},
205 { SH64_COMPACT_INSN_STSL_PR_COMPACT
, && case_sem_INSN_STSL_PR_COMPACT
},
206 { SH64_COMPACT_INSN_SUB_COMPACT
, && case_sem_INSN_SUB_COMPACT
},
207 { SH64_COMPACT_INSN_SUBC_COMPACT
, && case_sem_INSN_SUBC_COMPACT
},
208 { SH64_COMPACT_INSN_SUBV_COMPACT
, && case_sem_INSN_SUBV_COMPACT
},
209 { SH64_COMPACT_INSN_SWAPB_COMPACT
, && case_sem_INSN_SWAPB_COMPACT
},
210 { SH64_COMPACT_INSN_SWAPW_COMPACT
, && case_sem_INSN_SWAPW_COMPACT
},
211 { SH64_COMPACT_INSN_TASB_COMPACT
, && case_sem_INSN_TASB_COMPACT
},
212 { SH64_COMPACT_INSN_TRAPA_COMPACT
, && case_sem_INSN_TRAPA_COMPACT
},
213 { SH64_COMPACT_INSN_TST_COMPACT
, && case_sem_INSN_TST_COMPACT
},
214 { SH64_COMPACT_INSN_TSTI_COMPACT
, && case_sem_INSN_TSTI_COMPACT
},
215 { SH64_COMPACT_INSN_TSTB_COMPACT
, && case_sem_INSN_TSTB_COMPACT
},
216 { SH64_COMPACT_INSN_XOR_COMPACT
, && case_sem_INSN_XOR_COMPACT
},
217 { SH64_COMPACT_INSN_XORI_COMPACT
, && case_sem_INSN_XORI_COMPACT
},
218 { SH64_COMPACT_INSN_XORB_COMPACT
, && case_sem_INSN_XORB_COMPACT
},
219 { SH64_COMPACT_INSN_XTRCT_COMPACT
, && case_sem_INSN_XTRCT_COMPACT
},
224 for (i
= 0; labels
[i
].label
!= 0; ++i
)
227 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
229 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
234 #endif /* DEFINE_LABELS */
238 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
239 off frills like tracing and profiling. */
240 /* FIXME: A better way would be to have TRACE_RESULT check for something
241 that can cause it to be optimized out. Another way would be to emit
242 special handlers into the instruction "stream". */
246 #define TRACE_RESULT(cpu, abuf, name, type, val)
250 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
251 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
253 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
260 /* Branch to next handler without going around main loop. */
261 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
262 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
264 #else /* ! WITH_SCACHE_PBB */
266 #define NEXT(vpc) BREAK (sem)
269 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
271 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
274 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
277 #endif /* ! WITH_SCACHE_PBB */
281 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
283 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
284 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
285 #define FLD(f) abuf->fields.fmt_empty.f
286 int UNUSED written
= 0;
287 IADDR UNUSED pc
= abuf
->addr
;
288 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
291 /* Update the recorded pc in the cpu state struct.
292 Only necessary for WITH_SCACHE case, but to avoid the
293 conditional compilation .... */
295 /* Virtual insns have zero size. Overwrite vpc with address of next insn
296 using the default-insn-bitsize spec. When executing insns in parallel
297 we may want to queue the fault and continue execution. */
298 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
299 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
306 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
308 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
309 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
310 #define FLD(f) abuf->fields.fmt_empty.f
311 int UNUSED written
= 0;
312 IADDR UNUSED pc
= abuf
->addr
;
313 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
316 #if WITH_SCACHE_PBB_SH64_COMPACT
317 sh64_compact_pbb_after (current_cpu
, sem_arg
);
325 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
327 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
328 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
329 #define FLD(f) abuf->fields.fmt_empty.f
330 int UNUSED written
= 0;
331 IADDR UNUSED pc
= abuf
->addr
;
332 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
335 #if WITH_SCACHE_PBB_SH64_COMPACT
336 sh64_compact_pbb_before (current_cpu
, sem_arg
);
344 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
346 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
347 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
348 #define FLD(f) abuf->fields.fmt_empty.f
349 int UNUSED written
= 0;
350 IADDR UNUSED pc
= abuf
->addr
;
351 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
354 #if WITH_SCACHE_PBB_SH64_COMPACT
356 vpc
= sh64_compact_pbb_cti_chain (current_cpu
, sem_arg
,
357 pbb_br_type
, pbb_br_npc
);
360 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
361 vpc
= sh64_compact_pbb_cti_chain (current_cpu
, sem_arg
,
362 CPU_PBB_BR_TYPE (current_cpu
),
363 CPU_PBB_BR_NPC (current_cpu
));
372 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
374 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
375 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
376 #define FLD(f) abuf->fields.fmt_empty.f
377 int UNUSED written
= 0;
378 IADDR UNUSED pc
= abuf
->addr
;
379 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
382 #if WITH_SCACHE_PBB_SH64_COMPACT
383 vpc
= sh64_compact_pbb_chain (current_cpu
, sem_arg
);
394 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
396 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
397 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
398 #define FLD(f) abuf->fields.fmt_empty.f
399 int UNUSED written
= 0;
400 IADDR UNUSED pc
= abuf
->addr
;
401 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
404 #if WITH_SCACHE_PBB_SH64_COMPACT
405 #if defined DEFINE_SWITCH || defined FAST_P
406 /* In the switch case FAST_P is a constant, allowing several optimizations
407 in any called inline functions. */
408 vpc
= sh64_compact_pbb_begin (current_cpu
, FAST_P
);
410 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
411 vpc
= sh64_compact_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
413 vpc
= sh64_compact_pbb_begin (current_cpu
, 0);
423 CASE (sem
, INSN_ADD_COMPACT
) : /* add $rm, $rn */
425 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
426 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
427 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
428 int UNUSED written
= 0;
429 IADDR UNUSED pc
= abuf
->addr
;
430 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
433 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
434 SET_H_GRC (FLD (f_rn
), opval
);
435 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
442 CASE (sem
, INSN_ADDI_COMPACT
) : /* add #$imm8, $rn */
444 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
445 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
446 #define FLD(f) abuf->fields.sfmt_addi_compact.f
447 int UNUSED written
= 0;
448 IADDR UNUSED pc
= abuf
->addr
;
449 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
452 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), EXTQISI (ANDQI (FLD (f_imm8
), 255)));
453 SET_H_GRC (FLD (f_rn
), opval
);
454 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
461 CASE (sem
, INSN_ADDC_COMPACT
) : /* addc $rm, $rn */
463 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
464 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
465 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
466 int UNUSED written
= 0;
467 IADDR UNUSED pc
= abuf
->addr
;
468 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
472 tmp_flag
= ADDCFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
474 SI opval
= ADDCSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
475 SET_H_GRC (FLD (f_rn
), opval
);
476 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
481 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
489 CASE (sem
, INSN_ADDV_COMPACT
) : /* addv $rm, $rn */
491 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
492 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
493 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
494 int UNUSED written
= 0;
495 IADDR UNUSED pc
= abuf
->addr
;
496 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
500 tmp_t
= ADDOFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), 0);
502 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
503 SET_H_GRC (FLD (f_rn
), opval
);
504 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
509 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
517 CASE (sem
, INSN_AND_COMPACT
) : /* and $rm64, $rn64 */
519 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
520 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
521 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
522 int UNUSED written
= 0;
523 IADDR UNUSED pc
= abuf
->addr
;
524 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
527 DI opval
= ANDDI (GET_H_GR (FLD (f_rm
)), GET_H_GR (FLD (f_rn
)));
528 SET_H_GR (FLD (f_rn
), opval
);
529 TRACE_RESULT (current_cpu
, abuf
, "rn64", 'D', opval
);
536 CASE (sem
, INSN_ANDI_COMPACT
) : /* and #$uimm8, r0 */
538 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
539 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
540 #define FLD(f) abuf->fields.sfmt_addi_compact.f
541 int UNUSED written
= 0;
542 IADDR UNUSED pc
= abuf
->addr
;
543 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
546 SI opval
= ANDSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
547 SET_H_GRC (((UINT
) 0), opval
);
548 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
555 CASE (sem
, INSN_ANDB_COMPACT
) : /* and.b #$imm8, @(r0, gbr) */
557 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
558 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
559 #define FLD(f) abuf->fields.sfmt_addi_compact.f
560 int UNUSED written
= 0;
561 IADDR UNUSED pc
= abuf
->addr
;
562 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
567 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
568 tmp_data
= ANDQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
570 UQI opval
= tmp_data
;
571 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
572 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
580 CASE (sem
, INSN_BF_COMPACT
) : /* bf $disp8 */
582 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
583 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
584 #define FLD(f) abuf->fields.sfmt_bf_compact.f
585 int UNUSED written
= 0;
586 IADDR UNUSED pc
= abuf
->addr
;
588 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
590 if (NOTBI (GET_H_TBIT ())) {
592 UDI opval
= FLD (i_disp8
);
593 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
595 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
599 abuf
->written
= written
;
600 SEM_BRANCH_FINI (vpc
);
605 CASE (sem
, INSN_BFS_COMPACT
) : /* bf/s $disp8 */
607 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
608 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
609 #define FLD(f) abuf->fields.sfmt_bf_compact.f
610 int UNUSED written
= 0;
611 IADDR UNUSED pc
= abuf
->addr
;
613 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
615 if (NOTBI (GET_H_TBIT ())) {
618 UDI opval
= FLD (i_disp8
);
619 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
621 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
626 abuf
->written
= written
;
627 SEM_BRANCH_FINI (vpc
);
632 CASE (sem
, INSN_BRA_COMPACT
) : /* bra $disp12 */
634 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
636 #define FLD(f) abuf->fields.sfmt_bra_compact.f
637 int UNUSED written
= 0;
638 IADDR UNUSED pc
= abuf
->addr
;
640 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
644 UDI opval
= FLD (i_disp12
);
645 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
646 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
650 SEM_BRANCH_FINI (vpc
);
655 CASE (sem
, INSN_BRAF_COMPACT
) : /* braf $rn */
657 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
658 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
659 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
660 int UNUSED written
= 0;
661 IADDR UNUSED pc
= abuf
->addr
;
663 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
667 UDI opval
= ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn
))), ADDDI (pc
, 4));
668 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
669 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
673 SEM_BRANCH_FINI (vpc
);
678 CASE (sem
, INSN_BRK_COMPACT
) : /* brk */
680 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
681 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
682 #define FLD(f) abuf->fields.fmt_empty.f
683 int UNUSED written
= 0;
684 IADDR UNUSED pc
= abuf
->addr
;
685 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
687 sh64_break (current_cpu
, pc
);
693 CASE (sem
, INSN_BSR_COMPACT
) : /* bsr $disp12 */
695 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
696 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
697 #define FLD(f) abuf->fields.sfmt_bra_compact.f
698 int UNUSED written
= 0;
699 IADDR UNUSED pc
= abuf
->addr
;
701 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
706 SI opval
= ADDDI (pc
, 4);
708 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
711 UDI opval
= FLD (i_disp12
);
712 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
713 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
718 SEM_BRANCH_FINI (vpc
);
723 CASE (sem
, INSN_BSRF_COMPACT
) : /* bsrf $rn */
725 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
726 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
727 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
728 int UNUSED written
= 0;
729 IADDR UNUSED pc
= abuf
->addr
;
731 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
736 SI opval
= ADDDI (pc
, 4);
738 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
741 UDI opval
= ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn
))), ADDDI (pc
, 4));
742 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
743 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
748 SEM_BRANCH_FINI (vpc
);
753 CASE (sem
, INSN_BT_COMPACT
) : /* bt $disp8 */
755 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
756 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
757 #define FLD(f) abuf->fields.sfmt_bf_compact.f
758 int UNUSED written
= 0;
759 IADDR UNUSED pc
= abuf
->addr
;
761 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
765 UDI opval
= FLD (i_disp8
);
766 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
768 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
772 abuf
->written
= written
;
773 SEM_BRANCH_FINI (vpc
);
778 CASE (sem
, INSN_BTS_COMPACT
) : /* bt/s $disp8 */
780 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
781 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
782 #define FLD(f) abuf->fields.sfmt_bf_compact.f
783 int UNUSED written
= 0;
784 IADDR UNUSED pc
= abuf
->addr
;
786 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
791 UDI opval
= FLD (i_disp8
);
792 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
794 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
799 abuf
->written
= written
;
800 SEM_BRANCH_FINI (vpc
);
805 CASE (sem
, INSN_CLRMAC_COMPACT
) : /* clrmac */
807 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
808 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
809 #define FLD(f) abuf->fields.fmt_empty.f
810 int UNUSED written
= 0;
811 IADDR UNUSED pc
= abuf
->addr
;
812 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
818 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
823 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
831 CASE (sem
, INSN_CLRS_COMPACT
) : /* clrs */
833 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
834 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
835 #define FLD(f) abuf->fields.fmt_empty.f
836 int UNUSED written
= 0;
837 IADDR UNUSED pc
= abuf
->addr
;
838 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
843 TRACE_RESULT (current_cpu
, abuf
, "sbit", 'x', opval
);
850 CASE (sem
, INSN_CLRT_COMPACT
) : /* clrt */
852 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
853 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
854 #define FLD(f) abuf->fields.fmt_empty.f
855 int UNUSED written
= 0;
856 IADDR UNUSED pc
= abuf
->addr
;
857 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
862 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
869 CASE (sem
, INSN_CMPEQ_COMPACT
) : /* cmp/eq $rm, $rn */
871 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
872 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
873 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
874 int UNUSED written
= 0;
875 IADDR UNUSED pc
= abuf
->addr
;
876 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
879 BI opval
= EQSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
881 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
888 CASE (sem
, INSN_CMPEQI_COMPACT
) : /* cmp/eq #$imm8, r0 */
890 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
891 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
892 #define FLD(f) abuf->fields.sfmt_addi_compact.f
893 int UNUSED written
= 0;
894 IADDR UNUSED pc
= abuf
->addr
;
895 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
898 BI opval
= EQSI (GET_H_GRC (((UINT
) 0)), EXTQISI (ANDQI (FLD (f_imm8
), 255)));
900 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
907 CASE (sem
, INSN_CMPGE_COMPACT
) : /* cmp/ge $rm, $rn */
909 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
910 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
911 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
912 int UNUSED written
= 0;
913 IADDR UNUSED pc
= abuf
->addr
;
914 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
917 BI opval
= GESI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
919 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
926 CASE (sem
, INSN_CMPGT_COMPACT
) : /* cmp/gt $rm, $rn */
928 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
930 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
931 int UNUSED written
= 0;
932 IADDR UNUSED pc
= abuf
->addr
;
933 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
936 BI opval
= GTSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
938 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
945 CASE (sem
, INSN_CMPHI_COMPACT
) : /* cmp/hi $rm, $rn */
947 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
948 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
949 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
950 int UNUSED written
= 0;
951 IADDR UNUSED pc
= abuf
->addr
;
952 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
955 BI opval
= GTUSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
957 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
964 CASE (sem
, INSN_CMPHS_COMPACT
) : /* cmp/hs $rm, $rn */
966 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
968 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
969 int UNUSED written
= 0;
970 IADDR UNUSED pc
= abuf
->addr
;
971 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
974 BI opval
= GEUSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
976 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
983 CASE (sem
, INSN_CMPPL_COMPACT
) : /* cmp/pl $rn */
985 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
986 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
987 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
988 int UNUSED written
= 0;
989 IADDR UNUSED pc
= abuf
->addr
;
990 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
993 BI opval
= GTSI (GET_H_GRC (FLD (f_rn
)), 0);
995 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1002 CASE (sem
, INSN_CMPPZ_COMPACT
) : /* cmp/pz $rn */
1004 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1005 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1006 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1007 int UNUSED written
= 0;
1008 IADDR UNUSED pc
= abuf
->addr
;
1009 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1012 BI opval
= GESI (GET_H_GRC (FLD (f_rn
)), 0);
1014 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1021 CASE (sem
, INSN_CMPSTR_COMPACT
) : /* cmp/str $rm, $rn */
1023 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1024 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1025 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1026 int UNUSED written
= 0;
1027 IADDR UNUSED pc
= abuf
->addr
;
1028 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1033 tmp_temp
= XORSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
1034 tmp_t
= EQSI (ANDSI (tmp_temp
, 0xff000000), 0);
1035 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 16711680), 0), tmp_t
);
1036 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 65280), 0), tmp_t
);
1037 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 255), 0), tmp_t
);
1039 BI opval
= ((GTUBI (tmp_t
, 0)) ? (1) : (0));
1041 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1049 CASE (sem
, INSN_DIV0S_COMPACT
) : /* div0s $rm, $rn */
1051 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1052 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1053 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1054 int UNUSED written
= 0;
1055 IADDR UNUSED pc
= abuf
->addr
;
1056 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1060 BI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
1062 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1065 BI opval
= SRLSI (GET_H_GRC (FLD (f_rm
)), 31);
1067 TRACE_RESULT (current_cpu
, abuf
, "mbit", 'x', opval
);
1070 BI opval
= ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm
)), 31), SRLSI (GET_H_GRC (FLD (f_rn
)), 31))) ? (0) : (1));
1072 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1080 CASE (sem
, INSN_DIV0U_COMPACT
) : /* div0u */
1082 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1084 #define FLD(f) abuf->fields.fmt_empty.f
1085 int UNUSED written
= 0;
1086 IADDR UNUSED pc
= abuf
->addr
;
1087 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1093 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1098 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1103 TRACE_RESULT (current_cpu
, abuf
, "mbit", 'x', opval
);
1111 CASE (sem
, INSN_DIV1_COMPACT
) : /* div1 $rm, $rn */
1113 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1114 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1115 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1116 int UNUSED written
= 0;
1117 IADDR UNUSED pc
= abuf
->addr
;
1118 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1124 tmp_oldq
= GET_H_QBIT ();
1126 BI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
1128 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1131 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), ZEXTBISI (GET_H_TBIT ()));
1132 SET_H_GRC (FLD (f_rn
), opval
);
1133 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1135 if (NOTBI (tmp_oldq
)) {
1136 if (NOTBI (GET_H_MBIT ())) {
1138 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1140 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1141 SET_H_GRC (FLD (f_rn
), opval
);
1142 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1144 tmp_tmp1
= GTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1145 if (NOTBI (GET_H_QBIT ())) {
1147 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1149 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1153 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1155 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1161 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1163 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1164 SET_H_GRC (FLD (f_rn
), opval
);
1165 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1167 tmp_tmp1
= LTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1168 if (NOTBI (GET_H_QBIT ())) {
1170 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1172 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1176 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1178 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1184 if (NOTBI (GET_H_MBIT ())) {
1186 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1188 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
1189 SET_H_GRC (FLD (f_rn
), opval
);
1190 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1192 tmp_tmp1
= LTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1193 if (NOTBI (GET_H_QBIT ())) {
1195 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1197 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1201 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1203 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1209 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1211 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1212 SET_H_GRC (FLD (f_rn
), opval
);
1213 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1215 tmp_tmp1
= GTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1216 if (NOTBI (GET_H_QBIT ())) {
1218 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1220 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1224 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1226 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1233 BI opval
= ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1235 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1243 CASE (sem
, INSN_DMULSL_COMPACT
) : /* dmuls.l $rm, $rn */
1245 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1246 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1247 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1248 int UNUSED written
= 0;
1249 IADDR UNUSED pc
= abuf
->addr
;
1250 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1254 tmp_result
= MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm
))), EXTSIDI (GET_H_GRC (FLD (f_rn
))));
1256 SI opval
= SUBWORDDISI (tmp_result
, 0);
1258 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
1261 SI opval
= SUBWORDDISI (tmp_result
, 1);
1263 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
1271 CASE (sem
, INSN_DMULUL_COMPACT
) : /* dmulu.l $rm, $rn */
1273 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1274 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1275 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1276 int UNUSED written
= 0;
1277 IADDR UNUSED pc
= abuf
->addr
;
1278 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1282 tmp_result
= MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm
))), ZEXTSIDI (GET_H_GRC (FLD (f_rn
))));
1284 SI opval
= SUBWORDDISI (tmp_result
, 0);
1286 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
1289 SI opval
= SUBWORDDISI (tmp_result
, 1);
1291 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
1299 CASE (sem
, INSN_DT_COMPACT
) : /* dt $rn */
1301 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1302 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1303 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1304 int UNUSED written
= 0;
1305 IADDR UNUSED pc
= abuf
->addr
;
1306 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1310 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 1);
1311 SET_H_GRC (FLD (f_rn
), opval
);
1312 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1315 BI opval
= EQSI (GET_H_GRC (FLD (f_rn
)), 0);
1317 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1325 CASE (sem
, INSN_EXTSB_COMPACT
) : /* exts.b $rm, $rn */
1327 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1328 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1329 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1330 int UNUSED written
= 0;
1331 IADDR UNUSED pc
= abuf
->addr
;
1332 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1335 SI opval
= EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3));
1336 SET_H_GRC (FLD (f_rn
), opval
);
1337 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1344 CASE (sem
, INSN_EXTSW_COMPACT
) : /* exts.w $rm, $rn */
1346 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1347 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1348 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1349 int UNUSED written
= 0;
1350 IADDR UNUSED pc
= abuf
->addr
;
1351 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1354 SI opval
= EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1));
1355 SET_H_GRC (FLD (f_rn
), opval
);
1356 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1363 CASE (sem
, INSN_EXTUB_COMPACT
) : /* extu.b $rm, $rn */
1365 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1366 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1367 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1368 int UNUSED written
= 0;
1369 IADDR UNUSED pc
= abuf
->addr
;
1370 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1373 SI opval
= ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3));
1374 SET_H_GRC (FLD (f_rn
), opval
);
1375 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1382 CASE (sem
, INSN_EXTUW_COMPACT
) : /* extu.w $rm, $rn */
1384 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1385 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1386 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1387 int UNUSED written
= 0;
1388 IADDR UNUSED pc
= abuf
->addr
;
1389 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1392 SI opval
= ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1));
1393 SET_H_GRC (FLD (f_rn
), opval
);
1394 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1401 CASE (sem
, INSN_FABS_COMPACT
) : /* fabs $fsdn */
1403 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1404 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1405 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1406 int UNUSED written
= 0;
1407 IADDR UNUSED pc
= abuf
->addr
;
1408 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1410 if (GET_H_PRBIT ()) {
1412 DF opval
= sh64_fabsd (current_cpu
, GET_H_DR (FLD (f_rn
)));
1413 SET_H_DR (FLD (f_rn
), opval
);
1414 written
|= (1 << 5);
1415 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
1419 SF opval
= sh64_fabss (current_cpu
, GET_H_FRC (FLD (f_rn
)));
1420 SET_H_FRC (FLD (f_rn
), opval
);
1421 written
|= (1 << 4);
1422 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
1426 abuf
->written
= written
;
1431 CASE (sem
, INSN_FADD_COMPACT
) : /* fadd $fsdm, $fsdn */
1433 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1434 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1435 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1436 int UNUSED written
= 0;
1437 IADDR UNUSED pc
= abuf
->addr
;
1438 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1440 if (GET_H_PRBIT ()) {
1442 DF opval
= sh64_faddd (current_cpu
, GET_H_DR (FLD (f_rm
)), GET_H_DR (FLD (f_rn
)));
1443 SET_H_DR (FLD (f_rn
), opval
);
1444 written
|= (1 << 8);
1445 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
1449 SF opval
= sh64_fadds (current_cpu
, GET_H_FRC (FLD (f_rm
)), GET_H_FRC (FLD (f_rn
)));
1450 SET_H_FRC (FLD (f_rn
), opval
);
1451 written
|= (1 << 7);
1452 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
1456 abuf
->written
= written
;
1461 CASE (sem
, INSN_FCMPEQ_COMPACT
) : /* fcmp/eq $fsdm, $fsdn */
1463 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1464 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1465 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1466 int UNUSED written
= 0;
1467 IADDR UNUSED pc
= abuf
->addr
;
1468 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1470 if (GET_H_PRBIT ()) {
1472 BI opval
= sh64_fcmpeqd (current_cpu
, GET_H_DR (FLD (f_rm
)), GET_H_DR (FLD (f_rn
)));
1474 written
|= (1 << 7);
1475 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1479 BI opval
= sh64_fcmpeqs (current_cpu
, GET_H_FRC (FLD (f_rm
)), GET_H_FRC (FLD (f_rn
)));
1481 written
|= (1 << 7);
1482 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1486 abuf
->written
= written
;
1491 CASE (sem
, INSN_FCMPGT_COMPACT
) : /* fcmp/gt $fsdm, $fsdn */
1493 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1494 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1495 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1496 int UNUSED written
= 0;
1497 IADDR UNUSED pc
= abuf
->addr
;
1498 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1500 if (GET_H_PRBIT ()) {
1502 BI opval
= sh64_fcmpgtd (current_cpu
, GET_H_DR (FLD (f_rn
)), GET_H_DR (FLD (f_rm
)));
1504 written
|= (1 << 7);
1505 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1509 BI opval
= sh64_fcmpgts (current_cpu
, GET_H_FRC (FLD (f_rn
)), GET_H_FRC (FLD (f_rm
)));
1511 written
|= (1 << 7);
1512 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1516 abuf
->written
= written
;
1521 CASE (sem
, INSN_FCNVDS_COMPACT
) : /* fcnvds $drn, fpul */
1523 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1524 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1525 #define FLD(f) abuf->fields.sfmt_fcnvds_compact.f
1526 int UNUSED written
= 0;
1527 IADDR UNUSED pc
= abuf
->addr
;
1528 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1531 SF opval
= sh64_fcnvds (current_cpu
, GET_H_DRC (FLD (f_dn
)));
1532 CPU (h_fr
[((UINT
) 32)]) = opval
;
1533 TRACE_RESULT (current_cpu
, abuf
, "fpul", 'f', opval
);
1540 CASE (sem
, INSN_FCNVSD_COMPACT
) : /* fcnvsd fpul, $drn */
1542 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1543 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1544 #define FLD(f) abuf->fields.sfmt_fcnvds_compact.f
1545 int UNUSED written
= 0;
1546 IADDR UNUSED pc
= abuf
->addr
;
1547 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1550 DF opval
= sh64_fcnvsd (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1551 SET_H_DRC (FLD (f_dn
), opval
);
1552 TRACE_RESULT (current_cpu
, abuf
, "drn", 'f', opval
);
1559 CASE (sem
, INSN_FDIV_COMPACT
) : /* fdiv $fsdm, $fsdn */
1561 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1562 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1563 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1564 int UNUSED written
= 0;
1565 IADDR UNUSED pc
= abuf
->addr
;
1566 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1568 if (GET_H_PRBIT ()) {
1570 DF opval
= sh64_fdivd (current_cpu
, GET_H_DR (FLD (f_rn
)), GET_H_DR (FLD (f_rm
)));
1571 SET_H_DR (FLD (f_rn
), opval
);
1572 written
|= (1 << 8);
1573 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
1577 SF opval
= sh64_fdivs (current_cpu
, GET_H_FRC (FLD (f_rn
)), GET_H_FRC (FLD (f_rm
)));
1578 SET_H_FRC (FLD (f_rn
), opval
);
1579 written
|= (1 << 7);
1580 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
1584 abuf
->written
= written
;
1589 CASE (sem
, INSN_FIPR_COMPACT
) : /* fipr $fvm, $fvn */
1591 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1592 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1593 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
1594 int UNUSED written
= 0;
1595 IADDR UNUSED pc
= abuf
->addr
;
1596 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1604 tmp_res
= sh64_fmuls (current_cpu
, GET_H_FVC (FLD (f_vm
)), GET_H_FVC (FLD (f_vn
)));
1605 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_FRC (ADDQI (tmp_m
, 1)), GET_H_FRC (ADDQI (tmp_n
, 1))));
1606 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_FRC (ADDQI (tmp_m
, 2)), GET_H_FRC (ADDQI (tmp_n
, 2))));
1607 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_FRC (ADDQI (tmp_m
, 3)), GET_H_FRC (ADDQI (tmp_n
, 3))));
1610 SET_H_FRC (ADDQI (tmp_n
, 3), opval
);
1611 TRACE_RESULT (current_cpu
, abuf
, "frc-add--DFLT-n-3", 'f', opval
);
1619 CASE (sem
, INSN_FLDS_COMPACT
) : /* flds $frn */
1621 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1622 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1623 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1624 int UNUSED written
= 0;
1625 IADDR UNUSED pc
= abuf
->addr
;
1626 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1629 SF opval
= GET_H_FRC (FLD (f_rn
));
1630 CPU (h_fr
[((UINT
) 32)]) = opval
;
1631 TRACE_RESULT (current_cpu
, abuf
, "fpul", 'f', opval
);
1638 CASE (sem
, INSN_FLDI0_COMPACT
) : /* fldi0 $frn */
1640 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1641 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1642 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1643 int UNUSED written
= 0;
1644 IADDR UNUSED pc
= abuf
->addr
;
1645 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1648 SF opval
= sh64_fldi0 (current_cpu
);
1649 SET_H_FRC (FLD (f_rn
), opval
);
1650 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1657 CASE (sem
, INSN_FLDI1_COMPACT
) : /* fldi1 $frn */
1659 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1660 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1661 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1662 int UNUSED written
= 0;
1663 IADDR UNUSED pc
= abuf
->addr
;
1664 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1667 SF opval
= sh64_fldi1 (current_cpu
);
1668 SET_H_FRC (FLD (f_rn
), opval
);
1669 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1676 CASE (sem
, INSN_FLOAT_COMPACT
) : /* float fpul, $fsdn */
1678 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1679 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1680 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1681 int UNUSED written
= 0;
1682 IADDR UNUSED pc
= abuf
->addr
;
1683 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1685 if (GET_H_PRBIT ()) {
1687 DF opval
= sh64_floatld (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1688 SET_H_DR (FLD (f_rn
), opval
);
1689 written
|= (1 << 4);
1690 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
1694 SF opval
= sh64_floatls (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1695 SET_H_FRC (FLD (f_rn
), opval
);
1696 written
|= (1 << 3);
1697 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
1701 abuf
->written
= written
;
1706 CASE (sem
, INSN_FMAC_COMPACT
) : /* fmac fr0, $frm, $frn */
1708 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1709 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1710 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1711 int UNUSED written
= 0;
1712 IADDR UNUSED pc
= abuf
->addr
;
1713 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1716 SF opval
= sh64_fmacs (current_cpu
, GET_H_FRC (((UINT
) 0)), GET_H_FRC (FLD (f_rm
)), GET_H_FRC (FLD (f_rn
)));
1717 SET_H_FRC (FLD (f_rn
), opval
);
1718 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1725 CASE (sem
, INSN_FMOV1_COMPACT
) : /* fmov $frm, $frn */
1727 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1728 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1729 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1730 int UNUSED written
= 0;
1731 IADDR UNUSED pc
= abuf
->addr
;
1732 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1734 if (NOTBI (GET_H_SZBIT ())) {
1736 SF opval
= GET_H_FRC (FLD (f_rm
));
1737 SET_H_FRC (FLD (f_rn
), opval
);
1738 written
|= (1 << 6);
1739 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1742 if (EQSI (ANDSI (FLD (f_rm
), 1), 1)) {
1743 if (EQSI (ANDSI (FLD (f_rn
), 1), 1)) {
1745 DF opval
= GET_H_XD (((FLD (f_rm
)) & (INVQI (1))));
1746 SET_H_XD (((FLD (f_rn
)) & (INVQI (1))), opval
);
1747 written
|= (1 << 8);
1748 TRACE_RESULT (current_cpu
, abuf
, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval
);
1752 DF opval
= GET_H_XD (((FLD (f_rm
)) & (INVQI (1))));
1753 SET_H_DR (FLD (f_rn
), opval
);
1754 written
|= (1 << 7);
1755 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-frn", 'f', opval
);
1759 if (EQSI (ANDSI (FLD (f_rn
), 1), 1)) {
1761 DF opval
= GET_H_DR (FLD (f_rm
));
1762 SET_H_XD (((FLD (f_rn
)) & (INVQI (1))), opval
);
1763 written
|= (1 << 8);
1764 TRACE_RESULT (current_cpu
, abuf
, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval
);
1768 DF opval
= GET_H_DR (FLD (f_rm
));
1769 SET_H_DR (FLD (f_rn
), opval
);
1770 written
|= (1 << 7);
1771 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-frn", 'f', opval
);
1777 abuf
->written
= written
;
1782 CASE (sem
, INSN_FMOV2_COMPACT
) : /* fmov @$rm, $frn */
1784 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1785 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1786 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1787 int UNUSED written
= 0;
1788 IADDR UNUSED pc
= abuf
->addr
;
1789 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1791 if (NOTBI (GET_H_SZBIT ())) {
1793 SF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1794 SET_H_FRC (FLD (f_rn
), opval
);
1795 written
|= (1 << 5);
1796 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1799 if (EQSI (ANDSI (FLD (f_rn
), 1), 1)) {
1801 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1802 SET_H_XD (((FLD (f_rn
)) & (INVQI (1))), opval
);
1803 written
|= (1 << 7);
1804 TRACE_RESULT (current_cpu
, abuf
, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval
);
1808 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1809 SET_H_DR (FLD (f_rn
), opval
);
1810 written
|= (1 << 6);
1811 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-frn", 'f', opval
);
1816 abuf
->written
= written
;
1821 CASE (sem
, INSN_FMOV3_COMPACT
) : /* fmov @${rm}+, frn */
1823 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1824 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1825 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1826 int UNUSED written
= 0;
1827 IADDR UNUSED pc
= abuf
->addr
;
1828 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1830 if (NOTBI (GET_H_SZBIT ())) {
1833 SF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1834 SET_H_FRC (FLD (f_rn
), opval
);
1835 written
|= (1 << 5);
1836 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1839 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
1840 SET_H_GRC (FLD (f_rm
), opval
);
1841 written
|= (1 << 8);
1842 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
1847 if (EQSI (ANDSI (FLD (f_rn
), 1), 1)) {
1849 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1850 SET_H_XD (((FLD (f_rn
)) & (INVQI (1))), opval
);
1851 written
|= (1 << 7);
1852 TRACE_RESULT (current_cpu
, abuf
, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval
);
1856 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1857 SET_H_DR (FLD (f_rn
), opval
);
1858 written
|= (1 << 6);
1859 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-frn", 'f', opval
);
1863 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 8);
1864 SET_H_GRC (FLD (f_rm
), opval
);
1865 written
|= (1 << 8);
1866 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
1871 abuf
->written
= written
;
1876 CASE (sem
, INSN_FMOV4_COMPACT
) : /* fmov @(r0, $rm), $frn */
1878 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1879 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1880 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1881 int UNUSED written
= 0;
1882 IADDR UNUSED pc
= abuf
->addr
;
1883 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1885 if (NOTBI (GET_H_SZBIT ())) {
1887 SF opval
= GETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1888 SET_H_FRC (FLD (f_rn
), opval
);
1889 written
|= (1 << 6);
1890 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
1893 if (EQSI (ANDSI (FLD (f_rn
), 1), 1)) {
1895 DF opval
= GETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1896 SET_H_XD (((FLD (f_rn
)) & (INVQI (1))), opval
);
1897 written
|= (1 << 8);
1898 TRACE_RESULT (current_cpu
, abuf
, "xd-and--DFLT-index-of--DFLT-frn-inv--QI-1", 'f', opval
);
1902 DF opval
= GETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1903 SET_H_DR (FLD (f_rn
), opval
);
1904 written
|= (1 << 7);
1905 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-frn", 'f', opval
);
1910 abuf
->written
= written
;
1915 CASE (sem
, INSN_FMOV5_COMPACT
) : /* fmov $frm, @$rn */
1917 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1918 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1919 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1920 int UNUSED written
= 0;
1921 IADDR UNUSED pc
= abuf
->addr
;
1922 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1924 if (NOTBI (GET_H_SZBIT ())) {
1926 SF opval
= GET_H_FRC (FLD (f_rm
));
1927 SETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1928 written
|= (1 << 6);
1929 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1932 if (EQSI (ANDSI (FLD (f_rm
), 1), 1)) {
1934 DF opval
= GET_H_XD (((FLD (f_rm
)) & (INVQI (1))));
1935 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1936 written
|= (1 << 7);
1937 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1941 DF opval
= GET_H_DR (FLD (f_rm
));
1942 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1943 written
|= (1 << 7);
1944 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1949 abuf
->written
= written
;
1954 CASE (sem
, INSN_FMOV6_COMPACT
) : /* fmov $frm, @-$rn */
1956 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1957 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1958 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
1959 int UNUSED written
= 0;
1960 IADDR UNUSED pc
= abuf
->addr
;
1961 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1963 if (NOTBI (GET_H_SZBIT ())) {
1966 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
1967 SET_H_GRC (FLD (f_rn
), opval
);
1968 written
|= (1 << 8);
1969 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1972 SF opval
= GET_H_FRC (FLD (f_rm
));
1973 SETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1974 written
|= (1 << 6);
1975 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1981 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 8);
1982 SET_H_GRC (FLD (f_rn
), opval
);
1983 written
|= (1 << 8);
1984 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
1986 if (EQSI (ANDSI (FLD (f_rm
), 1), 1)) {
1988 DF opval
= GET_H_XD (((FLD (f_rm
)) & (INVQI (1))));
1989 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1990 written
|= (1 << 7);
1991 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1995 DF opval
= GET_H_DR (FLD (f_rm
));
1996 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1997 written
|= (1 << 7);
1998 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2004 abuf
->written
= written
;
2009 CASE (sem
, INSN_FMOV7_COMPACT
) : /* fmov $frm, @(r0, $rn) */
2011 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2012 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2013 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2014 int UNUSED written
= 0;
2015 IADDR UNUSED pc
= abuf
->addr
;
2016 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2018 if (NOTBI (GET_H_SZBIT ())) {
2020 SF opval
= GET_H_FRC (FLD (f_rm
));
2021 SETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2022 written
|= (1 << 7);
2023 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2026 if (EQSI (ANDSI (FLD (f_rm
), 1), 1)) {
2028 DF opval
= GET_H_XD (((FLD (f_rm
)) & (INVQI (1))));
2029 SETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2030 written
|= (1 << 8);
2031 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2035 DF opval
= GET_H_DR (FLD (f_rm
));
2036 SETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2037 written
|= (1 << 8);
2038 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
2043 abuf
->written
= written
;
2048 CASE (sem
, INSN_FMUL_COMPACT
) : /* fmul $fsdm, $fsdn */
2050 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2051 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2052 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2053 int UNUSED written
= 0;
2054 IADDR UNUSED pc
= abuf
->addr
;
2055 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2057 if (GET_H_PRBIT ()) {
2059 DF opval
= sh64_fmuld (current_cpu
, GET_H_DR (FLD (f_rm
)), GET_H_DR (FLD (f_rn
)));
2060 SET_H_DR (FLD (f_rn
), opval
);
2061 written
|= (1 << 8);
2062 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
2066 SF opval
= sh64_fmuls (current_cpu
, GET_H_FRC (FLD (f_rm
)), GET_H_FRC (FLD (f_rn
)));
2067 SET_H_FRC (FLD (f_rn
), opval
);
2068 written
|= (1 << 7);
2069 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
2073 abuf
->written
= written
;
2078 CASE (sem
, INSN_FNEG_COMPACT
) : /* fneg $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_movw10_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_fnegd (current_cpu
, GET_H_DR (FLD (f_rn
)));
2090 SET_H_DR (FLD (f_rn
), opval
);
2091 written
|= (1 << 5);
2092 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
2096 SF opval
= sh64_fnegs (current_cpu
, GET_H_FRC (FLD (f_rn
)));
2097 SET_H_FRC (FLD (f_rn
), opval
);
2098 written
|= (1 << 4);
2099 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
2103 abuf
->written
= written
;
2108 CASE (sem
, INSN_FRCHG_COMPACT
) : /* frchg */
2110 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2111 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2112 #define FLD(f) abuf->fields.fmt_empty.f
2113 int UNUSED written
= 0;
2114 IADDR UNUSED pc
= abuf
->addr
;
2115 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2118 BI opval
= NOTBI (GET_H_FRBIT ());
2119 SET_H_FRBIT (opval
);
2120 TRACE_RESULT (current_cpu
, abuf
, "frbit", 'x', opval
);
2127 CASE (sem
, INSN_FSCHG_COMPACT
) : /* fschg */
2129 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2130 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2131 #define FLD(f) abuf->fields.fmt_empty.f
2132 int UNUSED written
= 0;
2133 IADDR UNUSED pc
= abuf
->addr
;
2134 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2137 BI opval
= NOTBI (GET_H_SZBIT ());
2138 SET_H_SZBIT (opval
);
2139 TRACE_RESULT (current_cpu
, abuf
, "szbit", 'x', opval
);
2146 CASE (sem
, INSN_FSQRT_COMPACT
) : /* fsqrt $fsdn */
2148 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2149 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2150 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2151 int UNUSED written
= 0;
2152 IADDR UNUSED pc
= abuf
->addr
;
2153 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2155 if (GET_H_PRBIT ()) {
2157 DF opval
= sh64_fsqrtd (current_cpu
, GET_H_DR (FLD (f_rn
)));
2158 SET_H_DR (FLD (f_rn
), opval
);
2159 written
|= (1 << 5);
2160 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
2164 SF opval
= sh64_fsqrts (current_cpu
, GET_H_FRC (FLD (f_rn
)));
2165 SET_H_FRC (FLD (f_rn
), opval
);
2166 written
|= (1 << 4);
2167 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
2171 abuf
->written
= written
;
2176 CASE (sem
, INSN_FSTS_COMPACT
) : /* fsts fpul, $frn */
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);
2186 SF opval
= CPU (h_fr
[((UINT
) 32)]);
2187 SET_H_FRC (FLD (f_rn
), opval
);
2188 TRACE_RESULT (current_cpu
, abuf
, "frn", 'f', opval
);
2195 CASE (sem
, INSN_FSUB_COMPACT
) : /* fsub $fsdm, $fsdn */
2197 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2198 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2199 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2200 int UNUSED written
= 0;
2201 IADDR UNUSED pc
= abuf
->addr
;
2202 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2204 if (GET_H_PRBIT ()) {
2206 DF opval
= sh64_fsubd (current_cpu
, GET_H_DR (FLD (f_rn
)), GET_H_DR (FLD (f_rm
)));
2207 SET_H_DR (FLD (f_rn
), opval
);
2208 written
|= (1 << 8);
2209 TRACE_RESULT (current_cpu
, abuf
, "dr-index-of--DFLT-fsdn", 'f', opval
);
2213 SF opval
= sh64_fsubs (current_cpu
, GET_H_FRC (FLD (f_rn
)), GET_H_FRC (FLD (f_rm
)));
2214 SET_H_FRC (FLD (f_rn
), opval
);
2215 written
|= (1 << 7);
2216 TRACE_RESULT (current_cpu
, abuf
, "fsdn", 'f', opval
);
2220 abuf
->written
= written
;
2225 CASE (sem
, INSN_FTRC_COMPACT
) : /* ftrc $fsdn, fpul */
2227 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2228 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2229 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2230 int UNUSED written
= 0;
2231 IADDR UNUSED pc
= abuf
->addr
;
2232 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2235 SF opval
= ((GET_H_PRBIT ()) ? (sh64_ftrcdl (current_cpu
, GET_H_DR (FLD (f_rn
)))) : (sh64_ftrcsl (current_cpu
, GET_H_FRC (FLD (f_rn
)))));
2236 CPU (h_fr
[((UINT
) 32)]) = opval
;
2237 TRACE_RESULT (current_cpu
, abuf
, "fpul", 'f', opval
);
2244 CASE (sem
, INSN_FTRV_COMPACT
) : /* ftrv xmtrx, $fvn */
2246 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2247 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2248 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
2249 int UNUSED written
= 0;
2250 IADDR UNUSED pc
= abuf
->addr
;
2251 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2257 tmp_res
= sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 0)), GET_H_FRC (tmp_n
));
2258 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 4)), GET_H_FRC (ADDQI (tmp_n
, 1))));
2259 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 8)), GET_H_FRC (ADDQI (tmp_n
, 2))));
2260 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 12)), GET_H_FRC (ADDQI (tmp_n
, 3))));
2263 SET_H_FRC (tmp_n
, opval
);
2264 TRACE_RESULT (current_cpu
, abuf
, "frc-n", 'f', opval
);
2266 tmp_res
= sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 1)), GET_H_FRC (tmp_n
));
2267 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 5)), GET_H_FRC (ADDQI (tmp_n
, 1))));
2268 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 9)), GET_H_FRC (ADDQI (tmp_n
, 2))));
2269 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 13)), GET_H_FRC (ADDQI (tmp_n
, 3))));
2272 SET_H_FRC (ADDQI (tmp_n
, 1), opval
);
2273 TRACE_RESULT (current_cpu
, abuf
, "frc-add--DFLT-n-1", 'f', opval
);
2275 tmp_res
= sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 2)), GET_H_FRC (tmp_n
));
2276 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 6)), GET_H_FRC (ADDQI (tmp_n
, 1))));
2277 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 10)), GET_H_FRC (ADDQI (tmp_n
, 2))));
2278 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 14)), GET_H_FRC (ADDQI (tmp_n
, 3))));
2281 SET_H_FRC (ADDQI (tmp_n
, 2), opval
);
2282 TRACE_RESULT (current_cpu
, abuf
, "frc-add--DFLT-n-2", 'f', opval
);
2284 tmp_res
= sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 3)), GET_H_FRC (tmp_n
));
2285 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 7)), GET_H_FRC (ADDQI (tmp_n
, 1))));
2286 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 11)), GET_H_FRC (ADDQI (tmp_n
, 2))));
2287 tmp_res
= sh64_fadds (current_cpu
, tmp_res
, sh64_fmuls (current_cpu
, GET_H_XF (((UINT
) 15)), GET_H_FRC (ADDQI (tmp_n
, 3))));
2290 SET_H_FRC (ADDQI (tmp_n
, 3), opval
);
2291 TRACE_RESULT (current_cpu
, abuf
, "frc-add--DFLT-n-3", 'f', opval
);
2299 CASE (sem
, INSN_JMP_COMPACT
) : /* jmp @$rn */
2301 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2302 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2303 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2304 int UNUSED written
= 0;
2305 IADDR UNUSED pc
= abuf
->addr
;
2307 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2311 UDI opval
= GET_H_GRC (FLD (f_rn
));
2312 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2313 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2317 SEM_BRANCH_FINI (vpc
);
2322 CASE (sem
, INSN_JSR_COMPACT
) : /* jsr @$rn */
2324 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2325 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2326 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2327 int UNUSED written
= 0;
2328 IADDR UNUSED pc
= abuf
->addr
;
2330 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2335 SI opval
= ADDDI (pc
, 4);
2337 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2340 UDI opval
= GET_H_GRC (FLD (f_rn
));
2341 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2342 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2347 SEM_BRANCH_FINI (vpc
);
2352 CASE (sem
, INSN_LDC_COMPACT
) : /* ldc $rn, gbr */
2354 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2356 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2357 int UNUSED written
= 0;
2358 IADDR UNUSED pc
= abuf
->addr
;
2359 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2362 SI opval
= GET_H_GRC (FLD (f_rn
));
2364 TRACE_RESULT (current_cpu
, abuf
, "gbr", 'x', opval
);
2371 CASE (sem
, INSN_LDCL_COMPACT
) : /* ldc.l @${rn}+, gbr */
2373 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2375 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2376 int UNUSED written
= 0;
2377 IADDR UNUSED pc
= abuf
->addr
;
2378 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2382 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2384 TRACE_RESULT (current_cpu
, abuf
, "gbr", 'x', opval
);
2387 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2388 SET_H_GRC (FLD (f_rn
), opval
);
2389 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2397 CASE (sem
, INSN_LDS_FPSCR_COMPACT
) : /* lds $rn, fpscr */
2399 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2400 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2401 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2402 int UNUSED written
= 0;
2403 IADDR UNUSED pc
= abuf
->addr
;
2404 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2407 SI opval
= GET_H_GRC (FLD (f_rn
));
2408 SET_H_FPCCR (opval
);
2409 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
2416 CASE (sem
, INSN_LDSL_FPSCR_COMPACT
) : /* lds.l @${rn}+, fpscr */
2418 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2419 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2420 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2421 int UNUSED written
= 0;
2422 IADDR UNUSED pc
= abuf
->addr
;
2423 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2427 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2428 SET_H_FPCCR (opval
);
2429 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
2432 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2433 SET_H_GRC (FLD (f_rn
), opval
);
2434 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2442 CASE (sem
, INSN_LDS_FPUL_COMPACT
) : /* lds $rn, fpul */
2444 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2445 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2446 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2447 int UNUSED written
= 0;
2448 IADDR UNUSED pc
= abuf
->addr
;
2449 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2452 SF opval
= SUBWORDSISF (GET_H_GRC (FLD (f_rn
)));
2453 CPU (h_fr
[((UINT
) 32)]) = opval
;
2454 TRACE_RESULT (current_cpu
, abuf
, "fpul", 'f', opval
);
2461 CASE (sem
, INSN_LDSL_FPUL_COMPACT
) : /* lds.l @${rn}+, fpul */
2463 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2464 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2465 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2466 int UNUSED written
= 0;
2467 IADDR UNUSED pc
= abuf
->addr
;
2468 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2472 SF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2473 CPU (h_fr
[((UINT
) 32)]) = opval
;
2474 TRACE_RESULT (current_cpu
, abuf
, "fpul", 'f', opval
);
2477 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2478 SET_H_GRC (FLD (f_rn
), opval
);
2479 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2487 CASE (sem
, INSN_LDS_MACH_COMPACT
) : /* lds $rn, mach */
2489 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2490 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2491 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2492 int UNUSED written
= 0;
2493 IADDR UNUSED pc
= abuf
->addr
;
2494 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2497 SI opval
= GET_H_GRC (FLD (f_rn
));
2499 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2506 CASE (sem
, INSN_LDSL_MACH_COMPACT
) : /* lds.l @${rn}+, mach */
2508 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2509 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2510 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2511 int UNUSED written
= 0;
2512 IADDR UNUSED pc
= abuf
->addr
;
2513 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2517 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2519 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2522 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2523 SET_H_GRC (FLD (f_rn
), opval
);
2524 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2532 CASE (sem
, INSN_LDS_MACL_COMPACT
) : /* lds $rn, macl */
2534 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2535 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2536 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2537 int UNUSED written
= 0;
2538 IADDR UNUSED pc
= abuf
->addr
;
2539 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2542 SI opval
= GET_H_GRC (FLD (f_rn
));
2544 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2551 CASE (sem
, INSN_LDSL_MACL_COMPACT
) : /* lds.l @${rn}+, macl */
2553 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2554 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2555 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2556 int UNUSED written
= 0;
2557 IADDR UNUSED pc
= abuf
->addr
;
2558 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2562 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2564 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2567 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2568 SET_H_GRC (FLD (f_rn
), opval
);
2569 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2577 CASE (sem
, INSN_LDS_PR_COMPACT
) : /* lds $rn, pr */
2579 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2580 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2581 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2582 int UNUSED written
= 0;
2583 IADDR UNUSED pc
= abuf
->addr
;
2584 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2587 SI opval
= GET_H_GRC (FLD (f_rn
));
2589 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2596 CASE (sem
, INSN_LDSL_PR_COMPACT
) : /* lds.l @${rn}+, pr */
2598 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2599 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2600 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2601 int UNUSED written
= 0;
2602 IADDR UNUSED pc
= abuf
->addr
;
2603 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2607 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2609 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2612 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2613 SET_H_GRC (FLD (f_rn
), opval
);
2614 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2622 CASE (sem
, INSN_MACL_COMPACT
) : /* mac.l @${rm}+, @${rn}+ */
2624 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2625 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2626 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2627 int UNUSED written
= 0;
2628 IADDR UNUSED pc
= abuf
->addr
;
2629 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2637 tmp_x
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
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
, "rn", 'x', opval
);
2643 if (EQSI (FLD (f_rn
), FLD (f_rm
))) {
2646 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2647 SET_H_GRC (FLD (f_rn
), opval
);
2648 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2651 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
2652 SET_H_GRC (FLD (f_rm
), opval
);
2653 written
|= (1 << 11);
2654 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
2658 tmp_y
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2660 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
2661 SET_H_GRC (FLD (f_rm
), opval
);
2662 written
|= (1 << 11);
2663 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
2665 tmp_tmpry
= MULDI (ZEXTSIDI (tmp_x
), ZEXTSIDI (tmp_y
));
2666 tmp_mac
= ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2667 tmp_result
= ADDDI (tmp_mac
, tmp_tmpry
);
2669 if (GET_H_SBIT ()) {
2673 tmp_max
= SRLDI (INVDI (0), 16);
2674 tmp_min
= SRLDI (INVDI (0), 15);
2675 if (GTDI (tmp_result
, tmp_max
)) {
2676 tmp_result
= tmp_max
;
2678 if (LTDI (tmp_result
, tmp_min
)) {
2679 tmp_result
= tmp_min
;
2685 SI opval
= SUBWORDDISI (tmp_result
, 0);
2687 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2690 SI opval
= SUBWORDDISI (tmp_result
, 1);
2692 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2697 abuf
->written
= written
;
2702 CASE (sem
, INSN_MACW_COMPACT
) : /* mac.w @${rm}+, @${rn}+ */
2704 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2705 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2706 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2707 int UNUSED written
= 0;
2708 IADDR UNUSED pc
= abuf
->addr
;
2709 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2717 tmp_x
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2719 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 2);
2720 SET_H_GRC (FLD (f_rn
), opval
);
2721 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2723 if (EQSI (FLD (f_rn
), FLD (f_rm
))) {
2726 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 2);
2727 SET_H_GRC (FLD (f_rn
), opval
);
2728 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2731 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
2732 SET_H_GRC (FLD (f_rm
), opval
);
2733 written
|= (1 << 11);
2734 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
2738 tmp_y
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2740 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
2741 SET_H_GRC (FLD (f_rm
), opval
);
2742 written
|= (1 << 11);
2743 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
2745 tmp_tmpry
= MULSI (ZEXTHISI (tmp_x
), ZEXTHISI (tmp_y
));
2746 if (GET_H_SBIT ()) {
2748 if (ADDOFSI (tmp_tmpry
, GET_H_MACL (), 0)) {
2752 written
|= (1 << 9);
2753 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2757 SI opval
= ADDSI (tmp_tmpry
, GET_H_MACL ());
2759 written
|= (1 << 10);
2760 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2765 tmp_mac
= ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2766 tmp_result
= ADDDI (tmp_mac
, EXTSIDI (tmp_tmpry
));
2768 SI opval
= SUBWORDDISI (tmp_result
, 0);
2770 written
|= (1 << 9);
2771 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2774 SI opval
= SUBWORDDISI (tmp_result
, 1);
2776 written
|= (1 << 10);
2777 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2783 abuf
->written
= written
;
2788 CASE (sem
, INSN_MOV_COMPACT
) : /* mov $rm64, $rn64 */
2790 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2791 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2792 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2793 int UNUSED written
= 0;
2794 IADDR UNUSED pc
= abuf
->addr
;
2795 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2798 DI opval
= GET_H_GR (FLD (f_rm
));
2799 SET_H_GR (FLD (f_rn
), opval
);
2800 TRACE_RESULT (current_cpu
, abuf
, "rn64", 'D', opval
);
2807 CASE (sem
, INSN_MOVI_COMPACT
) : /* mov #$imm8, $rn */
2809 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2810 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2811 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2812 int UNUSED written
= 0;
2813 IADDR UNUSED pc
= abuf
->addr
;
2814 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2817 SI opval
= EXTQIDI (ANDQI (FLD (f_imm8
), 255));
2818 SET_H_GRC (FLD (f_rn
), opval
);
2819 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2826 CASE (sem
, INSN_MOVB1_COMPACT
) : /* mov.b $rm, @$rn */
2828 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2829 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2830 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2831 int UNUSED written
= 0;
2832 IADDR UNUSED pc
= abuf
->addr
;
2833 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2836 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2837 SETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
2838 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2845 CASE (sem
, INSN_MOVB2_COMPACT
) : /* mov.b $rm, @-$rn */
2847 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2849 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2850 int UNUSED written
= 0;
2851 IADDR UNUSED pc
= abuf
->addr
;
2852 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2856 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 1);
2858 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2859 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2860 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2863 SI opval
= tmp_addr
;
2864 SET_H_GRC (FLD (f_rn
), opval
);
2865 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2873 CASE (sem
, INSN_MOVB3_COMPACT
) : /* mov.b $rm, @(r0,$rn) */
2875 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2876 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2877 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2878 int UNUSED written
= 0;
2879 IADDR UNUSED pc
= abuf
->addr
;
2880 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2883 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2884 SETMEMUQI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2885 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2892 CASE (sem
, INSN_MOVB4_COMPACT
) : /* mov.b r0, @($imm8, gbr) */
2894 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2895 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2896 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2897 int UNUSED written
= 0;
2898 IADDR UNUSED pc
= abuf
->addr
;
2899 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2903 tmp_addr
= ADDSI (GET_H_GBR (), FLD (f_imm8
));
2905 UQI opval
= SUBWORDSIUQI (GET_H_GRC (((UINT
) 0)), 3);
2906 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2907 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2915 CASE (sem
, INSN_MOVB5_COMPACT
) : /* mov.b r0, @($imm4, $rm) */
2917 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2918 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2919 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
2920 int UNUSED written
= 0;
2921 IADDR UNUSED pc
= abuf
->addr
;
2922 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2926 tmp_addr
= ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4
));
2928 UQI opval
= SUBWORDSIUQI (GET_H_GRC (((UINT
) 0)), 3);
2929 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2930 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2938 CASE (sem
, INSN_MOVB6_COMPACT
) : /* mov.b @$rm, $rn */
2940 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2941 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2942 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2943 int UNUSED written
= 0;
2944 IADDR UNUSED pc
= abuf
->addr
;
2945 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2948 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
))));
2949 SET_H_GRC (FLD (f_rn
), opval
);
2950 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2957 CASE (sem
, INSN_MOVB7_COMPACT
) : /* mov.b @${rm}+, $rn */
2959 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2960 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2961 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
2962 int UNUSED written
= 0;
2963 IADDR UNUSED pc
= abuf
->addr
;
2964 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2968 tmp_data
= GETMEMQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2969 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
2971 SI opval
= EXTQISI (tmp_data
);
2972 SET_H_GRC (FLD (f_rm
), opval
);
2973 written
|= (1 << 4);
2974 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
2978 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 1);
2979 SET_H_GRC (FLD (f_rm
), opval
);
2980 written
|= (1 << 4);
2981 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
2985 SI opval
= EXTQISI (tmp_data
);
2986 SET_H_GRC (FLD (f_rn
), opval
);
2987 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
2991 abuf
->written
= written
;
2996 CASE (sem
, INSN_MOVB8_COMPACT
) : /* mov.b @(r0, $rm), $rn */
2998 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2999 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3000 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3001 int UNUSED written
= 0;
3002 IADDR UNUSED pc
= abuf
->addr
;
3003 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3006 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
)))));
3007 SET_H_GRC (FLD (f_rn
), opval
);
3008 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3015 CASE (sem
, INSN_MOVB9_COMPACT
) : /* mov.b @($imm8, gbr), r0 */
3017 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3018 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3019 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3020 int UNUSED written
= 0;
3021 IADDR UNUSED pc
= abuf
->addr
;
3022 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3025 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8
))));
3026 SET_H_GRC (((UINT
) 0), opval
);
3027 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3034 CASE (sem
, INSN_MOVB10_COMPACT
) : /* mov.b @($imm4, $rm), r0 */
3036 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3037 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3038 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
3039 int UNUSED written
= 0;
3040 IADDR UNUSED pc
= abuf
->addr
;
3041 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3044 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4
))));
3045 SET_H_GRC (((UINT
) 0), opval
);
3046 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3053 CASE (sem
, INSN_MOVL1_COMPACT
) : /* mov.l $rm, @$rn */
3055 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3056 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3057 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3058 int UNUSED written
= 0;
3059 IADDR UNUSED pc
= abuf
->addr
;
3060 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3063 SI opval
= GET_H_GRC (FLD (f_rm
));
3064 SETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3065 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3072 CASE (sem
, INSN_MOVL2_COMPACT
) : /* mov.l $rm, @-$rn */
3074 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3075 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3076 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3077 int UNUSED written
= 0;
3078 IADDR UNUSED pc
= abuf
->addr
;
3079 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3083 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
3085 SI opval
= GET_H_GRC (FLD (f_rm
));
3086 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
3087 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3090 SI opval
= tmp_addr
;
3091 SET_H_GRC (FLD (f_rn
), opval
);
3092 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3100 CASE (sem
, INSN_MOVL3_COMPACT
) : /* mov.l $rm, @(r0, $rn) */
3102 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3103 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3104 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3105 int UNUSED written
= 0;
3106 IADDR UNUSED pc
= abuf
->addr
;
3107 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3110 SI opval
= GET_H_GRC (FLD (f_rm
));
3111 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
3112 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3119 CASE (sem
, INSN_MOVL4_COMPACT
) : /* mov.l r0, @($imm8x4, gbr) */
3121 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3122 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3123 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3124 int UNUSED written
= 0;
3125 IADDR UNUSED pc
= abuf
->addr
;
3126 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3129 SI opval
= GET_H_GRC (((UINT
) 0));
3130 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x4
)), opval
);
3131 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3138 CASE (sem
, INSN_MOVL5_COMPACT
) : /* mov.l $rm, @($imm4x4, $rn) */
3140 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3141 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3142 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3143 int UNUSED written
= 0;
3144 IADDR UNUSED pc
= abuf
->addr
;
3145 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3148 SI opval
= GET_H_GRC (FLD (f_rm
));
3149 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm4x4
)), opval
);
3150 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3157 CASE (sem
, INSN_MOVL6_COMPACT
) : /* mov.l @$rm, $rn */
3159 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3160 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3161 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3162 int UNUSED written
= 0;
3163 IADDR UNUSED pc
= abuf
->addr
;
3164 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3167 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3168 SET_H_GRC (FLD (f_rn
), opval
);
3169 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3176 CASE (sem
, INSN_MOVL7_COMPACT
) : /* mov.l @${rm}+, $rn */
3178 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3180 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3181 int UNUSED written
= 0;
3182 IADDR UNUSED pc
= abuf
->addr
;
3183 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3187 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3188 SET_H_GRC (FLD (f_rn
), opval
);
3189 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3191 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3193 SI opval
= GET_H_GRC (FLD (f_rn
));
3194 SET_H_GRC (FLD (f_rm
), opval
);
3195 written
|= (1 << 5);
3196 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
3200 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
3201 SET_H_GRC (FLD (f_rm
), opval
);
3202 written
|= (1 << 5);
3203 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
3208 abuf
->written
= written
;
3213 CASE (sem
, INSN_MOVL8_COMPACT
) : /* mov.l @(r0, $rm), $rn */
3215 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3216 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3217 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3218 int UNUSED written
= 0;
3219 IADDR UNUSED pc
= abuf
->addr
;
3220 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3223 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
3224 SET_H_GRC (FLD (f_rn
), opval
);
3225 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3232 CASE (sem
, INSN_MOVL9_COMPACT
) : /* mov.l @($imm8x4, gbr), r0 */
3234 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3235 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3236 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3237 int UNUSED written
= 0;
3238 IADDR UNUSED pc
= abuf
->addr
;
3239 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3242 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x4
)));
3243 SET_H_GRC (((UINT
) 0), opval
);
3244 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3251 CASE (sem
, INSN_MOVL10_COMPACT
) : /* mov.l @($imm8x4, pc), $rn */
3253 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3254 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3255 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3256 int UNUSED written
= 0;
3257 IADDR UNUSED pc
= abuf
->addr
;
3258 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3261 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_imm8x4
), ANDDI (ADDDI (pc
, 4), INVSI (3))));
3262 SET_H_GRC (FLD (f_rn
), opval
);
3263 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3270 CASE (sem
, INSN_MOVL11_COMPACT
) : /* mov.l @($imm4x4, $rm), $rn */
3272 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3274 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3275 int UNUSED written
= 0;
3276 IADDR UNUSED pc
= abuf
->addr
;
3277 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3280 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x4
)));
3281 SET_H_GRC (FLD (f_rn
), opval
);
3282 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3289 CASE (sem
, INSN_MOVW1_COMPACT
) : /* mov.w $rm, @$rn */
3291 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3292 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3293 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3294 int UNUSED written
= 0;
3295 IADDR UNUSED pc
= abuf
->addr
;
3296 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3299 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3300 SETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3301 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3308 CASE (sem
, INSN_MOVW2_COMPACT
) : /* mov.w $rm, @-$rn */
3310 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3311 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3312 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3313 int UNUSED written
= 0;
3314 IADDR UNUSED pc
= abuf
->addr
;
3315 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3319 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 2);
3321 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3322 SETMEMHI (current_cpu
, pc
, tmp_addr
, opval
);
3323 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3326 SI opval
= tmp_addr
;
3327 SET_H_GRC (FLD (f_rn
), opval
);
3328 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3336 CASE (sem
, INSN_MOVW3_COMPACT
) : /* mov.w $rm, @(r0, $rn) */
3338 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3339 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3340 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3341 int UNUSED written
= 0;
3342 IADDR UNUSED pc
= abuf
->addr
;
3343 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3346 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3347 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
3348 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3355 CASE (sem
, INSN_MOVW4_COMPACT
) : /* mov.w r0, @($imm8x2, gbr) */
3357 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3359 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3360 int UNUSED written
= 0;
3361 IADDR UNUSED pc
= abuf
->addr
;
3362 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3365 HI opval
= SUBWORDSIHI (GET_H_GRC (((UINT
) 0)), 1);
3366 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x2
)), opval
);
3367 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3374 CASE (sem
, INSN_MOVW5_COMPACT
) : /* mov.w r0, @($imm4x2, $rn) */
3376 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3377 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3378 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3379 int UNUSED written
= 0;
3380 IADDR UNUSED pc
= abuf
->addr
;
3381 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3384 HI opval
= SUBWORDSIHI (GET_H_GRC (((UINT
) 0)), 1);
3385 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm4x2
)), opval
);
3386 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3393 CASE (sem
, INSN_MOVW6_COMPACT
) : /* mov.w @$rm, $rn */
3395 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3396 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3397 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3398 int UNUSED written
= 0;
3399 IADDR UNUSED pc
= abuf
->addr
;
3400 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3403 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
))));
3404 SET_H_GRC (FLD (f_rn
), opval
);
3405 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3412 CASE (sem
, INSN_MOVW7_COMPACT
) : /* mov.w @${rm}+, $rn */
3414 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3415 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3416 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3417 int UNUSED written
= 0;
3418 IADDR UNUSED pc
= abuf
->addr
;
3419 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3423 tmp_data
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3424 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3426 SI opval
= EXTHISI (tmp_data
);
3427 SET_H_GRC (FLD (f_rm
), opval
);
3428 written
|= (1 << 4);
3429 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
3433 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
3434 SET_H_GRC (FLD (f_rm
), opval
);
3435 written
|= (1 << 4);
3436 TRACE_RESULT (current_cpu
, abuf
, "rm", 'x', opval
);
3440 SI opval
= EXTHISI (tmp_data
);
3441 SET_H_GRC (FLD (f_rn
), opval
);
3442 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3446 abuf
->written
= written
;
3451 CASE (sem
, INSN_MOVW8_COMPACT
) : /* mov.w @(r0, $rm), $rn */
3453 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3454 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3455 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3456 int UNUSED written
= 0;
3457 IADDR UNUSED pc
= abuf
->addr
;
3458 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3461 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
)))));
3462 SET_H_GRC (FLD (f_rn
), opval
);
3463 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3470 CASE (sem
, INSN_MOVW9_COMPACT
) : /* mov.w @($imm8x2, gbr), r0 */
3472 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3473 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3474 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3475 int UNUSED written
= 0;
3476 IADDR UNUSED pc
= abuf
->addr
;
3477 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3480 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x2
))));
3481 SET_H_GRC (((UINT
) 0), opval
);
3482 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3489 CASE (sem
, INSN_MOVW10_COMPACT
) : /* mov.w @($imm8x2, pc), $rn */
3491 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3492 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3493 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3494 int UNUSED written
= 0;
3495 IADDR UNUSED pc
= abuf
->addr
;
3496 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3499 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDDI (ADDDI (pc
, 4), FLD (f_imm8x2
))));
3500 SET_H_GRC (FLD (f_rn
), opval
);
3501 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3508 CASE (sem
, INSN_MOVW11_COMPACT
) : /* mov.w @($imm4x2, $rm), r0 */
3510 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3511 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3512 #define FLD(f) abuf->fields.sfmt_movw11_compact.f
3513 int UNUSED written
= 0;
3514 IADDR UNUSED pc
= abuf
->addr
;
3515 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3518 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x2
))));
3519 SET_H_GRC (((UINT
) 0), opval
);
3520 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3527 CASE (sem
, INSN_MOVA_COMPACT
) : /* mova @($imm8x4, pc), r0 */
3529 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3530 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3531 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3532 int UNUSED written
= 0;
3533 IADDR UNUSED pc
= abuf
->addr
;
3534 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3537 SI opval
= ADDDI (ANDDI (ADDDI (pc
, 4), INVSI (3)), FLD (f_imm8x4
));
3538 SET_H_GRC (((UINT
) 0), opval
);
3539 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3546 CASE (sem
, INSN_MOVCAL_COMPACT
) : /* movca.l r0, @$rn */
3548 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3550 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3551 int UNUSED written
= 0;
3552 IADDR UNUSED pc
= abuf
->addr
;
3553 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3556 SI opval
= GET_H_GRC (((UINT
) 0));
3557 SETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3558 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3565 CASE (sem
, INSN_MOVT_COMPACT
) : /* movt $rn */
3567 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3568 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3569 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3570 int UNUSED written
= 0;
3571 IADDR UNUSED pc
= abuf
->addr
;
3572 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3575 SI opval
= ZEXTBISI (GET_H_TBIT ());
3576 SET_H_GRC (FLD (f_rn
), opval
);
3577 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3584 CASE (sem
, INSN_MULL_COMPACT
) : /* mul.l $rm, $rn */
3586 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3587 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3588 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3589 int UNUSED written
= 0;
3590 IADDR UNUSED pc
= abuf
->addr
;
3591 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3594 SI opval
= MULSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
3596 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3603 CASE (sem
, INSN_MULSW_COMPACT
) : /* muls.w $rm, $rn */
3605 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3606 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3607 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3608 int UNUSED written
= 0;
3609 IADDR UNUSED pc
= abuf
->addr
;
3610 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3613 SI opval
= MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn
)), 1)));
3615 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3622 CASE (sem
, INSN_MULUW_COMPACT
) : /* mulu.w $rm, $rn */
3624 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3625 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3626 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3627 int UNUSED written
= 0;
3628 IADDR UNUSED pc
= abuf
->addr
;
3629 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3632 SI opval
= MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn
)), 1)));
3634 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3641 CASE (sem
, INSN_NEG_COMPACT
) : /* neg $rm, $rn */
3643 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3644 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3645 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3646 int UNUSED written
= 0;
3647 IADDR UNUSED pc
= abuf
->addr
;
3648 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3651 SI opval
= NEGSI (GET_H_GRC (FLD (f_rm
)));
3652 SET_H_GRC (FLD (f_rn
), opval
);
3653 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3660 CASE (sem
, INSN_NEGC_COMPACT
) : /* negc $rm, $rn */
3662 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3663 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3664 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3665 int UNUSED written
= 0;
3666 IADDR UNUSED pc
= abuf
->addr
;
3667 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3671 tmp_flag
= SUBCFSI (0, GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
3673 SI opval
= SUBCSI (0, GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
3674 SET_H_GRC (FLD (f_rn
), opval
);
3675 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3678 BI opval
= tmp_flag
;
3680 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3688 CASE (sem
, INSN_NOP_COMPACT
) : /* nop */
3690 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3691 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3692 #define FLD(f) abuf->fields.fmt_empty.f
3693 int UNUSED written
= 0;
3694 IADDR UNUSED pc
= abuf
->addr
;
3695 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3703 CASE (sem
, INSN_NOT_COMPACT
) : /* not $rm64, $rn64 */
3705 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3706 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3707 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3708 int UNUSED written
= 0;
3709 IADDR UNUSED pc
= abuf
->addr
;
3710 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3713 DI opval
= INVDI (GET_H_GR (FLD (f_rm
)));
3714 SET_H_GR (FLD (f_rn
), opval
);
3715 TRACE_RESULT (current_cpu
, abuf
, "rn64", 'D', opval
);
3722 CASE (sem
, INSN_OCBI_COMPACT
) : /* ocbi @$rn */
3724 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3725 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3726 #define FLD(f) abuf->fields.fmt_empty.f
3727 int UNUSED written
= 0;
3728 IADDR UNUSED pc
= abuf
->addr
;
3729 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3737 CASE (sem
, INSN_OCBP_COMPACT
) : /* ocbp @$rn */
3739 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3740 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3741 #define FLD(f) abuf->fields.fmt_empty.f
3742 int UNUSED written
= 0;
3743 IADDR UNUSED pc
= abuf
->addr
;
3744 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3752 CASE (sem
, INSN_OCBWB_COMPACT
) : /* ocbwb @$rn */
3754 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3755 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3756 #define FLD(f) abuf->fields.fmt_empty.f
3757 int UNUSED written
= 0;
3758 IADDR UNUSED pc
= abuf
->addr
;
3759 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3767 CASE (sem
, INSN_OR_COMPACT
) : /* or $rm64, $rn64 */
3769 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3770 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3771 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3772 int UNUSED written
= 0;
3773 IADDR UNUSED pc
= abuf
->addr
;
3774 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3777 DI opval
= ORDI (GET_H_GR (FLD (f_rm
)), GET_H_GR (FLD (f_rn
)));
3778 SET_H_GR (FLD (f_rn
), opval
);
3779 TRACE_RESULT (current_cpu
, abuf
, "rn64", 'D', opval
);
3786 CASE (sem
, INSN_ORI_COMPACT
) : /* or #$uimm8, r0 */
3788 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3789 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3790 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3791 int UNUSED written
= 0;
3792 IADDR UNUSED pc
= abuf
->addr
;
3793 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3796 SI opval
= ORSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
3797 SET_H_GRC (((UINT
) 0), opval
);
3798 TRACE_RESULT (current_cpu
, abuf
, "r0", 'x', opval
);
3805 CASE (sem
, INSN_ORB_COMPACT
) : /* or.b #$imm8, @(r0, gbr) */
3807 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3808 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3809 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3810 int UNUSED written
= 0;
3811 IADDR UNUSED pc
= abuf
->addr
;
3812 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3817 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
3818 tmp_data
= ORQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
3820 UQI opval
= tmp_data
;
3821 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
3822 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3830 CASE (sem
, INSN_PREF_COMPACT
) : /* pref @$rn */
3832 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3833 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3834 #define FLD(f) abuf->fields.fmt_empty.f
3835 int UNUSED written
= 0;
3836 IADDR UNUSED pc
= abuf
->addr
;
3837 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3845 CASE (sem
, INSN_ROTCL_COMPACT
) : /* rotcl $rn */
3847 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3849 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3850 int UNUSED written
= 0;
3851 IADDR UNUSED pc
= abuf
->addr
;
3852 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3856 tmp_temp
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
3858 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), GET_H_TBIT ());
3859 SET_H_GRC (FLD (f_rn
), opval
);
3860 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3863 BI opval
= ((tmp_temp
) ? (1) : (0));
3865 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3873 CASE (sem
, INSN_ROTCR_COMPACT
) : /* rotcr $rn */
3875 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3876 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3877 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3878 int UNUSED written
= 0;
3879 IADDR UNUSED pc
= abuf
->addr
;
3880 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3885 tmp_lsbit
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn
)), 1), 0)) ? (0) : (1));
3886 tmp_temp
= GET_H_TBIT ();
3888 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rn
)), 1), SLLSI (tmp_temp
, 31));
3889 SET_H_GRC (FLD (f_rn
), opval
);
3890 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3893 BI opval
= ((tmp_lsbit
) ? (1) : (0));
3895 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3903 CASE (sem
, INSN_ROTL_COMPACT
) : /* rotl $rn */
3905 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3906 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3907 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3908 int UNUSED written
= 0;
3909 IADDR UNUSED pc
= abuf
->addr
;
3910 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3914 tmp_temp
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
3916 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), tmp_temp
);
3917 SET_H_GRC (FLD (f_rn
), opval
);
3918 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3921 BI opval
= ((tmp_temp
) ? (1) : (0));
3923 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3931 CASE (sem
, INSN_ROTR_COMPACT
) : /* rotr $rn */
3933 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3934 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3935 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3936 int UNUSED written
= 0;
3937 IADDR UNUSED pc
= abuf
->addr
;
3938 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3943 tmp_lsbit
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn
)), 1), 0)) ? (0) : (1));
3944 tmp_temp
= tmp_lsbit
;
3946 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rn
)), 1), SLLSI (tmp_temp
, 31));
3947 SET_H_GRC (FLD (f_rn
), opval
);
3948 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
3951 BI opval
= ((tmp_lsbit
) ? (1) : (0));
3953 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3961 CASE (sem
, INSN_RTS_COMPACT
) : /* rts */
3963 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3964 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3965 #define FLD(f) abuf->fields.fmt_empty.f
3966 int UNUSED written
= 0;
3967 IADDR UNUSED pc
= abuf
->addr
;
3969 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3973 UDI opval
= GET_H_PR ();
3974 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
3975 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
3979 SEM_BRANCH_FINI (vpc
);
3984 CASE (sem
, INSN_SETS_COMPACT
) : /* sets */
3986 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3987 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3988 #define FLD(f) abuf->fields.fmt_empty.f
3989 int UNUSED written
= 0;
3990 IADDR UNUSED pc
= abuf
->addr
;
3991 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3996 TRACE_RESULT (current_cpu
, abuf
, "sbit", 'x', opval
);
4003 CASE (sem
, INSN_SETT_COMPACT
) : /* sett */
4005 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4006 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4007 #define FLD(f) abuf->fields.fmt_empty.f
4008 int UNUSED written
= 0;
4009 IADDR UNUSED pc
= abuf
->addr
;
4010 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4015 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4022 CASE (sem
, INSN_SHAD_COMPACT
) : /* shad $rm, $rn */
4024 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4025 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4026 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4027 int UNUSED written
= 0;
4028 IADDR UNUSED pc
= abuf
->addr
;
4029 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4033 tmp_shamt
= ANDQI (GET_H_GRC (FLD (f_rm
)), 31);
4034 if (GESI (GET_H_GRC (FLD (f_rm
)), 0)) {
4036 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), tmp_shamt
);
4037 SET_H_GRC (FLD (f_rn
), opval
);
4038 written
|= (1 << 3);
4039 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4042 if (NEQI (tmp_shamt
, 0)) {
4044 SI opval
= SRASI (GET_H_GRC (FLD (f_rn
)), SUBSI (32, tmp_shamt
));
4045 SET_H_GRC (FLD (f_rn
), opval
);
4046 written
|= (1 << 3);
4047 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4050 if (LTSI (GET_H_GRC (FLD (f_rn
)), 0)) {
4052 SI opval
= NEGSI (1);
4053 SET_H_GRC (FLD (f_rn
), opval
);
4054 written
|= (1 << 3);
4055 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4060 SET_H_GRC (FLD (f_rn
), opval
);
4061 written
|= (1 << 3);
4062 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4069 abuf
->written
= written
;
4074 CASE (sem
, INSN_SHAL_COMPACT
) : /* shal $rn */
4076 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4077 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4078 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4079 int UNUSED written
= 0;
4080 IADDR UNUSED pc
= abuf
->addr
;
4081 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4085 tmp_t
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4087 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 1);
4088 SET_H_GRC (FLD (f_rn
), opval
);
4089 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4092 BI opval
= ((tmp_t
) ? (1) : (0));
4094 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4102 CASE (sem
, INSN_SHAR_COMPACT
) : /* shar $rn */
4104 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4105 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4106 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4107 int UNUSED written
= 0;
4108 IADDR UNUSED pc
= abuf
->addr
;
4109 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4113 tmp_t
= ANDSI (GET_H_GRC (FLD (f_rn
)), 1);
4115 SI opval
= SRASI (GET_H_GRC (FLD (f_rn
)), 1);
4116 SET_H_GRC (FLD (f_rn
), opval
);
4117 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4120 BI opval
= ((tmp_t
) ? (1) : (0));
4122 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4130 CASE (sem
, INSN_SHLD_COMPACT
) : /* shld $rm, $rn */
4132 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4133 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4134 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4135 int UNUSED written
= 0;
4136 IADDR UNUSED pc
= abuf
->addr
;
4137 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4141 tmp_shamt
= ANDQI (GET_H_GRC (FLD (f_rm
)), 31);
4142 if (GESI (GET_H_GRC (FLD (f_rm
)), 0)) {
4144 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), tmp_shamt
);
4145 SET_H_GRC (FLD (f_rn
), opval
);
4146 written
|= (1 << 3);
4147 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4150 if (NEQI (tmp_shamt
, 0)) {
4152 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), SUBSI (32, tmp_shamt
));
4153 SET_H_GRC (FLD (f_rn
), opval
);
4154 written
|= (1 << 3);
4155 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4160 SET_H_GRC (FLD (f_rn
), opval
);
4161 written
|= (1 << 3);
4162 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4168 abuf
->written
= written
;
4173 CASE (sem
, INSN_SHLL_COMPACT
) : /* shll $rn */
4175 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4176 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4177 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4178 int UNUSED written
= 0;
4179 IADDR UNUSED pc
= abuf
->addr
;
4180 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4184 tmp_t
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4186 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 1);
4187 SET_H_GRC (FLD (f_rn
), opval
);
4188 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4191 BI opval
= ((tmp_t
) ? (1) : (0));
4193 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4201 CASE (sem
, INSN_SHLL2_COMPACT
) : /* shll2 $rn */
4203 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4204 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4205 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4206 int UNUSED written
= 0;
4207 IADDR UNUSED pc
= abuf
->addr
;
4208 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4211 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 2);
4212 SET_H_GRC (FLD (f_rn
), opval
);
4213 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4220 CASE (sem
, INSN_SHLL8_COMPACT
) : /* shll8 $rn */
4222 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4223 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4224 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4225 int UNUSED written
= 0;
4226 IADDR UNUSED pc
= abuf
->addr
;
4227 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4230 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 8);
4231 SET_H_GRC (FLD (f_rn
), opval
);
4232 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4239 CASE (sem
, INSN_SHLL16_COMPACT
) : /* shll16 $rn */
4241 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4242 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4243 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4244 int UNUSED written
= 0;
4245 IADDR UNUSED pc
= abuf
->addr
;
4246 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4249 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 16);
4250 SET_H_GRC (FLD (f_rn
), opval
);
4251 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4258 CASE (sem
, INSN_SHLR_COMPACT
) : /* shlr $rn */
4260 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4261 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4262 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4263 int UNUSED written
= 0;
4264 IADDR UNUSED pc
= abuf
->addr
;
4265 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4269 tmp_t
= ANDSI (GET_H_GRC (FLD (f_rn
)), 1);
4271 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 1);
4272 SET_H_GRC (FLD (f_rn
), opval
);
4273 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4276 BI opval
= ((tmp_t
) ? (1) : (0));
4278 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4286 CASE (sem
, INSN_SHLR2_COMPACT
) : /* shlr2 $rn */
4288 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4289 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4290 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4291 int UNUSED written
= 0;
4292 IADDR UNUSED pc
= abuf
->addr
;
4293 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4296 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 2);
4297 SET_H_GRC (FLD (f_rn
), opval
);
4298 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4305 CASE (sem
, INSN_SHLR8_COMPACT
) : /* shlr8 $rn */
4307 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4308 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4309 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4310 int UNUSED written
= 0;
4311 IADDR UNUSED pc
= abuf
->addr
;
4312 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4315 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 8);
4316 SET_H_GRC (FLD (f_rn
), opval
);
4317 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4324 CASE (sem
, INSN_SHLR16_COMPACT
) : /* shlr16 $rn */
4326 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4327 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4328 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4329 int UNUSED written
= 0;
4330 IADDR UNUSED pc
= abuf
->addr
;
4331 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4334 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 16);
4335 SET_H_GRC (FLD (f_rn
), opval
);
4336 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4343 CASE (sem
, INSN_STC_GBR_COMPACT
) : /* stc gbr, $rn */
4345 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4346 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4347 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4348 int UNUSED written
= 0;
4349 IADDR UNUSED pc
= abuf
->addr
;
4350 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4353 SI opval
= GET_H_GBR ();
4354 SET_H_GRC (FLD (f_rn
), opval
);
4355 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4362 CASE (sem
, INSN_STCL_GBR_COMPACT
) : /* stc.l gbr, @-$rn */
4364 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4365 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4366 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4367 int UNUSED written
= 0;
4368 IADDR UNUSED pc
= abuf
->addr
;
4369 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4373 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4375 SI opval
= GET_H_GBR ();
4376 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4377 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4380 SI opval
= tmp_addr
;
4381 SET_H_GRC (FLD (f_rn
), opval
);
4382 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4390 CASE (sem
, INSN_STS_FPSCR_COMPACT
) : /* sts fpscr, $rn */
4392 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4393 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4394 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4395 int UNUSED written
= 0;
4396 IADDR UNUSED pc
= abuf
->addr
;
4397 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4400 SI opval
= GET_H_FPCCR ();
4401 SET_H_GRC (FLD (f_rn
), opval
);
4402 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4409 CASE (sem
, INSN_STSL_FPSCR_COMPACT
) : /* sts.l fpscr, @-$rn */
4411 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4412 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4413 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4414 int UNUSED written
= 0;
4415 IADDR UNUSED pc
= abuf
->addr
;
4416 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4420 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4422 SI opval
= GET_H_FPCCR ();
4423 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4424 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4427 SI opval
= tmp_addr
;
4428 SET_H_GRC (FLD (f_rn
), opval
);
4429 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4437 CASE (sem
, INSN_STS_FPUL_COMPACT
) : /* sts fpul, $rn */
4439 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4440 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4441 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4442 int UNUSED written
= 0;
4443 IADDR UNUSED pc
= abuf
->addr
;
4444 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4447 SI opval
= SUBWORDSFSI (CPU (h_fr
[((UINT
) 32)]));
4448 SET_H_GRC (FLD (f_rn
), opval
);
4449 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4456 CASE (sem
, INSN_STSL_FPUL_COMPACT
) : /* sts.l fpul, @-$rn */
4458 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4459 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4460 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4461 int UNUSED written
= 0;
4462 IADDR UNUSED pc
= abuf
->addr
;
4463 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4467 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4469 SF opval
= CPU (h_fr
[((UINT
) 32)]);
4470 SETMEMSF (current_cpu
, pc
, tmp_addr
, opval
);
4471 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
4474 SI opval
= tmp_addr
;
4475 SET_H_GRC (FLD (f_rn
), opval
);
4476 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4484 CASE (sem
, INSN_STS_MACH_COMPACT
) : /* sts mach, $rn */
4486 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4487 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4488 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4489 int UNUSED written
= 0;
4490 IADDR UNUSED pc
= abuf
->addr
;
4491 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4494 SI opval
= GET_H_MACH ();
4495 SET_H_GRC (FLD (f_rn
), opval
);
4496 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4503 CASE (sem
, INSN_STSL_MACH_COMPACT
) : /* sts.l mach, @-$rn */
4505 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4506 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4507 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4508 int UNUSED written
= 0;
4509 IADDR UNUSED pc
= abuf
->addr
;
4510 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4514 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4516 SI opval
= GET_H_MACH ();
4517 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4518 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4521 SI opval
= tmp_addr
;
4522 SET_H_GRC (FLD (f_rn
), opval
);
4523 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4531 CASE (sem
, INSN_STS_MACL_COMPACT
) : /* sts macl, $rn */
4533 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4534 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4535 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4536 int UNUSED written
= 0;
4537 IADDR UNUSED pc
= abuf
->addr
;
4538 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4541 SI opval
= GET_H_MACL ();
4542 SET_H_GRC (FLD (f_rn
), opval
);
4543 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4550 CASE (sem
, INSN_STSL_MACL_COMPACT
) : /* sts.l macl, @-$rn */
4552 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4553 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4554 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4555 int UNUSED written
= 0;
4556 IADDR UNUSED pc
= abuf
->addr
;
4557 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4561 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4563 SI opval
= GET_H_MACL ();
4564 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4565 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4568 SI opval
= tmp_addr
;
4569 SET_H_GRC (FLD (f_rn
), opval
);
4570 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4578 CASE (sem
, INSN_STS_PR_COMPACT
) : /* sts pr, $rn */
4580 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4581 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4582 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4583 int UNUSED written
= 0;
4584 IADDR UNUSED pc
= abuf
->addr
;
4585 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4588 SI opval
= GET_H_PR ();
4589 SET_H_GRC (FLD (f_rn
), opval
);
4590 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4597 CASE (sem
, INSN_STSL_PR_COMPACT
) : /* sts.l pr, @-$rn */
4599 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4600 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4601 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4602 int UNUSED written
= 0;
4603 IADDR UNUSED pc
= abuf
->addr
;
4604 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4608 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4610 SI opval
= GET_H_PR ();
4611 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4612 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4615 SI opval
= tmp_addr
;
4616 SET_H_GRC (FLD (f_rn
), opval
);
4617 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4625 CASE (sem
, INSN_SUB_COMPACT
) : /* sub $rm, $rn */
4627 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4628 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4629 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4630 int UNUSED written
= 0;
4631 IADDR UNUSED pc
= abuf
->addr
;
4632 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4635 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
4636 SET_H_GRC (FLD (f_rn
), opval
);
4637 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4644 CASE (sem
, INSN_SUBC_COMPACT
) : /* subc $rm, $rn */
4646 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4647 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4648 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4649 int UNUSED written
= 0;
4650 IADDR UNUSED pc
= abuf
->addr
;
4651 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4655 tmp_flag
= SUBCFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
4657 SI opval
= SUBCSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
4658 SET_H_GRC (FLD (f_rn
), opval
);
4659 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4662 BI opval
= tmp_flag
;
4664 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4672 CASE (sem
, INSN_SUBV_COMPACT
) : /* subv $rm, $rn */
4674 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4675 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4676 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4677 int UNUSED written
= 0;
4678 IADDR UNUSED pc
= abuf
->addr
;
4679 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4683 tmp_t
= SUBOFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), 0);
4685 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
4686 SET_H_GRC (FLD (f_rn
), opval
);
4687 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4690 BI opval
= ((tmp_t
) ? (1) : (0));
4692 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4700 CASE (sem
, INSN_SWAPB_COMPACT
) : /* swap.b $rm, $rn */
4702 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4703 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4704 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4705 int UNUSED written
= 0;
4706 IADDR UNUSED pc
= abuf
->addr
;
4707 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4713 tmp_top_half
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 0);
4714 tmp_byte1
= SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 2);
4715 tmp_byte0
= SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3);
4717 SI opval
= ORSI (SLLSI (tmp_top_half
, 16), ORSI (SLLSI (tmp_byte0
, 8), tmp_byte1
));
4718 SET_H_GRC (FLD (f_rn
), opval
);
4719 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4727 CASE (sem
, INSN_SWAPW_COMPACT
) : /* swap.w $rm, $rn */
4729 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4730 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4731 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4732 int UNUSED written
= 0;
4733 IADDR UNUSED pc
= abuf
->addr
;
4734 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4737 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rm
)), 16), SLLSI (GET_H_GRC (FLD (f_rm
)), 16));
4738 SET_H_GRC (FLD (f_rn
), opval
);
4739 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4746 CASE (sem
, INSN_TASB_COMPACT
) : /* tas.b @$rn */
4748 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4749 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4750 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4751 int UNUSED written
= 0;
4752 IADDR UNUSED pc
= abuf
->addr
;
4753 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4757 tmp_byte
= GETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
4759 BI opval
= ((EQQI (tmp_byte
, 0)) ? (1) : (0));
4761 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4763 tmp_byte
= ORQI (tmp_byte
, 128);
4765 UQI opval
= tmp_byte
;
4766 SETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
4767 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4775 CASE (sem
, INSN_TRAPA_COMPACT
) : /* trapa #$uimm8 */
4777 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4778 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4779 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4780 int UNUSED written
= 0;
4781 IADDR UNUSED pc
= abuf
->addr
;
4782 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4784 sh64_compact_trapa (current_cpu
, FLD (f_imm8
), pc
);
4790 CASE (sem
, INSN_TST_COMPACT
) : /* tst $rm, $rn */
4792 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4793 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4794 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4795 int UNUSED written
= 0;
4796 IADDR UNUSED pc
= abuf
->addr
;
4797 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4800 BI opval
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
))), 0)) ? (1) : (0));
4802 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4809 CASE (sem
, INSN_TSTI_COMPACT
) : /* tst #$uimm8, r0 */
4811 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4812 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4813 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4814 int UNUSED written
= 0;
4815 IADDR UNUSED pc
= abuf
->addr
;
4816 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4819 BI opval
= ((EQSI (ANDSI (GET_H_GRC (((UINT
) 0)), ZEXTSISI (FLD (f_imm8
))), 0)) ? (1) : (0));
4821 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4828 CASE (sem
, INSN_TSTB_COMPACT
) : /* tst.b #$imm8, @(r0, gbr) */
4830 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4831 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4832 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4833 int UNUSED written
= 0;
4834 IADDR UNUSED pc
= abuf
->addr
;
4835 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4839 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
4841 BI opval
= ((EQQI (ANDQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
)), 0)) ? (1) : (0));
4843 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4851 CASE (sem
, INSN_XOR_COMPACT
) : /* xor $rm64, $rn64 */
4853 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4854 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4855 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
4856 int UNUSED written
= 0;
4857 IADDR UNUSED pc
= abuf
->addr
;
4858 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4861 DI opval
= XORDI (GET_H_GR (FLD (f_rn
)), GET_H_GR (FLD (f_rm
)));
4862 SET_H_GR (FLD (f_rn
), opval
);
4863 TRACE_RESULT (current_cpu
, abuf
, "rn64", 'D', opval
);
4870 CASE (sem
, INSN_XORI_COMPACT
) : /* xor #$uimm8, r0 */
4872 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4873 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4874 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4875 int UNUSED written
= 0;
4876 IADDR UNUSED pc
= abuf
->addr
;
4877 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4880 DI opval
= XORDI (GET_H_GR (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
4881 SET_H_GR (((UINT
) 0), opval
);
4882 TRACE_RESULT (current_cpu
, abuf
, "gr-0", 'D', opval
);
4889 CASE (sem
, INSN_XORB_COMPACT
) : /* xor.b #$imm8, @(r0, gbr) */
4891 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
4892 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4893 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4894 int UNUSED written
= 0;
4895 IADDR UNUSED pc
= abuf
->addr
;
4896 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4901 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
4902 tmp_data
= XORQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
4904 UQI opval
= tmp_data
;
4905 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
4906 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4914 CASE (sem
, INSN_XTRCT_COMPACT
) : /* xtrct $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_movl5_compact.f
4919 int UNUSED written
= 0;
4920 IADDR UNUSED pc
= abuf
->addr
;
4921 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4924 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rm
)), 16), SRLSI (GET_H_GRC (FLD (f_rn
)), 16));
4925 SET_H_GRC (FLD (f_rn
), opval
);
4926 TRACE_RESULT (current_cpu
, abuf
, "rn", 'x', opval
);
4935 ENDSWITCH (sem
) /* End of semantic switch. */
4937 /* At this point `vpc' contains the next insn to execute. */
4940 #undef DEFINE_SWITCH
4941 #endif /* DEFINE_SWITCH */