OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [sim/] [sh64/] [sem-compact-switch.c] - Blame information for rev 26

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.