1 /* Simulator instruction semantics for m32rxf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
35 { 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 },
316 for (i = 0; labels[i].label != 0; ++i)
319 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
321 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
326 #endif /* DEFINE_LABELS */
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". */
338 #define TRACE_RESULT(cpu, abuf, name, type, val)
342 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
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)
352 #else /* ! WITH_SCACHE_PBB */
354 #define NEXT(vpc) BREAK (sem)
357 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
359 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
362 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
365 #endif /* ! WITH_SCACHE_PBB */
369 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
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);
379 /* Update the recorded pc in the cpu state struct.
380 Only necessary for WITH_SCACHE case, but to avoid the
381 conditional compilation .... */
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);
394 CASE (sem, INSN_X_AFTER) : /* --after-- */
396 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
397 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
398 #define FLD(f) abuf->fields.fmt_empty.f
399 int UNUSED written = 0;
400 IADDR UNUSED pc = abuf->addr;
401 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
404 #if WITH_SCACHE_PBB_M32RXF
405 m32rxf_pbb_after (current_cpu, sem_arg);
413 CASE (sem, INSN_X_BEFORE) : /* --before-- */
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);
423 #if WITH_SCACHE_PBB_M32RXF
424 m32rxf_pbb_before (current_cpu, sem_arg);
432 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
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);
442 #if WITH_SCACHE_PBB_M32RXF
444 vpc = m32rxf_pbb_cti_chain (current_cpu, sem_arg,
445 pbb_br_type, pbb_br_npc);
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));
460 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
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);
470 #if WITH_SCACHE_PBB_M32RXF
471 vpc = m32rxf_pbb_chain (current_cpu, sem_arg);
482 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
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);
492 #if WITH_SCACHE_PBB_M32RXF
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);
498 vpc = m32rxf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
507 CASE (sem, INSN_ADD) : /* add $dr,$sr */
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);
517 SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
518 * FLD (i_dr) = opval;
519 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
526 CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */
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);
536 SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
537 * FLD (i_dr) = opval;
538 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
545 CASE (sem, INSN_AND) : /* and $dr,$sr */
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);
555 SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
556 * FLD (i_dr) = opval;
557 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
564 CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */
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);
574 SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
575 * FLD (i_dr) = opval;
576 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
583 CASE (sem, INSN_OR) : /* or $dr,$sr */
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);
593 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
594 * FLD (i_dr) = opval;
595 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
602 CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */
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);
612 SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
613 * FLD (i_dr) = opval;
614 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
621 CASE (sem, INSN_XOR) : /* xor $dr,$sr */
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);
631 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
632 * FLD (i_dr) = opval;
633 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
640 CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */
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);
650 SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
651 * FLD (i_dr) = opval;
652 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
659 CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */
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);
669 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
670 * FLD (i_dr) = opval;
671 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
678 CASE (sem, INSN_ADDV) : /* addv $dr,$sr */
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);
689 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
690 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
693 * FLD (i_dr) = opval;
694 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
698 CPU (h_cond) = opval;
699 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
707 CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */
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);
718 temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
719 temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
722 * FLD (i_dr) = opval;
723 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
727 CPU (h_cond) = opval;
728 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
736 CASE (sem, INSN_ADDX) : /* addx $dr,$sr */
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);
747 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
748 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
751 * FLD (i_dr) = opval;
752 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
756 CPU (h_cond) = opval;
757 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
765 CASE (sem, INSN_BC8) : /* bc.s $disp8 */
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;
773 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
777 USI opval = FLD (i_disp8);
778 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
780 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
784 abuf->written = written;
785 SEM_BRANCH_FINI (vpc);
790 CASE (sem, INSN_BC24) : /* bc.l $disp24 */
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;
798 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
802 USI opval = FLD (i_disp24);
803 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
805 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
809 abuf->written = written;
810 SEM_BRANCH_FINI (vpc);
815 CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */
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;
823 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
825 if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
827 USI opval = FLD (i_disp16);
828 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
830 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
834 abuf->written = written;
835 SEM_BRANCH_FINI (vpc);
840 CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */
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;
848 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
850 if (EQSI (* FLD (i_src2), 0)) {
852 USI opval = FLD (i_disp16);
853 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
855 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
859 abuf->written = written;
860 SEM_BRANCH_FINI (vpc);
865 CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */
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;
873 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
875 if (GESI (* FLD (i_src2), 0)) {
877 USI opval = FLD (i_disp16);
878 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
880 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
884 abuf->written = written;
885 SEM_BRANCH_FINI (vpc);
890 CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */
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;
898 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
900 if (GTSI (* FLD (i_src2), 0)) {
902 USI opval = FLD (i_disp16);
903 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
905 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
909 abuf->written = written;
910 SEM_BRANCH_FINI (vpc);
915 CASE (sem, INSN_BLEZ) : /* blez $src2,$disp16 */
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;
923 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
925 if (LESI (* FLD (i_src2), 0)) {
927 USI opval = FLD (i_disp16);
928 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
930 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
934 abuf->written = written;
935 SEM_BRANCH_FINI (vpc);
940 CASE (sem, INSN_BLTZ) : /* bltz $src2,$disp16 */
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;
948 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
950 if (LTSI (* FLD (i_src2), 0)) {
952 USI opval = FLD (i_disp16);
953 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
955 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
959 abuf->written = written;
960 SEM_BRANCH_FINI (vpc);
965 CASE (sem, INSN_BNEZ) : /* bnez $src2,$disp16 */
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;
973 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
975 if (NESI (* FLD (i_src2), 0)) {
977 USI opval = FLD (i_disp16);
978 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
980 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
984 abuf->written = written;
985 SEM_BRANCH_FINI (vpc);
990 CASE (sem, INSN_BL8) : /* bl.s $disp8 */
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;
998 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
1013 SEM_BRANCH_FINI (vpc);
1018 CASE (sem, INSN_BL24) : /* bl.l $disp24 */
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;
1026 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1030 SI opval = ADDSI (pc, 4);
1031 CPU (h_gr[((UINT) 14)]) = opval;
1032 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
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);
1041 SEM_BRANCH_FINI (vpc);
1046 CASE (sem, INSN_BCL8) : /* bcl.s $disp8 */
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;
1054 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
1073 abuf->written = written;
1074 SEM_BRANCH_FINI (vpc);
1079 CASE (sem, INSN_BCL24) : /* bcl.l $disp24 */
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;
1087 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
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);
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);
1106 abuf->written = written;
1107 SEM_BRANCH_FINI (vpc);
1112 CASE (sem, INSN_BNC8) : /* bnc.s $disp8 */
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;
1120 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1122 if (NOTBI (CPU (h_cond))) {
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);
1131 abuf->written = written;
1132 SEM_BRANCH_FINI (vpc);
1137 CASE (sem, INSN_BNC24) : /* bnc.l $disp24 */
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;
1145 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1147 if (NOTBI (CPU (h_cond))) {
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);
1156 abuf->written = written;
1157 SEM_BRANCH_FINI (vpc);
1162 CASE (sem, INSN_BNE) : /* bne $src1,$src2,$disp16 */
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;
1170 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1172 if (NESI (* FLD (i_src1), * FLD (i_src2))) {
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);
1181 abuf->written = written;
1182 SEM_BRANCH_FINI (vpc);
1187 CASE (sem, INSN_BRA8) : /* bra.s $disp8 */
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;
1195 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
1203 SEM_BRANCH_FINI (vpc);
1208 CASE (sem, INSN_BRA24) : /* bra.l $disp24 */
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;
1216 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
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);
1224 SEM_BRANCH_FINI (vpc);
1229 CASE (sem, INSN_BNCL8) : /* bncl.s $disp8 */
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;
1237 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1239 if (NOTBI (CPU (h_cond))) {
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);
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);
1256 abuf->written = written;
1257 SEM_BRANCH_FINI (vpc);
1262 CASE (sem, INSN_BNCL24) : /* bncl.l $disp24 */
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;
1270 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1272 if (NOTBI (CPU (h_cond))) {
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);
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);
1289 abuf->written = written;
1290 SEM_BRANCH_FINI (vpc);
1295 CASE (sem, INSN_CMP) : /* cmp $src1,$src2 */
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);
1305 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
1306 CPU (h_cond) = opval;
1307 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1314 CASE (sem, INSN_CMPI) : /* cmpi $src2,$simm16 */
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);
1324 BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
1325 CPU (h_cond) = opval;
1326 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1333 CASE (sem, INSN_CMPU) : /* cmpu $src1,$src2 */
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);
1343 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
1344 CPU (h_cond) = opval;
1345 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1352 CASE (sem, INSN_CMPUI) : /* cmpui $src2,$simm16 */
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);
1362 BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
1363 CPU (h_cond) = opval;
1364 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1371 CASE (sem, INSN_CMPEQ) : /* cmpeq $src1,$src2 */
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);
1381 BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
1382 CPU (h_cond) = opval;
1383 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1390 CASE (sem, INSN_CMPZ) : /* cmpz $src2 */
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);
1400 BI opval = EQSI (* FLD (i_src2), 0);
1401 CPU (h_cond) = opval;
1402 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
1409 CASE (sem, INSN_DIV) : /* div $dr,$sr */
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);
1418 if (NESI (* FLD (i_sr), 0)) {
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);
1427 abuf->written = written;
1432 CASE (sem, INSN_DIVU) : /* divu $dr,$sr */
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);
1441 if (NESI (* FLD (i_sr), 0)) {
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);
1450 abuf->written = written;
1455 CASE (sem, INSN_REM) : /* rem $dr,$sr */
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);
1464 if (NESI (* FLD (i_sr), 0)) {
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);
1473 abuf->written = written;
1478 CASE (sem, INSN_REMU) : /* remu $dr,$sr */
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);
1487 if (NESI (* FLD (i_sr), 0)) {
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);
1496 abuf->written = written;
1501 CASE (sem, INSN_DIVH) : /* divh $dr,$sr */
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);
1510 if (NESI (* FLD (i_sr), 0)) {
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);
1519 abuf->written = written;
1524 CASE (sem, INSN_JC) : /* jc $sr */
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;
1532 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
1543 abuf->written = written;
1544 SEM_BRANCH_FINI (vpc);
1549 CASE (sem, INSN_JNC) : /* jnc $sr */
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;
1557 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1559 if (NOTBI (CPU (h_cond))) {
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);
1568 abuf->written = written;
1569 SEM_BRANCH_FINI (vpc);
1574 CASE (sem, INSN_JL) : /* jl $sr */
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;
1582 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1586 temp0 = ADDSI (ANDSI (pc, -4), 4);
1587 temp1 = ANDSI (* FLD (i_sr), -4);
1590 CPU (h_gr[((UINT) 14)]) = opval;
1591 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
1595 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1596 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1600 SEM_BRANCH_FINI (vpc);
1605 CASE (sem, INSN_JMP) : /* jmp $sr */
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;
1613 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
1621 SEM_BRANCH_FINI (vpc);
1626 CASE (sem, INSN_LD) : /* ld $dr,@$sr */
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);
1636 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1637 * FLD (i_dr) = opval;
1638 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1645 CASE (sem, INSN_LD_D) : /* ld $dr,@($slo16,$sr) */
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);
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);
1664 CASE (sem, INSN_LDB) : /* ldb $dr,@$sr */
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);
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);
1683 CASE (sem, INSN_LDB_D) : /* ldb $dr,@($slo16,$sr) */
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);
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);
1702 CASE (sem, INSN_LDH) : /* ldh $dr,@$sr */
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);
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);
1721 CASE (sem, INSN_LDH_D) : /* ldh $dr,@($slo16,$sr) */
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);
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);
1740 CASE (sem, INSN_LDUB) : /* ldub $dr,@$sr */
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);
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);
1759 CASE (sem, INSN_LDUB_D) : /* ldub $dr,@($slo16,$sr) */
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);
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);
1778 CASE (sem, INSN_LDUH) : /* lduh $dr,@$sr */
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);
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);
1797 CASE (sem, INSN_LDUH_D) : /* lduh $dr,@($slo16,$sr) */
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);
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);
1816 CASE (sem, INSN_LD_PLUS) : /* ld $dr,@$sr+ */
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);
1827 temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1828 temp1 = ADDSI (* FLD (i_sr), 4);
1831 * FLD (i_dr) = opval;
1832 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1836 * FLD (i_sr) = opval;
1837 TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
1845 CASE (sem, INSN_LD24) : /* ld24 $dr,$uimm24 */
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);
1855 SI opval = FLD (i_uimm24);
1856 * FLD (i_dr) = opval;
1857 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1864 CASE (sem, INSN_LDI8) : /* ldi8 $dr,$simm8 */
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);
1874 SI opval = FLD (f_simm8);
1875 * FLD (i_dr) = opval;
1876 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1883 CASE (sem, INSN_LDI16) : /* ldi16 $dr,$hash$slo16 */
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);
1893 SI opval = FLD (f_simm16);
1894 * FLD (i_dr) = opval;
1895 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1902 CASE (sem, INSN_LOCK) : /* lock $dr,@$sr */
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);
1914 CPU (h_lock) = opval;
1915 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
1918 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1919 * FLD (i_dr) = opval;
1920 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1928 CASE (sem, INSN_MACHI_A) : /* machi $src1,$src2,$acc */
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);
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);
1947 CASE (sem, INSN_MACLO_A) : /* maclo $src1,$src2,$acc */
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);
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);
1966 CASE (sem, INSN_MACWHI_A) : /* macwhi $src1,$src2,$acc */
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);
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);
1985 CASE (sem, INSN_MACWLO_A) : /* macwlo $src1,$src2,$acc */
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);
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);
2004 CASE (sem, INSN_MUL) : /* mul $dr,$sr */
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);
2014 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
2015 * FLD (i_dr) = opval;
2016 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2023 CASE (sem, INSN_MULHI_A) : /* mulhi $src1,$src2,$acc */
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);
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);
2042 CASE (sem, INSN_MULLO_A) : /* mullo $src1,$src2,$acc */
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);
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);
2061 CASE (sem, INSN_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
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);
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);
2080 CASE (sem, INSN_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
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);
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);
2099 CASE (sem, INSN_MV) : /* mv $dr,$sr */
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);
2109 SI opval = * FLD (i_sr);
2110 * FLD (i_dr) = opval;
2111 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2118 CASE (sem, INSN_MVFACHI_A) : /* mvfachi $dr,$accs */
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);
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);
2137 CASE (sem, INSN_MVFACLO_A) : /* mvfaclo $dr,$accs */
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);
2147 SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
2148 * FLD (i_dr) = opval;
2149 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2156 CASE (sem, INSN_MVFACMI_A) : /* mvfacmi $dr,$accs */
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);
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);
2175 CASE (sem, INSN_MVFC) : /* mvfc $dr,$scr */
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);
2185 SI opval = GET_H_CR (FLD (f_r2));
2186 * FLD (i_dr) = opval;
2187 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2194 CASE (sem, INSN_MVTACHI_A) : /* mvtachi $src1,$accs */
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);
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);
2213 CASE (sem, INSN_MVTACLO_A) : /* mvtaclo $src1,$accs */
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);
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);
2232 CASE (sem, INSN_MVTC) : /* mvtc $sr,$dcr */
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);
2242 USI opval = * FLD (i_sr);
2243 SET_H_CR (FLD (f_r1), opval);
2244 TRACE_RESULT (current_cpu, abuf, "dcr", 'x', opval);
2251 CASE (sem, INSN_NEG) : /* neg $dr,$sr */
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);
2261 SI opval = NEGSI (* FLD (i_sr));
2262 * FLD (i_dr) = opval;
2263 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2270 CASE (sem, INSN_NOP) : /* nop */
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);
2279 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
2285 CASE (sem, INSN_NOT) : /* not $dr,$sr */
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);
2295 SI opval = INVSI (* FLD (i_sr));
2296 * FLD (i_dr) = opval;
2297 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2304 CASE (sem, INSN_RAC_DSI) : /* rac $accd,$accs,$imm1 */
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);
2315 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
2316 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
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);
2328 CASE (sem, INSN_RACH_DSI) : /* rach $accd,$accs,$imm1 */
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);
2339 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
2340 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
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);
2352 CASE (sem, INSN_RTE) : /* rte */
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;
2360 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
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);
2374 UQI opval = CPU (h_bpsw);
2376 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
2379 UQI opval = CPU (h_bbpsw);
2380 CPU (h_bpsw) = opval;
2381 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
2385 SEM_BRANCH_FINI (vpc);
2390 CASE (sem, INSN_SETH) : /* seth $dr,$hash$hi16 */
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);
2400 SI opval = SLLSI (FLD (f_hi16), 16);
2401 * FLD (i_dr) = opval;
2402 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2409 CASE (sem, INSN_SLL) : /* sll $dr,$sr */
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);
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);
2428 CASE (sem, INSN_SLL3) : /* sll3 $dr,$sr,$simm16 */
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);
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);
2447 CASE (sem, INSN_SLLI) : /* slli $dr,$uimm5 */
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);
2457 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
2458 * FLD (i_dr) = opval;
2459 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2466 CASE (sem, INSN_SRA) : /* sra $dr,$sr */
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);
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);
2485 CASE (sem, INSN_SRA3) : /* sra3 $dr,$sr,$simm16 */
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);
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);
2504 CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */
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);
2514 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
2515 * FLD (i_dr) = opval;
2516 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2523 CASE (sem, INSN_SRL) : /* srl $dr,$sr */
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);
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);
2542 CASE (sem, INSN_SRL3) : /* srl3 $dr,$sr,$simm16 */
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);
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);
2561 CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */
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);
2571 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
2572 * FLD (i_dr) = opval;
2573 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2580 CASE (sem, INSN_ST) : /* st $src1,@$src2 */
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);
2590 SI opval = * FLD (i_src1);
2591 SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2592 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2599 CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */
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);
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);
2618 CASE (sem, INSN_STB) : /* stb $src1,@$src2 */
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);
2628 QI opval = * FLD (i_src1);
2629 SETMEMQI (current_cpu, pc, * FLD (i_src2), opval);
2630 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2637 CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */
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);
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);
2656 CASE (sem, INSN_STH) : /* sth $src1,@$src2 */
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);
2666 HI opval = * FLD (i_src1);
2667 SETMEMHI (current_cpu, pc, * FLD (i_src2), opval);
2668 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2675 CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */
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);
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);
2694 CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */
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);
2705 tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
2707 SI opval = * FLD (i_src1);
2708 SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2709 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2712 SI opval = tmp_new_src2;
2713 * FLD (i_src2) = opval;
2714 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
2722 CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */
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);
2733 tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
2735 SI opval = * FLD (i_src1);
2736 SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2737 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2740 SI opval = tmp_new_src2;
2741 * FLD (i_src2) = opval;
2742 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
2750 CASE (sem, INSN_SUB) : /* sub $dr,$sr */
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);
2760 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
2761 * FLD (i_dr) = opval;
2762 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2769 CASE (sem, INSN_SUBV) : /* subv $dr,$sr */
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);
2780 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
2781 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
2784 * FLD (i_dr) = opval;
2785 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2789 CPU (h_cond) = opval;
2790 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
2798 CASE (sem, INSN_SUBX) : /* subx $dr,$sr */
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);
2809 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
2810 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
2813 * FLD (i_dr) = opval;
2814 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2818 CPU (h_cond) = opval;
2819 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
2827 CASE (sem, INSN_TRAP) : /* trap $uimm4 */
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;
2835 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
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);
2844 USI opval = ADDSI (pc, 4);
2845 SET_H_CR (((UINT) 6), opval);
2846 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
2849 UQI opval = CPU (h_bpsw);
2850 CPU (h_bbpsw) = opval;
2851 TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
2854 UQI opval = GET_H_PSW ();
2855 CPU (h_bpsw) = opval;
2856 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
2859 UQI opval = ANDQI (GET_H_PSW (), 128);
2861 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
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);
2870 SEM_BRANCH_FINI (vpc);
2875 CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */
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);
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);
2895 CPU (h_lock) = opval;
2896 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
2900 abuf->written = written;
2905 CASE (sem, INSN_SATB) : /* satb $dr,$sr */
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);
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);
2924 CASE (sem, INSN_SATH) : /* sath $dr,$sr */
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);
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);
2943 CASE (sem, INSN_SAT) : /* sat $dr,$sr */
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);
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);
2962 CASE (sem, INSN_PCMPBZ) : /* pcmpbz $src2 */
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);
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);
2981 CASE (sem, INSN_SADD) : /* sadd */
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);
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);
3000 CASE (sem, INSN_MACWU1) : /* macwu1 $src1,$src2 */
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);
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);
3019 CASE (sem, INSN_MSBLO) : /* msblo $src1,$src2 */
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);
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);
3038 CASE (sem, INSN_MULWU1) : /* mulwu1 $src1,$src2 */
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);
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);
3057 CASE (sem, INSN_MACLH1) : /* maclh1 $src1,$src2 */
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);
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);
3076 CASE (sem, INSN_SC) : /* sc */
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);
3085 if (ZEXTBISI (CPU (h_cond)))
3086 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
3092 CASE (sem, INSN_SNC) : /* snc */
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);
3101 if (ZEXTBISI (NOTBI (CPU (h_cond))))
3102 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
3108 CASE (sem, INSN_PAR_ADD) : /* add $dr,$sr */
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);
3119 SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
3121 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3129 CASE (sem, INSN_WRITE_ADD) : /* add $dr,$sr */
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);
3139 * FLD (i_dr) = OPRND (dr);
3146 CASE (sem, INSN_PAR_AND) : /* and $dr,$sr */
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);
3157 SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
3159 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3167 CASE (sem, INSN_WRITE_AND) : /* and $dr,$sr */
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);
3177 * FLD (i_dr) = OPRND (dr);
3184 CASE (sem, INSN_PAR_OR) : /* or $dr,$sr */
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);
3195 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
3197 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3205 CASE (sem, INSN_WRITE_OR) : /* or $dr,$sr */
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);
3215 * FLD (i_dr) = OPRND (dr);
3222 CASE (sem, INSN_PAR_XOR) : /* xor $dr,$sr */
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);
3233 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
3235 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3243 CASE (sem, INSN_WRITE_XOR) : /* xor $dr,$sr */
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);
3253 * FLD (i_dr) = OPRND (dr);
3260 CASE (sem, INSN_PAR_ADDI) : /* addi $dr,$simm8 */
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);
3271 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
3273 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3281 CASE (sem, INSN_WRITE_ADDI) : /* addi $dr,$simm8 */
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);
3291 * FLD (i_dr) = OPRND (dr);
3298 CASE (sem, INSN_PAR_ADDV) : /* addv $dr,$sr */
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);
3310 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
3311 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
3315 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3319 OPRND (condbit) = opval;
3320 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3329 CASE (sem, INSN_WRITE_ADDV) : /* addv $dr,$sr */
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);
3339 CPU (h_cond) = OPRND (condbit);
3340 * FLD (i_dr) = OPRND (dr);
3347 CASE (sem, INSN_PAR_ADDX) : /* addx $dr,$sr */
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);
3359 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3360 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3364 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3368 OPRND (condbit) = opval;
3369 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3378 CASE (sem, INSN_WRITE_ADDX) : /* addx $dr,$sr */
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);
3388 CPU (h_cond) = OPRND (condbit);
3389 * FLD (i_dr) = OPRND (dr);
3396 CASE (sem, INSN_PAR_BC8) : /* bc.s $disp8 */
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);
3408 USI opval = FLD (i_disp8);
3410 written |= (1 << 2);
3411 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3415 abuf->written = written;
3421 CASE (sem, INSN_WRITE_BC8) : /* bc.s $disp8 */
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;
3430 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3432 if (written & (1 << 2))
3434 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3437 SEM_BRANCH_FINI (vpc);
3443 CASE (sem, INSN_PAR_BL8) : /* bl.s $disp8 */
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);
3455 SI opval = ADDSI (ANDSI (pc, -4), 4);
3456 OPRND (h_gr_14) = opval;
3457 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
3460 USI opval = FLD (i_disp8);
3462 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3471 CASE (sem, INSN_WRITE_BL8) : /* bl.s $disp8 */
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;
3480 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3482 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3483 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3485 SEM_BRANCH_FINI (vpc);
3491 CASE (sem, INSN_PAR_BCL8) : /* bcl.s $disp8 */
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);
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);
3510 USI opval = FLD (i_disp8);
3512 written |= (1 << 4);
3513 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3518 abuf->written = written;
3524 CASE (sem, INSN_WRITE_BCL8) : /* bcl.s $disp8 */
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;
3533 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3535 if (written & (1 << 3))
3537 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3539 if (written & (1 << 4))
3541 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3544 SEM_BRANCH_FINI (vpc);
3550 CASE (sem, INSN_PAR_BNC8) : /* bnc.s $disp8 */
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);
3560 if (NOTBI (CPU (h_cond))) {
3562 USI opval = FLD (i_disp8);
3564 written |= (1 << 2);
3565 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3569 abuf->written = written;
3575 CASE (sem, INSN_WRITE_BNC8) : /* bnc.s $disp8 */
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;
3584 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3586 if (written & (1 << 2))
3588 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3591 SEM_BRANCH_FINI (vpc);
3597 CASE (sem, INSN_PAR_BRA8) : /* bra.s $disp8 */
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);
3608 USI opval = FLD (i_disp8);
3610 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3618 CASE (sem, INSN_WRITE_BRA8) : /* bra.s $disp8 */
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;
3627 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3629 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3631 SEM_BRANCH_FINI (vpc);
3637 CASE (sem, INSN_PAR_BNCL8) : /* bncl.s $disp8 */
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);
3647 if (NOTBI (CPU (h_cond))) {
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);
3656 USI opval = FLD (i_disp8);
3658 written |= (1 << 4);
3659 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3664 abuf->written = written;
3670 CASE (sem, INSN_WRITE_BNCL8) : /* bncl.s $disp8 */
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;
3679 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3681 if (written & (1 << 3))
3683 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3685 if (written & (1 << 4))
3687 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3690 SEM_BRANCH_FINI (vpc);
3696 CASE (sem, INSN_PAR_CMP) : /* cmp $src1,$src2 */
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);
3707 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
3708 OPRND (condbit) = opval;
3709 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3717 CASE (sem, INSN_WRITE_CMP) : /* cmp $src1,$src2 */
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);
3727 CPU (h_cond) = OPRND (condbit);
3734 CASE (sem, INSN_PAR_CMPU) : /* cmpu $src1,$src2 */
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);
3745 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
3746 OPRND (condbit) = opval;
3747 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3755 CASE (sem, INSN_WRITE_CMPU) : /* cmpu $src1,$src2 */
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);
3765 CPU (h_cond) = OPRND (condbit);
3772 CASE (sem, INSN_PAR_CMPEQ) : /* cmpeq $src1,$src2 */
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);
3783 BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
3784 OPRND (condbit) = opval;
3785 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3793 CASE (sem, INSN_WRITE_CMPEQ) : /* cmpeq $src1,$src2 */
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);
3803 CPU (h_cond) = OPRND (condbit);
3810 CASE (sem, INSN_PAR_CMPZ) : /* cmpz $src2 */
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);
3821 BI opval = EQSI (* FLD (i_src2), 0);
3822 OPRND (condbit) = opval;
3823 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
3831 CASE (sem, INSN_WRITE_CMPZ) : /* cmpz $src2 */
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);
3841 CPU (h_cond) = OPRND (condbit);
3848 CASE (sem, INSN_PAR_JC) : /* jc $sr */
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);
3860 USI opval = ANDSI (* FLD (i_sr), -4);
3862 written |= (1 << 2);
3863 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3867 abuf->written = written;
3873 CASE (sem, INSN_WRITE_JC) : /* jc $sr */
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;
3882 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3884 if (written & (1 << 2))
3886 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3889 SEM_BRANCH_FINI (vpc);
3895 CASE (sem, INSN_PAR_JNC) : /* jnc $sr */
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);
3905 if (NOTBI (CPU (h_cond))) {
3907 USI opval = ANDSI (* FLD (i_sr), -4);
3909 written |= (1 << 2);
3910 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3914 abuf->written = written;
3920 CASE (sem, INSN_WRITE_JNC) : /* jnc $sr */
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;
3929 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3931 if (written & (1 << 2))
3933 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3936 SEM_BRANCH_FINI (vpc);
3942 CASE (sem, INSN_PAR_JL) : /* jl $sr */
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);
3954 temp0 = ADDSI (ANDSI (pc, -4), 4);
3955 temp1 = ANDSI (* FLD (i_sr), -4);
3958 OPRND (h_gr_14) = opval;
3959 TRACE_RESULT (current_cpu, abuf, "gr-14", 'x', opval);
3964 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3973 CASE (sem, INSN_WRITE_JL) : /* jl $sr */
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;
3982 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3984 CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_14);
3985 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3987 SEM_BRANCH_FINI (vpc);
3993 CASE (sem, INSN_PAR_JMP) : /* jmp $sr */
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);
4004 USI opval = ANDSI (* FLD (i_sr), -4);
4006 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4014 CASE (sem, INSN_WRITE_JMP) : /* jmp $sr */
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;
4023 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4025 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4027 SEM_BRANCH_FINI (vpc);
4033 CASE (sem, INSN_PAR_LD) : /* ld $dr,@$sr */
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);
4044 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4046 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4054 CASE (sem, INSN_WRITE_LD) : /* ld $dr,@$sr */
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);
4064 * FLD (i_dr) = OPRND (dr);
4071 CASE (sem, INSN_PAR_LDB) : /* ldb $dr,@$sr */
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);
4082 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
4084 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4092 CASE (sem, INSN_WRITE_LDB) : /* ldb $dr,@$sr */
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);
4102 * FLD (i_dr) = OPRND (dr);
4109 CASE (sem, INSN_PAR_LDH) : /* ldh $dr,@$sr */
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);
4120 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
4122 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4130 CASE (sem, INSN_WRITE_LDH) : /* ldh $dr,@$sr */
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);
4140 * FLD (i_dr) = OPRND (dr);
4147 CASE (sem, INSN_PAR_LDUB) : /* ldub $dr,@$sr */
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);
4158 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
4160 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4168 CASE (sem, INSN_WRITE_LDUB) : /* ldub $dr,@$sr */
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);
4178 * FLD (i_dr) = OPRND (dr);
4185 CASE (sem, INSN_PAR_LDUH) : /* lduh $dr,@$sr */
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);
4196 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
4198 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4206 CASE (sem, INSN_WRITE_LDUH) : /* lduh $dr,@$sr */
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);
4216 * FLD (i_dr) = OPRND (dr);
4223 CASE (sem, INSN_PAR_LD_PLUS) : /* ld $dr,@$sr+ */
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);
4235 temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4236 temp1 = ADDSI (* FLD (i_sr), 4);
4240 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4245 TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
4254 CASE (sem, INSN_WRITE_LD_PLUS) : /* ld $dr,@$sr+ */
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);
4264 * FLD (i_dr) = OPRND (dr);
4265 * FLD (i_sr) = OPRND (sr);
4272 CASE (sem, INSN_PAR_LDI8) : /* ldi8 $dr,$simm8 */
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);
4283 SI opval = FLD (f_simm8);
4285 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4293 CASE (sem, INSN_WRITE_LDI8) : /* ldi8 $dr,$simm8 */
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);
4303 * FLD (i_dr) = OPRND (dr);
4310 CASE (sem, INSN_PAR_LOCK) : /* lock $dr,@$sr */
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);
4323 OPRND (h_lock) = opval;
4324 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
4327 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4329 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4338 CASE (sem, INSN_WRITE_LOCK) : /* lock $dr,@$sr */
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);
4348 * FLD (i_dr) = OPRND (dr);
4349 CPU (h_lock) = OPRND (h_lock);
4356 CASE (sem, INSN_PAR_MACHI_A) : /* machi $src1,$src2,$acc */
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);
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);
4377 CASE (sem, INSN_WRITE_MACHI_A) : /* machi $src1,$src2,$acc */
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);
4387 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4394 CASE (sem, INSN_PAR_MACLO_A) : /* maclo $src1,$src2,$acc */
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);
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);
4415 CASE (sem, INSN_WRITE_MACLO_A) : /* maclo $src1,$src2,$acc */
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);
4425 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4432 CASE (sem, INSN_PAR_MACWHI_A) : /* macwhi $src1,$src2,$acc */
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);
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);
4453 CASE (sem, INSN_WRITE_MACWHI_A) : /* macwhi $src1,$src2,$acc */
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);
4463 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4470 CASE (sem, INSN_PAR_MACWLO_A) : /* macwlo $src1,$src2,$acc */
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);
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);
4491 CASE (sem, INSN_WRITE_MACWLO_A) : /* macwlo $src1,$src2,$acc */
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);
4501 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4508 CASE (sem, INSN_PAR_MUL) : /* mul $dr,$sr */
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);
4519 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
4521 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4529 CASE (sem, INSN_WRITE_MUL) : /* mul $dr,$sr */
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);
4539 * FLD (i_dr) = OPRND (dr);
4546 CASE (sem, INSN_PAR_MULHI_A) : /* mulhi $src1,$src2,$acc */
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);
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);
4567 CASE (sem, INSN_WRITE_MULHI_A) : /* mulhi $src1,$src2,$acc */
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);
4577 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4584 CASE (sem, INSN_PAR_MULLO_A) : /* mullo $src1,$src2,$acc */
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);
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);
4605 CASE (sem, INSN_WRITE_MULLO_A) : /* mullo $src1,$src2,$acc */
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);
4615 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4622 CASE (sem, INSN_PAR_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
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);
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);
4643 CASE (sem, INSN_WRITE_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
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);
4653 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4660 CASE (sem, INSN_PAR_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
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);
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);
4681 CASE (sem, INSN_WRITE_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
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);
4691 SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4698 CASE (sem, INSN_PAR_MV) : /* mv $dr,$sr */
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);
4709 SI opval = * FLD (i_sr);
4711 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4719 CASE (sem, INSN_WRITE_MV) : /* mv $dr,$sr */
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);
4729 * FLD (i_dr) = OPRND (dr);
4736 CASE (sem, INSN_PAR_MVFACHI_A) : /* mvfachi $dr,$accs */
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);
4747 SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
4749 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4757 CASE (sem, INSN_WRITE_MVFACHI_A) : /* mvfachi $dr,$accs */
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);
4767 * FLD (i_dr) = OPRND (dr);
4774 CASE (sem, INSN_PAR_MVFACLO_A) : /* mvfaclo $dr,$accs */
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);
4785 SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
4787 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4795 CASE (sem, INSN_WRITE_MVFACLO_A) : /* mvfaclo $dr,$accs */
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);
4805 * FLD (i_dr) = OPRND (dr);
4812 CASE (sem, INSN_PAR_MVFACMI_A) : /* mvfacmi $dr,$accs */
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);
4823 SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
4825 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4833 CASE (sem, INSN_WRITE_MVFACMI_A) : /* mvfacmi $dr,$accs */
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);
4843 * FLD (i_dr) = OPRND (dr);
4850 CASE (sem, INSN_PAR_MVFC) : /* mvfc $dr,$scr */
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);
4861 SI opval = GET_H_CR (FLD (f_r2));
4863 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
4871 CASE (sem, INSN_WRITE_MVFC) : /* mvfc $dr,$scr */
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);
4881 * FLD (i_dr) = OPRND (dr);
4888 CASE (sem, INSN_PAR_MVTACHI_A) : /* mvtachi $src1,$accs */
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);
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);
4909 CASE (sem, INSN_WRITE_MVTACHI_A) : /* mvtachi $src1,$accs */
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);
4919 SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
4926 CASE (sem, INSN_PAR_MVTACLO_A) : /* mvtaclo $src1,$accs */
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);
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);
4947 CASE (sem, INSN_WRITE_MVTACLO_A) : /* mvtaclo $src1,$accs */
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);
4957 SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
4964 CASE (sem, INSN_PAR_MVTC) : /* mvtc $sr,$dcr */
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);
4975 USI opval = * FLD (i_sr);
4976 OPRND (dcr) = opval;
4977 TRACE_RESULT (current_cpu, abuf, "dcr", 'x', opval);
4985 CASE (sem, INSN_WRITE_MVTC) : /* mvtc $sr,$dcr */
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);
4995 SET_H_CR (FLD (f_r1), OPRND (dcr));
5002 CASE (sem, INSN_PAR_NEG) : /* neg $dr,$sr */
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);
5013 SI opval = NEGSI (* FLD (i_sr));
5015 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5023 CASE (sem, INSN_WRITE_NEG) : /* neg $dr,$sr */
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);
5033 * FLD (i_dr) = OPRND (dr);
5040 CASE (sem, INSN_PAR_NOP) : /* nop */
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);
5050 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
5057 CASE (sem, INSN_WRITE_NOP) : /* nop */
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);
5073 CASE (sem, INSN_PAR_NOT) : /* not $dr,$sr */
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);
5084 SI opval = INVSI (* FLD (i_sr));
5086 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5094 CASE (sem, INSN_WRITE_NOT) : /* not $dr,$sr */
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);
5104 * FLD (i_dr) = OPRND (dr);
5111 CASE (sem, INSN_PAR_RAC_DSI) : /* rac $accd,$accs,$imm1 */
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);
5123 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
5124 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
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);
5137 CASE (sem, INSN_WRITE_RAC_DSI) : /* rac $accd,$accs,$imm1 */
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);
5147 SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
5154 CASE (sem, INSN_PAR_RACH_DSI) : /* rach $accd,$accs,$imm1 */
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);
5166 tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
5167 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
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);
5180 CASE (sem, INSN_WRITE_RACH_DSI) : /* rach $accd,$accs,$imm1 */
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);
5190 SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
5197 CASE (sem, INSN_PAR_RTE) : /* rte */
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);
5209 USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
5211 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5214 USI opval = GET_H_CR (((UINT) 14));
5215 OPRND (h_cr_6) = opval;
5216 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
5219 UQI opval = CPU (h_bpsw);
5220 OPRND (h_psw) = opval;
5221 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
5224 UQI opval = CPU (h_bbpsw);
5225 OPRND (h_bpsw) = opval;
5226 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
5235 CASE (sem, INSN_WRITE_RTE) : /* rte */
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;
5244 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
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);
5251 SEM_BRANCH_FINI (vpc);
5257 CASE (sem, INSN_PAR_SLL) : /* sll $dr,$sr */
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);
5268 SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5270 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5278 CASE (sem, INSN_WRITE_SLL) : /* sll $dr,$sr */
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);
5288 * FLD (i_dr) = OPRND (dr);
5295 CASE (sem, INSN_PAR_SLLI) : /* slli $dr,$uimm5 */
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);
5306 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
5308 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5316 CASE (sem, INSN_WRITE_SLLI) : /* slli $dr,$uimm5 */
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);
5326 * FLD (i_dr) = OPRND (dr);
5333 CASE (sem, INSN_PAR_SRA) : /* sra $dr,$sr */
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);
5344 SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5346 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5354 CASE (sem, INSN_WRITE_SRA) : /* sra $dr,$sr */
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);
5364 * FLD (i_dr) = OPRND (dr);
5371 CASE (sem, INSN_PAR_SRAI) : /* srai $dr,$uimm5 */
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);
5382 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
5384 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5392 CASE (sem, INSN_WRITE_SRAI) : /* srai $dr,$uimm5 */
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);
5402 * FLD (i_dr) = OPRND (dr);
5409 CASE (sem, INSN_PAR_SRL) : /* srl $dr,$sr */
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);
5420 SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5422 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5430 CASE (sem, INSN_WRITE_SRL) : /* srl $dr,$sr */
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);
5440 * FLD (i_dr) = OPRND (dr);
5447 CASE (sem, INSN_PAR_SRLI) : /* srli $dr,$uimm5 */
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);
5458 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
5460 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5468 CASE (sem, INSN_WRITE_SRLI) : /* srli $dr,$uimm5 */
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);
5478 * FLD (i_dr) = OPRND (dr);
5485 CASE (sem, INSN_PAR_ST) : /* st $src1,@$src2 */
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);
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);
5507 CASE (sem, INSN_WRITE_ST) : /* st $src1,@$src2 */
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);
5517 SETMEMSI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5524 CASE (sem, INSN_PAR_STB) : /* stb $src1,@$src2 */
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);
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);
5546 CASE (sem, INSN_WRITE_STB) : /* stb $src1,@$src2 */
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);
5556 SETMEMQI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5563 CASE (sem, INSN_PAR_STH) : /* sth $src1,@$src2 */
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);
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);
5585 CASE (sem, INSN_WRITE_STH) : /* sth $src1,@$src2 */
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);
5595 SETMEMHI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5602 CASE (sem, INSN_PAR_ST_PLUS) : /* st $src1,@+$src2 */
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);
5614 tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
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);
5622 SI opval = tmp_new_src2;
5623 OPRND (src2) = opval;
5624 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
5633 CASE (sem, INSN_WRITE_ST_PLUS) : /* st $src1,@+$src2 */
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);
5643 SETMEMSI (current_cpu, pc, OPRND (h_memory_new_src2_idx), OPRND (h_memory_new_src2));
5644 * FLD (i_src2) = OPRND (src2);
5651 CASE (sem, INSN_PAR_ST_MINUS) : /* st $src1,@-$src2 */
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);
5663 tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
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);
5671 SI opval = tmp_new_src2;
5672 OPRND (src2) = opval;
5673 TRACE_RESULT (current_cpu, abuf, "src2", 'x', opval);
5682 CASE (sem, INSN_WRITE_ST_MINUS) : /* st $src1,@-$src2 */
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);
5692 SETMEMSI (current_cpu, pc, OPRND (h_memory_new_src2_idx), OPRND (h_memory_new_src2));
5693 * FLD (i_src2) = OPRND (src2);
5700 CASE (sem, INSN_PAR_SUB) : /* sub $dr,$sr */
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);
5711 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
5713 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5721 CASE (sem, INSN_WRITE_SUB) : /* sub $dr,$sr */
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);
5731 * FLD (i_dr) = OPRND (dr);
5738 CASE (sem, INSN_PAR_SUBV) : /* subv $dr,$sr */
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);
5750 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
5751 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
5755 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5759 OPRND (condbit) = opval;
5760 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
5769 CASE (sem, INSN_WRITE_SUBV) : /* subv $dr,$sr */
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);
5779 CPU (h_cond) = OPRND (condbit);
5780 * FLD (i_dr) = OPRND (dr);
5787 CASE (sem, INSN_PAR_SUBX) : /* subx $dr,$sr */
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);
5799 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
5800 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
5804 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
5808 OPRND (condbit) = opval;
5809 TRACE_RESULT (current_cpu, abuf, "condbit", 'x', opval);
5818 CASE (sem, INSN_WRITE_SUBX) : /* subx $dr,$sr */
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);
5828 CPU (h_cond) = OPRND (condbit);
5829 * FLD (i_dr) = OPRND (dr);
5836 CASE (sem, INSN_PAR_TRAP) : /* trap $uimm4 */
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);
5848 USI opval = GET_H_CR (((UINT) 6));
5849 OPRND (h_cr_14) = opval;
5850 TRACE_RESULT (current_cpu, abuf, "cr-14", 'x', opval);
5853 USI opval = ADDSI (pc, 4);
5854 OPRND (h_cr_6) = opval;
5855 TRACE_RESULT (current_cpu, abuf, "cr-6", 'x', opval);
5858 UQI opval = CPU (h_bpsw);
5859 OPRND (h_bbpsw) = opval;
5860 TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
5863 UQI opval = GET_H_PSW ();
5864 OPRND (h_bpsw) = opval;
5865 TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
5868 UQI opval = ANDQI (GET_H_PSW (), 128);
5869 OPRND (h_psw) = opval;
5870 TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
5873 SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
5875 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5884 CASE (sem, INSN_WRITE_TRAP) : /* trap $uimm4 */
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;
5893 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
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);
5902 SEM_BRANCH_FINI (vpc);
5908 CASE (sem, INSN_PAR_UNLOCK) : /* unlock $src1,@$src2 */
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);
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);
5930 OPRND (h_lock) = opval;
5931 TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
5935 abuf->written = written;
5941 CASE (sem, INSN_WRITE_UNLOCK) : /* unlock $src1,@$src2 */
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);
5951 CPU (h_lock) = OPRND (h_lock);
5952 if (written & (1 << 4))
5954 SETMEMSI (current_cpu, pc, OPRND (h_memory_src2_idx), OPRND (h_memory_src2));
5962 CASE (sem, INSN_PAR_PCMPBZ) : /* pcmpbz $src2 */
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);
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);
5983 CASE (sem, INSN_WRITE_PCMPBZ) : /* pcmpbz $src2 */
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);
5993 CPU (h_cond) = OPRND (condbit);
6000 CASE (sem, INSN_PAR_SADD) : /* sadd */
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);
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);
6021 CASE (sem, INSN_WRITE_SADD) : /* sadd */
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);
6031 SET_H_ACCUMS (((UINT) 0), OPRND (h_accums_0));
6038 CASE (sem, INSN_PAR_MACWU1) : /* macwu1 $src1,$src2 */
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);
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);
6059 CASE (sem, INSN_WRITE_MACWU1) : /* macwu1 $src1,$src2 */
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);
6069 SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_1));
6076 CASE (sem, INSN_PAR_MSBLO) : /* msblo $src1,$src2 */
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);
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);
6097 CASE (sem, INSN_WRITE_MSBLO) : /* msblo $src1,$src2 */
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);
6107 SET_H_ACCUM (OPRND (accum));
6114 CASE (sem, INSN_PAR_MULWU1) : /* mulwu1 $src1,$src2 */
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);
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);
6135 CASE (sem, INSN_WRITE_MULWU1) : /* mulwu1 $src1,$src2 */
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);
6145 SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_1));
6152 CASE (sem, INSN_PAR_MACLH1) : /* maclh1 $src1,$src2 */
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);
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);
6173 CASE (sem, INSN_WRITE_MACLH1) : /* maclh1 $src1,$src2 */
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);
6183 SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_1));
6190 CASE (sem, INSN_PAR_SC) : /* sc */
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);
6200 if (ZEXTBISI (CPU (h_cond)))
6201 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
6208 CASE (sem, INSN_WRITE_SC) : /* sc */
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);
6224 CASE (sem, INSN_PAR_SNC) : /* snc */
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);
6234 if (ZEXTBISI (NOTBI (CPU (h_cond))))
6235 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
6242 CASE (sem, INSN_WRITE_SNC) : /* snc */
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);
6260 ENDSWITCH (sem) /* End of semantic switch. */
6262 /* At this point `vpc' contains the next insn to execute. */
6265 #undef DEFINE_SWITCH
6266 #endif /* DEFINE_SWITCH */