]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/m32r/semx-switch.c
This commit was generated by cvs2svn to track changes on a CVS vendor
[thirdparty/binutils-gdb.git] / sim / m32r / semx-switch.c
1 /* Simulator instruction semantics for m32rxf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998, 1999 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 2, or (at your option)
12 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 along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 */
24
25 #ifdef DEFINE_LABELS
26
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
30
31 static struct {
32 int index;
33 void *label;
34 } labels[] = {
35 { M32RXF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36 { M32RXF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37 { M32RXF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38 { M32RXF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39 { M32RXF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40 { M32RXF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41 { M32RXF_INSN_ADD, && case_sem_INSN_ADD },
42 { M32RXF_INSN_ADD3, && case_sem_INSN_ADD3 },
43 { M32RXF_INSN_AND, && case_sem_INSN_AND },
44 { M32RXF_INSN_AND3, && case_sem_INSN_AND3 },
45 { M32RXF_INSN_OR, && case_sem_INSN_OR },
46 { M32RXF_INSN_OR3, && case_sem_INSN_OR3 },
47 { M32RXF_INSN_XOR, && case_sem_INSN_XOR },
48 { M32RXF_INSN_XOR3, && case_sem_INSN_XOR3 },
49 { M32RXF_INSN_ADDI, && case_sem_INSN_ADDI },
50 { M32RXF_INSN_ADDV, && case_sem_INSN_ADDV },
51 { M32RXF_INSN_ADDV3, && case_sem_INSN_ADDV3 },
52 { M32RXF_INSN_ADDX, && case_sem_INSN_ADDX },
53 { M32RXF_INSN_BC8, && case_sem_INSN_BC8 },
54 { M32RXF_INSN_BC24, && case_sem_INSN_BC24 },
55 { M32RXF_INSN_BEQ, && case_sem_INSN_BEQ },
56 { M32RXF_INSN_BEQZ, && case_sem_INSN_BEQZ },
57 { M32RXF_INSN_BGEZ, && case_sem_INSN_BGEZ },
58 { M32RXF_INSN_BGTZ, && case_sem_INSN_BGTZ },
59 { M32RXF_INSN_BLEZ, && case_sem_INSN_BLEZ },
60 { M32RXF_INSN_BLTZ, && case_sem_INSN_BLTZ },
61 { M32RXF_INSN_BNEZ, && case_sem_INSN_BNEZ },
62 { M32RXF_INSN_BL8, && case_sem_INSN_BL8 },
63 { M32RXF_INSN_BL24, && case_sem_INSN_BL24 },
64 { M32RXF_INSN_BCL8, && case_sem_INSN_BCL8 },
65 { M32RXF_INSN_BCL24, && case_sem_INSN_BCL24 },
66 { M32RXF_INSN_BNC8, && case_sem_INSN_BNC8 },
67 { M32RXF_INSN_BNC24, && case_sem_INSN_BNC24 },
68 { M32RXF_INSN_BNE, && case_sem_INSN_BNE },
69 { M32RXF_INSN_BRA8, && case_sem_INSN_BRA8 },
70 { M32RXF_INSN_BRA24, && case_sem_INSN_BRA24 },
71 { M32RXF_INSN_BNCL8, && case_sem_INSN_BNCL8 },
72 { M32RXF_INSN_BNCL24, && case_sem_INSN_BNCL24 },
73 { M32RXF_INSN_CMP, && case_sem_INSN_CMP },
74 { M32RXF_INSN_CMPI, && case_sem_INSN_CMPI },
75 { M32RXF_INSN_CMPU, && case_sem_INSN_CMPU },
76 { M32RXF_INSN_CMPUI, && case_sem_INSN_CMPUI },
77 { M32RXF_INSN_CMPEQ, && case_sem_INSN_CMPEQ },
78 { M32RXF_INSN_CMPZ, && case_sem_INSN_CMPZ },
79 { M32RXF_INSN_DIV, && case_sem_INSN_DIV },
80 { M32RXF_INSN_DIVU, && case_sem_INSN_DIVU },
81 { M32RXF_INSN_REM, && case_sem_INSN_REM },
82 { M32RXF_INSN_REMU, && case_sem_INSN_REMU },
83 { M32RXF_INSN_DIVH, && case_sem_INSN_DIVH },
84 { M32RXF_INSN_JC, && case_sem_INSN_JC },
85 { M32RXF_INSN_JNC, && case_sem_INSN_JNC },
86 { M32RXF_INSN_JL, && case_sem_INSN_JL },
87 { M32RXF_INSN_JMP, && case_sem_INSN_JMP },
88 { M32RXF_INSN_LD, && case_sem_INSN_LD },
89 { M32RXF_INSN_LD_D, && case_sem_INSN_LD_D },
90 { M32RXF_INSN_LDB, && case_sem_INSN_LDB },
91 { M32RXF_INSN_LDB_D, && case_sem_INSN_LDB_D },
92 { M32RXF_INSN_LDH, && case_sem_INSN_LDH },
93 { M32RXF_INSN_LDH_D, && case_sem_INSN_LDH_D },
94 { M32RXF_INSN_LDUB, && case_sem_INSN_LDUB },
95 { M32RXF_INSN_LDUB_D, && case_sem_INSN_LDUB_D },
96 { M32RXF_INSN_LDUH, && case_sem_INSN_LDUH },
97 { M32RXF_INSN_LDUH_D, && case_sem_INSN_LDUH_D },
98 { M32RXF_INSN_LD_PLUS, && case_sem_INSN_LD_PLUS },
99 { M32RXF_INSN_LD24, && case_sem_INSN_LD24 },
100 { M32RXF_INSN_LDI8, && case_sem_INSN_LDI8 },
101 { M32RXF_INSN_LDI16, && case_sem_INSN_LDI16 },
102 { M32RXF_INSN_LOCK, && case_sem_INSN_LOCK },
103 { M32RXF_INSN_MACHI_A, && case_sem_INSN_MACHI_A },
104 { M32RXF_INSN_MACLO_A, && case_sem_INSN_MACLO_A },
105 { M32RXF_INSN_MACWHI_A, && case_sem_INSN_MACWHI_A },
106 { M32RXF_INSN_MACWLO_A, && case_sem_INSN_MACWLO_A },
107 { M32RXF_INSN_MUL, && case_sem_INSN_MUL },
108 { M32RXF_INSN_MULHI_A, && case_sem_INSN_MULHI_A },
109 { M32RXF_INSN_MULLO_A, && case_sem_INSN_MULLO_A },
110 { M32RXF_INSN_MULWHI_A, && case_sem_INSN_MULWHI_A },
111 { M32RXF_INSN_MULWLO_A, && case_sem_INSN_MULWLO_A },
112 { M32RXF_INSN_MV, && case_sem_INSN_MV },
113 { M32RXF_INSN_MVFACHI_A, && case_sem_INSN_MVFACHI_A },
114 { M32RXF_INSN_MVFACLO_A, && case_sem_INSN_MVFACLO_A },
115 { M32RXF_INSN_MVFACMI_A, && case_sem_INSN_MVFACMI_A },
116 { M32RXF_INSN_MVFC, && case_sem_INSN_MVFC },
117 { M32RXF_INSN_MVTACHI_A, && case_sem_INSN_MVTACHI_A },
118 { M32RXF_INSN_MVTACLO_A, && case_sem_INSN_MVTACLO_A },
119 { M32RXF_INSN_MVTC, && case_sem_INSN_MVTC },
120 { M32RXF_INSN_NEG, && case_sem_INSN_NEG },
121 { M32RXF_INSN_NOP, && case_sem_INSN_NOP },
122 { M32RXF_INSN_NOT, && case_sem_INSN_NOT },
123 { M32RXF_INSN_RAC_DSI, && case_sem_INSN_RAC_DSI },
124 { M32RXF_INSN_RACH_DSI, && case_sem_INSN_RACH_DSI },
125 { M32RXF_INSN_RTE, && case_sem_INSN_RTE },
126 { M32RXF_INSN_SETH, && case_sem_INSN_SETH },
127 { M32RXF_INSN_SLL, && case_sem_INSN_SLL },
128 { M32RXF_INSN_SLL3, && case_sem_INSN_SLL3 },
129 { M32RXF_INSN_SLLI, && case_sem_INSN_SLLI },
130 { M32RXF_INSN_SRA, && case_sem_INSN_SRA },
131 { M32RXF_INSN_SRA3, && case_sem_INSN_SRA3 },
132 { M32RXF_INSN_SRAI, && case_sem_INSN_SRAI },
133 { M32RXF_INSN_SRL, && case_sem_INSN_SRL },
134 { M32RXF_INSN_SRL3, && case_sem_INSN_SRL3 },
135 { M32RXF_INSN_SRLI, && case_sem_INSN_SRLI },
136 { M32RXF_INSN_ST, && case_sem_INSN_ST },
137 { M32RXF_INSN_ST_D, && case_sem_INSN_ST_D },
138 { M32RXF_INSN_STB, && case_sem_INSN_STB },
139 { M32RXF_INSN_STB_D, && case_sem_INSN_STB_D },
140 { M32RXF_INSN_STH, && case_sem_INSN_STH },
141 { M32RXF_INSN_STH_D, && case_sem_INSN_STH_D },
142 { M32RXF_INSN_ST_PLUS, && case_sem_INSN_ST_PLUS },
143 { M32RXF_INSN_ST_MINUS, && case_sem_INSN_ST_MINUS },
144 { M32RXF_INSN_SUB, && case_sem_INSN_SUB },
145 { M32RXF_INSN_SUBV, && case_sem_INSN_SUBV },
146 { M32RXF_INSN_SUBX, && case_sem_INSN_SUBX },
147 { M32RXF_INSN_TRAP, && case_sem_INSN_TRAP },
148 { M32RXF_INSN_UNLOCK, && case_sem_INSN_UNLOCK },
149 { M32RXF_INSN_SATB, && case_sem_INSN_SATB },
150 { M32RXF_INSN_SATH, && case_sem_INSN_SATH },
151 { M32RXF_INSN_SAT, && case_sem_INSN_SAT },
152 { M32RXF_INSN_PCMPBZ, && case_sem_INSN_PCMPBZ },
153 { M32RXF_INSN_SADD, && case_sem_INSN_SADD },
154 { M32RXF_INSN_MACWU1, && case_sem_INSN_MACWU1 },
155 { M32RXF_INSN_MSBLO, && case_sem_INSN_MSBLO },
156 { M32RXF_INSN_MULWU1, && case_sem_INSN_MULWU1 },
157 { M32RXF_INSN_MACLH1, && case_sem_INSN_MACLH1 },
158 { M32RXF_INSN_SC, && case_sem_INSN_SC },
159 { M32RXF_INSN_SNC, && case_sem_INSN_SNC },
160 { M32RXF_INSN_PAR_ADD, && case_sem_INSN_PAR_ADD },
161 { M32RXF_INSN_WRITE_ADD, && case_sem_INSN_WRITE_ADD },
162 { M32RXF_INSN_PAR_AND, && case_sem_INSN_PAR_AND },
163 { M32RXF_INSN_WRITE_AND, && case_sem_INSN_WRITE_AND },
164 { M32RXF_INSN_PAR_OR, && case_sem_INSN_PAR_OR },
165 { M32RXF_INSN_WRITE_OR, && case_sem_INSN_WRITE_OR },
166 { M32RXF_INSN_PAR_XOR, && case_sem_INSN_PAR_XOR },
167 { M32RXF_INSN_WRITE_XOR, && case_sem_INSN_WRITE_XOR },
168 { M32RXF_INSN_PAR_ADDI, && case_sem_INSN_PAR_ADDI },
169 { M32RXF_INSN_WRITE_ADDI, && case_sem_INSN_WRITE_ADDI },
170 { M32RXF_INSN_PAR_ADDV, && case_sem_INSN_PAR_ADDV },
171 { M32RXF_INSN_WRITE_ADDV, && case_sem_INSN_WRITE_ADDV },
172 { M32RXF_INSN_PAR_ADDX, && case_sem_INSN_PAR_ADDX },
173 { M32RXF_INSN_WRITE_ADDX, && case_sem_INSN_WRITE_ADDX },
174 { M32RXF_INSN_PAR_BC8, && case_sem_INSN_PAR_BC8 },
175 { M32RXF_INSN_WRITE_BC8, && case_sem_INSN_WRITE_BC8 },
176 { M32RXF_INSN_PAR_BL8, && case_sem_INSN_PAR_BL8 },
177 { M32RXF_INSN_WRITE_BL8, && case_sem_INSN_WRITE_BL8 },
178 { M32RXF_INSN_PAR_BCL8, && case_sem_INSN_PAR_BCL8 },
179 { M32RXF_INSN_WRITE_BCL8, && case_sem_INSN_WRITE_BCL8 },
180 { M32RXF_INSN_PAR_BNC8, && case_sem_INSN_PAR_BNC8 },
181 { M32RXF_INSN_WRITE_BNC8, && case_sem_INSN_WRITE_BNC8 },
182 { M32RXF_INSN_PAR_BRA8, && case_sem_INSN_PAR_BRA8 },
183 { M32RXF_INSN_WRITE_BRA8, && case_sem_INSN_WRITE_BRA8 },
184 { M32RXF_INSN_PAR_BNCL8, && case_sem_INSN_PAR_BNCL8 },
185 { M32RXF_INSN_WRITE_BNCL8, && case_sem_INSN_WRITE_BNCL8 },
186 { M32RXF_INSN_PAR_CMP, && case_sem_INSN_PAR_CMP },
187 { M32RXF_INSN_WRITE_CMP, && case_sem_INSN_WRITE_CMP },
188 { M32RXF_INSN_PAR_CMPU, && case_sem_INSN_PAR_CMPU },
189 { M32RXF_INSN_WRITE_CMPU, && case_sem_INSN_WRITE_CMPU },
190 { M32RXF_INSN_PAR_CMPEQ, && case_sem_INSN_PAR_CMPEQ },
191 { M32RXF_INSN_WRITE_CMPEQ, && case_sem_INSN_WRITE_CMPEQ },
192 { M32RXF_INSN_PAR_CMPZ, && case_sem_INSN_PAR_CMPZ },
193 { M32RXF_INSN_WRITE_CMPZ, && case_sem_INSN_WRITE_CMPZ },
194 { M32RXF_INSN_PAR_JC, && case_sem_INSN_PAR_JC },
195 { M32RXF_INSN_WRITE_JC, && case_sem_INSN_WRITE_JC },
196 { M32RXF_INSN_PAR_JNC, && case_sem_INSN_PAR_JNC },
197 { M32RXF_INSN_WRITE_JNC, && case_sem_INSN_WRITE_JNC },
198 { M32RXF_INSN_PAR_JL, && case_sem_INSN_PAR_JL },
199 { M32RXF_INSN_WRITE_JL, && case_sem_INSN_WRITE_JL },
200 { M32RXF_INSN_PAR_JMP, && case_sem_INSN_PAR_JMP },
201 { M32RXF_INSN_WRITE_JMP, && case_sem_INSN_WRITE_JMP },
202 { M32RXF_INSN_PAR_LD, && case_sem_INSN_PAR_LD },
203 { M32RXF_INSN_WRITE_LD, && case_sem_INSN_WRITE_LD },
204 { M32RXF_INSN_PAR_LDB, && case_sem_INSN_PAR_LDB },
205 { M32RXF_INSN_WRITE_LDB, && case_sem_INSN_WRITE_LDB },
206 { M32RXF_INSN_PAR_LDH, && case_sem_INSN_PAR_LDH },
207 { M32RXF_INSN_WRITE_LDH, && case_sem_INSN_WRITE_LDH },
208 { M32RXF_INSN_PAR_LDUB, && case_sem_INSN_PAR_LDUB },
209 { M32RXF_INSN_WRITE_LDUB, && case_sem_INSN_WRITE_LDUB },
210 { M32RXF_INSN_PAR_LDUH, && case_sem_INSN_PAR_LDUH },
211 { M32RXF_INSN_WRITE_LDUH, && case_sem_INSN_WRITE_LDUH },
212 { M32RXF_INSN_PAR_LD_PLUS, && case_sem_INSN_PAR_LD_PLUS },
213 { M32RXF_INSN_WRITE_LD_PLUS, && case_sem_INSN_WRITE_LD_PLUS },
214 { M32RXF_INSN_PAR_LDI8, && case_sem_INSN_PAR_LDI8 },
215 { M32RXF_INSN_WRITE_LDI8, && case_sem_INSN_WRITE_LDI8 },
216 { M32RXF_INSN_PAR_LOCK, && case_sem_INSN_PAR_LOCK },
217 { M32RXF_INSN_WRITE_LOCK, && case_sem_INSN_WRITE_LOCK },
218 { M32RXF_INSN_PAR_MACHI_A, && case_sem_INSN_PAR_MACHI_A },
219 { M32RXF_INSN_WRITE_MACHI_A, && case_sem_INSN_WRITE_MACHI_A },
220 { M32RXF_INSN_PAR_MACLO_A, && case_sem_INSN_PAR_MACLO_A },
221 { M32RXF_INSN_WRITE_MACLO_A, && case_sem_INSN_WRITE_MACLO_A },
222 { M32RXF_INSN_PAR_MACWHI_A, && case_sem_INSN_PAR_MACWHI_A },
223 { M32RXF_INSN_WRITE_MACWHI_A, && case_sem_INSN_WRITE_MACWHI_A },
224 { M32RXF_INSN_PAR_MACWLO_A, && case_sem_INSN_PAR_MACWLO_A },
225 { M32RXF_INSN_WRITE_MACWLO_A, && case_sem_INSN_WRITE_MACWLO_A },
226 { M32RXF_INSN_PAR_MUL, && case_sem_INSN_PAR_MUL },
227 { M32RXF_INSN_WRITE_MUL, && case_sem_INSN_WRITE_MUL },
228 { M32RXF_INSN_PAR_MULHI_A, && case_sem_INSN_PAR_MULHI_A },
229 { M32RXF_INSN_WRITE_MULHI_A, && case_sem_INSN_WRITE_MULHI_A },
230 { M32RXF_INSN_PAR_MULLO_A, && case_sem_INSN_PAR_MULLO_A },
231 { M32RXF_INSN_WRITE_MULLO_A, && case_sem_INSN_WRITE_MULLO_A },
232 { M32RXF_INSN_PAR_MULWHI_A, && case_sem_INSN_PAR_MULWHI_A },
233 { M32RXF_INSN_WRITE_MULWHI_A, && case_sem_INSN_WRITE_MULWHI_A },
234 { M32RXF_INSN_PAR_MULWLO_A, && case_sem_INSN_PAR_MULWLO_A },
235 { M32RXF_INSN_WRITE_MULWLO_A, && case_sem_INSN_WRITE_MULWLO_A },
236 { M32RXF_INSN_PAR_MV, && case_sem_INSN_PAR_MV },
237 { M32RXF_INSN_WRITE_MV, && case_sem_INSN_WRITE_MV },
238 { M32RXF_INSN_PAR_MVFACHI_A, && case_sem_INSN_PAR_MVFACHI_A },
239 { M32RXF_INSN_WRITE_MVFACHI_A, && case_sem_INSN_WRITE_MVFACHI_A },
240 { M32RXF_INSN_PAR_MVFACLO_A, && case_sem_INSN_PAR_MVFACLO_A },
241 { M32RXF_INSN_WRITE_MVFACLO_A, && case_sem_INSN_WRITE_MVFACLO_A },
242 { M32RXF_INSN_PAR_MVFACMI_A, && case_sem_INSN_PAR_MVFACMI_A },
243 { M32RXF_INSN_WRITE_MVFACMI_A, && case_sem_INSN_WRITE_MVFACMI_A },
244 { M32RXF_INSN_PAR_MVFC, && case_sem_INSN_PAR_MVFC },
245 { M32RXF_INSN_WRITE_MVFC, && case_sem_INSN_WRITE_MVFC },
246 { M32RXF_INSN_PAR_MVTACHI_A, && case_sem_INSN_PAR_MVTACHI_A },
247 { M32RXF_INSN_WRITE_MVTACHI_A, && case_sem_INSN_WRITE_MVTACHI_A },
248 { M32RXF_INSN_PAR_MVTACLO_A, && case_sem_INSN_PAR_MVTACLO_A },
249 { M32RXF_INSN_WRITE_MVTACLO_A, && case_sem_INSN_WRITE_MVTACLO_A },
250 { M32RXF_INSN_PAR_MVTC, && case_sem_INSN_PAR_MVTC },
251 { M32RXF_INSN_WRITE_MVTC, && case_sem_INSN_WRITE_MVTC },
252 { M32RXF_INSN_PAR_NEG, && case_sem_INSN_PAR_NEG },
253 { M32RXF_INSN_WRITE_NEG, && case_sem_INSN_WRITE_NEG },
254 { M32RXF_INSN_PAR_NOP, && case_sem_INSN_PAR_NOP },
255 { M32RXF_INSN_WRITE_NOP, && case_sem_INSN_WRITE_NOP },
256 { M32RXF_INSN_PAR_NOT, && case_sem_INSN_PAR_NOT },
257 { M32RXF_INSN_WRITE_NOT, && case_sem_INSN_WRITE_NOT },
258 { M32RXF_INSN_PAR_RAC_DSI, && case_sem_INSN_PAR_RAC_DSI },
259 { M32RXF_INSN_WRITE_RAC_DSI, && case_sem_INSN_WRITE_RAC_DSI },
260 { M32RXF_INSN_PAR_RACH_DSI, && case_sem_INSN_PAR_RACH_DSI },
261 { M32RXF_INSN_WRITE_RACH_DSI, && case_sem_INSN_WRITE_RACH_DSI },
262 { M32RXF_INSN_PAR_RTE, && case_sem_INSN_PAR_RTE },
263 { M32RXF_INSN_WRITE_RTE, && case_sem_INSN_WRITE_RTE },
264 { M32RXF_INSN_PAR_SLL, && case_sem_INSN_PAR_SLL },
265 { M32RXF_INSN_WRITE_SLL, && case_sem_INSN_WRITE_SLL },
266 { M32RXF_INSN_PAR_SLLI, && case_sem_INSN_PAR_SLLI },
267 { M32RXF_INSN_WRITE_SLLI, && case_sem_INSN_WRITE_SLLI },
268 { M32RXF_INSN_PAR_SRA, && case_sem_INSN_PAR_SRA },
269 { M32RXF_INSN_WRITE_SRA, && case_sem_INSN_WRITE_SRA },
270 { M32RXF_INSN_PAR_SRAI, && case_sem_INSN_PAR_SRAI },
271 { M32RXF_INSN_WRITE_SRAI, && case_sem_INSN_WRITE_SRAI },
272 { M32RXF_INSN_PAR_SRL, && case_sem_INSN_PAR_SRL },
273 { M32RXF_INSN_WRITE_SRL, && case_sem_INSN_WRITE_SRL },
274 { M32RXF_INSN_PAR_SRLI, && case_sem_INSN_PAR_SRLI },
275 { M32RXF_INSN_WRITE_SRLI, && case_sem_INSN_WRITE_SRLI },
276 { M32RXF_INSN_PAR_ST, && case_sem_INSN_PAR_ST },
277 { M32RXF_INSN_WRITE_ST, && case_sem_INSN_WRITE_ST },
278 { M32RXF_INSN_PAR_STB, && case_sem_INSN_PAR_STB },
279 { M32RXF_INSN_WRITE_STB, && case_sem_INSN_WRITE_STB },
280 { M32RXF_INSN_PAR_STH, && case_sem_INSN_PAR_STH },
281 { M32RXF_INSN_WRITE_STH, && case_sem_INSN_WRITE_STH },
282 { M32RXF_INSN_PAR_ST_PLUS, && case_sem_INSN_PAR_ST_PLUS },
283 { M32RXF_INSN_WRITE_ST_PLUS, && case_sem_INSN_WRITE_ST_PLUS },
284 { M32RXF_INSN_PAR_ST_MINUS, && case_sem_INSN_PAR_ST_MINUS },
285 { M32RXF_INSN_WRITE_ST_MINUS, && case_sem_INSN_WRITE_ST_MINUS },
286 { M32RXF_INSN_PAR_SUB, && case_sem_INSN_PAR_SUB },
287 { M32RXF_INSN_WRITE_SUB, && case_sem_INSN_WRITE_SUB },
288 { M32RXF_INSN_PAR_SUBV, && case_sem_INSN_PAR_SUBV },
289 { M32RXF_INSN_WRITE_SUBV, && case_sem_INSN_WRITE_SUBV },
290 { M32RXF_INSN_PAR_SUBX, && case_sem_INSN_PAR_SUBX },
291 { M32RXF_INSN_WRITE_SUBX, && case_sem_INSN_WRITE_SUBX },
292 { M32RXF_INSN_PAR_TRAP, && case_sem_INSN_PAR_TRAP },
293 { M32RXF_INSN_WRITE_TRAP, && case_sem_INSN_WRITE_TRAP },
294 { M32RXF_INSN_PAR_UNLOCK, && case_sem_INSN_PAR_UNLOCK },
295 { M32RXF_INSN_WRITE_UNLOCK, && case_sem_INSN_WRITE_UNLOCK },
296 { M32RXF_INSN_PAR_PCMPBZ, && case_sem_INSN_PAR_PCMPBZ },
297 { M32RXF_INSN_WRITE_PCMPBZ, && case_sem_INSN_WRITE_PCMPBZ },
298 { M32RXF_INSN_PAR_SADD, && case_sem_INSN_PAR_SADD },
299 { M32RXF_INSN_WRITE_SADD, && case_sem_INSN_WRITE_SADD },
300 { M32RXF_INSN_PAR_MACWU1, && case_sem_INSN_PAR_MACWU1 },
301 { M32RXF_INSN_WRITE_MACWU1, && case_sem_INSN_WRITE_MACWU1 },
302 { M32RXF_INSN_PAR_MSBLO, && case_sem_INSN_PAR_MSBLO },
303 { M32RXF_INSN_WRITE_MSBLO, && case_sem_INSN_WRITE_MSBLO },
304 { M32RXF_INSN_PAR_MULWU1, && case_sem_INSN_PAR_MULWU1 },
305 { M32RXF_INSN_WRITE_MULWU1, && case_sem_INSN_WRITE_MULWU1 },
306 { M32RXF_INSN_PAR_MACLH1, && case_sem_INSN_PAR_MACLH1 },
307 { M32RXF_INSN_WRITE_MACLH1, && case_sem_INSN_WRITE_MACLH1 },
308 { M32RXF_INSN_PAR_SC, && case_sem_INSN_PAR_SC },
309 { M32RXF_INSN_WRITE_SC, && case_sem_INSN_WRITE_SC },
310 { M32RXF_INSN_PAR_SNC, && case_sem_INSN_PAR_SNC },
311 { M32RXF_INSN_WRITE_SNC, && case_sem_INSN_WRITE_SNC },
312 { 0, 0 }
313 };
314 int i;
315
316 for (i = 0; labels[i].label != 0; ++i)
317 {
318 #if FAST_P
319 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
320 #else
321 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
322 #endif
323 }
324
325 #undef DEFINE_LABELS
326 #endif /* DEFINE_LABELS */
327
328 #ifdef DEFINE_SWITCH
329
330 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
331 off frills like tracing and profiling. */
332 /* FIXME: A better way would be to have TRACE_RESULT check for something
333 that can cause it to be optimized out. Another way would be to emit
334 special handlers into the instruction "stream". */
335
336 #if FAST_P
337 #undef TRACE_RESULT
338 #define TRACE_RESULT(cpu, abuf, name, type, val)
339 #endif
340
341 #undef GET_ATTR
342 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
343
344 {
345
346 #if WITH_SCACHE_PBB
347
348 /* Branch to next handler without going around main loop. */
349 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
350 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
351
352 #else /* ! WITH_SCACHE_PBB */
353
354 #define NEXT(vpc) BREAK (sem)
355 #ifdef __GNUC__
356 #if FAST_P
357 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
358 #else
359 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
360 #endif
361 #else
362 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
363 #endif
364
365 #endif /* ! WITH_SCACHE_PBB */
366
367 {
368
369 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
370 {
371 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
372 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
373 #define FLD(f) abuf->fields.fmt_empty.f
374 int UNUSED written = 0;
375 IADDR UNUSED pc = abuf->addr;
376 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
377
378 {
379 /* Update the recorded pc in the cpu state struct.
380 Only necessary for WITH_SCACHE case, but to avoid the
381 conditional compilation .... */
382 SET_H_PC (pc);
383 /* Virtual insns have zero size. Overwrite vpc with address of next insn
384 using the default-insn-bitsize spec. When executing insns in parallel
385 we may want to queue the fault and continue execution. */
386 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
387 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
388 }
389
390 #undef FLD
391 }
392 NEXT (vpc);
393
394 CASE (sem, INSN_X_AFTER) : /* --after-- */
395 {
396 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
397 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
398 #define FLD(f) abuf->fields.fmt_empty.f
399 int UNUSED written = 0;
400 IADDR UNUSED pc = abuf->addr;
401 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
402
403 {
404 #if WITH_SCACHE_PBB_M32RXF
405 m32rxf_pbb_after (current_cpu, sem_arg);
406 #endif
407 }
408
409 #undef FLD
410 }
411 NEXT (vpc);
412
413 CASE (sem, INSN_X_BEFORE) : /* --before-- */
414 {
415 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
416 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
417 #define FLD(f) abuf->fields.fmt_empty.f
418 int UNUSED written = 0;
419 IADDR UNUSED pc = abuf->addr;
420 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
421
422 {
423 #if WITH_SCACHE_PBB_M32RXF
424 m32rxf_pbb_before (current_cpu, sem_arg);
425 #endif
426 }
427
428 #undef FLD
429 }
430 NEXT (vpc);
431
432 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
433 {
434 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
435 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
436 #define FLD(f) abuf->fields.fmt_empty.f
437 int UNUSED written = 0;
438 IADDR UNUSED pc = abuf->addr;
439 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
440
441 {
442 #if WITH_SCACHE_PBB_M32RXF
443 #ifdef DEFINE_SWITCH
444 vpc = m32rxf_pbb_cti_chain (current_cpu, sem_arg,
445 pbb_br_type, pbb_br_npc);
446 BREAK (sem);
447 #else
448 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
449 vpc = m32rxf_pbb_cti_chain (current_cpu, sem_arg,
450 CPU_PBB_BR_TYPE (current_cpu),
451 CPU_PBB_BR_NPC (current_cpu));
452 #endif
453 #endif
454 }
455
456 #undef FLD
457 }
458 NEXT (vpc);
459
460 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
461 {
462 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
463 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
464 #define FLD(f) abuf->fields.fmt_empty.f
465 int UNUSED written = 0;
466 IADDR UNUSED pc = abuf->addr;
467 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
468
469 {
470 #if WITH_SCACHE_PBB_M32RXF
471 vpc = m32rxf_pbb_chain (current_cpu, sem_arg);
472 #ifdef DEFINE_SWITCH
473 BREAK (sem);
474 #endif
475 #endif
476 }
477
478 #undef FLD
479 }
480 NEXT (vpc);
481
482 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
483 {
484 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
485 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
486 #define FLD(f) abuf->fields.fmt_empty.f
487 int UNUSED written = 0;
488 IADDR UNUSED pc = abuf->addr;
489 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
490
491 {
492 #if WITH_SCACHE_PBB_M32RXF
493 #ifdef DEFINE_SWITCH
494 /* In the switch case FAST_P is a constant, allowing several optimizations
495 in any called inline functions. */
496 vpc = m32rxf_pbb_begin (current_cpu, FAST_P);
497 #else
498 vpc = m32rxf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
499 #endif
500 #endif
501 }
502
503 #undef FLD
504 }
505 NEXT (vpc);
506
507 CASE (sem, INSN_ADD) : /* add $dr,$sr */
508 {
509 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
510 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
511 #define FLD(f) abuf->fields.sfmt_add.f
512 int UNUSED written = 0;
513 IADDR UNUSED pc = abuf->addr;
514 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
515
516 {
517 SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
518 * FLD (i_dr) = opval;
519 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
520 }
521
522 #undef FLD
523 }
524 NEXT (vpc);
525
526 CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */
527 {
528 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
529 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
530 #define FLD(f) abuf->fields.sfmt_add3.f
531 int UNUSED written = 0;
532 IADDR UNUSED pc = abuf->addr;
533 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
534
535 {
536 SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
537 * FLD (i_dr) = opval;
538 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
539 }
540
541 #undef FLD
542 }
543 NEXT (vpc);
544
545 CASE (sem, INSN_AND) : /* and $dr,$sr */
546 {
547 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
548 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
549 #define FLD(f) abuf->fields.sfmt_add.f
550 int UNUSED written = 0;
551 IADDR UNUSED pc = abuf->addr;
552 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
553
554 {
555 SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
556 * FLD (i_dr) = opval;
557 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
558 }
559
560 #undef FLD
561 }
562 NEXT (vpc);
563
564 CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */
565 {
566 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
567 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
568 #define FLD(f) abuf->fields.sfmt_and3.f
569 int UNUSED written = 0;
570 IADDR UNUSED pc = abuf->addr;
571 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
572
573 {
574 SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
575 * FLD (i_dr) = opval;
576 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
577 }
578
579 #undef FLD
580 }
581 NEXT (vpc);
582
583 CASE (sem, INSN_OR) : /* or $dr,$sr */
584 {
585 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
586 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
587 #define FLD(f) abuf->fields.sfmt_add.f
588 int UNUSED written = 0;
589 IADDR UNUSED pc = abuf->addr;
590 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
591
592 {
593 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
594 * FLD (i_dr) = opval;
595 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
596 }
597
598 #undef FLD
599 }
600 NEXT (vpc);
601
602 CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */
603 {
604 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
605 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
606 #define FLD(f) abuf->fields.sfmt_and3.f
607 int UNUSED written = 0;
608 IADDR UNUSED pc = abuf->addr;
609 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
610
611 {
612 SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
613 * FLD (i_dr) = opval;
614 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
615 }
616
617 #undef FLD
618 }
619 NEXT (vpc);
620
621 CASE (sem, INSN_XOR) : /* xor $dr,$sr */
622 {
623 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
624 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
625 #define FLD(f) abuf->fields.sfmt_add.f
626 int UNUSED written = 0;
627 IADDR UNUSED pc = abuf->addr;
628 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
629
630 {
631 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
632 * FLD (i_dr) = opval;
633 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
634 }
635
636 #undef FLD
637 }
638 NEXT (vpc);
639
640 CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */
641 {
642 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
643 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
644 #define FLD(f) abuf->fields.sfmt_and3.f
645 int UNUSED written = 0;
646 IADDR UNUSED pc = abuf->addr;
647 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
648
649 {
650 SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
651 * FLD (i_dr) = opval;
652 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
653 }
654
655 #undef FLD
656 }
657 NEXT (vpc);
658
659 CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */
660 {
661 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
662 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
663 #define FLD(f) abuf->fields.sfmt_addi.f
664 int UNUSED written = 0;
665 IADDR UNUSED pc = abuf->addr;
666 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
667
668 {
669 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
670 * FLD (i_dr) = opval;
671 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
672 }
673
674 #undef FLD
675 }
676 NEXT (vpc);
677
678 CASE (sem, INSN_ADDV) : /* addv $dr,$sr */
679 {
680 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
681 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
682 #define FLD(f) abuf->fields.sfmt_add.f
683 int UNUSED written = 0;
684 IADDR UNUSED pc = abuf->addr;
685 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
686
687 {
688 SI temp0;BI temp1;
689 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
690 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
691 {
692 SI opval = temp0;
693 * FLD (i_dr) = opval;
694 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
695 }
696 {
697 BI opval = temp1;
698 CPU (h_cond) = opval;
699 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
700 }
701 }
702
703 #undef FLD
704 }
705 NEXT (vpc);
706
707 CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */
708 {
709 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
710 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
711 #define FLD(f) abuf->fields.sfmt_add3.f
712 int UNUSED written = 0;
713 IADDR UNUSED pc = abuf->addr;
714 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
715
716 {
717 SI temp0;BI temp1;
718 temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
719 temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
720 {
721 SI opval = temp0;
722 * FLD (i_dr) = opval;
723 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
724 }
725 {
726 BI opval = temp1;
727 CPU (h_cond) = opval;
728 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
729 }
730 }
731
732 #undef FLD
733 }
734 NEXT (vpc);
735
736 CASE (sem, INSN_ADDX) : /* addx $dr,$sr */
737 {
738 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
739 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
740 #define FLD(f) abuf->fields.sfmt_add.f
741 int UNUSED written = 0;
742 IADDR UNUSED pc = abuf->addr;
743 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
744
745 {
746 SI temp0;BI temp1;
747 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
748 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
749 {
750 SI opval = temp0;
751 * FLD (i_dr) = opval;
752 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
753 }
754 {
755 BI opval = temp1;
756 CPU (h_cond) = opval;
757 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
758 }
759 }
760
761 #undef FLD
762 }
763 NEXT (vpc);
764
765 CASE (sem, INSN_BC8) : /* bc.s $disp8 */
766 {
767 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
768 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
769 #define FLD(f) abuf->fields.sfmt_bl8.f
770 int UNUSED written = 0;
771 IADDR UNUSED pc = abuf->addr;
772 SEM_BRANCH_INIT
773 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
774
775 if (CPU (h_cond)) {
776 {
777 USI opval = FLD (i_disp8);
778 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
779 written |= (1 << 2);
780 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
781 }
782 }
783
784 abuf->written = written;
785 SEM_BRANCH_FINI (vpc);
786 #undef FLD
787 }
788 NEXT (vpc);
789
790 CASE (sem, INSN_BC24) : /* bc.l $disp24 */
791 {
792 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
793 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
794 #define FLD(f) abuf->fields.sfmt_bl24.f
795 int UNUSED written = 0;
796 IADDR UNUSED pc = abuf->addr;
797 SEM_BRANCH_INIT
798 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
799
800 if (CPU (h_cond)) {
801 {
802 USI opval = FLD (i_disp24);
803 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
804 written |= (1 << 2);
805 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
806 }
807 }
808
809 abuf->written = written;
810 SEM_BRANCH_FINI (vpc);
811 #undef FLD
812 }
813 NEXT (vpc);
814
815 CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */
816 {
817 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
818 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
819 #define FLD(f) abuf->fields.sfmt_beq.f
820 int UNUSED written = 0;
821 IADDR UNUSED pc = abuf->addr;
822 SEM_BRANCH_INIT
823 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
824
825 if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
826 {
827 USI opval = FLD (i_disp16);
828 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
829 written |= (1 << 3);
830 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
831 }
832 }
833
834 abuf->written = written;
835 SEM_BRANCH_FINI (vpc);
836 #undef FLD
837 }
838 NEXT (vpc);
839
840 CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */
841 {
842 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
843 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
844 #define FLD(f) abuf->fields.sfmt_beq.f
845 int UNUSED written = 0;
846 IADDR UNUSED pc = abuf->addr;
847 SEM_BRANCH_INIT
848 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
849
850 if (EQSI (* FLD (i_src2), 0)) {
851 {
852 USI opval = FLD (i_disp16);
853 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
854 written |= (1 << 2);
855 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
856 }
857 }
858
859 abuf->written = written;
860 SEM_BRANCH_FINI (vpc);
861 #undef FLD
862 }
863 NEXT (vpc);
864
865 CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */
866 {
867 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
868 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
869 #define FLD(f) abuf->fields.sfmt_beq.f
870 int UNUSED written = 0;
871 IADDR UNUSED pc = abuf->addr;
872 SEM_BRANCH_INIT
873 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
874
875 if (GESI (* FLD (i_src2), 0)) {
876 {
877 USI opval = FLD (i_disp16);
878 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
879 written |= (1 << 2);
880 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
881 }
882 }
883
884 abuf->written = written;
885 SEM_BRANCH_FINI (vpc);
886 #undef FLD
887 }
888 NEXT (vpc);
889
890 CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */
891 {
892 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
893 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
894 #define FLD(f) abuf->fields.sfmt_beq.f
895 int UNUSED written = 0;
896 IADDR UNUSED pc = abuf->addr;
897 SEM_BRANCH_INIT
898 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
899
900 if (GTSI (* FLD (i_src2), 0)) {
901 {
902 USI opval = FLD (i_disp16);
903 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
904 written |= (1 << 2);
905 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
906 }
907 }
908
909 abuf->written = written;
910 SEM_BRANCH_FINI (vpc);
911 #undef FLD
912 }
913 NEXT (vpc);
914
915 CASE (sem, INSN_BLEZ) : /* blez $src2,$disp16 */
916 {
917 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
918 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
919 #define FLD(f) abuf->fields.sfmt_beq.f
920 int UNUSED written = 0;
921 IADDR UNUSED pc = abuf->addr;
922 SEM_BRANCH_INIT
923 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
924
925 if (LESI (* FLD (i_src2), 0)) {
926 {
927 USI opval = FLD (i_disp16);
928 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
929 written |= (1 << 2);
930 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
931 }
932 }
933
934 abuf->written = written;
935 SEM_BRANCH_FINI (vpc);
936 #undef FLD
937 }
938 NEXT (vpc);
939
940 CASE (sem, INSN_BLTZ) : /* bltz $src2,$disp16 */
941 {
942 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
943 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
944 #define FLD(f) abuf->fields.sfmt_beq.f
945 int UNUSED written = 0;
946 IADDR UNUSED pc = abuf->addr;
947 SEM_BRANCH_INIT
948 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
949
950 if (LTSI (* FLD (i_src2), 0)) {
951 {
952 USI opval = FLD (i_disp16);
953 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
954 written |= (1 << 2);
955 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
956 }
957 }
958
959 abuf->written = written;
960 SEM_BRANCH_FINI (vpc);
961 #undef FLD
962 }
963 NEXT (vpc);
964
965 CASE (sem, INSN_BNEZ) : /* bnez $src2,$disp16 */
966 {
967 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
968 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
969 #define FLD(f) abuf->fields.sfmt_beq.f
970 int UNUSED written = 0;
971 IADDR UNUSED pc = abuf->addr;
972 SEM_BRANCH_INIT
973 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
974
975 if (NESI (* FLD (i_src2), 0)) {
976 {
977 USI opval = FLD (i_disp16);
978 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
979 written |= (1 << 2);
980 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
981 }
982 }
983
984 abuf->written = written;
985 SEM_BRANCH_FINI (vpc);
986 #undef FLD
987 }
988 NEXT (vpc);
989
990 CASE (sem, INSN_BL8) : /* bl.s $disp8 */
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_bl8.f
995 int UNUSED written = 0;
996 IADDR UNUSED pc = abuf->addr;
997 SEM_BRANCH_INIT
998 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
999
1000 {
1001 {
1002 SI opval = ADDSI (ANDSI (pc, -4), 4);
1003 CPU (h_gr[((UINT) 14)]) = opval;
1004 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1005 }
1006 {
1007 USI opval = FLD (i_disp8);
1008 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1009 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1010 }
1011 }
1012
1013 SEM_BRANCH_FINI (vpc);
1014 #undef FLD
1015 }
1016 NEXT (vpc);
1017
1018 CASE (sem, INSN_BL24) : /* bl.l $disp24 */
1019 {
1020 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1021 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1022 #define FLD(f) abuf->fields.sfmt_bl24.f
1023 int UNUSED written = 0;
1024 IADDR UNUSED pc = abuf->addr;
1025 SEM_BRANCH_INIT
1026 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1027
1028 {
1029 {
1030 SI opval = ADDSI (pc, 4);
1031 CPU (h_gr[((UINT) 14)]) = opval;
1032 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1033 }
1034 {
1035 USI opval = FLD (i_disp24);
1036 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1037 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1038 }
1039 }
1040
1041 SEM_BRANCH_FINI (vpc);
1042 #undef FLD
1043 }
1044 NEXT (vpc);
1045
1046 CASE (sem, INSN_BCL8) : /* bcl.s $disp8 */
1047 {
1048 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1049 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1050 #define FLD(f) abuf->fields.sfmt_bl8.f
1051 int UNUSED written = 0;
1052 IADDR UNUSED pc = abuf->addr;
1053 SEM_BRANCH_INIT
1054 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1055
1056 if (CPU (h_cond)) {
1057 {
1058 {
1059 SI opval = ADDSI (ANDSI (pc, -4), 4);
1060 CPU (h_gr[((UINT) 14)]) = opval;
1061 written |= (1 << 3);
1062 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1063 }
1064 {
1065 USI opval = FLD (i_disp8);
1066 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1067 written |= (1 << 4);
1068 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1069 }
1070 }
1071 }
1072
1073 abuf->written = written;
1074 SEM_BRANCH_FINI (vpc);
1075 #undef FLD
1076 }
1077 NEXT (vpc);
1078
1079 CASE (sem, INSN_BCL24) : /* bcl.l $disp24 */
1080 {
1081 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1082 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1083 #define FLD(f) abuf->fields.sfmt_bl24.f
1084 int UNUSED written = 0;
1085 IADDR UNUSED pc = abuf->addr;
1086 SEM_BRANCH_INIT
1087 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1088
1089 if (CPU (h_cond)) {
1090 {
1091 {
1092 SI opval = ADDSI (pc, 4);
1093 CPU (h_gr[((UINT) 14)]) = opval;
1094 written |= (1 << 3);
1095 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1096 }
1097 {
1098 USI opval = FLD (i_disp24);
1099 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1100 written |= (1 << 4);
1101 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1102 }
1103 }
1104 }
1105
1106 abuf->written = written;
1107 SEM_BRANCH_FINI (vpc);
1108 #undef FLD
1109 }
1110 NEXT (vpc);
1111
1112 CASE (sem, INSN_BNC8) : /* bnc.s $disp8 */
1113 {
1114 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1115 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1116 #define FLD(f) abuf->fields.sfmt_bl8.f
1117 int UNUSED written = 0;
1118 IADDR UNUSED pc = abuf->addr;
1119 SEM_BRANCH_INIT
1120 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1121
1122 if (NOTBI (CPU (h_cond))) {
1123 {
1124 USI opval = FLD (i_disp8);
1125 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1126 written |= (1 << 2);
1127 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1128 }
1129 }
1130
1131 abuf->written = written;
1132 SEM_BRANCH_FINI (vpc);
1133 #undef FLD
1134 }
1135 NEXT (vpc);
1136
1137 CASE (sem, INSN_BNC24) : /* bnc.l $disp24 */
1138 {
1139 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1140 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1141 #define FLD(f) abuf->fields.sfmt_bl24.f
1142 int UNUSED written = 0;
1143 IADDR UNUSED pc = abuf->addr;
1144 SEM_BRANCH_INIT
1145 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1146
1147 if (NOTBI (CPU (h_cond))) {
1148 {
1149 USI opval = FLD (i_disp24);
1150 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1151 written |= (1 << 2);
1152 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1153 }
1154 }
1155
1156 abuf->written = written;
1157 SEM_BRANCH_FINI (vpc);
1158 #undef FLD
1159 }
1160 NEXT (vpc);
1161
1162 CASE (sem, INSN_BNE) : /* bne $src1,$src2,$disp16 */
1163 {
1164 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1165 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1166 #define FLD(f) abuf->fields.sfmt_beq.f
1167 int UNUSED written = 0;
1168 IADDR UNUSED pc = abuf->addr;
1169 SEM_BRANCH_INIT
1170 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1171
1172 if (NESI (* FLD (i_src1), * FLD (i_src2))) {
1173 {
1174 USI opval = FLD (i_disp16);
1175 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1176 written |= (1 << 3);
1177 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1178 }
1179 }
1180
1181 abuf->written = written;
1182 SEM_BRANCH_FINI (vpc);
1183 #undef FLD
1184 }
1185 NEXT (vpc);
1186
1187 CASE (sem, INSN_BRA8) : /* bra.s $disp8 */
1188 {
1189 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1190 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1191 #define FLD(f) abuf->fields.sfmt_bl8.f
1192 int UNUSED written = 0;
1193 IADDR UNUSED pc = abuf->addr;
1194 SEM_BRANCH_INIT
1195 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1196
1197 {
1198 USI opval = FLD (i_disp8);
1199 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1200 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1201 }
1202
1203 SEM_BRANCH_FINI (vpc);
1204 #undef FLD
1205 }
1206 NEXT (vpc);
1207
1208 CASE (sem, INSN_BRA24) : /* bra.l $disp24 */
1209 {
1210 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1211 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1212 #define FLD(f) abuf->fields.sfmt_bl24.f
1213 int UNUSED written = 0;
1214 IADDR UNUSED pc = abuf->addr;
1215 SEM_BRANCH_INIT
1216 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1217
1218 {
1219 USI opval = FLD (i_disp24);
1220 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1221 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1222 }
1223
1224 SEM_BRANCH_FINI (vpc);
1225 #undef FLD
1226 }
1227 NEXT (vpc);
1228
1229 CASE (sem, INSN_BNCL8) : /* bncl.s $disp8 */
1230 {
1231 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1232 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1233 #define FLD(f) abuf->fields.sfmt_bl8.f
1234 int UNUSED written = 0;
1235 IADDR UNUSED pc = abuf->addr;
1236 SEM_BRANCH_INIT
1237 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1238
1239 if (NOTBI (CPU (h_cond))) {
1240 {
1241 {
1242 SI opval = ADDSI (ANDSI (pc, -4), 4);
1243 CPU (h_gr[((UINT) 14)]) = opval;
1244 written |= (1 << 3);
1245 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1246 }
1247 {
1248 USI opval = FLD (i_disp8);
1249 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1250 written |= (1 << 4);
1251 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1252 }
1253 }
1254 }
1255
1256 abuf->written = written;
1257 SEM_BRANCH_FINI (vpc);
1258 #undef FLD
1259 }
1260 NEXT (vpc);
1261
1262 CASE (sem, INSN_BNCL24) : /* bncl.l $disp24 */
1263 {
1264 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1265 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1266 #define FLD(f) abuf->fields.sfmt_bl24.f
1267 int UNUSED written = 0;
1268 IADDR UNUSED pc = abuf->addr;
1269 SEM_BRANCH_INIT
1270 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1271
1272 if (NOTBI (CPU (h_cond))) {
1273 {
1274 {
1275 SI opval = ADDSI (pc, 4);
1276 CPU (h_gr[((UINT) 14)]) = opval;
1277 written |= (1 << 3);
1278 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1279 }
1280 {
1281 USI opval = FLD (i_disp24);
1282 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1283 written |= (1 << 4);
1284 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1285 }
1286 }
1287 }
1288
1289 abuf->written = written;
1290 SEM_BRANCH_FINI (vpc);
1291 #undef FLD
1292 }
1293 NEXT (vpc);
1294
1295 CASE (sem, INSN_CMP) : /* cmp $src1,$src2 */
1296 {
1297 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1298 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1299 #define FLD(f) abuf->fields.sfmt_st_plus.f
1300 int UNUSED written = 0;
1301 IADDR UNUSED pc = abuf->addr;
1302 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1303
1304 {
1305 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
1306 CPU (h_cond) = opval;
1307 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1308 }
1309
1310 #undef FLD
1311 }
1312 NEXT (vpc);
1313
1314 CASE (sem, INSN_CMPI) : /* cmpi $src2,$simm16 */
1315 {
1316 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1317 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1318 #define FLD(f) abuf->fields.sfmt_st_d.f
1319 int UNUSED written = 0;
1320 IADDR UNUSED pc = abuf->addr;
1321 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1322
1323 {
1324 BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
1325 CPU (h_cond) = opval;
1326 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1327 }
1328
1329 #undef FLD
1330 }
1331 NEXT (vpc);
1332
1333 CASE (sem, INSN_CMPU) : /* cmpu $src1,$src2 */
1334 {
1335 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1336 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1337 #define FLD(f) abuf->fields.sfmt_st_plus.f
1338 int UNUSED written = 0;
1339 IADDR UNUSED pc = abuf->addr;
1340 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1341
1342 {
1343 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
1344 CPU (h_cond) = opval;
1345 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1346 }
1347
1348 #undef FLD
1349 }
1350 NEXT (vpc);
1351
1352 CASE (sem, INSN_CMPUI) : /* cmpui $src2,$simm16 */
1353 {
1354 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1355 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1356 #define FLD(f) abuf->fields.sfmt_st_d.f
1357 int UNUSED written = 0;
1358 IADDR UNUSED pc = abuf->addr;
1359 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1360
1361 {
1362 BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
1363 CPU (h_cond) = opval;
1364 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1365 }
1366
1367 #undef FLD
1368 }
1369 NEXT (vpc);
1370
1371 CASE (sem, INSN_CMPEQ) : /* cmpeq $src1,$src2 */
1372 {
1373 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1375 #define FLD(f) abuf->fields.sfmt_st_plus.f
1376 int UNUSED written = 0;
1377 IADDR UNUSED pc = abuf->addr;
1378 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1379
1380 {
1381 BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
1382 CPU (h_cond) = opval;
1383 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1384 }
1385
1386 #undef FLD
1387 }
1388 NEXT (vpc);
1389
1390 CASE (sem, INSN_CMPZ) : /* cmpz $src2 */
1391 {
1392 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1393 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1394 #define FLD(f) abuf->fields.sfmt_st_plus.f
1395 int UNUSED written = 0;
1396 IADDR UNUSED pc = abuf->addr;
1397 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1398
1399 {
1400 BI opval = EQSI (* FLD (i_src2), 0);
1401 CPU (h_cond) = opval;
1402 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1403 }
1404
1405 #undef FLD
1406 }
1407 NEXT (vpc);
1408
1409 CASE (sem, INSN_DIV) : /* div $dr,$sr */
1410 {
1411 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1412 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1413 #define FLD(f) abuf->fields.sfmt_add.f
1414 int UNUSED written = 0;
1415 IADDR UNUSED pc = abuf->addr;
1416 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1417
1418 if (NESI (* FLD (i_sr), 0)) {
1419 {
1420 SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
1421 * FLD (i_dr) = opval;
1422 written |= (1 << 2);
1423 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1424 }
1425 }
1426
1427 abuf->written = written;
1428 #undef FLD
1429 }
1430 NEXT (vpc);
1431
1432 CASE (sem, INSN_DIVU) : /* divu $dr,$sr */
1433 {
1434 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1435 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1436 #define FLD(f) abuf->fields.sfmt_add.f
1437 int UNUSED written = 0;
1438 IADDR UNUSED pc = abuf->addr;
1439 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1440
1441 if (NESI (* FLD (i_sr), 0)) {
1442 {
1443 SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
1444 * FLD (i_dr) = opval;
1445 written |= (1 << 2);
1446 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1447 }
1448 }
1449
1450 abuf->written = written;
1451 #undef FLD
1452 }
1453 NEXT (vpc);
1454
1455 CASE (sem, INSN_REM) : /* rem $dr,$sr */
1456 {
1457 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1458 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1459 #define FLD(f) abuf->fields.sfmt_add.f
1460 int UNUSED written = 0;
1461 IADDR UNUSED pc = abuf->addr;
1462 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1463
1464 if (NESI (* FLD (i_sr), 0)) {
1465 {
1466 SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
1467 * FLD (i_dr) = opval;
1468 written |= (1 << 2);
1469 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1470 }
1471 }
1472
1473 abuf->written = written;
1474 #undef FLD
1475 }
1476 NEXT (vpc);
1477
1478 CASE (sem, INSN_REMU) : /* remu $dr,$sr */
1479 {
1480 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1481 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1482 #define FLD(f) abuf->fields.sfmt_add.f
1483 int UNUSED written = 0;
1484 IADDR UNUSED pc = abuf->addr;
1485 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1486
1487 if (NESI (* FLD (i_sr), 0)) {
1488 {
1489 SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
1490 * FLD (i_dr) = opval;
1491 written |= (1 << 2);
1492 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1493 }
1494 }
1495
1496 abuf->written = written;
1497 #undef FLD
1498 }
1499 NEXT (vpc);
1500
1501 CASE (sem, INSN_DIVH) : /* divh $dr,$sr */
1502 {
1503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1504 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1505 #define FLD(f) abuf->fields.sfmt_add.f
1506 int UNUSED written = 0;
1507 IADDR UNUSED pc = abuf->addr;
1508 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1509
1510 if (NESI (* FLD (i_sr), 0)) {
1511 {
1512 SI opval = DIVSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr));
1513 * FLD (i_dr) = opval;
1514 written |= (1 << 2);
1515 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1516 }
1517 }
1518
1519 abuf->written = written;
1520 #undef FLD
1521 }
1522 NEXT (vpc);
1523
1524 CASE (sem, INSN_JC) : /* jc $sr */
1525 {
1526 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1527 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1528 #define FLD(f) abuf->fields.sfmt_mvtc.f
1529 int UNUSED written = 0;
1530 IADDR UNUSED pc = abuf->addr;
1531 SEM_BRANCH_INIT
1532 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1533
1534 if (CPU (h_cond)) {
1535 {
1536 USI opval = ANDSI (* FLD (i_sr), -4);
1537 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1538 written |= (1 << 2);
1539 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1540 }
1541 }
1542
1543 abuf->written = written;
1544 SEM_BRANCH_FINI (vpc);
1545 #undef FLD
1546 }
1547 NEXT (vpc);
1548
1549 CASE (sem, INSN_JNC) : /* jnc $sr */
1550 {
1551 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1552 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1553 #define FLD(f) abuf->fields.sfmt_mvtc.f
1554 int UNUSED written = 0;
1555 IADDR UNUSED pc = abuf->addr;
1556 SEM_BRANCH_INIT
1557 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1558
1559 if (NOTBI (CPU (h_cond))) {
1560 {
1561 USI opval = ANDSI (* FLD (i_sr), -4);
1562 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1563 written |= (1 << 2);
1564 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1565 }
1566 }
1567
1568 abuf->written = written;
1569 SEM_BRANCH_FINI (vpc);
1570 #undef FLD
1571 }
1572 NEXT (vpc);
1573
1574 CASE (sem, INSN_JL) : /* jl $sr */
1575 {
1576 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1577 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1578 #define FLD(f) abuf->fields.sfmt_jl.f
1579 int UNUSED written = 0;
1580 IADDR UNUSED pc = abuf->addr;
1581 SEM_BRANCH_INIT
1582 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1583
1584 {
1585 SI temp0;USI temp1;
1586 temp0 = ADDSI (ANDSI (pc, -4), 4);
1587 temp1 = ANDSI (* FLD (i_sr), -4);
1588 {
1589 SI opval = temp0;
1590 CPU (h_gr[((UINT) 14)]) = opval;
1591 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1592 }
1593 {
1594 USI opval = temp1;
1595 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1596 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1597 }
1598 }
1599
1600 SEM_BRANCH_FINI (vpc);
1601 #undef FLD
1602 }
1603 NEXT (vpc);
1604
1605 CASE (sem, INSN_JMP) : /* jmp $sr */
1606 {
1607 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1608 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1609 #define FLD(f) abuf->fields.sfmt_mvtc.f
1610 int UNUSED written = 0;
1611 IADDR UNUSED pc = abuf->addr;
1612 SEM_BRANCH_INIT
1613 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1614
1615 {
1616 USI opval = ANDSI (* FLD (i_sr), -4);
1617 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1618 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1619 }
1620
1621 SEM_BRANCH_FINI (vpc);
1622 #undef FLD
1623 }
1624 NEXT (vpc);
1625
1626 CASE (sem, INSN_LD) : /* ld $dr,@$sr */
1627 {
1628 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1629 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1630 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1631 int UNUSED written = 0;
1632 IADDR UNUSED pc = abuf->addr;
1633 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1634
1635 {
1636 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1637 * FLD (i_dr) = opval;
1638 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1639 }
1640
1641 #undef FLD
1642 }
1643 NEXT (vpc);
1644
1645 CASE (sem, INSN_LD_D) : /* ld $dr,@($slo16,$sr) */
1646 {
1647 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1648 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1649 #define FLD(f) abuf->fields.sfmt_add3.f
1650 int UNUSED written = 0;
1651 IADDR UNUSED pc = abuf->addr;
1652 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1653
1654 {
1655 SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
1656 * FLD (i_dr) = opval;
1657 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1658 }
1659
1660 #undef FLD
1661 }
1662 NEXT (vpc);
1663
1664 CASE (sem, INSN_LDB) : /* ldb $dr,@$sr */
1665 {
1666 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1667 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1668 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1669 int UNUSED written = 0;
1670 IADDR UNUSED pc = abuf->addr;
1671 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1672
1673 {
1674 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
1675 * FLD (i_dr) = opval;
1676 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1677 }
1678
1679 #undef FLD
1680 }
1681 NEXT (vpc);
1682
1683 CASE (sem, INSN_LDB_D) : /* ldb $dr,@($slo16,$sr) */
1684 {
1685 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1686 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1687 #define FLD(f) abuf->fields.sfmt_add3.f
1688 int UNUSED written = 0;
1689 IADDR UNUSED pc = abuf->addr;
1690 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1691
1692 {
1693 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1694 * FLD (i_dr) = opval;
1695 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1696 }
1697
1698 #undef FLD
1699 }
1700 NEXT (vpc);
1701
1702 CASE (sem, INSN_LDH) : /* ldh $dr,@$sr */
1703 {
1704 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1705 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1706 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1707 int UNUSED written = 0;
1708 IADDR UNUSED pc = abuf->addr;
1709 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1710
1711 {
1712 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
1713 * FLD (i_dr) = opval;
1714 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1715 }
1716
1717 #undef FLD
1718 }
1719 NEXT (vpc);
1720
1721 CASE (sem, INSN_LDH_D) : /* ldh $dr,@($slo16,$sr) */
1722 {
1723 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1724 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1725 #define FLD(f) abuf->fields.sfmt_add3.f
1726 int UNUSED written = 0;
1727 IADDR UNUSED pc = abuf->addr;
1728 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1729
1730 {
1731 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1732 * FLD (i_dr) = opval;
1733 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1734 }
1735
1736 #undef FLD
1737 }
1738 NEXT (vpc);
1739
1740 CASE (sem, INSN_LDUB) : /* ldub $dr,@$sr */
1741 {
1742 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1743 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1744 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1745 int UNUSED written = 0;
1746 IADDR UNUSED pc = abuf->addr;
1747 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1748
1749 {
1750 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
1751 * FLD (i_dr) = opval;
1752 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1753 }
1754
1755 #undef FLD
1756 }
1757 NEXT (vpc);
1758
1759 CASE (sem, INSN_LDUB_D) : /* ldub $dr,@($slo16,$sr) */
1760 {
1761 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1762 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1763 #define FLD(f) abuf->fields.sfmt_add3.f
1764 int UNUSED written = 0;
1765 IADDR UNUSED pc = abuf->addr;
1766 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1767
1768 {
1769 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1770 * FLD (i_dr) = opval;
1771 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1772 }
1773
1774 #undef FLD
1775 }
1776 NEXT (vpc);
1777
1778 CASE (sem, INSN_LDUH) : /* lduh $dr,@$sr */
1779 {
1780 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1781 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1782 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1783 int UNUSED written = 0;
1784 IADDR UNUSED pc = abuf->addr;
1785 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1786
1787 {
1788 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
1789 * FLD (i_dr) = opval;
1790 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1791 }
1792
1793 #undef FLD
1794 }
1795 NEXT (vpc);
1796
1797 CASE (sem, INSN_LDUH_D) : /* lduh $dr,@($slo16,$sr) */
1798 {
1799 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1800 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1801 #define FLD(f) abuf->fields.sfmt_add3.f
1802 int UNUSED written = 0;
1803 IADDR UNUSED pc = abuf->addr;
1804 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1805
1806 {
1807 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1808 * FLD (i_dr) = opval;
1809 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1810 }
1811
1812 #undef FLD
1813 }
1814 NEXT (vpc);
1815
1816 CASE (sem, INSN_LD_PLUS) : /* ld $dr,@$sr+ */
1817 {
1818 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1819 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1820 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1821 int UNUSED written = 0;
1822 IADDR UNUSED pc = abuf->addr;
1823 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1824
1825 {
1826 SI temp0;SI temp1;
1827 temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1828 temp1 = ADDSI (* FLD (i_sr), 4);
1829 {
1830 SI opval = temp0;
1831 * FLD (i_dr) = opval;
1832 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1833 }
1834 {
1835 SI opval = temp1;
1836 * FLD (i_sr) = opval;
1837 TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
1838 }
1839 }
1840
1841 #undef FLD
1842 }
1843 NEXT (vpc);
1844
1845 CASE (sem, INSN_LD24) : /* ld24 $dr,$uimm24 */
1846 {
1847 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1848 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1849 #define FLD(f) abuf->fields.sfmt_ld24.f
1850 int UNUSED written = 0;
1851 IADDR UNUSED pc = abuf->addr;
1852 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1853
1854 {
1855 SI opval = FLD (i_uimm24);
1856 * FLD (i_dr) = opval;
1857 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1858 }
1859
1860 #undef FLD
1861 }
1862 NEXT (vpc);
1863
1864 CASE (sem, INSN_LDI8) : /* ldi8 $dr,$simm8 */
1865 {
1866 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1867 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1868 #define FLD(f) abuf->fields.sfmt_addi.f
1869 int UNUSED written = 0;
1870 IADDR UNUSED pc = abuf->addr;
1871 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1872
1873 {
1874 SI opval = FLD (f_simm8);
1875 * FLD (i_dr) = opval;
1876 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1877 }
1878
1879 #undef FLD
1880 }
1881 NEXT (vpc);
1882
1883 CASE (sem, INSN_LDI16) : /* ldi16 $dr,$hash$slo16 */
1884 {
1885 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1886 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1887 #define FLD(f) abuf->fields.sfmt_add3.f
1888 int UNUSED written = 0;
1889 IADDR UNUSED pc = abuf->addr;
1890 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1891
1892 {
1893 SI opval = FLD (f_simm16);
1894 * FLD (i_dr) = opval;
1895 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1896 }
1897
1898 #undef FLD
1899 }
1900 NEXT (vpc);
1901
1902 CASE (sem, INSN_LOCK) : /* lock $dr,@$sr */
1903 {
1904 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1905 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1906 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1907 int UNUSED written = 0;
1908 IADDR UNUSED pc = abuf->addr;
1909 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1910
1911 {
1912 {
1913 BI opval = 1;
1914 CPU (h_lock) = opval;
1915 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
1916 }
1917 {
1918 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1919 * FLD (i_dr) = opval;
1920 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1921 }
1922 }
1923
1924 #undef FLD
1925 }
1926 NEXT (vpc);
1927
1928 CASE (sem, INSN_MACHI_A) : /* machi $src1,$src2,$acc */
1929 {
1930 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1931 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1932 #define FLD(f) abuf->fields.sfmt_machi_a.f
1933 int UNUSED written = 0;
1934 IADDR UNUSED pc = abuf->addr;
1935 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1936
1937 {
1938 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
1939 SET_H_ACCUMS (FLD (f_acc), opval);
1940 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
1941 }
1942
1943 #undef FLD
1944 }
1945 NEXT (vpc);
1946
1947 CASE (sem, INSN_MACLO_A) : /* maclo $src1,$src2,$acc */
1948 {
1949 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1950 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1951 #define FLD(f) abuf->fields.sfmt_machi_a.f
1952 int UNUSED written = 0;
1953 IADDR UNUSED pc = abuf->addr;
1954 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1955
1956 {
1957 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1958 SET_H_ACCUMS (FLD (f_acc), opval);
1959 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
1960 }
1961
1962 #undef FLD
1963 }
1964 NEXT (vpc);
1965
1966 CASE (sem, INSN_MACWHI_A) : /* macwhi $src1,$src2,$acc */
1967 {
1968 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1969 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1970 #define FLD(f) abuf->fields.sfmt_machi_a.f
1971 int UNUSED written = 0;
1972 IADDR UNUSED pc = abuf->addr;
1973 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1974
1975 {
1976 DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))));
1977 SET_H_ACCUMS (FLD (f_acc), opval);
1978 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
1979 }
1980
1981 #undef FLD
1982 }
1983 NEXT (vpc);
1984
1985 CASE (sem, INSN_MACWLO_A) : /* macwlo $src1,$src2,$acc */
1986 {
1987 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1988 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1989 #define FLD(f) abuf->fields.sfmt_machi_a.f
1990 int UNUSED written = 0;
1991 IADDR UNUSED pc = abuf->addr;
1992 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1993
1994 {
1995 DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))));
1996 SET_H_ACCUMS (FLD (f_acc), opval);
1997 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
1998 }
1999
2000 #undef FLD
2001 }
2002 NEXT (vpc);
2003
2004 CASE (sem, INSN_MUL) : /* mul $dr,$sr */
2005 {
2006 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2007 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2008 #define FLD(f) abuf->fields.sfmt_add.f
2009 int UNUSED written = 0;
2010 IADDR UNUSED pc = abuf->addr;
2011 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2012
2013 {
2014 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
2015 * FLD (i_dr) = opval;
2016 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2017 }
2018
2019 #undef FLD
2020 }
2021 NEXT (vpc);
2022
2023 CASE (sem, INSN_MULHI_A) : /* mulhi $src1,$src2,$acc */
2024 {
2025 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2026 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2027 #define FLD(f) abuf->fields.sfmt_machi_a.f
2028 int UNUSED written = 0;
2029 IADDR UNUSED pc = abuf->addr;
2030 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2031
2032 {
2033 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
2034 SET_H_ACCUMS (FLD (f_acc), opval);
2035 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
2036 }
2037
2038 #undef FLD
2039 }
2040 NEXT (vpc);
2041
2042 CASE (sem, INSN_MULLO_A) : /* mullo $src1,$src2,$acc */
2043 {
2044 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2045 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2046 #define FLD(f) abuf->fields.sfmt_machi_a.f
2047 int UNUSED written = 0;
2048 IADDR UNUSED pc = abuf->addr;
2049 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2050
2051 {
2052 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
2053 SET_H_ACCUMS (FLD (f_acc), opval);
2054 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
2055 }
2056
2057 #undef FLD
2058 }
2059 NEXT (vpc);
2060
2061 CASE (sem, INSN_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
2062 {
2063 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2064 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2065 #define FLD(f) abuf->fields.sfmt_machi_a.f
2066 int UNUSED written = 0;
2067 IADDR UNUSED pc = abuf->addr;
2068 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2069
2070 {
2071 DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))));
2072 SET_H_ACCUMS (FLD (f_acc), opval);
2073 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
2074 }
2075
2076 #undef FLD
2077 }
2078 NEXT (vpc);
2079
2080 CASE (sem, INSN_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
2081 {
2082 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2083 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2084 #define FLD(f) abuf->fields.sfmt_machi_a.f
2085 int UNUSED written = 0;
2086 IADDR UNUSED pc = abuf->addr;
2087 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2088
2089 {
2090 DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))));
2091 SET_H_ACCUMS (FLD (f_acc), opval);
2092 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
2093 }
2094
2095 #undef FLD
2096 }
2097 NEXT (vpc);
2098
2099 CASE (sem, INSN_MV) : /* mv $dr,$sr */
2100 {
2101 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2102 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2103 #define FLD(f) abuf->fields.sfmt_ld_plus.f
2104 int UNUSED written = 0;
2105 IADDR UNUSED pc = abuf->addr;
2106 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2107
2108 {
2109 SI opval = * FLD (i_sr);
2110 * FLD (i_dr) = opval;
2111 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2112 }
2113
2114 #undef FLD
2115 }
2116 NEXT (vpc);
2117
2118 CASE (sem, INSN_MVFACHI_A) : /* mvfachi $dr,$accs */
2119 {
2120 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2121 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2122 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
2123 int UNUSED written = 0;
2124 IADDR UNUSED pc = abuf->addr;
2125 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2126
2127 {
2128 SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
2129 * FLD (i_dr) = opval;
2130 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2131 }
2132
2133 #undef FLD
2134 }
2135 NEXT (vpc);
2136
2137 CASE (sem, INSN_MVFACLO_A) : /* mvfaclo $dr,$accs */
2138 {
2139 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2140 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2141 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
2142 int UNUSED written = 0;
2143 IADDR UNUSED pc = abuf->addr;
2144 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2145
2146 {
2147 SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
2148 * FLD (i_dr) = opval;
2149 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2150 }
2151
2152 #undef FLD
2153 }
2154 NEXT (vpc);
2155
2156 CASE (sem, INSN_MVFACMI_A) : /* mvfacmi $dr,$accs */
2157 {
2158 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2159 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2160 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
2161 int UNUSED written = 0;
2162 IADDR UNUSED pc = abuf->addr;
2163 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2164
2165 {
2166 SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
2167 * FLD (i_dr) = opval;
2168 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2169 }
2170
2171 #undef FLD
2172 }
2173 NEXT (vpc);
2174
2175 CASE (sem, INSN_MVFC) : /* mvfc $dr,$scr */
2176 {
2177 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2178 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2179 #define FLD(f) abuf->fields.sfmt_mvfc.f
2180 int UNUSED written = 0;
2181 IADDR UNUSED pc = abuf->addr;
2182 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2183
2184 {
2185 SI opval = GET_H_CR (FLD (f_r2));
2186 * FLD (i_dr) = opval;
2187 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2188 }
2189
2190 #undef FLD
2191 }
2192 NEXT (vpc);
2193
2194 CASE (sem, INSN_MVTACHI_A) : /* mvtachi $src1,$accs */
2195 {
2196 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2197 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2198 #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
2199 int UNUSED written = 0;
2200 IADDR UNUSED pc = abuf->addr;
2201 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2202
2203 {
2204 DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
2205 SET_H_ACCUMS (FLD (f_accs), opval);
2206 TRACE_RESULT (current_cpu, abuf, "accs", 'D', opval);
2207 }
2208
2209 #undef FLD
2210 }
2211 NEXT (vpc);
2212
2213 CASE (sem, INSN_MVTACLO_A) : /* mvtaclo $src1,$accs */
2214 {
2215 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2216 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2217 #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
2218 int UNUSED written = 0;
2219 IADDR UNUSED pc = abuf->addr;
2220 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2221
2222 {
2223 DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
2224 SET_H_ACCUMS (FLD (f_accs), opval);
2225 TRACE_RESULT (current_cpu, abuf, "accs", 'D', opval);
2226 }
2227
2228 #undef FLD
2229 }
2230 NEXT (vpc);
2231
2232 CASE (sem, INSN_MVTC) : /* mvtc $sr,$dcr */
2233 {
2234 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2235 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2236 #define FLD(f) abuf->fields.sfmt_mvtc.f
2237 int UNUSED written = 0;
2238 IADDR UNUSED pc = abuf->addr;
2239 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2240
2241 {
2242 USI opval = * FLD (i_sr);
2243 SET_H_CR (FLD (f_r1), opval);
2244 TRACE_RESULT (current_cpu, abuf, "dcr", 'x', opval);
2245 }
2246
2247 #undef FLD
2248 }
2249 NEXT (vpc);
2250
2251 CASE (sem, INSN_NEG) : /* neg $dr,$sr */
2252 {
2253 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2254 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2255 #define FLD(f) abuf->fields.sfmt_ld_plus.f
2256 int UNUSED written = 0;
2257 IADDR UNUSED pc = abuf->addr;
2258 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2259
2260 {
2261 SI opval = NEGSI (* FLD (i_sr));
2262 * FLD (i_dr) = opval;
2263 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2264 }
2265
2266 #undef FLD
2267 }
2268 NEXT (vpc);
2269
2270 CASE (sem, INSN_NOP) : /* nop */
2271 {
2272 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2274 #define FLD(f) abuf->fields.fmt_empty.f
2275 int UNUSED written = 0;
2276 IADDR UNUSED pc = abuf->addr;
2277 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2278
2279 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
2280
2281 #undef FLD
2282 }
2283 NEXT (vpc);
2284
2285 CASE (sem, INSN_NOT) : /* not $dr,$sr */
2286 {
2287 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2288 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2289 #define FLD(f) abuf->fields.sfmt_ld_plus.f
2290 int UNUSED written = 0;
2291 IADDR UNUSED pc = abuf->addr;
2292 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2293
2294 {
2295 SI opval = INVSI (* FLD (i_sr));
2296 * FLD (i_dr) = opval;
2297 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2298 }
2299
2300 #undef FLD
2301 }
2302 NEXT (vpc);
2303
2304 CASE (sem, INSN_RAC_DSI) : /* rac $accd,$accs,$imm1 */
2305 {
2306 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2307 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2308 #define FLD(f) abuf->fields.sfmt_rac_dsi.f
2309 int UNUSED written = 0;
2310 IADDR UNUSED pc = abuf->addr;
2311 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2312
2313 {
2314 DI tmp_tmp1;
2315 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
2316 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
2317 {
2318 DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000)));
2319 SET_H_ACCUMS (FLD (f_accd), opval);
2320 TRACE_RESULT (current_cpu, abuf, "accd", 'D', opval);
2321 }
2322 }
2323
2324 #undef FLD
2325 }
2326 NEXT (vpc);
2327
2328 CASE (sem, INSN_RACH_DSI) : /* rach $accd,$accs,$imm1 */
2329 {
2330 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2331 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2332 #define FLD(f) abuf->fields.sfmt_rac_dsi.f
2333 int UNUSED written = 0;
2334 IADDR UNUSED pc = abuf->addr;
2335 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2336
2337 {
2338 DI tmp_tmp1;
2339 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
2340 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
2341 {
2342 DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0)));
2343 SET_H_ACCUMS (FLD (f_accd), opval);
2344 TRACE_RESULT (current_cpu, abuf, "accd", 'D', opval);
2345 }
2346 }
2347
2348 #undef FLD
2349 }
2350 NEXT (vpc);
2351
2352 CASE (sem, INSN_RTE) : /* rte */
2353 {
2354 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2355 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2356 #define FLD(f) abuf->fields.fmt_empty.f
2357 int UNUSED written = 0;
2358 IADDR UNUSED pc = abuf->addr;
2359 SEM_BRANCH_INIT
2360 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2361
2362 {
2363 {
2364 USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
2365 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2366 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
2367 }
2368 {
2369 USI opval = GET_H_CR (((UINT) 14));
2370 SET_H_CR (((UINT) 6), opval);
2371 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
2372 }
2373 {
2374 UQI opval = CPU (h_bpsw);
2375 SET_H_PSW (opval);
2376 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
2377 }
2378 {
2379 UQI opval = CPU (h_bbpsw);
2380 CPU (h_bpsw) = opval;
2381 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
2382 }
2383 }
2384
2385 SEM_BRANCH_FINI (vpc);
2386 #undef FLD
2387 }
2388 NEXT (vpc);
2389
2390 CASE (sem, INSN_SETH) : /* seth $dr,$hash$hi16 */
2391 {
2392 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2393 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2394 #define FLD(f) abuf->fields.sfmt_seth.f
2395 int UNUSED written = 0;
2396 IADDR UNUSED pc = abuf->addr;
2397 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2398
2399 {
2400 SI opval = SLLSI (FLD (f_hi16), 16);
2401 * FLD (i_dr) = opval;
2402 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2403 }
2404
2405 #undef FLD
2406 }
2407 NEXT (vpc);
2408
2409 CASE (sem, INSN_SLL) : /* sll $dr,$sr */
2410 {
2411 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2412 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2413 #define FLD(f) abuf->fields.sfmt_add.f
2414 int UNUSED written = 0;
2415 IADDR UNUSED pc = abuf->addr;
2416 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2417
2418 {
2419 SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2420 * FLD (i_dr) = opval;
2421 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2422 }
2423
2424 #undef FLD
2425 }
2426 NEXT (vpc);
2427
2428 CASE (sem, INSN_SLL3) : /* sll3 $dr,$sr,$simm16 */
2429 {
2430 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2431 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2432 #define FLD(f) abuf->fields.sfmt_add3.f
2433 int UNUSED written = 0;
2434 IADDR UNUSED pc = abuf->addr;
2435 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2436
2437 {
2438 SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2439 * FLD (i_dr) = opval;
2440 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2441 }
2442
2443 #undef FLD
2444 }
2445 NEXT (vpc);
2446
2447 CASE (sem, INSN_SLLI) : /* slli $dr,$uimm5 */
2448 {
2449 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2450 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2451 #define FLD(f) abuf->fields.sfmt_slli.f
2452 int UNUSED written = 0;
2453 IADDR UNUSED pc = abuf->addr;
2454 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2455
2456 {
2457 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
2458 * FLD (i_dr) = opval;
2459 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2460 }
2461
2462 #undef FLD
2463 }
2464 NEXT (vpc);
2465
2466 CASE (sem, INSN_SRA) : /* sra $dr,$sr */
2467 {
2468 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2469 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2470 #define FLD(f) abuf->fields.sfmt_add.f
2471 int UNUSED written = 0;
2472 IADDR UNUSED pc = abuf->addr;
2473 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2474
2475 {
2476 SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2477 * FLD (i_dr) = opval;
2478 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2479 }
2480
2481 #undef FLD
2482 }
2483 NEXT (vpc);
2484
2485 CASE (sem, INSN_SRA3) : /* sra3 $dr,$sr,$simm16 */
2486 {
2487 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2488 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2489 #define FLD(f) abuf->fields.sfmt_add3.f
2490 int UNUSED written = 0;
2491 IADDR UNUSED pc = abuf->addr;
2492 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2493
2494 {
2495 SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2496 * FLD (i_dr) = opval;
2497 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2498 }
2499
2500 #undef FLD
2501 }
2502 NEXT (vpc);
2503
2504 CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */
2505 {
2506 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2507 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2508 #define FLD(f) abuf->fields.sfmt_slli.f
2509 int UNUSED written = 0;
2510 IADDR UNUSED pc = abuf->addr;
2511 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2512
2513 {
2514 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
2515 * FLD (i_dr) = opval;
2516 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2517 }
2518
2519 #undef FLD
2520 }
2521 NEXT (vpc);
2522
2523 CASE (sem, INSN_SRL) : /* srl $dr,$sr */
2524 {
2525 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2526 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2527 #define FLD(f) abuf->fields.sfmt_add.f
2528 int UNUSED written = 0;
2529 IADDR UNUSED pc = abuf->addr;
2530 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2531
2532 {
2533 SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2534 * FLD (i_dr) = opval;
2535 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2536 }
2537
2538 #undef FLD
2539 }
2540 NEXT (vpc);
2541
2542 CASE (sem, INSN_SRL3) : /* srl3 $dr,$sr,$simm16 */
2543 {
2544 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2545 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2546 #define FLD(f) abuf->fields.sfmt_add3.f
2547 int UNUSED written = 0;
2548 IADDR UNUSED pc = abuf->addr;
2549 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2550
2551 {
2552 SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2553 * FLD (i_dr) = opval;
2554 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2555 }
2556
2557 #undef FLD
2558 }
2559 NEXT (vpc);
2560
2561 CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */
2562 {
2563 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2564 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2565 #define FLD(f) abuf->fields.sfmt_slli.f
2566 int UNUSED written = 0;
2567 IADDR UNUSED pc = abuf->addr;
2568 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2569
2570 {
2571 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
2572 * FLD (i_dr) = opval;
2573 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2574 }
2575
2576 #undef FLD
2577 }
2578 NEXT (vpc);
2579
2580 CASE (sem, INSN_ST) : /* st $src1,@$src2 */
2581 {
2582 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2583 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2584 #define FLD(f) abuf->fields.sfmt_st_plus.f
2585 int UNUSED written = 0;
2586 IADDR UNUSED pc = abuf->addr;
2587 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2588
2589 {
2590 SI opval = * FLD (i_src1);
2591 SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2592 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2593 }
2594
2595 #undef FLD
2596 }
2597 NEXT (vpc);
2598
2599 CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */
2600 {
2601 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2602 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2603 #define FLD(f) abuf->fields.sfmt_st_d.f
2604 int UNUSED written = 0;
2605 IADDR UNUSED pc = abuf->addr;
2606 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2607
2608 {
2609 SI opval = * FLD (i_src1);
2610 SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2611 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2612 }
2613
2614 #undef FLD
2615 }
2616 NEXT (vpc);
2617
2618 CASE (sem, INSN_STB) : /* stb $src1,@$src2 */
2619 {
2620 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2621 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2622 #define FLD(f) abuf->fields.sfmt_st_plus.f
2623 int UNUSED written = 0;
2624 IADDR UNUSED pc = abuf->addr;
2625 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2626
2627 {
2628 QI opval = * FLD (i_src1);
2629 SETMEMQI (current_cpu, pc, * FLD (i_src2), opval);
2630 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2631 }
2632
2633 #undef FLD
2634 }
2635 NEXT (vpc);
2636
2637 CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */
2638 {
2639 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2640 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2641 #define FLD(f) abuf->fields.sfmt_st_d.f
2642 int UNUSED written = 0;
2643 IADDR UNUSED pc = abuf->addr;
2644 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2645
2646 {
2647 QI opval = * FLD (i_src1);
2648 SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2649 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2650 }
2651
2652 #undef FLD
2653 }
2654 NEXT (vpc);
2655
2656 CASE (sem, INSN_STH) : /* sth $src1,@$src2 */
2657 {
2658 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2659 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2660 #define FLD(f) abuf->fields.sfmt_st_plus.f
2661 int UNUSED written = 0;
2662 IADDR UNUSED pc = abuf->addr;
2663 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2664
2665 {
2666 HI opval = * FLD (i_src1);
2667 SETMEMHI (current_cpu, pc, * FLD (i_src2), opval);
2668 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2669 }
2670
2671 #undef FLD
2672 }
2673 NEXT (vpc);
2674
2675 CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */
2676 {
2677 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2678 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2679 #define FLD(f) abuf->fields.sfmt_st_d.f
2680 int UNUSED written = 0;
2681 IADDR UNUSED pc = abuf->addr;
2682 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2683
2684 {
2685 HI opval = * FLD (i_src1);
2686 SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2687 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2688 }
2689
2690 #undef FLD
2691 }
2692 NEXT (vpc);
2693
2694 CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */
2695 {
2696 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2697 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2698 #define FLD(f) abuf->fields.sfmt_st_plus.f
2699 int UNUSED written = 0;
2700 IADDR UNUSED pc = abuf->addr;
2701 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2702
2703 {
2704 SI tmp_new_src2;
2705 tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
2706 {
2707 SI opval = * FLD (i_src1);
2708 SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2709 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2710 }
2711 {
2712 SI opval = tmp_new_src2;
2713 * FLD (i_src2) = opval;
2714 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
2715 }
2716 }
2717
2718 #undef FLD
2719 }
2720 NEXT (vpc);
2721
2722 CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */
2723 {
2724 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2725 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2726 #define FLD(f) abuf->fields.sfmt_st_plus.f
2727 int UNUSED written = 0;
2728 IADDR UNUSED pc = abuf->addr;
2729 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2730
2731 {
2732 SI tmp_new_src2;
2733 tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
2734 {
2735 SI opval = * FLD (i_src1);
2736 SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2737 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2738 }
2739 {
2740 SI opval = tmp_new_src2;
2741 * FLD (i_src2) = opval;
2742 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
2743 }
2744 }
2745
2746 #undef FLD
2747 }
2748 NEXT (vpc);
2749
2750 CASE (sem, INSN_SUB) : /* sub $dr,$sr */
2751 {
2752 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2753 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2754 #define FLD(f) abuf->fields.sfmt_add.f
2755 int UNUSED written = 0;
2756 IADDR UNUSED pc = abuf->addr;
2757 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2758
2759 {
2760 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
2761 * FLD (i_dr) = opval;
2762 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2763 }
2764
2765 #undef FLD
2766 }
2767 NEXT (vpc);
2768
2769 CASE (sem, INSN_SUBV) : /* subv $dr,$sr */
2770 {
2771 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2772 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2773 #define FLD(f) abuf->fields.sfmt_add.f
2774 int UNUSED written = 0;
2775 IADDR UNUSED pc = abuf->addr;
2776 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2777
2778 {
2779 SI temp0;BI temp1;
2780 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
2781 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
2782 {
2783 SI opval = temp0;
2784 * FLD (i_dr) = opval;
2785 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2786 }
2787 {
2788 BI opval = temp1;
2789 CPU (h_cond) = opval;
2790 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
2791 }
2792 }
2793
2794 #undef FLD
2795 }
2796 NEXT (vpc);
2797
2798 CASE (sem, INSN_SUBX) : /* subx $dr,$sr */
2799 {
2800 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2801 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2802 #define FLD(f) abuf->fields.sfmt_add.f
2803 int UNUSED written = 0;
2804 IADDR UNUSED pc = abuf->addr;
2805 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2806
2807 {
2808 SI temp0;BI temp1;
2809 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
2810 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
2811 {
2812 SI opval = temp0;
2813 * FLD (i_dr) = opval;
2814 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2815 }
2816 {
2817 BI opval = temp1;
2818 CPU (h_cond) = opval;
2819 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
2820 }
2821 }
2822
2823 #undef FLD
2824 }
2825 NEXT (vpc);
2826
2827 CASE (sem, INSN_TRAP) : /* trap $uimm4 */
2828 {
2829 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2830 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2831 #define FLD(f) abuf->fields.sfmt_trap.f
2832 int UNUSED written = 0;
2833 IADDR UNUSED pc = abuf->addr;
2834 SEM_BRANCH_INIT
2835 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2836
2837 {
2838 {
2839 USI opval = GET_H_CR (((UINT) 6));
2840 SET_H_CR (((UINT) 14), opval);
2841 TRACE_RESULT (current_cpu, abuf, "cr-14", 'x', opval);
2842 }
2843 {
2844 USI opval = ADDSI (pc, 4);
2845 SET_H_CR (((UINT) 6), opval);
2846 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
2847 }
2848 {
2849 UQI opval = CPU (h_bpsw);
2850 CPU (h_bbpsw) = opval;
2851 TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
2852 }
2853 {
2854 UQI opval = GET_H_PSW ();
2855 CPU (h_bpsw) = opval;
2856 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
2857 }
2858 {
2859 UQI opval = ANDQI (GET_H_PSW (), 128);
2860 SET_H_PSW (opval);
2861 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
2862 }
2863 {
2864 SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
2865 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2866 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
2867 }
2868 }
2869
2870 SEM_BRANCH_FINI (vpc);
2871 #undef FLD
2872 }
2873 NEXT (vpc);
2874
2875 CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */
2876 {
2877 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2878 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2879 #define FLD(f) abuf->fields.sfmt_st_plus.f
2880 int UNUSED written = 0;
2881 IADDR UNUSED pc = abuf->addr;
2882 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2883
2884 {
2885 if (CPU (h_lock)) {
2886 {
2887 SI opval = * FLD (i_src1);
2888 SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2889 written |= (1 << 4);
2890 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2891 }
2892 }
2893 {
2894 BI opval = 0;
2895 CPU (h_lock) = opval;
2896 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
2897 }
2898 }
2899
2900 abuf->written = written;
2901 #undef FLD
2902 }
2903 NEXT (vpc);
2904
2905 CASE (sem, INSN_SATB) : /* satb $dr,$sr */
2906 {
2907 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2908 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2909 #define FLD(f) abuf->fields.sfmt_ld_plus.f
2910 int UNUSED written = 0;
2911 IADDR UNUSED pc = abuf->addr;
2912 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2913
2914 {
2915 SI opval = (GESI (* FLD (i_sr), 127)) ? (127) : (LESI (* FLD (i_sr), -128)) ? (-128) : (* FLD (i_sr));
2916 * FLD (i_dr) = opval;
2917 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2918 }
2919
2920 #undef FLD
2921 }
2922 NEXT (vpc);
2923
2924 CASE (sem, INSN_SATH) : /* sath $dr,$sr */
2925 {
2926 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2927 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2928 #define FLD(f) abuf->fields.sfmt_ld_plus.f
2929 int UNUSED written = 0;
2930 IADDR UNUSED pc = abuf->addr;
2931 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2932
2933 {
2934 SI opval = (GESI (* FLD (i_sr), 32767)) ? (32767) : (LESI (* FLD (i_sr), -32768)) ? (-32768) : (* FLD (i_sr));
2935 * FLD (i_dr) = opval;
2936 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2937 }
2938
2939 #undef FLD
2940 }
2941 NEXT (vpc);
2942
2943 CASE (sem, INSN_SAT) : /* sat $dr,$sr */
2944 {
2945 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2946 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2947 #define FLD(f) abuf->fields.sfmt_ld_plus.f
2948 int UNUSED written = 0;
2949 IADDR UNUSED pc = abuf->addr;
2950 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2951
2952 {
2953 SI opval = ((CPU (h_cond)) ? (((LTSI (* FLD (i_sr), 0)) ? (2147483647) : (0x80000000))) : (* FLD (i_sr)));
2954 * FLD (i_dr) = opval;
2955 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2956 }
2957
2958 #undef FLD
2959 }
2960 NEXT (vpc);
2961
2962 CASE (sem, INSN_PCMPBZ) : /* pcmpbz $src2 */
2963 {
2964 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2965 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2966 #define FLD(f) abuf->fields.sfmt_st_plus.f
2967 int UNUSED written = 0;
2968 IADDR UNUSED pc = abuf->addr;
2969 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2970
2971 {
2972 BI opval = (EQSI (ANDSI (* FLD (i_src2), 255), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 65280), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 0xff000000), 0)) ? (1) : (0);
2973 CPU (h_cond) = opval;
2974 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
2975 }
2976
2977 #undef FLD
2978 }
2979 NEXT (vpc);
2980
2981 CASE (sem, INSN_SADD) : /* sadd */
2982 {
2983 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2985 #define FLD(f) abuf->fields.fmt_empty.f
2986 int UNUSED written = 0;
2987 IADDR UNUSED pc = abuf->addr;
2988 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2989
2990 {
2991 DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0)));
2992 SET_H_ACCUMS (((UINT) 0), opval);
2993 TRACE_RESULT (current_cpu, abuf, "accums-0", 'D', opval);
2994 }
2995
2996 #undef FLD
2997 }
2998 NEXT (vpc);
2999
3000 CASE (sem, INSN_MACWU1) : /* macwu1 $src1,$src2 */
3001 {
3002 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3003 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3004 #define FLD(f) abuf->fields.sfmt_st_plus.f
3005 int UNUSED written = 0;
3006 IADDR UNUSED pc = abuf->addr;
3007 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3008
3009 {
3010 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8);
3011 SET_H_ACCUMS (((UINT) 1), opval);
3012 TRACE_RESULT (current_cpu, abuf, "accums-1", 'D', opval);
3013 }
3014
3015 #undef FLD
3016 }
3017 NEXT (vpc);
3018
3019 CASE (sem, INSN_MSBLO) : /* msblo $src1,$src2 */
3020 {
3021 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3022 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3023 #define FLD(f) abuf->fields.sfmt_st_plus.f
3024 int UNUSED written = 0;
3025 IADDR UNUSED pc = abuf->addr;
3026 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3027
3028 {
3029 DI opval = SRADI (SLLDI (SUBDI (GET_H_ACCUM (), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (* FLD (i_src1))), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 32), 16)), 8), 8);
3030 SET_H_ACCUM (opval);
3031 TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
3032 }
3033
3034 #undef FLD
3035 }
3036 NEXT (vpc);
3037
3038 CASE (sem, INSN_MULWU1) : /* mulwu1 $src1,$src2 */
3039 {
3040 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3041 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3042 #define FLD(f) abuf->fields.sfmt_st_plus.f
3043 int UNUSED written = 0;
3044 IADDR UNUSED pc = abuf->addr;
3045 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3046
3047 {
3048 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16);
3049 SET_H_ACCUMS (((UINT) 1), opval);
3050 TRACE_RESULT (current_cpu, abuf, "accums-1", 'D', opval);
3051 }
3052
3053 #undef FLD
3054 }
3055 NEXT (vpc);
3056
3057 CASE (sem, INSN_MACLH1) : /* maclh1 $src1,$src2 */
3058 {
3059 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3060 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3061 #define FLD(f) abuf->fields.sfmt_st_plus.f
3062 int UNUSED written = 0;
3063 IADDR UNUSED pc = abuf->addr;
3064 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3065
3066 {
3067 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (* FLD (i_src1))), SRASI (* FLD (i_src2), 16))), 16)), 8), 8);
3068 SET_H_ACCUMS (((UINT) 1), opval);
3069 TRACE_RESULT (current_cpu, abuf, "accums-1", 'D', opval);
3070 }
3071
3072 #undef FLD
3073 }
3074 NEXT (vpc);
3075
3076 CASE (sem, INSN_SC) : /* sc */
3077 {
3078 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3080 #define FLD(f) abuf->fields.fmt_empty.f
3081 int UNUSED written = 0;
3082 IADDR UNUSED pc = abuf->addr;
3083 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3084
3085 if (ZEXTBISI (CPU (h_cond)))
3086 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
3087
3088 #undef FLD
3089 }
3090 NEXT (vpc);
3091
3092 CASE (sem, INSN_SNC) : /* snc */
3093 {
3094 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3095 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3096 #define FLD(f) abuf->fields.fmt_empty.f
3097 int UNUSED written = 0;
3098 IADDR UNUSED pc = abuf->addr;
3099 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3100
3101 if (ZEXTBISI (NOTBI (CPU (h_cond))))
3102 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
3103
3104 #undef FLD
3105 }
3106 NEXT (vpc);
3107
3108 CASE (sem, INSN_PAR_ADD) : /* add $dr,$sr */
3109 {
3110 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3111 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3112 #define FLD(f) abuf->fields.sfmt_add.f
3113 #define OPRND(f) par_exec->operands.sfmt_add.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 = ADDSI (* FLD (i_dr), * FLD (i_sr));
3120 OPRND (dr) = opval;
3121 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3122 }
3123
3124 #undef OPRND
3125 #undef FLD
3126 }
3127 NEXT (vpc);
3128
3129 CASE (sem, INSN_WRITE_ADD) : /* add $dr,$sr */
3130 {
3131 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3132 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3133 #define FLD(f) abuf->fields.sfmt_add.f
3134 #define OPRND(f) par_exec->operands.sfmt_add.f
3135 int UNUSED written = abuf->written;
3136 IADDR UNUSED pc = abuf->addr;
3137 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3138
3139 * FLD (i_dr) = OPRND (dr);
3140
3141 #undef OPRND
3142 #undef FLD
3143 }
3144 NEXT (vpc);
3145
3146 CASE (sem, INSN_PAR_AND) : /* and $dr,$sr */
3147 {
3148 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3149 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3150 #define FLD(f) abuf->fields.sfmt_add.f
3151 #define OPRND(f) par_exec->operands.sfmt_add.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 = ANDSI (* FLD (i_dr), * FLD (i_sr));
3158 OPRND (dr) = opval;
3159 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3160 }
3161
3162 #undef OPRND
3163 #undef FLD
3164 }
3165 NEXT (vpc);
3166
3167 CASE (sem, INSN_WRITE_AND) : /* and $dr,$sr */
3168 {
3169 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3170 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3171 #define FLD(f) abuf->fields.sfmt_add.f
3172 #define OPRND(f) par_exec->operands.sfmt_add.f
3173 int UNUSED written = abuf->written;
3174 IADDR UNUSED pc = abuf->addr;
3175 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3176
3177 * FLD (i_dr) = OPRND (dr);
3178
3179 #undef OPRND
3180 #undef FLD
3181 }
3182 NEXT (vpc);
3183
3184 CASE (sem, INSN_PAR_OR) : /* or $dr,$sr */
3185 {
3186 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3187 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3188 #define FLD(f) abuf->fields.sfmt_add.f
3189 #define OPRND(f) par_exec->operands.sfmt_add.f
3190 int UNUSED written = 0;
3191 IADDR UNUSED pc = abuf->addr;
3192 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3193
3194 {
3195 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
3196 OPRND (dr) = opval;
3197 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3198 }
3199
3200 #undef OPRND
3201 #undef FLD
3202 }
3203 NEXT (vpc);
3204
3205 CASE (sem, INSN_WRITE_OR) : /* or $dr,$sr */
3206 {
3207 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3208 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3209 #define FLD(f) abuf->fields.sfmt_add.f
3210 #define OPRND(f) par_exec->operands.sfmt_add.f
3211 int UNUSED written = abuf->written;
3212 IADDR UNUSED pc = abuf->addr;
3213 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3214
3215 * FLD (i_dr) = OPRND (dr);
3216
3217 #undef OPRND
3218 #undef FLD
3219 }
3220 NEXT (vpc);
3221
3222 CASE (sem, INSN_PAR_XOR) : /* xor $dr,$sr */
3223 {
3224 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3225 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3226 #define FLD(f) abuf->fields.sfmt_add.f
3227 #define OPRND(f) par_exec->operands.sfmt_add.f
3228 int UNUSED written = 0;
3229 IADDR UNUSED pc = abuf->addr;
3230 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3231
3232 {
3233 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
3234 OPRND (dr) = opval;
3235 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3236 }
3237
3238 #undef OPRND
3239 #undef FLD
3240 }
3241 NEXT (vpc);
3242
3243 CASE (sem, INSN_WRITE_XOR) : /* xor $dr,$sr */
3244 {
3245 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3246 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3247 #define FLD(f) abuf->fields.sfmt_add.f
3248 #define OPRND(f) par_exec->operands.sfmt_add.f
3249 int UNUSED written = abuf->written;
3250 IADDR UNUSED pc = abuf->addr;
3251 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3252
3253 * FLD (i_dr) = OPRND (dr);
3254
3255 #undef OPRND
3256 #undef FLD
3257 }
3258 NEXT (vpc);
3259
3260 CASE (sem, INSN_PAR_ADDI) : /* addi $dr,$simm8 */
3261 {
3262 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3263 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3264 #define FLD(f) abuf->fields.sfmt_addi.f
3265 #define OPRND(f) par_exec->operands.sfmt_addi.f
3266 int UNUSED written = 0;
3267 IADDR UNUSED pc = abuf->addr;
3268 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3269
3270 {
3271 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
3272 OPRND (dr) = opval;
3273 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3274 }
3275
3276 #undef OPRND
3277 #undef FLD
3278 }
3279 NEXT (vpc);
3280
3281 CASE (sem, INSN_WRITE_ADDI) : /* addi $dr,$simm8 */
3282 {
3283 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3284 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3285 #define FLD(f) abuf->fields.sfmt_addi.f
3286 #define OPRND(f) par_exec->operands.sfmt_addi.f
3287 int UNUSED written = abuf->written;
3288 IADDR UNUSED pc = abuf->addr;
3289 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3290
3291 * FLD (i_dr) = OPRND (dr);
3292
3293 #undef OPRND
3294 #undef FLD
3295 }
3296 NEXT (vpc);
3297
3298 CASE (sem, INSN_PAR_ADDV) : /* addv $dr,$sr */
3299 {
3300 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3301 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3302 #define FLD(f) abuf->fields.sfmt_add.f
3303 #define OPRND(f) par_exec->operands.sfmt_addv.f
3304 int UNUSED written = 0;
3305 IADDR UNUSED pc = abuf->addr;
3306 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3307
3308 {
3309 SI temp0;BI temp1;
3310 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
3311 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
3312 {
3313 SI opval = temp0;
3314 OPRND (dr) = opval;
3315 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3316 }
3317 {
3318 BI opval = temp1;
3319 OPRND (condbit) = opval;
3320 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3321 }
3322 }
3323
3324 #undef OPRND
3325 #undef FLD
3326 }
3327 NEXT (vpc);
3328
3329 CASE (sem, INSN_WRITE_ADDV) : /* addv $dr,$sr */
3330 {
3331 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3332 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3333 #define FLD(f) abuf->fields.sfmt_add.f
3334 #define OPRND(f) par_exec->operands.sfmt_addv.f
3335 int UNUSED written = abuf->written;
3336 IADDR UNUSED pc = abuf->addr;
3337 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3338
3339 CPU (h_cond) = OPRND (condbit);
3340 * FLD (i_dr) = OPRND (dr);
3341
3342 #undef OPRND
3343 #undef FLD
3344 }
3345 NEXT (vpc);
3346
3347 CASE (sem, INSN_PAR_ADDX) : /* addx $dr,$sr */
3348 {
3349 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3350 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3351 #define FLD(f) abuf->fields.sfmt_add.f
3352 #define OPRND(f) par_exec->operands.sfmt_addx.f
3353 int UNUSED written = 0;
3354 IADDR UNUSED pc = abuf->addr;
3355 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3356
3357 {
3358 SI temp0;BI temp1;
3359 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3360 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3361 {
3362 SI opval = temp0;
3363 OPRND (dr) = opval;
3364 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3365 }
3366 {
3367 BI opval = temp1;
3368 OPRND (condbit) = opval;
3369 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3370 }
3371 }
3372
3373 #undef OPRND
3374 #undef FLD
3375 }
3376 NEXT (vpc);
3377
3378 CASE (sem, INSN_WRITE_ADDX) : /* addx $dr,$sr */
3379 {
3380 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3381 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3382 #define FLD(f) abuf->fields.sfmt_add.f
3383 #define OPRND(f) par_exec->operands.sfmt_addx.f
3384 int UNUSED written = abuf->written;
3385 IADDR UNUSED pc = abuf->addr;
3386 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3387
3388 CPU (h_cond) = OPRND (condbit);
3389 * FLD (i_dr) = OPRND (dr);
3390
3391 #undef OPRND
3392 #undef FLD
3393 }
3394 NEXT (vpc);
3395
3396 CASE (sem, INSN_PAR_BC8) : /* bc.s $disp8 */
3397 {
3398 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3399 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3400 #define FLD(f) abuf->fields.sfmt_bl8.f
3401 #define OPRND(f) par_exec->operands.sfmt_bc8.f
3402 int UNUSED written = 0;
3403 IADDR UNUSED pc = abuf->addr;
3404 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3405
3406 if (CPU (h_cond)) {
3407 {
3408 USI opval = FLD (i_disp8);
3409 OPRND (pc) = opval;
3410 written |= (1 << 2);
3411 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3412 }
3413 }
3414
3415 abuf->written = written;
3416 #undef OPRND
3417 #undef FLD
3418 }
3419 NEXT (vpc);
3420
3421 CASE (sem, INSN_WRITE_BC8) : /* bc.s $disp8 */
3422 {
3423 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3424 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3425 #define FLD(f) abuf->fields.sfmt_bl8.f
3426 #define OPRND(f) par_exec->operands.sfmt_bc8.f
3427 int UNUSED written = abuf->written;
3428 IADDR UNUSED pc = abuf->addr;
3429 SEM_BRANCH_INIT
3430 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3431
3432 if (written & (1 << 2))
3433 {
3434 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3435 }
3436
3437 SEM_BRANCH_FINI (vpc);
3438 #undef OPRND
3439 #undef FLD
3440 }
3441 NEXT (vpc);
3442
3443 CASE (sem, INSN_PAR_BL8) : /* bl.s $disp8 */
3444 {
3445 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3446 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3447 #define FLD(f) abuf->fields.sfmt_bl8.f
3448 #define OPRND(f) par_exec->operands.sfmt_bl8.f
3449 int UNUSED written = 0;
3450 IADDR UNUSED pc = abuf->addr;
3451 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3452
3453 {
3454 {
3455 SI opval = ADDSI (ANDSI (pc, -4), 4);
3456 OPRND (h_gr_14) = opval;
3457 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
3458 }
3459 {
3460 USI opval = FLD (i_disp8);
3461 OPRND (pc) = opval;
3462 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3463 }
3464 }
3465
3466 #undef OPRND
3467 #undef FLD
3468 }
3469 NEXT (vpc);
3470
3471 CASE (sem, INSN_WRITE_BL8) : /* bl.s $disp8 */
3472 {
3473 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3474 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3475 #define FLD(f) abuf->fields.sfmt_bl8.f
3476 #define OPRND(f) par_exec->operands.sfmt_bl8.f
3477 int UNUSED written = abuf->written;
3478 IADDR UNUSED pc = abuf->addr;
3479 SEM_BRANCH_INIT
3480 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3481
3482 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3483 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3484
3485 SEM_BRANCH_FINI (vpc);
3486 #undef OPRND
3487 #undef FLD
3488 }
3489 NEXT (vpc);
3490
3491 CASE (sem, INSN_PAR_BCL8) : /* bcl.s $disp8 */
3492 {
3493 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3494 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3495 #define FLD(f) abuf->fields.sfmt_bl8.f
3496 #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3497 int UNUSED written = 0;
3498 IADDR UNUSED pc = abuf->addr;
3499 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3500
3501 if (CPU (h_cond)) {
3502 {
3503 {
3504 SI opval = ADDSI (ANDSI (pc, -4), 4);
3505 OPRND (h_gr_14) = opval;
3506 written |= (1 << 3);
3507 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
3508 }
3509 {
3510 USI opval = FLD (i_disp8);
3511 OPRND (pc) = opval;
3512 written |= (1 << 4);
3513 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3514 }
3515 }
3516 }
3517
3518 abuf->written = written;
3519 #undef OPRND
3520 #undef FLD
3521 }
3522 NEXT (vpc);
3523
3524 CASE (sem, INSN_WRITE_BCL8) : /* bcl.s $disp8 */
3525 {
3526 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3527 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3528 #define FLD(f) abuf->fields.sfmt_bl8.f
3529 #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3530 int UNUSED written = abuf->written;
3531 IADDR UNUSED pc = abuf->addr;
3532 SEM_BRANCH_INIT
3533 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3534
3535 if (written & (1 << 3))
3536 {
3537 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3538 }
3539 if (written & (1 << 4))
3540 {
3541 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3542 }
3543
3544 SEM_BRANCH_FINI (vpc);
3545 #undef OPRND
3546 #undef FLD
3547 }
3548 NEXT (vpc);
3549
3550 CASE (sem, INSN_PAR_BNC8) : /* bnc.s $disp8 */
3551 {
3552 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3553 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3554 #define FLD(f) abuf->fields.sfmt_bl8.f
3555 #define OPRND(f) par_exec->operands.sfmt_bc8.f
3556 int UNUSED written = 0;
3557 IADDR UNUSED pc = abuf->addr;
3558 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3559
3560 if (NOTBI (CPU (h_cond))) {
3561 {
3562 USI opval = FLD (i_disp8);
3563 OPRND (pc) = opval;
3564 written |= (1 << 2);
3565 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3566 }
3567 }
3568
3569 abuf->written = written;
3570 #undef OPRND
3571 #undef FLD
3572 }
3573 NEXT (vpc);
3574
3575 CASE (sem, INSN_WRITE_BNC8) : /* bnc.s $disp8 */
3576 {
3577 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3578 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3579 #define FLD(f) abuf->fields.sfmt_bl8.f
3580 #define OPRND(f) par_exec->operands.sfmt_bc8.f
3581 int UNUSED written = abuf->written;
3582 IADDR UNUSED pc = abuf->addr;
3583 SEM_BRANCH_INIT
3584 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3585
3586 if (written & (1 << 2))
3587 {
3588 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3589 }
3590
3591 SEM_BRANCH_FINI (vpc);
3592 #undef OPRND
3593 #undef FLD
3594 }
3595 NEXT (vpc);
3596
3597 CASE (sem, INSN_PAR_BRA8) : /* bra.s $disp8 */
3598 {
3599 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3600 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3601 #define FLD(f) abuf->fields.sfmt_bl8.f
3602 #define OPRND(f) par_exec->operands.sfmt_bra8.f
3603 int UNUSED written = 0;
3604 IADDR UNUSED pc = abuf->addr;
3605 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3606
3607 {
3608 USI opval = FLD (i_disp8);
3609 OPRND (pc) = opval;
3610 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3611 }
3612
3613 #undef OPRND
3614 #undef FLD
3615 }
3616 NEXT (vpc);
3617
3618 CASE (sem, INSN_WRITE_BRA8) : /* bra.s $disp8 */
3619 {
3620 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3621 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3622 #define FLD(f) abuf->fields.sfmt_bl8.f
3623 #define OPRND(f) par_exec->operands.sfmt_bra8.f
3624 int UNUSED written = abuf->written;
3625 IADDR UNUSED pc = abuf->addr;
3626 SEM_BRANCH_INIT
3627 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3628
3629 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3630
3631 SEM_BRANCH_FINI (vpc);
3632 #undef OPRND
3633 #undef FLD
3634 }
3635 NEXT (vpc);
3636
3637 CASE (sem, INSN_PAR_BNCL8) : /* bncl.s $disp8 */
3638 {
3639 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3640 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3641 #define FLD(f) abuf->fields.sfmt_bl8.f
3642 #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3643 int UNUSED written = 0;
3644 IADDR UNUSED pc = abuf->addr;
3645 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3646
3647 if (NOTBI (CPU (h_cond))) {
3648 {
3649 {
3650 SI opval = ADDSI (ANDSI (pc, -4), 4);
3651 OPRND (h_gr_14) = opval;
3652 written |= (1 << 3);
3653 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
3654 }
3655 {
3656 USI opval = FLD (i_disp8);
3657 OPRND (pc) = opval;
3658 written |= (1 << 4);
3659 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3660 }
3661 }
3662 }
3663
3664 abuf->written = written;
3665 #undef OPRND
3666 #undef FLD
3667 }
3668 NEXT (vpc);
3669
3670 CASE (sem, INSN_WRITE_BNCL8) : /* bncl.s $disp8 */
3671 {
3672 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3673 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3674 #define FLD(f) abuf->fields.sfmt_bl8.f
3675 #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3676 int UNUSED written = abuf->written;
3677 IADDR UNUSED pc = abuf->addr;
3678 SEM_BRANCH_INIT
3679 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3680
3681 if (written & (1 << 3))
3682 {
3683 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3684 }
3685 if (written & (1 << 4))
3686 {
3687 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3688 }
3689
3690 SEM_BRANCH_FINI (vpc);
3691 #undef OPRND
3692 #undef FLD
3693 }
3694 NEXT (vpc);
3695
3696 CASE (sem, INSN_PAR_CMP) : /* cmp $src1,$src2 */
3697 {
3698 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3699 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3700 #define FLD(f) abuf->fields.sfmt_st_plus.f
3701 #define OPRND(f) par_exec->operands.sfmt_cmp.f
3702 int UNUSED written = 0;
3703 IADDR UNUSED pc = abuf->addr;
3704 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3705
3706 {
3707 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
3708 OPRND (condbit) = opval;
3709 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3710 }
3711
3712 #undef OPRND
3713 #undef FLD
3714 }
3715 NEXT (vpc);
3716
3717 CASE (sem, INSN_WRITE_CMP) : /* cmp $src1,$src2 */
3718 {
3719 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3720 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3721 #define FLD(f) abuf->fields.sfmt_st_plus.f
3722 #define OPRND(f) par_exec->operands.sfmt_cmp.f
3723 int UNUSED written = abuf->written;
3724 IADDR UNUSED pc = abuf->addr;
3725 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3726
3727 CPU (h_cond) = OPRND (condbit);
3728
3729 #undef OPRND
3730 #undef FLD
3731 }
3732 NEXT (vpc);
3733
3734 CASE (sem, INSN_PAR_CMPU) : /* cmpu $src1,$src2 */
3735 {
3736 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3737 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3738 #define FLD(f) abuf->fields.sfmt_st_plus.f
3739 #define OPRND(f) par_exec->operands.sfmt_cmp.f
3740 int UNUSED written = 0;
3741 IADDR UNUSED pc = abuf->addr;
3742 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3743
3744 {
3745 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
3746 OPRND (condbit) = opval;
3747 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3748 }
3749
3750 #undef OPRND
3751 #undef FLD
3752 }
3753 NEXT (vpc);
3754
3755 CASE (sem, INSN_WRITE_CMPU) : /* cmpu $src1,$src2 */
3756 {
3757 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3758 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3759 #define FLD(f) abuf->fields.sfmt_st_plus.f
3760 #define OPRND(f) par_exec->operands.sfmt_cmp.f
3761 int UNUSED written = abuf->written;
3762 IADDR UNUSED pc = abuf->addr;
3763 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3764
3765 CPU (h_cond) = OPRND (condbit);
3766
3767 #undef OPRND
3768 #undef FLD
3769 }
3770 NEXT (vpc);
3771
3772 CASE (sem, INSN_PAR_CMPEQ) : /* cmpeq $src1,$src2 */
3773 {
3774 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3775 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3776 #define FLD(f) abuf->fields.sfmt_st_plus.f
3777 #define OPRND(f) par_exec->operands.sfmt_cmp.f
3778 int UNUSED written = 0;
3779 IADDR UNUSED pc = abuf->addr;
3780 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3781
3782 {
3783 BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
3784 OPRND (condbit) = opval;
3785 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3786 }
3787
3788 #undef OPRND
3789 #undef FLD
3790 }
3791 NEXT (vpc);
3792
3793 CASE (sem, INSN_WRITE_CMPEQ) : /* cmpeq $src1,$src2 */
3794 {
3795 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3796 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3797 #define FLD(f) abuf->fields.sfmt_st_plus.f
3798 #define OPRND(f) par_exec->operands.sfmt_cmp.f
3799 int UNUSED written = abuf->written;
3800 IADDR UNUSED pc = abuf->addr;
3801 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3802
3803 CPU (h_cond) = OPRND (condbit);
3804
3805 #undef OPRND
3806 #undef FLD
3807 }
3808 NEXT (vpc);
3809
3810 CASE (sem, INSN_PAR_CMPZ) : /* cmpz $src2 */
3811 {
3812 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3813 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3814 #define FLD(f) abuf->fields.sfmt_st_plus.f
3815 #define OPRND(f) par_exec->operands.sfmt_cmpz.f
3816 int UNUSED written = 0;
3817 IADDR UNUSED pc = abuf->addr;
3818 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3819
3820 {
3821 BI opval = EQSI (* FLD (i_src2), 0);
3822 OPRND (condbit) = opval;
3823 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3824 }
3825
3826 #undef OPRND
3827 #undef FLD
3828 }
3829 NEXT (vpc);
3830
3831 CASE (sem, INSN_WRITE_CMPZ) : /* cmpz $src2 */
3832 {
3833 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3834 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3835 #define FLD(f) abuf->fields.sfmt_st_plus.f
3836 #define OPRND(f) par_exec->operands.sfmt_cmpz.f
3837 int UNUSED written = abuf->written;
3838 IADDR UNUSED pc = abuf->addr;
3839 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3840
3841 CPU (h_cond) = OPRND (condbit);
3842
3843 #undef OPRND
3844 #undef FLD
3845 }
3846 NEXT (vpc);
3847
3848 CASE (sem, INSN_PAR_JC) : /* jc $sr */
3849 {
3850 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3851 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3852 #define FLD(f) abuf->fields.sfmt_mvtc.f
3853 #define OPRND(f) par_exec->operands.sfmt_jc.f
3854 int UNUSED written = 0;
3855 IADDR UNUSED pc = abuf->addr;
3856 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3857
3858 if (CPU (h_cond)) {
3859 {
3860 USI opval = ANDSI (* FLD (i_sr), -4);
3861 OPRND (pc) = opval;
3862 written |= (1 << 2);
3863 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3864 }
3865 }
3866
3867 abuf->written = written;
3868 #undef OPRND
3869 #undef FLD
3870 }
3871 NEXT (vpc);
3872
3873 CASE (sem, INSN_WRITE_JC) : /* jc $sr */
3874 {
3875 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3876 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3877 #define FLD(f) abuf->fields.sfmt_mvtc.f
3878 #define OPRND(f) par_exec->operands.sfmt_jc.f
3879 int UNUSED written = abuf->written;
3880 IADDR UNUSED pc = abuf->addr;
3881 SEM_BRANCH_INIT
3882 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3883
3884 if (written & (1 << 2))
3885 {
3886 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3887 }
3888
3889 SEM_BRANCH_FINI (vpc);
3890 #undef OPRND
3891 #undef FLD
3892 }
3893 NEXT (vpc);
3894
3895 CASE (sem, INSN_PAR_JNC) : /* jnc $sr */
3896 {
3897 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3898 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3899 #define FLD(f) abuf->fields.sfmt_mvtc.f
3900 #define OPRND(f) par_exec->operands.sfmt_jc.f
3901 int UNUSED written = 0;
3902 IADDR UNUSED pc = abuf->addr;
3903 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3904
3905 if (NOTBI (CPU (h_cond))) {
3906 {
3907 USI opval = ANDSI (* FLD (i_sr), -4);
3908 OPRND (pc) = opval;
3909 written |= (1 << 2);
3910 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3911 }
3912 }
3913
3914 abuf->written = written;
3915 #undef OPRND
3916 #undef FLD
3917 }
3918 NEXT (vpc);
3919
3920 CASE (sem, INSN_WRITE_JNC) : /* jnc $sr */
3921 {
3922 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3923 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3924 #define FLD(f) abuf->fields.sfmt_mvtc.f
3925 #define OPRND(f) par_exec->operands.sfmt_jc.f
3926 int UNUSED written = abuf->written;
3927 IADDR UNUSED pc = abuf->addr;
3928 SEM_BRANCH_INIT
3929 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3930
3931 if (written & (1 << 2))
3932 {
3933 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3934 }
3935
3936 SEM_BRANCH_FINI (vpc);
3937 #undef OPRND
3938 #undef FLD
3939 }
3940 NEXT (vpc);
3941
3942 CASE (sem, INSN_PAR_JL) : /* jl $sr */
3943 {
3944 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3945 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3946 #define FLD(f) abuf->fields.sfmt_jl.f
3947 #define OPRND(f) par_exec->operands.sfmt_jl.f
3948 int UNUSED written = 0;
3949 IADDR UNUSED pc = abuf->addr;
3950 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3951
3952 {
3953 SI temp0;USI temp1;
3954 temp0 = ADDSI (ANDSI (pc, -4), 4);
3955 temp1 = ANDSI (* FLD (i_sr), -4);
3956 {
3957 SI opval = temp0;
3958 OPRND (h_gr_14) = opval;
3959 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
3960 }
3961 {
3962 USI opval = temp1;
3963 OPRND (pc) = opval;
3964 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3965 }
3966 }
3967
3968 #undef OPRND
3969 #undef FLD
3970 }
3971 NEXT (vpc);
3972
3973 CASE (sem, INSN_WRITE_JL) : /* jl $sr */
3974 {
3975 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3976 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3977 #define FLD(f) abuf->fields.sfmt_jl.f
3978 #define OPRND(f) par_exec->operands.sfmt_jl.f
3979 int UNUSED written = abuf->written;
3980 IADDR UNUSED pc = abuf->addr;
3981 SEM_BRANCH_INIT
3982 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3983
3984 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3985 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3986
3987 SEM_BRANCH_FINI (vpc);
3988 #undef OPRND
3989 #undef FLD
3990 }
3991 NEXT (vpc);
3992
3993 CASE (sem, INSN_PAR_JMP) : /* jmp $sr */
3994 {
3995 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3996 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3997 #define FLD(f) abuf->fields.sfmt_mvtc.f
3998 #define OPRND(f) par_exec->operands.sfmt_jmp.f
3999 int UNUSED written = 0;
4000 IADDR UNUSED pc = abuf->addr;
4001 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4002
4003 {
4004 USI opval = ANDSI (* FLD (i_sr), -4);
4005 OPRND (pc) = opval;
4006 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4007 }
4008
4009 #undef OPRND
4010 #undef FLD
4011 }
4012 NEXT (vpc);
4013
4014 CASE (sem, INSN_WRITE_JMP) : /* jmp $sr */
4015 {
4016 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4017 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4018 #define FLD(f) abuf->fields.sfmt_mvtc.f
4019 #define OPRND(f) par_exec->operands.sfmt_jmp.f
4020 int UNUSED written = abuf->written;
4021 IADDR UNUSED pc = abuf->addr;
4022 SEM_BRANCH_INIT
4023 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4024
4025 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4026
4027 SEM_BRANCH_FINI (vpc);
4028 #undef OPRND
4029 #undef FLD
4030 }
4031 NEXT (vpc);
4032
4033 CASE (sem, INSN_PAR_LD) : /* ld $dr,@$sr */
4034 {
4035 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4036 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4037 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4038 #define OPRND(f) par_exec->operands.sfmt_ld.f
4039 int UNUSED written = 0;
4040 IADDR UNUSED pc = abuf->addr;
4041 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4042
4043 {
4044 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4045 OPRND (dr) = opval;
4046 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4047 }
4048
4049 #undef OPRND
4050 #undef FLD
4051 }
4052 NEXT (vpc);
4053
4054 CASE (sem, INSN_WRITE_LD) : /* ld $dr,@$sr */
4055 {
4056 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4057 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4058 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4059 #define OPRND(f) par_exec->operands.sfmt_ld.f
4060 int UNUSED written = abuf->written;
4061 IADDR UNUSED pc = abuf->addr;
4062 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4063
4064 * FLD (i_dr) = OPRND (dr);
4065
4066 #undef OPRND
4067 #undef FLD
4068 }
4069 NEXT (vpc);
4070
4071 CASE (sem, INSN_PAR_LDB) : /* ldb $dr,@$sr */
4072 {
4073 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4074 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4075 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4076 #define OPRND(f) par_exec->operands.sfmt_ld.f
4077 int UNUSED written = 0;
4078 IADDR UNUSED pc = abuf->addr;
4079 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4080
4081 {
4082 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
4083 OPRND (dr) = opval;
4084 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4085 }
4086
4087 #undef OPRND
4088 #undef FLD
4089 }
4090 NEXT (vpc);
4091
4092 CASE (sem, INSN_WRITE_LDB) : /* ldb $dr,@$sr */
4093 {
4094 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4095 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4096 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4097 #define OPRND(f) par_exec->operands.sfmt_ld.f
4098 int UNUSED written = abuf->written;
4099 IADDR UNUSED pc = abuf->addr;
4100 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4101
4102 * FLD (i_dr) = OPRND (dr);
4103
4104 #undef OPRND
4105 #undef FLD
4106 }
4107 NEXT (vpc);
4108
4109 CASE (sem, INSN_PAR_LDH) : /* ldh $dr,@$sr */
4110 {
4111 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4112 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4113 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4114 #define OPRND(f) par_exec->operands.sfmt_ld.f
4115 int UNUSED written = 0;
4116 IADDR UNUSED pc = abuf->addr;
4117 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4118
4119 {
4120 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
4121 OPRND (dr) = opval;
4122 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4123 }
4124
4125 #undef OPRND
4126 #undef FLD
4127 }
4128 NEXT (vpc);
4129
4130 CASE (sem, INSN_WRITE_LDH) : /* ldh $dr,@$sr */
4131 {
4132 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4133 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4134 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4135 #define OPRND(f) par_exec->operands.sfmt_ld.f
4136 int UNUSED written = abuf->written;
4137 IADDR UNUSED pc = abuf->addr;
4138 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4139
4140 * FLD (i_dr) = OPRND (dr);
4141
4142 #undef OPRND
4143 #undef FLD
4144 }
4145 NEXT (vpc);
4146
4147 CASE (sem, INSN_PAR_LDUB) : /* ldub $dr,@$sr */
4148 {
4149 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4150 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4151 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4152 #define OPRND(f) par_exec->operands.sfmt_ld.f
4153 int UNUSED written = 0;
4154 IADDR UNUSED pc = abuf->addr;
4155 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4156
4157 {
4158 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
4159 OPRND (dr) = opval;
4160 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4161 }
4162
4163 #undef OPRND
4164 #undef FLD
4165 }
4166 NEXT (vpc);
4167
4168 CASE (sem, INSN_WRITE_LDUB) : /* ldub $dr,@$sr */
4169 {
4170 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4171 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4172 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4173 #define OPRND(f) par_exec->operands.sfmt_ld.f
4174 int UNUSED written = abuf->written;
4175 IADDR UNUSED pc = abuf->addr;
4176 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4177
4178 * FLD (i_dr) = OPRND (dr);
4179
4180 #undef OPRND
4181 #undef FLD
4182 }
4183 NEXT (vpc);
4184
4185 CASE (sem, INSN_PAR_LDUH) : /* lduh $dr,@$sr */
4186 {
4187 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4188 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4189 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4190 #define OPRND(f) par_exec->operands.sfmt_ld.f
4191 int UNUSED written = 0;
4192 IADDR UNUSED pc = abuf->addr;
4193 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4194
4195 {
4196 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
4197 OPRND (dr) = opval;
4198 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4199 }
4200
4201 #undef OPRND
4202 #undef FLD
4203 }
4204 NEXT (vpc);
4205
4206 CASE (sem, INSN_WRITE_LDUH) : /* lduh $dr,@$sr */
4207 {
4208 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4209 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4210 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4211 #define OPRND(f) par_exec->operands.sfmt_ld.f
4212 int UNUSED written = abuf->written;
4213 IADDR UNUSED pc = abuf->addr;
4214 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4215
4216 * FLD (i_dr) = OPRND (dr);
4217
4218 #undef OPRND
4219 #undef FLD
4220 }
4221 NEXT (vpc);
4222
4223 CASE (sem, INSN_PAR_LD_PLUS) : /* ld $dr,@$sr+ */
4224 {
4225 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4226 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4227 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4228 #define OPRND(f) par_exec->operands.sfmt_ld_plus.f
4229 int UNUSED written = 0;
4230 IADDR UNUSED pc = abuf->addr;
4231 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4232
4233 {
4234 SI temp0;SI temp1;
4235 temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4236 temp1 = ADDSI (* FLD (i_sr), 4);
4237 {
4238 SI opval = temp0;
4239 OPRND (dr) = opval;
4240 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4241 }
4242 {
4243 SI opval = temp1;
4244 OPRND (sr) = opval;
4245 TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
4246 }
4247 }
4248
4249 #undef OPRND
4250 #undef FLD
4251 }
4252 NEXT (vpc);
4253
4254 CASE (sem, INSN_WRITE_LD_PLUS) : /* ld $dr,@$sr+ */
4255 {
4256 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4257 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4258 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4259 #define OPRND(f) par_exec->operands.sfmt_ld_plus.f
4260 int UNUSED written = abuf->written;
4261 IADDR UNUSED pc = abuf->addr;
4262 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4263
4264 * FLD (i_dr) = OPRND (dr);
4265 * FLD (i_sr) = OPRND (sr);
4266
4267 #undef OPRND
4268 #undef FLD
4269 }
4270 NEXT (vpc);
4271
4272 CASE (sem, INSN_PAR_LDI8) : /* ldi8 $dr,$simm8 */
4273 {
4274 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4275 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4276 #define FLD(f) abuf->fields.sfmt_addi.f
4277 #define OPRND(f) par_exec->operands.sfmt_ldi8.f
4278 int UNUSED written = 0;
4279 IADDR UNUSED pc = abuf->addr;
4280 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4281
4282 {
4283 SI opval = FLD (f_simm8);
4284 OPRND (dr) = opval;
4285 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4286 }
4287
4288 #undef OPRND
4289 #undef FLD
4290 }
4291 NEXT (vpc);
4292
4293 CASE (sem, INSN_WRITE_LDI8) : /* ldi8 $dr,$simm8 */
4294 {
4295 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4296 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4297 #define FLD(f) abuf->fields.sfmt_addi.f
4298 #define OPRND(f) par_exec->operands.sfmt_ldi8.f
4299 int UNUSED written = abuf->written;
4300 IADDR UNUSED pc = abuf->addr;
4301 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4302
4303 * FLD (i_dr) = OPRND (dr);
4304
4305 #undef OPRND
4306 #undef FLD
4307 }
4308 NEXT (vpc);
4309
4310 CASE (sem, INSN_PAR_LOCK) : /* lock $dr,@$sr */
4311 {
4312 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4313 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4314 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4315 #define OPRND(f) par_exec->operands.sfmt_lock.f
4316 int UNUSED written = 0;
4317 IADDR UNUSED pc = abuf->addr;
4318 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4319
4320 {
4321 {
4322 BI opval = 1;
4323 OPRND (h_lock) = opval;
4324 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
4325 }
4326 {
4327 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4328 OPRND (dr) = opval;
4329 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4330 }
4331 }
4332
4333 #undef OPRND
4334 #undef FLD
4335 }
4336 NEXT (vpc);
4337
4338 CASE (sem, INSN_WRITE_LOCK) : /* lock $dr,@$sr */
4339 {
4340 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4341 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4342 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4343 #define OPRND(f) par_exec->operands.sfmt_lock.f
4344 int UNUSED written = abuf->written;
4345 IADDR UNUSED pc = abuf->addr;
4346 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4347
4348 * FLD (i_dr) = OPRND (dr);
4349 CPU (h_lock) = OPRND (h_lock);
4350
4351 #undef OPRND
4352 #undef FLD
4353 }
4354 NEXT (vpc);
4355
4356 CASE (sem, INSN_PAR_MACHI_A) : /* machi $src1,$src2,$acc */
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_machi_a.f
4361 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4362 int UNUSED written = 0;
4363 IADDR UNUSED pc = abuf->addr;
4364 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4365
4366 {
4367 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
4368 OPRND (acc) = opval;
4369 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4370 }
4371
4372 #undef OPRND
4373 #undef FLD
4374 }
4375 NEXT (vpc);
4376
4377 CASE (sem, INSN_WRITE_MACHI_A) : /* machi $src1,$src2,$acc */
4378 {
4379 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4380 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4381 #define FLD(f) abuf->fields.sfmt_machi_a.f
4382 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4383 int UNUSED written = abuf->written;
4384 IADDR UNUSED pc = abuf->addr;
4385 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4386
4387 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4388
4389 #undef OPRND
4390 #undef FLD
4391 }
4392 NEXT (vpc);
4393
4394 CASE (sem, INSN_PAR_MACLO_A) : /* maclo $src1,$src2,$acc */
4395 {
4396 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4397 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4398 #define FLD(f) abuf->fields.sfmt_machi_a.f
4399 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4400 int UNUSED written = 0;
4401 IADDR UNUSED pc = abuf->addr;
4402 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4403
4404 {
4405 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
4406 OPRND (acc) = opval;
4407 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4408 }
4409
4410 #undef OPRND
4411 #undef FLD
4412 }
4413 NEXT (vpc);
4414
4415 CASE (sem, INSN_WRITE_MACLO_A) : /* maclo $src1,$src2,$acc */
4416 {
4417 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4418 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4419 #define FLD(f) abuf->fields.sfmt_machi_a.f
4420 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4421 int UNUSED written = abuf->written;
4422 IADDR UNUSED pc = abuf->addr;
4423 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4424
4425 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4426
4427 #undef OPRND
4428 #undef FLD
4429 }
4430 NEXT (vpc);
4431
4432 CASE (sem, INSN_PAR_MACWHI_A) : /* macwhi $src1,$src2,$acc */
4433 {
4434 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4435 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4436 #define FLD(f) abuf->fields.sfmt_machi_a.f
4437 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4438 int UNUSED written = 0;
4439 IADDR UNUSED pc = abuf->addr;
4440 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4441
4442 {
4443 DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))));
4444 OPRND (acc) = opval;
4445 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4446 }
4447
4448 #undef OPRND
4449 #undef FLD
4450 }
4451 NEXT (vpc);
4452
4453 CASE (sem, INSN_WRITE_MACWHI_A) : /* macwhi $src1,$src2,$acc */
4454 {
4455 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4456 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4457 #define FLD(f) abuf->fields.sfmt_machi_a.f
4458 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4459 int UNUSED written = abuf->written;
4460 IADDR UNUSED pc = abuf->addr;
4461 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4462
4463 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4464
4465 #undef OPRND
4466 #undef FLD
4467 }
4468 NEXT (vpc);
4469
4470 CASE (sem, INSN_PAR_MACWLO_A) : /* macwlo $src1,$src2,$acc */
4471 {
4472 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4473 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4474 #define FLD(f) abuf->fields.sfmt_machi_a.f
4475 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4476 int UNUSED written = 0;
4477 IADDR UNUSED pc = abuf->addr;
4478 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4479
4480 {
4481 DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))));
4482 OPRND (acc) = opval;
4483 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4484 }
4485
4486 #undef OPRND
4487 #undef FLD
4488 }
4489 NEXT (vpc);
4490
4491 CASE (sem, INSN_WRITE_MACWLO_A) : /* macwlo $src1,$src2,$acc */
4492 {
4493 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4494 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4495 #define FLD(f) abuf->fields.sfmt_machi_a.f
4496 #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4497 int UNUSED written = abuf->written;
4498 IADDR UNUSED pc = abuf->addr;
4499 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4500
4501 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4502
4503 #undef OPRND
4504 #undef FLD
4505 }
4506 NEXT (vpc);
4507
4508 CASE (sem, INSN_PAR_MUL) : /* mul $dr,$sr */
4509 {
4510 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4511 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4512 #define FLD(f) abuf->fields.sfmt_add.f
4513 #define OPRND(f) par_exec->operands.sfmt_add.f
4514 int UNUSED written = 0;
4515 IADDR UNUSED pc = abuf->addr;
4516 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4517
4518 {
4519 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
4520 OPRND (dr) = opval;
4521 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4522 }
4523
4524 #undef OPRND
4525 #undef FLD
4526 }
4527 NEXT (vpc);
4528
4529 CASE (sem, INSN_WRITE_MUL) : /* mul $dr,$sr */
4530 {
4531 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4532 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4533 #define FLD(f) abuf->fields.sfmt_add.f
4534 #define OPRND(f) par_exec->operands.sfmt_add.f
4535 int UNUSED written = abuf->written;
4536 IADDR UNUSED pc = abuf->addr;
4537 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4538
4539 * FLD (i_dr) = OPRND (dr);
4540
4541 #undef OPRND
4542 #undef FLD
4543 }
4544 NEXT (vpc);
4545
4546 CASE (sem, INSN_PAR_MULHI_A) : /* mulhi $src1,$src2,$acc */
4547 {
4548 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4549 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4550 #define FLD(f) abuf->fields.sfmt_machi_a.f
4551 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4552 int UNUSED written = 0;
4553 IADDR UNUSED pc = abuf->addr;
4554 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4555
4556 {
4557 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
4558 OPRND (acc) = opval;
4559 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4560 }
4561
4562 #undef OPRND
4563 #undef FLD
4564 }
4565 NEXT (vpc);
4566
4567 CASE (sem, INSN_WRITE_MULHI_A) : /* mulhi $src1,$src2,$acc */
4568 {
4569 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4570 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4571 #define FLD(f) abuf->fields.sfmt_machi_a.f
4572 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4573 int UNUSED written = abuf->written;
4574 IADDR UNUSED pc = abuf->addr;
4575 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4576
4577 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4578
4579 #undef OPRND
4580 #undef FLD
4581 }
4582 NEXT (vpc);
4583
4584 CASE (sem, INSN_PAR_MULLO_A) : /* mullo $src1,$src2,$acc */
4585 {
4586 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4587 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4588 #define FLD(f) abuf->fields.sfmt_machi_a.f
4589 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4590 int UNUSED written = 0;
4591 IADDR UNUSED pc = abuf->addr;
4592 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4593
4594 {
4595 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
4596 OPRND (acc) = opval;
4597 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4598 }
4599
4600 #undef OPRND
4601 #undef FLD
4602 }
4603 NEXT (vpc);
4604
4605 CASE (sem, INSN_WRITE_MULLO_A) : /* mullo $src1,$src2,$acc */
4606 {
4607 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4608 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4609 #define FLD(f) abuf->fields.sfmt_machi_a.f
4610 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4611 int UNUSED written = abuf->written;
4612 IADDR UNUSED pc = abuf->addr;
4613 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4614
4615 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4616
4617 #undef OPRND
4618 #undef FLD
4619 }
4620 NEXT (vpc);
4621
4622 CASE (sem, INSN_PAR_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
4623 {
4624 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4625 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4626 #define FLD(f) abuf->fields.sfmt_machi_a.f
4627 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4628 int UNUSED written = 0;
4629 IADDR UNUSED pc = abuf->addr;
4630 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4631
4632 {
4633 DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))));
4634 OPRND (acc) = opval;
4635 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4636 }
4637
4638 #undef OPRND
4639 #undef FLD
4640 }
4641 NEXT (vpc);
4642
4643 CASE (sem, INSN_WRITE_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
4644 {
4645 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4646 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4647 #define FLD(f) abuf->fields.sfmt_machi_a.f
4648 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4649 int UNUSED written = abuf->written;
4650 IADDR UNUSED pc = abuf->addr;
4651 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4652
4653 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4654
4655 #undef OPRND
4656 #undef FLD
4657 }
4658 NEXT (vpc);
4659
4660 CASE (sem, INSN_PAR_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
4661 {
4662 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4663 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4664 #define FLD(f) abuf->fields.sfmt_machi_a.f
4665 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4666 int UNUSED written = 0;
4667 IADDR UNUSED pc = abuf->addr;
4668 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4669
4670 {
4671 DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))));
4672 OPRND (acc) = opval;
4673 TRACE_RESULT (current_cpu, abuf, "acc", 'D', opval);
4674 }
4675
4676 #undef OPRND
4677 #undef FLD
4678 }
4679 NEXT (vpc);
4680
4681 CASE (sem, INSN_WRITE_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
4682 {
4683 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4684 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4685 #define FLD(f) abuf->fields.sfmt_machi_a.f
4686 #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4687 int UNUSED written = abuf->written;
4688 IADDR UNUSED pc = abuf->addr;
4689 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4690
4691 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4692
4693 #undef OPRND
4694 #undef FLD
4695 }
4696 NEXT (vpc);
4697
4698 CASE (sem, INSN_PAR_MV) : /* mv $dr,$sr */
4699 {
4700 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4701 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4702 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4703 #define OPRND(f) par_exec->operands.sfmt_mv.f
4704 int UNUSED written = 0;
4705 IADDR UNUSED pc = abuf->addr;
4706 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4707
4708 {
4709 SI opval = * FLD (i_sr);
4710 OPRND (dr) = opval;
4711 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4712 }
4713
4714 #undef OPRND
4715 #undef FLD
4716 }
4717 NEXT (vpc);
4718
4719 CASE (sem, INSN_WRITE_MV) : /* mv $dr,$sr */
4720 {
4721 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4722 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4723 #define FLD(f) abuf->fields.sfmt_ld_plus.f
4724 #define OPRND(f) par_exec->operands.sfmt_mv.f
4725 int UNUSED written = abuf->written;
4726 IADDR UNUSED pc = abuf->addr;
4727 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4728
4729 * FLD (i_dr) = OPRND (dr);
4730
4731 #undef OPRND
4732 #undef FLD
4733 }
4734 NEXT (vpc);
4735
4736 CASE (sem, INSN_PAR_MVFACHI_A) : /* mvfachi $dr,$accs */
4737 {
4738 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4739 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4740 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
4741 #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
4742 int UNUSED written = 0;
4743 IADDR UNUSED pc = abuf->addr;
4744 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4745
4746 {
4747 SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
4748 OPRND (dr) = opval;
4749 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4750 }
4751
4752 #undef OPRND
4753 #undef FLD
4754 }
4755 NEXT (vpc);
4756
4757 CASE (sem, INSN_WRITE_MVFACHI_A) : /* mvfachi $dr,$accs */
4758 {
4759 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4760 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4761 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
4762 #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
4763 int UNUSED written = abuf->written;
4764 IADDR UNUSED pc = abuf->addr;
4765 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4766
4767 * FLD (i_dr) = OPRND (dr);
4768
4769 #undef OPRND
4770 #undef FLD
4771 }
4772 NEXT (vpc);
4773
4774 CASE (sem, INSN_PAR_MVFACLO_A) : /* mvfaclo $dr,$accs */
4775 {
4776 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4777 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4778 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
4779 #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
4780 int UNUSED written = 0;
4781 IADDR UNUSED pc = abuf->addr;
4782 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4783
4784 {
4785 SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
4786 OPRND (dr) = opval;
4787 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4788 }
4789
4790 #undef OPRND
4791 #undef FLD
4792 }
4793 NEXT (vpc);
4794
4795 CASE (sem, INSN_WRITE_MVFACLO_A) : /* mvfaclo $dr,$accs */
4796 {
4797 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4798 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4799 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
4800 #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
4801 int UNUSED written = abuf->written;
4802 IADDR UNUSED pc = abuf->addr;
4803 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4804
4805 * FLD (i_dr) = OPRND (dr);
4806
4807 #undef OPRND
4808 #undef FLD
4809 }
4810 NEXT (vpc);
4811
4812 CASE (sem, INSN_PAR_MVFACMI_A) : /* mvfacmi $dr,$accs */
4813 {
4814 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4815 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4816 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
4817 #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
4818 int UNUSED written = 0;
4819 IADDR UNUSED pc = abuf->addr;
4820 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4821
4822 {
4823 SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
4824 OPRND (dr) = opval;
4825 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4826 }
4827
4828 #undef OPRND
4829 #undef FLD
4830 }
4831 NEXT (vpc);
4832
4833 CASE (sem, INSN_WRITE_MVFACMI_A) : /* mvfacmi $dr,$accs */
4834 {
4835 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4836 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4837 #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
4838 #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
4839 int UNUSED written = abuf->written;
4840 IADDR UNUSED pc = abuf->addr;
4841 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4842
4843 * FLD (i_dr) = OPRND (dr);
4844
4845 #undef OPRND
4846 #undef FLD
4847 }
4848 NEXT (vpc);
4849
4850 CASE (sem, INSN_PAR_MVFC) : /* mvfc $dr,$scr */
4851 {
4852 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4853 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4854 #define FLD(f) abuf->fields.sfmt_mvfc.f
4855 #define OPRND(f) par_exec->operands.sfmt_mvfc.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_CR (FLD (f_r2));
4862 OPRND (dr) = opval;
4863 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4864 }
4865
4866 #undef OPRND
4867 #undef FLD
4868 }
4869 NEXT (vpc);
4870
4871 CASE (sem, INSN_WRITE_MVFC) : /* mvfc $dr,$scr */
4872 {
4873 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4874 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4875 #define FLD(f) abuf->fields.sfmt_mvfc.f
4876 #define OPRND(f) par_exec->operands.sfmt_mvfc.f
4877 int UNUSED written = abuf->written;
4878 IADDR UNUSED pc = abuf->addr;
4879 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4880
4881 * FLD (i_dr) = OPRND (dr);
4882
4883 #undef OPRND
4884 #undef FLD
4885 }
4886 NEXT (vpc);
4887
4888 CASE (sem, INSN_PAR_MVTACHI_A) : /* mvtachi $src1,$accs */
4889 {
4890 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4891 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4892 #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
4893 #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
4894 int UNUSED written = 0;
4895 IADDR UNUSED pc = abuf->addr;
4896 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4897
4898 {
4899 DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
4900 OPRND (accs) = opval;
4901 TRACE_RESULT (current_cpu, abuf, "accs", 'D', opval);
4902 }
4903
4904 #undef OPRND
4905 #undef FLD
4906 }
4907 NEXT (vpc);
4908
4909 CASE (sem, INSN_WRITE_MVTACHI_A) : /* mvtachi $src1,$accs */
4910 {
4911 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4912 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4913 #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
4914 #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
4915 int UNUSED written = abuf->written;
4916 IADDR UNUSED pc = abuf->addr;
4917 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4918
4919 SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
4920
4921 #undef OPRND
4922 #undef FLD
4923 }
4924 NEXT (vpc);
4925
4926 CASE (sem, INSN_PAR_MVTACLO_A) : /* mvtaclo $src1,$accs */
4927 {
4928 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4929 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4930 #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
4931 #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
4932 int UNUSED written = 0;
4933 IADDR UNUSED pc = abuf->addr;
4934 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4935
4936 {
4937 DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
4938 OPRND (accs) = opval;
4939 TRACE_RESULT (current_cpu, abuf, "accs", 'D', opval);
4940 }
4941
4942 #undef OPRND
4943 #undef FLD
4944 }
4945 NEXT (vpc);
4946
4947 CASE (sem, INSN_WRITE_MVTACLO_A) : /* mvtaclo $src1,$accs */
4948 {
4949 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4950 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4951 #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
4952 #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
4953 int UNUSED written = abuf->written;
4954 IADDR UNUSED pc = abuf->addr;
4955 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4956
4957 SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
4958
4959 #undef OPRND
4960 #undef FLD
4961 }
4962 NEXT (vpc);
4963
4964 CASE (sem, INSN_PAR_MVTC) : /* mvtc $sr,$dcr */
4965 {
4966 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4967 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4968 #define FLD(f) abuf->fields.sfmt_mvtc.f
4969 #define OPRND(f) par_exec->operands.sfmt_mvtc.f
4970 int UNUSED written = 0;
4971 IADDR UNUSED pc = abuf->addr;
4972 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4973
4974 {
4975 USI opval = * FLD (i_sr);
4976 OPRND (dcr) = opval;
4977 TRACE_RESULT (current_cpu, abuf, "dcr", 'x', opval);
4978 }
4979
4980 #undef OPRND
4981 #undef FLD
4982 }
4983 NEXT (vpc);
4984
4985 CASE (sem, INSN_WRITE_MVTC) : /* mvtc $sr,$dcr */
4986 {
4987 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4988 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4989 #define FLD(f) abuf->fields.sfmt_mvtc.f
4990 #define OPRND(f) par_exec->operands.sfmt_mvtc.f
4991 int UNUSED written = abuf->written;
4992 IADDR UNUSED pc = abuf->addr;
4993 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4994
4995 SET_H_CR (FLD (f_r1), OPRND (dcr));
4996
4997 #undef OPRND
4998 #undef FLD
4999 }
5000 NEXT (vpc);
5001
5002 CASE (sem, INSN_PAR_NEG) : /* neg $dr,$sr */
5003 {
5004 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5005 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5006 #define FLD(f) abuf->fields.sfmt_ld_plus.f
5007 #define OPRND(f) par_exec->operands.sfmt_mv.f
5008 int UNUSED written = 0;
5009 IADDR UNUSED pc = abuf->addr;
5010 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5011
5012 {
5013 SI opval = NEGSI (* FLD (i_sr));
5014 OPRND (dr) = opval;
5015 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5016 }
5017
5018 #undef OPRND
5019 #undef FLD
5020 }
5021 NEXT (vpc);
5022
5023 CASE (sem, INSN_WRITE_NEG) : /* neg $dr,$sr */
5024 {
5025 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5026 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5027 #define FLD(f) abuf->fields.sfmt_ld_plus.f
5028 #define OPRND(f) par_exec->operands.sfmt_mv.f
5029 int UNUSED written = abuf->written;
5030 IADDR UNUSED pc = abuf->addr;
5031 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5032
5033 * FLD (i_dr) = OPRND (dr);
5034
5035 #undef OPRND
5036 #undef FLD
5037 }
5038 NEXT (vpc);
5039
5040 CASE (sem, INSN_PAR_NOP) : /* nop */
5041 {
5042 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5043 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5044 #define FLD(f) abuf->fields.fmt_empty.f
5045 #define OPRND(f) par_exec->operands.sfmt_nop.f
5046 int UNUSED written = 0;
5047 IADDR UNUSED pc = abuf->addr;
5048 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5049
5050 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
5051
5052 #undef OPRND
5053 #undef FLD
5054 }
5055 NEXT (vpc);
5056
5057 CASE (sem, INSN_WRITE_NOP) : /* nop */
5058 {
5059 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5060 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5061 #define FLD(f) abuf->fields.fmt_empty.f
5062 #define OPRND(f) par_exec->operands.sfmt_nop.f
5063 int UNUSED written = abuf->written;
5064 IADDR UNUSED pc = abuf->addr;
5065 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5066
5067
5068 #undef OPRND
5069 #undef FLD
5070 }
5071 NEXT (vpc);
5072
5073 CASE (sem, INSN_PAR_NOT) : /* not $dr,$sr */
5074 {
5075 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5076 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5077 #define FLD(f) abuf->fields.sfmt_ld_plus.f
5078 #define OPRND(f) par_exec->operands.sfmt_mv.f
5079 int UNUSED written = 0;
5080 IADDR UNUSED pc = abuf->addr;
5081 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5082
5083 {
5084 SI opval = INVSI (* FLD (i_sr));
5085 OPRND (dr) = opval;
5086 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5087 }
5088
5089 #undef OPRND
5090 #undef FLD
5091 }
5092 NEXT (vpc);
5093
5094 CASE (sem, INSN_WRITE_NOT) : /* not $dr,$sr */
5095 {
5096 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5097 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5098 #define FLD(f) abuf->fields.sfmt_ld_plus.f
5099 #define OPRND(f) par_exec->operands.sfmt_mv.f
5100 int UNUSED written = abuf->written;
5101 IADDR UNUSED pc = abuf->addr;
5102 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5103
5104 * FLD (i_dr) = OPRND (dr);
5105
5106 #undef OPRND
5107 #undef FLD
5108 }
5109 NEXT (vpc);
5110
5111 CASE (sem, INSN_PAR_RAC_DSI) : /* rac $accd,$accs,$imm1 */
5112 {
5113 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5114 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5115 #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5116 #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5117 int UNUSED written = 0;
5118 IADDR UNUSED pc = abuf->addr;
5119 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5120
5121 {
5122 DI tmp_tmp1;
5123 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
5124 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
5125 {
5126 DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000)));
5127 OPRND (accd) = opval;
5128 TRACE_RESULT (current_cpu, abuf, "accd", 'D', opval);
5129 }
5130 }
5131
5132 #undef OPRND
5133 #undef FLD
5134 }
5135 NEXT (vpc);
5136
5137 CASE (sem, INSN_WRITE_RAC_DSI) : /* rac $accd,$accs,$imm1 */
5138 {
5139 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5140 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5141 #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5142 #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5143 int UNUSED written = abuf->written;
5144 IADDR UNUSED pc = abuf->addr;
5145 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5146
5147 SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
5148
5149 #undef OPRND
5150 #undef FLD
5151 }
5152 NEXT (vpc);
5153
5154 CASE (sem, INSN_PAR_RACH_DSI) : /* rach $accd,$accs,$imm1 */
5155 {
5156 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5157 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5158 #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5159 #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5160 int UNUSED written = 0;
5161 IADDR UNUSED pc = abuf->addr;
5162 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5163
5164 {
5165 DI tmp_tmp1;
5166 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
5167 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
5168 {
5169 DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0)));
5170 OPRND (accd) = opval;
5171 TRACE_RESULT (current_cpu, abuf, "accd", 'D', opval);
5172 }
5173 }
5174
5175 #undef OPRND
5176 #undef FLD
5177 }
5178 NEXT (vpc);
5179
5180 CASE (sem, INSN_WRITE_RACH_DSI) : /* rach $accd,$accs,$imm1 */
5181 {
5182 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5183 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5184 #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5185 #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5186 int UNUSED written = abuf->written;
5187 IADDR UNUSED pc = abuf->addr;
5188 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5189
5190 SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
5191
5192 #undef OPRND
5193 #undef FLD
5194 }
5195 NEXT (vpc);
5196
5197 CASE (sem, INSN_PAR_RTE) : /* rte */
5198 {
5199 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5200 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5201 #define FLD(f) abuf->fields.fmt_empty.f
5202 #define OPRND(f) par_exec->operands.sfmt_rte.f
5203 int UNUSED written = 0;
5204 IADDR UNUSED pc = abuf->addr;
5205 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5206
5207 {
5208 {
5209 USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
5210 OPRND (pc) = opval;
5211 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5212 }
5213 {
5214 USI opval = GET_H_CR (((UINT) 14));
5215 OPRND (h_cr_6) = opval;
5216 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
5217 }
5218 {
5219 UQI opval = CPU (h_bpsw);
5220 OPRND (h_psw) = opval;
5221 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
5222 }
5223 {
5224 UQI opval = CPU (h_bbpsw);
5225 OPRND (h_bpsw) = opval;
5226 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
5227 }
5228 }
5229
5230 #undef OPRND
5231 #undef FLD
5232 }
5233 NEXT (vpc);
5234
5235 CASE (sem, INSN_WRITE_RTE) : /* rte */
5236 {
5237 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5238 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5239 #define FLD(f) abuf->fields.fmt_empty.f
5240 #define OPRND(f) par_exec->operands.sfmt_rte.f
5241 int UNUSED written = abuf->written;
5242 IADDR UNUSED pc = abuf->addr;
5243 SEM_BRANCH_INIT
5244 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5245
5246 CPU (h_bpsw) = OPRND (h_bpsw);
5247 SET_H_CR (((UINT) 6), OPRND (h_cr_6));
5248 SET_H_PSW (OPRND (h_psw));
5249 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
5250
5251 SEM_BRANCH_FINI (vpc);
5252 #undef OPRND
5253 #undef FLD
5254 }
5255 NEXT (vpc);
5256
5257 CASE (sem, INSN_PAR_SLL) : /* sll $dr,$sr */
5258 {
5259 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5260 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5261 #define FLD(f) abuf->fields.sfmt_add.f
5262 #define OPRND(f) par_exec->operands.sfmt_add.f
5263 int UNUSED written = 0;
5264 IADDR UNUSED pc = abuf->addr;
5265 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5266
5267 {
5268 SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5269 OPRND (dr) = opval;
5270 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5271 }
5272
5273 #undef OPRND
5274 #undef FLD
5275 }
5276 NEXT (vpc);
5277
5278 CASE (sem, INSN_WRITE_SLL) : /* sll $dr,$sr */
5279 {
5280 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5281 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5282 #define FLD(f) abuf->fields.sfmt_add.f
5283 #define OPRND(f) par_exec->operands.sfmt_add.f
5284 int UNUSED written = abuf->written;
5285 IADDR UNUSED pc = abuf->addr;
5286 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5287
5288 * FLD (i_dr) = OPRND (dr);
5289
5290 #undef OPRND
5291 #undef FLD
5292 }
5293 NEXT (vpc);
5294
5295 CASE (sem, INSN_PAR_SLLI) : /* slli $dr,$uimm5 */
5296 {
5297 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5298 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5299 #define FLD(f) abuf->fields.sfmt_slli.f
5300 #define OPRND(f) par_exec->operands.sfmt_slli.f
5301 int UNUSED written = 0;
5302 IADDR UNUSED pc = abuf->addr;
5303 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5304
5305 {
5306 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
5307 OPRND (dr) = opval;
5308 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5309 }
5310
5311 #undef OPRND
5312 #undef FLD
5313 }
5314 NEXT (vpc);
5315
5316 CASE (sem, INSN_WRITE_SLLI) : /* slli $dr,$uimm5 */
5317 {
5318 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5319 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5320 #define FLD(f) abuf->fields.sfmt_slli.f
5321 #define OPRND(f) par_exec->operands.sfmt_slli.f
5322 int UNUSED written = abuf->written;
5323 IADDR UNUSED pc = abuf->addr;
5324 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5325
5326 * FLD (i_dr) = OPRND (dr);
5327
5328 #undef OPRND
5329 #undef FLD
5330 }
5331 NEXT (vpc);
5332
5333 CASE (sem, INSN_PAR_SRA) : /* sra $dr,$sr */
5334 {
5335 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5336 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5337 #define FLD(f) abuf->fields.sfmt_add.f
5338 #define OPRND(f) par_exec->operands.sfmt_add.f
5339 int UNUSED written = 0;
5340 IADDR UNUSED pc = abuf->addr;
5341 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5342
5343 {
5344 SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5345 OPRND (dr) = opval;
5346 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5347 }
5348
5349 #undef OPRND
5350 #undef FLD
5351 }
5352 NEXT (vpc);
5353
5354 CASE (sem, INSN_WRITE_SRA) : /* sra $dr,$sr */
5355 {
5356 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5357 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5358 #define FLD(f) abuf->fields.sfmt_add.f
5359 #define OPRND(f) par_exec->operands.sfmt_add.f
5360 int UNUSED written = abuf->written;
5361 IADDR UNUSED pc = abuf->addr;
5362 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5363
5364 * FLD (i_dr) = OPRND (dr);
5365
5366 #undef OPRND
5367 #undef FLD
5368 }
5369 NEXT (vpc);
5370
5371 CASE (sem, INSN_PAR_SRAI) : /* srai $dr,$uimm5 */
5372 {
5373 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5375 #define FLD(f) abuf->fields.sfmt_slli.f
5376 #define OPRND(f) par_exec->operands.sfmt_slli.f
5377 int UNUSED written = 0;
5378 IADDR UNUSED pc = abuf->addr;
5379 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5380
5381 {
5382 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
5383 OPRND (dr) = opval;
5384 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5385 }
5386
5387 #undef OPRND
5388 #undef FLD
5389 }
5390 NEXT (vpc);
5391
5392 CASE (sem, INSN_WRITE_SRAI) : /* srai $dr,$uimm5 */
5393 {
5394 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5395 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5396 #define FLD(f) abuf->fields.sfmt_slli.f
5397 #define OPRND(f) par_exec->operands.sfmt_slli.f
5398 int UNUSED written = abuf->written;
5399 IADDR UNUSED pc = abuf->addr;
5400 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5401
5402 * FLD (i_dr) = OPRND (dr);
5403
5404 #undef OPRND
5405 #undef FLD
5406 }
5407 NEXT (vpc);
5408
5409 CASE (sem, INSN_PAR_SRL) : /* srl $dr,$sr */
5410 {
5411 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5412 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5413 #define FLD(f) abuf->fields.sfmt_add.f
5414 #define OPRND(f) par_exec->operands.sfmt_add.f
5415 int UNUSED written = 0;
5416 IADDR UNUSED pc = abuf->addr;
5417 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5418
5419 {
5420 SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5421 OPRND (dr) = opval;
5422 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5423 }
5424
5425 #undef OPRND
5426 #undef FLD
5427 }
5428 NEXT (vpc);
5429
5430 CASE (sem, INSN_WRITE_SRL) : /* srl $dr,$sr */
5431 {
5432 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5433 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5434 #define FLD(f) abuf->fields.sfmt_add.f
5435 #define OPRND(f) par_exec->operands.sfmt_add.f
5436 int UNUSED written = abuf->written;
5437 IADDR UNUSED pc = abuf->addr;
5438 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5439
5440 * FLD (i_dr) = OPRND (dr);
5441
5442 #undef OPRND
5443 #undef FLD
5444 }
5445 NEXT (vpc);
5446
5447 CASE (sem, INSN_PAR_SRLI) : /* srli $dr,$uimm5 */
5448 {
5449 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5450 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5451 #define FLD(f) abuf->fields.sfmt_slli.f
5452 #define OPRND(f) par_exec->operands.sfmt_slli.f
5453 int UNUSED written = 0;
5454 IADDR UNUSED pc = abuf->addr;
5455 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5456
5457 {
5458 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
5459 OPRND (dr) = opval;
5460 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5461 }
5462
5463 #undef OPRND
5464 #undef FLD
5465 }
5466 NEXT (vpc);
5467
5468 CASE (sem, INSN_WRITE_SRLI) : /* srli $dr,$uimm5 */
5469 {
5470 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5471 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5472 #define FLD(f) abuf->fields.sfmt_slli.f
5473 #define OPRND(f) par_exec->operands.sfmt_slli.f
5474 int UNUSED written = abuf->written;
5475 IADDR UNUSED pc = abuf->addr;
5476 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5477
5478 * FLD (i_dr) = OPRND (dr);
5479
5480 #undef OPRND
5481 #undef FLD
5482 }
5483 NEXT (vpc);
5484
5485 CASE (sem, INSN_PAR_ST) : /* st $src1,@$src2 */
5486 {
5487 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5488 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5489 #define FLD(f) abuf->fields.sfmt_st_plus.f
5490 #define OPRND(f) par_exec->operands.sfmt_st.f
5491 int UNUSED written = 0;
5492 IADDR UNUSED pc = abuf->addr;
5493 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5494
5495 {
5496 SI opval = * FLD (i_src1);
5497 OPRND (h_memory_src2_idx) = * FLD (i_src2);
5498 OPRND (h_memory_src2) = opval;
5499 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5500 }
5501
5502 #undef OPRND
5503 #undef FLD
5504 }
5505 NEXT (vpc);
5506
5507 CASE (sem, INSN_WRITE_ST) : /* st $src1,@$src2 */
5508 {
5509 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5510 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5511 #define FLD(f) abuf->fields.sfmt_st_plus.f
5512 #define OPRND(f) par_exec->operands.sfmt_st.f
5513 int UNUSED written = abuf->written;
5514 IADDR UNUSED pc = abuf->addr;
5515 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5516
5517 SETMEMSI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5518
5519 #undef OPRND
5520 #undef FLD
5521 }
5522 NEXT (vpc);
5523
5524 CASE (sem, INSN_PAR_STB) : /* stb $src1,@$src2 */
5525 {
5526 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5527 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5528 #define FLD(f) abuf->fields.sfmt_st_plus.f
5529 #define OPRND(f) par_exec->operands.sfmt_stb.f
5530 int UNUSED written = 0;
5531 IADDR UNUSED pc = abuf->addr;
5532 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5533
5534 {
5535 QI opval = * FLD (i_src1);
5536 OPRND (h_memory_src2_idx) = * FLD (i_src2);
5537 OPRND (h_memory_src2) = opval;
5538 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5539 }
5540
5541 #undef OPRND
5542 #undef FLD
5543 }
5544 NEXT (vpc);
5545
5546 CASE (sem, INSN_WRITE_STB) : /* stb $src1,@$src2 */
5547 {
5548 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5549 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5550 #define FLD(f) abuf->fields.sfmt_st_plus.f
5551 #define OPRND(f) par_exec->operands.sfmt_stb.f
5552 int UNUSED written = abuf->written;
5553 IADDR UNUSED pc = abuf->addr;
5554 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5555
5556 SETMEMQI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5557
5558 #undef OPRND
5559 #undef FLD
5560 }
5561 NEXT (vpc);
5562
5563 CASE (sem, INSN_PAR_STH) : /* sth $src1,@$src2 */
5564 {
5565 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5566 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5567 #define FLD(f) abuf->fields.sfmt_st_plus.f
5568 #define OPRND(f) par_exec->operands.sfmt_sth.f
5569 int UNUSED written = 0;
5570 IADDR UNUSED pc = abuf->addr;
5571 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5572
5573 {
5574 HI opval = * FLD (i_src1);
5575 OPRND (h_memory_src2_idx) = * FLD (i_src2);
5576 OPRND (h_memory_src2) = opval;
5577 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5578 }
5579
5580 #undef OPRND
5581 #undef FLD
5582 }
5583 NEXT (vpc);
5584
5585 CASE (sem, INSN_WRITE_STH) : /* sth $src1,@$src2 */
5586 {
5587 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5588 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5589 #define FLD(f) abuf->fields.sfmt_st_plus.f
5590 #define OPRND(f) par_exec->operands.sfmt_sth.f
5591 int UNUSED written = abuf->written;
5592 IADDR UNUSED pc = abuf->addr;
5593 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5594
5595 SETMEMHI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5596
5597 #undef OPRND
5598 #undef FLD
5599 }
5600 NEXT (vpc);
5601
5602 CASE (sem, INSN_PAR_ST_PLUS) : /* st $src1,@+$src2 */
5603 {
5604 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5605 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5606 #define FLD(f) abuf->fields.sfmt_st_plus.f
5607 #define OPRND(f) par_exec->operands.sfmt_st_plus.f
5608 int UNUSED written = 0;
5609 IADDR UNUSED pc = abuf->addr;
5610 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5611
5612 {
5613 SI tmp_new_src2;
5614 tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
5615 {
5616 SI opval = * FLD (i_src1);
5617 OPRND (h_memory_new_src2_idx) = tmp_new_src2;
5618 OPRND (h_memory_new_src2) = opval;
5619 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5620 }
5621 {
5622 SI opval = tmp_new_src2;
5623 OPRND (src2) = opval;
5624 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
5625 }
5626 }
5627
5628 #undef OPRND
5629 #undef FLD
5630 }
5631 NEXT (vpc);
5632
5633 CASE (sem, INSN_WRITE_ST_PLUS) : /* st $src1,@+$src2 */
5634 {
5635 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5636 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5637 #define FLD(f) abuf->fields.sfmt_st_plus.f
5638 #define OPRND(f) par_exec->operands.sfmt_st_plus.f
5639 int UNUSED written = abuf->written;
5640 IADDR UNUSED pc = abuf->addr;
5641 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5642
5643 SETMEMSI (current_cpu, pc, OPRND (h_memory_new_src2_idx), OPRND (h_memory_new_src2));
5644 * FLD (i_src2) = OPRND (src2);
5645
5646 #undef OPRND
5647 #undef FLD
5648 }
5649 NEXT (vpc);
5650
5651 CASE (sem, INSN_PAR_ST_MINUS) : /* st $src1,@-$src2 */
5652 {
5653 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5654 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5655 #define FLD(f) abuf->fields.sfmt_st_plus.f
5656 #define OPRND(f) par_exec->operands.sfmt_st_plus.f
5657 int UNUSED written = 0;
5658 IADDR UNUSED pc = abuf->addr;
5659 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5660
5661 {
5662 SI tmp_new_src2;
5663 tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
5664 {
5665 SI opval = * FLD (i_src1);
5666 OPRND (h_memory_new_src2_idx) = tmp_new_src2;
5667 OPRND (h_memory_new_src2) = opval;
5668 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5669 }
5670 {
5671 SI opval = tmp_new_src2;
5672 OPRND (src2) = opval;
5673 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
5674 }
5675 }
5676
5677 #undef OPRND
5678 #undef FLD
5679 }
5680 NEXT (vpc);
5681
5682 CASE (sem, INSN_WRITE_ST_MINUS) : /* st $src1,@-$src2 */
5683 {
5684 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5685 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5686 #define FLD(f) abuf->fields.sfmt_st_plus.f
5687 #define OPRND(f) par_exec->operands.sfmt_st_plus.f
5688 int UNUSED written = abuf->written;
5689 IADDR UNUSED pc = abuf->addr;
5690 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5691
5692 SETMEMSI (current_cpu, pc, OPRND (h_memory_new_src2_idx), OPRND (h_memory_new_src2));
5693 * FLD (i_src2) = OPRND (src2);
5694
5695 #undef OPRND
5696 #undef FLD
5697 }
5698 NEXT (vpc);
5699
5700 CASE (sem, INSN_PAR_SUB) : /* sub $dr,$sr */
5701 {
5702 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5703 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5704 #define FLD(f) abuf->fields.sfmt_add.f
5705 #define OPRND(f) par_exec->operands.sfmt_add.f
5706 int UNUSED written = 0;
5707 IADDR UNUSED pc = abuf->addr;
5708 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5709
5710 {
5711 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
5712 OPRND (dr) = opval;
5713 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5714 }
5715
5716 #undef OPRND
5717 #undef FLD
5718 }
5719 NEXT (vpc);
5720
5721 CASE (sem, INSN_WRITE_SUB) : /* sub $dr,$sr */
5722 {
5723 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5724 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5725 #define FLD(f) abuf->fields.sfmt_add.f
5726 #define OPRND(f) par_exec->operands.sfmt_add.f
5727 int UNUSED written = abuf->written;
5728 IADDR UNUSED pc = abuf->addr;
5729 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5730
5731 * FLD (i_dr) = OPRND (dr);
5732
5733 #undef OPRND
5734 #undef FLD
5735 }
5736 NEXT (vpc);
5737
5738 CASE (sem, INSN_PAR_SUBV) : /* subv $dr,$sr */
5739 {
5740 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5741 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5742 #define FLD(f) abuf->fields.sfmt_add.f
5743 #define OPRND(f) par_exec->operands.sfmt_addv.f
5744 int UNUSED written = 0;
5745 IADDR UNUSED pc = abuf->addr;
5746 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5747
5748 {
5749 SI temp0;BI temp1;
5750 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
5751 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
5752 {
5753 SI opval = temp0;
5754 OPRND (dr) = opval;
5755 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5756 }
5757 {
5758 BI opval = temp1;
5759 OPRND (condbit) = opval;
5760 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
5761 }
5762 }
5763
5764 #undef OPRND
5765 #undef FLD
5766 }
5767 NEXT (vpc);
5768
5769 CASE (sem, INSN_WRITE_SUBV) : /* subv $dr,$sr */
5770 {
5771 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5772 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5773 #define FLD(f) abuf->fields.sfmt_add.f
5774 #define OPRND(f) par_exec->operands.sfmt_addv.f
5775 int UNUSED written = abuf->written;
5776 IADDR UNUSED pc = abuf->addr;
5777 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5778
5779 CPU (h_cond) = OPRND (condbit);
5780 * FLD (i_dr) = OPRND (dr);
5781
5782 #undef OPRND
5783 #undef FLD
5784 }
5785 NEXT (vpc);
5786
5787 CASE (sem, INSN_PAR_SUBX) : /* subx $dr,$sr */
5788 {
5789 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5790 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5791 #define FLD(f) abuf->fields.sfmt_add.f
5792 #define OPRND(f) par_exec->operands.sfmt_addx.f
5793 int UNUSED written = 0;
5794 IADDR UNUSED pc = abuf->addr;
5795 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5796
5797 {
5798 SI temp0;BI temp1;
5799 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
5800 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
5801 {
5802 SI opval = temp0;
5803 OPRND (dr) = opval;
5804 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5805 }
5806 {
5807 BI opval = temp1;
5808 OPRND (condbit) = opval;
5809 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
5810 }
5811 }
5812
5813 #undef OPRND
5814 #undef FLD
5815 }
5816 NEXT (vpc);
5817
5818 CASE (sem, INSN_WRITE_SUBX) : /* subx $dr,$sr */
5819 {
5820 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5821 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5822 #define FLD(f) abuf->fields.sfmt_add.f
5823 #define OPRND(f) par_exec->operands.sfmt_addx.f
5824 int UNUSED written = abuf->written;
5825 IADDR UNUSED pc = abuf->addr;
5826 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5827
5828 CPU (h_cond) = OPRND (condbit);
5829 * FLD (i_dr) = OPRND (dr);
5830
5831 #undef OPRND
5832 #undef FLD
5833 }
5834 NEXT (vpc);
5835
5836 CASE (sem, INSN_PAR_TRAP) : /* trap $uimm4 */
5837 {
5838 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5839 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5840 #define FLD(f) abuf->fields.sfmt_trap.f
5841 #define OPRND(f) par_exec->operands.sfmt_trap.f
5842 int UNUSED written = 0;
5843 IADDR UNUSED pc = abuf->addr;
5844 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5845
5846 {
5847 {
5848 USI opval = GET_H_CR (((UINT) 6));
5849 OPRND (h_cr_14) = opval;
5850 TRACE_RESULT (current_cpu, abuf, "cr-14", 'x', opval);
5851 }
5852 {
5853 USI opval = ADDSI (pc, 4);
5854 OPRND (h_cr_6) = opval;
5855 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
5856 }
5857 {
5858 UQI opval = CPU (h_bpsw);
5859 OPRND (h_bbpsw) = opval;
5860 TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
5861 }
5862 {
5863 UQI opval = GET_H_PSW ();
5864 OPRND (h_bpsw) = opval;
5865 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
5866 }
5867 {
5868 UQI opval = ANDQI (GET_H_PSW (), 128);
5869 OPRND (h_psw) = opval;
5870 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
5871 }
5872 {
5873 SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
5874 OPRND (pc) = opval;
5875 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5876 }
5877 }
5878
5879 #undef OPRND
5880 #undef FLD
5881 }
5882 NEXT (vpc);
5883
5884 CASE (sem, INSN_WRITE_TRAP) : /* trap $uimm4 */
5885 {
5886 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5887 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5888 #define FLD(f) abuf->fields.sfmt_trap.f
5889 #define OPRND(f) par_exec->operands.sfmt_trap.f
5890 int UNUSED written = abuf->written;
5891 IADDR UNUSED pc = abuf->addr;
5892 SEM_BRANCH_INIT
5893 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5894
5895 CPU (h_bbpsw) = OPRND (h_bbpsw);
5896 CPU (h_bpsw) = OPRND (h_bpsw);
5897 SET_H_CR (((UINT) 14), OPRND (h_cr_14));
5898 SET_H_CR (((UINT) 6), OPRND (h_cr_6));
5899 SET_H_PSW (OPRND (h_psw));
5900 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
5901
5902 SEM_BRANCH_FINI (vpc);
5903 #undef OPRND
5904 #undef FLD
5905 }
5906 NEXT (vpc);
5907
5908 CASE (sem, INSN_PAR_UNLOCK) : /* unlock $src1,@$src2 */
5909 {
5910 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5911 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5912 #define FLD(f) abuf->fields.sfmt_st_plus.f
5913 #define OPRND(f) par_exec->operands.sfmt_unlock.f
5914 int UNUSED written = 0;
5915 IADDR UNUSED pc = abuf->addr;
5916 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5917
5918 {
5919 if (CPU (h_lock)) {
5920 {
5921 SI opval = * FLD (i_src1);
5922 OPRND (h_memory_src2_idx) = * FLD (i_src2);
5923 OPRND (h_memory_src2) = opval;
5924 written |= (1 << 4);
5925 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5926 }
5927 }
5928 {
5929 BI opval = 0;
5930 OPRND (h_lock) = opval;
5931 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
5932 }
5933 }
5934
5935 abuf->written = written;
5936 #undef OPRND
5937 #undef FLD
5938 }
5939 NEXT (vpc);
5940
5941 CASE (sem, INSN_WRITE_UNLOCK) : /* unlock $src1,@$src2 */
5942 {
5943 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5944 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5945 #define FLD(f) abuf->fields.sfmt_st_plus.f
5946 #define OPRND(f) par_exec->operands.sfmt_unlock.f
5947 int UNUSED written = abuf->written;
5948 IADDR UNUSED pc = abuf->addr;
5949 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5950
5951 CPU (h_lock) = OPRND (h_lock);
5952 if (written & (1 << 4))
5953 {
5954 SETMEMSI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5955 }
5956
5957 #undef OPRND
5958 #undef FLD
5959 }
5960 NEXT (vpc);
5961
5962 CASE (sem, INSN_PAR_PCMPBZ) : /* pcmpbz $src2 */
5963 {
5964 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5965 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5966 #define FLD(f) abuf->fields.sfmt_st_plus.f
5967 #define OPRND(f) par_exec->operands.sfmt_cmpz.f
5968 int UNUSED written = 0;
5969 IADDR UNUSED pc = abuf->addr;
5970 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5971
5972 {
5973 BI opval = (EQSI (ANDSI (* FLD (i_src2), 255), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 65280), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 0xff000000), 0)) ? (1) : (0);
5974 OPRND (condbit) = opval;
5975 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
5976 }
5977
5978 #undef OPRND
5979 #undef FLD
5980 }
5981 NEXT (vpc);
5982
5983 CASE (sem, INSN_WRITE_PCMPBZ) : /* pcmpbz $src2 */
5984 {
5985 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5986 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5987 #define FLD(f) abuf->fields.sfmt_st_plus.f
5988 #define OPRND(f) par_exec->operands.sfmt_cmpz.f
5989 int UNUSED written = abuf->written;
5990 IADDR UNUSED pc = abuf->addr;
5991 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5992
5993 CPU (h_cond) = OPRND (condbit);
5994
5995 #undef OPRND
5996 #undef FLD
5997 }
5998 NEXT (vpc);
5999
6000 CASE (sem, INSN_PAR_SADD) : /* sadd */
6001 {
6002 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6003 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6004 #define FLD(f) abuf->fields.fmt_empty.f
6005 #define OPRND(f) par_exec->operands.sfmt_sadd.f
6006 int UNUSED written = 0;
6007 IADDR UNUSED pc = abuf->addr;
6008 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6009
6010 {
6011 DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0)));
6012 OPRND (h_accums_0) = opval;
6013 TRACE_RESULT (current_cpu, abuf, "accums-0", 'D', opval);
6014 }
6015
6016 #undef OPRND
6017 #undef FLD
6018 }
6019 NEXT (vpc);
6020
6021 CASE (sem, INSN_WRITE_SADD) : /* sadd */
6022 {
6023 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6024 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6025 #define FLD(f) abuf->fields.fmt_empty.f
6026 #define OPRND(f) par_exec->operands.sfmt_sadd.f
6027 int UNUSED written = abuf->written;
6028 IADDR UNUSED pc = abuf->addr;
6029 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6030
6031 SET_H_ACCUMS (((UINT) 0), OPRND (h_accums_0));
6032
6033 #undef OPRND
6034 #undef FLD
6035 }
6036 NEXT (vpc);
6037
6038 CASE (sem, INSN_PAR_MACWU1) : /* macwu1 $src1,$src2 */
6039 {
6040 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6041 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6042 #define FLD(f) abuf->fields.sfmt_st_plus.f
6043 #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6044 int UNUSED written = 0;
6045 IADDR UNUSED pc = abuf->addr;
6046 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6047
6048 {
6049 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8);
6050 OPRND (h_accums_1) = opval;
6051 TRACE_RESULT (current_cpu, abuf, "accums-1", 'D', opval);
6052 }
6053
6054 #undef OPRND
6055 #undef FLD
6056 }
6057 NEXT (vpc);
6058
6059 CASE (sem, INSN_WRITE_MACWU1) : /* macwu1 $src1,$src2 */
6060 {
6061 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6062 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6063 #define FLD(f) abuf->fields.sfmt_st_plus.f
6064 #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6065 int UNUSED written = abuf->written;
6066 IADDR UNUSED pc = abuf->addr;
6067 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6068
6069 SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_1));
6070
6071 #undef OPRND
6072 #undef FLD
6073 }
6074 NEXT (vpc);
6075
6076 CASE (sem, INSN_PAR_MSBLO) : /* msblo $src1,$src2 */
6077 {
6078 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6080 #define FLD(f) abuf->fields.sfmt_st_plus.f
6081 #define OPRND(f) par_exec->operands.sfmt_msblo.f
6082 int UNUSED written = 0;
6083 IADDR UNUSED pc = abuf->addr;
6084 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6085
6086 {
6087 DI opval = SRADI (SLLDI (SUBDI (GET_H_ACCUM (), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (* FLD (i_src1))), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 32), 16)), 8), 8);
6088 OPRND (accum) = opval;
6089 TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
6090 }
6091
6092 #undef OPRND
6093 #undef FLD
6094 }
6095 NEXT (vpc);
6096
6097 CASE (sem, INSN_WRITE_MSBLO) : /* msblo $src1,$src2 */
6098 {
6099 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6100 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6101 #define FLD(f) abuf->fields.sfmt_st_plus.f
6102 #define OPRND(f) par_exec->operands.sfmt_msblo.f
6103 int UNUSED written = abuf->written;
6104 IADDR UNUSED pc = abuf->addr;
6105 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6106
6107 SET_H_ACCUM (OPRND (accum));
6108
6109 #undef OPRND
6110 #undef FLD
6111 }
6112 NEXT (vpc);
6113
6114 CASE (sem, INSN_PAR_MULWU1) : /* mulwu1 $src1,$src2 */
6115 {
6116 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6117 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6118 #define FLD(f) abuf->fields.sfmt_st_plus.f
6119 #define OPRND(f) par_exec->operands.sfmt_mulwu1.f
6120 int UNUSED written = 0;
6121 IADDR UNUSED pc = abuf->addr;
6122 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6123
6124 {
6125 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16);
6126 OPRND (h_accums_1) = opval;
6127 TRACE_RESULT (current_cpu, abuf, "accums-1", 'D', opval);
6128 }
6129
6130 #undef OPRND
6131 #undef FLD
6132 }
6133 NEXT (vpc);
6134
6135 CASE (sem, INSN_WRITE_MULWU1) : /* mulwu1 $src1,$src2 */
6136 {
6137 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6138 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6139 #define FLD(f) abuf->fields.sfmt_st_plus.f
6140 #define OPRND(f) par_exec->operands.sfmt_mulwu1.f
6141 int UNUSED written = abuf->written;
6142 IADDR UNUSED pc = abuf->addr;
6143 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6144
6145 SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_1));
6146
6147 #undef OPRND
6148 #undef FLD
6149 }
6150 NEXT (vpc);
6151
6152 CASE (sem, INSN_PAR_MACLH1) : /* maclh1 $src1,$src2 */
6153 {
6154 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6156 #define FLD(f) abuf->fields.sfmt_st_plus.f
6157 #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6158 int UNUSED written = 0;
6159 IADDR UNUSED pc = abuf->addr;
6160 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6161
6162 {
6163 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (* FLD (i_src1))), SRASI (* FLD (i_src2), 16))), 16)), 8), 8);
6164 OPRND (h_accums_1) = opval;
6165 TRACE_RESULT (current_cpu, abuf, "accums-1", 'D', opval);
6166 }
6167
6168 #undef OPRND
6169 #undef FLD
6170 }
6171 NEXT (vpc);
6172
6173 CASE (sem, INSN_WRITE_MACLH1) : /* maclh1 $src1,$src2 */
6174 {
6175 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6176 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6177 #define FLD(f) abuf->fields.sfmt_st_plus.f
6178 #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6179 int UNUSED written = abuf->written;
6180 IADDR UNUSED pc = abuf->addr;
6181 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6182
6183 SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_1));
6184
6185 #undef OPRND
6186 #undef FLD
6187 }
6188 NEXT (vpc);
6189
6190 CASE (sem, INSN_PAR_SC) : /* sc */
6191 {
6192 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6193 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6194 #define FLD(f) abuf->fields.fmt_empty.f
6195 #define OPRND(f) par_exec->operands.sfmt_sc.f
6196 int UNUSED written = 0;
6197 IADDR UNUSED pc = abuf->addr;
6198 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6199
6200 if (ZEXTBISI (CPU (h_cond)))
6201 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
6202
6203 #undef OPRND
6204 #undef FLD
6205 }
6206 NEXT (vpc);
6207
6208 CASE (sem, INSN_WRITE_SC) : /* sc */
6209 {
6210 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6211 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6212 #define FLD(f) abuf->fields.fmt_empty.f
6213 #define OPRND(f) par_exec->operands.sfmt_sc.f
6214 int UNUSED written = abuf->written;
6215 IADDR UNUSED pc = abuf->addr;
6216 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6217
6218
6219 #undef OPRND
6220 #undef FLD
6221 }
6222 NEXT (vpc);
6223
6224 CASE (sem, INSN_PAR_SNC) : /* snc */
6225 {
6226 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6227 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6228 #define FLD(f) abuf->fields.fmt_empty.f
6229 #define OPRND(f) par_exec->operands.sfmt_sc.f
6230 int UNUSED written = 0;
6231 IADDR UNUSED pc = abuf->addr;
6232 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6233
6234 if (ZEXTBISI (NOTBI (CPU (h_cond))))
6235 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
6236
6237 #undef OPRND
6238 #undef FLD
6239 }
6240 NEXT (vpc);
6241
6242 CASE (sem, INSN_WRITE_SNC) : /* snc */
6243 {
6244 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6245 const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6246 #define FLD(f) abuf->fields.fmt_empty.f
6247 #define OPRND(f) par_exec->operands.sfmt_sc.f
6248 int UNUSED written = abuf->written;
6249 IADDR UNUSED pc = abuf->addr;
6250 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6251
6252
6253 #undef OPRND
6254 #undef FLD
6255 }
6256 NEXT (vpc);
6257
6258
6259 }
6260 ENDSWITCH (sem) /* End of semantic switch. */
6261
6262 /* At this point `vpc' contains the next insn to execute. */
6263 }
6264
6265 #undef DEFINE_SWITCH
6266 #endif /* DEFINE_SWITCH */