1 /* Simulator instruction semantics for iq2000bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996-2024 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
35 { IQ2000BF_INSN_X_INVALID
, && case_sem_INSN_X_INVALID
},
36 { IQ2000BF_INSN_X_AFTER
, && case_sem_INSN_X_AFTER
},
37 { IQ2000BF_INSN_X_BEFORE
, && case_sem_INSN_X_BEFORE
},
38 { IQ2000BF_INSN_X_CTI_CHAIN
, && case_sem_INSN_X_CTI_CHAIN
},
39 { IQ2000BF_INSN_X_CHAIN
, && case_sem_INSN_X_CHAIN
},
40 { IQ2000BF_INSN_X_BEGIN
, && case_sem_INSN_X_BEGIN
},
41 { IQ2000BF_INSN_ADD
, && case_sem_INSN_ADD
},
42 { IQ2000BF_INSN_ADDI
, && case_sem_INSN_ADDI
},
43 { IQ2000BF_INSN_ADDIU
, && case_sem_INSN_ADDIU
},
44 { IQ2000BF_INSN_ADDU
, && case_sem_INSN_ADDU
},
45 { IQ2000BF_INSN_ADO16
, && case_sem_INSN_ADO16
},
46 { IQ2000BF_INSN_AND
, && case_sem_INSN_AND
},
47 { IQ2000BF_INSN_ANDI
, && case_sem_INSN_ANDI
},
48 { IQ2000BF_INSN_ANDOI
, && case_sem_INSN_ANDOI
},
49 { IQ2000BF_INSN_NOR
, && case_sem_INSN_NOR
},
50 { IQ2000BF_INSN_OR
, && case_sem_INSN_OR
},
51 { IQ2000BF_INSN_ORI
, && case_sem_INSN_ORI
},
52 { IQ2000BF_INSN_RAM
, && case_sem_INSN_RAM
},
53 { IQ2000BF_INSN_SLL
, && case_sem_INSN_SLL
},
54 { IQ2000BF_INSN_SLLV
, && case_sem_INSN_SLLV
},
55 { IQ2000BF_INSN_SLMV
, && case_sem_INSN_SLMV
},
56 { IQ2000BF_INSN_SLT
, && case_sem_INSN_SLT
},
57 { IQ2000BF_INSN_SLTI
, && case_sem_INSN_SLTI
},
58 { IQ2000BF_INSN_SLTIU
, && case_sem_INSN_SLTIU
},
59 { IQ2000BF_INSN_SLTU
, && case_sem_INSN_SLTU
},
60 { IQ2000BF_INSN_SRA
, && case_sem_INSN_SRA
},
61 { IQ2000BF_INSN_SRAV
, && case_sem_INSN_SRAV
},
62 { IQ2000BF_INSN_SRL
, && case_sem_INSN_SRL
},
63 { IQ2000BF_INSN_SRLV
, && case_sem_INSN_SRLV
},
64 { IQ2000BF_INSN_SRMV
, && case_sem_INSN_SRMV
},
65 { IQ2000BF_INSN_SUB
, && case_sem_INSN_SUB
},
66 { IQ2000BF_INSN_SUBU
, && case_sem_INSN_SUBU
},
67 { IQ2000BF_INSN_XOR
, && case_sem_INSN_XOR
},
68 { IQ2000BF_INSN_XORI
, && case_sem_INSN_XORI
},
69 { IQ2000BF_INSN_BBI
, && case_sem_INSN_BBI
},
70 { IQ2000BF_INSN_BBIN
, && case_sem_INSN_BBIN
},
71 { IQ2000BF_INSN_BBV
, && case_sem_INSN_BBV
},
72 { IQ2000BF_INSN_BBVN
, && case_sem_INSN_BBVN
},
73 { IQ2000BF_INSN_BEQ
, && case_sem_INSN_BEQ
},
74 { IQ2000BF_INSN_BEQL
, && case_sem_INSN_BEQL
},
75 { IQ2000BF_INSN_BGEZ
, && case_sem_INSN_BGEZ
},
76 { IQ2000BF_INSN_BGEZAL
, && case_sem_INSN_BGEZAL
},
77 { IQ2000BF_INSN_BGEZALL
, && case_sem_INSN_BGEZALL
},
78 { IQ2000BF_INSN_BGEZL
, && case_sem_INSN_BGEZL
},
79 { IQ2000BF_INSN_BLTZ
, && case_sem_INSN_BLTZ
},
80 { IQ2000BF_INSN_BLTZL
, && case_sem_INSN_BLTZL
},
81 { IQ2000BF_INSN_BLTZAL
, && case_sem_INSN_BLTZAL
},
82 { IQ2000BF_INSN_BLTZALL
, && case_sem_INSN_BLTZALL
},
83 { IQ2000BF_INSN_BMB0
, && case_sem_INSN_BMB0
},
84 { IQ2000BF_INSN_BMB1
, && case_sem_INSN_BMB1
},
85 { IQ2000BF_INSN_BMB2
, && case_sem_INSN_BMB2
},
86 { IQ2000BF_INSN_BMB3
, && case_sem_INSN_BMB3
},
87 { IQ2000BF_INSN_BNE
, && case_sem_INSN_BNE
},
88 { IQ2000BF_INSN_BNEL
, && case_sem_INSN_BNEL
},
89 { IQ2000BF_INSN_JALR
, && case_sem_INSN_JALR
},
90 { IQ2000BF_INSN_JR
, && case_sem_INSN_JR
},
91 { IQ2000BF_INSN_LB
, && case_sem_INSN_LB
},
92 { IQ2000BF_INSN_LBU
, && case_sem_INSN_LBU
},
93 { IQ2000BF_INSN_LH
, && case_sem_INSN_LH
},
94 { IQ2000BF_INSN_LHU
, && case_sem_INSN_LHU
},
95 { IQ2000BF_INSN_LUI
, && case_sem_INSN_LUI
},
96 { IQ2000BF_INSN_LW
, && case_sem_INSN_LW
},
97 { IQ2000BF_INSN_SB
, && case_sem_INSN_SB
},
98 { IQ2000BF_INSN_SH
, && case_sem_INSN_SH
},
99 { IQ2000BF_INSN_SW
, && case_sem_INSN_SW
},
100 { IQ2000BF_INSN_BREAK
, && case_sem_INSN_BREAK
},
101 { IQ2000BF_INSN_SYSCALL
, && case_sem_INSN_SYSCALL
},
102 { IQ2000BF_INSN_ANDOUI
, && case_sem_INSN_ANDOUI
},
103 { IQ2000BF_INSN_ORUI
, && case_sem_INSN_ORUI
},
104 { IQ2000BF_INSN_BGTZ
, && case_sem_INSN_BGTZ
},
105 { IQ2000BF_INSN_BGTZL
, && case_sem_INSN_BGTZL
},
106 { IQ2000BF_INSN_BLEZ
, && case_sem_INSN_BLEZ
},
107 { IQ2000BF_INSN_BLEZL
, && case_sem_INSN_BLEZL
},
108 { IQ2000BF_INSN_MRGB
, && case_sem_INSN_MRGB
},
109 { IQ2000BF_INSN_BCTXT
, && case_sem_INSN_BCTXT
},
110 { IQ2000BF_INSN_BC0F
, && case_sem_INSN_BC0F
},
111 { IQ2000BF_INSN_BC0FL
, && case_sem_INSN_BC0FL
},
112 { IQ2000BF_INSN_BC3F
, && case_sem_INSN_BC3F
},
113 { IQ2000BF_INSN_BC3FL
, && case_sem_INSN_BC3FL
},
114 { IQ2000BF_INSN_BC0T
, && case_sem_INSN_BC0T
},
115 { IQ2000BF_INSN_BC0TL
, && case_sem_INSN_BC0TL
},
116 { IQ2000BF_INSN_BC3T
, && case_sem_INSN_BC3T
},
117 { IQ2000BF_INSN_BC3TL
, && case_sem_INSN_BC3TL
},
118 { IQ2000BF_INSN_CFC0
, && case_sem_INSN_CFC0
},
119 { IQ2000BF_INSN_CFC1
, && case_sem_INSN_CFC1
},
120 { IQ2000BF_INSN_CFC2
, && case_sem_INSN_CFC2
},
121 { IQ2000BF_INSN_CFC3
, && case_sem_INSN_CFC3
},
122 { IQ2000BF_INSN_CHKHDR
, && case_sem_INSN_CHKHDR
},
123 { IQ2000BF_INSN_CTC0
, && case_sem_INSN_CTC0
},
124 { IQ2000BF_INSN_CTC1
, && case_sem_INSN_CTC1
},
125 { IQ2000BF_INSN_CTC2
, && case_sem_INSN_CTC2
},
126 { IQ2000BF_INSN_CTC3
, && case_sem_INSN_CTC3
},
127 { IQ2000BF_INSN_JCR
, && case_sem_INSN_JCR
},
128 { IQ2000BF_INSN_LUC32
, && case_sem_INSN_LUC32
},
129 { IQ2000BF_INSN_LUC32L
, && case_sem_INSN_LUC32L
},
130 { IQ2000BF_INSN_LUC64
, && case_sem_INSN_LUC64
},
131 { IQ2000BF_INSN_LUC64L
, && case_sem_INSN_LUC64L
},
132 { IQ2000BF_INSN_LUK
, && case_sem_INSN_LUK
},
133 { IQ2000BF_INSN_LULCK
, && case_sem_INSN_LULCK
},
134 { IQ2000BF_INSN_LUM32
, && case_sem_INSN_LUM32
},
135 { IQ2000BF_INSN_LUM32L
, && case_sem_INSN_LUM32L
},
136 { IQ2000BF_INSN_LUM64
, && case_sem_INSN_LUM64
},
137 { IQ2000BF_INSN_LUM64L
, && case_sem_INSN_LUM64L
},
138 { IQ2000BF_INSN_LUR
, && case_sem_INSN_LUR
},
139 { IQ2000BF_INSN_LURL
, && case_sem_INSN_LURL
},
140 { IQ2000BF_INSN_LUULCK
, && case_sem_INSN_LUULCK
},
141 { IQ2000BF_INSN_MFC0
, && case_sem_INSN_MFC0
},
142 { IQ2000BF_INSN_MFC1
, && case_sem_INSN_MFC1
},
143 { IQ2000BF_INSN_MFC2
, && case_sem_INSN_MFC2
},
144 { IQ2000BF_INSN_MFC3
, && case_sem_INSN_MFC3
},
145 { IQ2000BF_INSN_MTC0
, && case_sem_INSN_MTC0
},
146 { IQ2000BF_INSN_MTC1
, && case_sem_INSN_MTC1
},
147 { IQ2000BF_INSN_MTC2
, && case_sem_INSN_MTC2
},
148 { IQ2000BF_INSN_MTC3
, && case_sem_INSN_MTC3
},
149 { IQ2000BF_INSN_PKRL
, && case_sem_INSN_PKRL
},
150 { IQ2000BF_INSN_PKRLR1
, && case_sem_INSN_PKRLR1
},
151 { IQ2000BF_INSN_PKRLR30
, && case_sem_INSN_PKRLR30
},
152 { IQ2000BF_INSN_RB
, && case_sem_INSN_RB
},
153 { IQ2000BF_INSN_RBR1
, && case_sem_INSN_RBR1
},
154 { IQ2000BF_INSN_RBR30
, && case_sem_INSN_RBR30
},
155 { IQ2000BF_INSN_RFE
, && case_sem_INSN_RFE
},
156 { IQ2000BF_INSN_RX
, && case_sem_INSN_RX
},
157 { IQ2000BF_INSN_RXR1
, && case_sem_INSN_RXR1
},
158 { IQ2000BF_INSN_RXR30
, && case_sem_INSN_RXR30
},
159 { IQ2000BF_INSN_SLEEP
, && case_sem_INSN_SLEEP
},
160 { IQ2000BF_INSN_SRRD
, && case_sem_INSN_SRRD
},
161 { IQ2000BF_INSN_SRRDL
, && case_sem_INSN_SRRDL
},
162 { IQ2000BF_INSN_SRULCK
, && case_sem_INSN_SRULCK
},
163 { IQ2000BF_INSN_SRWR
, && case_sem_INSN_SRWR
},
164 { IQ2000BF_INSN_SRWRU
, && case_sem_INSN_SRWRU
},
165 { IQ2000BF_INSN_TRAPQFL
, && case_sem_INSN_TRAPQFL
},
166 { IQ2000BF_INSN_TRAPQNE
, && case_sem_INSN_TRAPQNE
},
167 { IQ2000BF_INSN_TRAPREL
, && case_sem_INSN_TRAPREL
},
168 { IQ2000BF_INSN_WB
, && case_sem_INSN_WB
},
169 { IQ2000BF_INSN_WBU
, && case_sem_INSN_WBU
},
170 { IQ2000BF_INSN_WBR1
, && case_sem_INSN_WBR1
},
171 { IQ2000BF_INSN_WBR1U
, && case_sem_INSN_WBR1U
},
172 { IQ2000BF_INSN_WBR30
, && case_sem_INSN_WBR30
},
173 { IQ2000BF_INSN_WBR30U
, && case_sem_INSN_WBR30U
},
174 { IQ2000BF_INSN_WX
, && case_sem_INSN_WX
},
175 { IQ2000BF_INSN_WXU
, && case_sem_INSN_WXU
},
176 { IQ2000BF_INSN_WXR1
, && case_sem_INSN_WXR1
},
177 { IQ2000BF_INSN_WXR1U
, && case_sem_INSN_WXR1U
},
178 { IQ2000BF_INSN_WXR30
, && case_sem_INSN_WXR30
},
179 { IQ2000BF_INSN_WXR30U
, && case_sem_INSN_WXR30U
},
180 { IQ2000BF_INSN_LDW
, && case_sem_INSN_LDW
},
181 { IQ2000BF_INSN_SDW
, && case_sem_INSN_SDW
},
182 { IQ2000BF_INSN_J
, && case_sem_INSN_J
},
183 { IQ2000BF_INSN_JAL
, && case_sem_INSN_JAL
},
184 { IQ2000BF_INSN_BMB
, && case_sem_INSN_BMB
},
189 for (i
= 0; labels
[i
].label
!= 0; ++i
)
192 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
194 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
199 #endif /* DEFINE_LABELS */
203 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
204 off frills like tracing and profiling. */
205 /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
206 that can cause it to be optimized out. Another way would be to emit
207 special handlers into the instruction "stream". */
210 #undef CGEN_TRACE_RESULT
211 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
215 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
221 /* Branch to next handler without going around main loop. */
222 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
223 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
225 #else /* ! WITH_SCACHE_PBB */
227 #define NEXT(vpc) BREAK (sem)
230 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
232 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
235 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
238 #endif /* ! WITH_SCACHE_PBB */
242 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
244 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
245 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
246 #define FLD(f) abuf->fields.sfmt_empty.f
247 int UNUSED written
= 0;
248 IADDR UNUSED pc
= abuf
->addr
;
249 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
252 /* Update the recorded pc in the cpu state struct.
253 Only necessary for WITH_SCACHE case, but to avoid the
254 conditional compilation .... */
256 /* Virtual insns have zero size. Overwrite vpc with address of next insn
257 using the default-insn-bitsize spec. When executing insns in parallel
258 we may want to queue the fault and continue execution. */
259 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
260 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
267 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
269 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
270 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
271 #define FLD(f) abuf->fields.sfmt_empty.f
272 int UNUSED written
= 0;
273 IADDR UNUSED pc
= abuf
->addr
;
274 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
277 #if WITH_SCACHE_PBB_IQ2000BF
278 iq2000bf_pbb_after (current_cpu
, sem_arg
);
286 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
288 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
289 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
290 #define FLD(f) abuf->fields.sfmt_empty.f
291 int UNUSED written
= 0;
292 IADDR UNUSED pc
= abuf
->addr
;
293 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
296 #if WITH_SCACHE_PBB_IQ2000BF
297 iq2000bf_pbb_before (current_cpu
, sem_arg
);
305 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
307 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
308 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
309 #define FLD(f) abuf->fields.sfmt_empty.f
310 int UNUSED written
= 0;
311 IADDR UNUSED pc
= abuf
->addr
;
312 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
315 #if WITH_SCACHE_PBB_IQ2000BF
317 vpc
= iq2000bf_pbb_cti_chain (current_cpu
, sem_arg
,
318 pbb_br_type
, pbb_br_npc
);
321 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
322 vpc
= iq2000bf_pbb_cti_chain (current_cpu
, sem_arg
,
323 CPU_PBB_BR_TYPE (current_cpu
),
324 CPU_PBB_BR_NPC (current_cpu
));
333 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
335 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
336 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
337 #define FLD(f) abuf->fields.sfmt_empty.f
338 int UNUSED written
= 0;
339 IADDR UNUSED pc
= abuf
->addr
;
340 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
343 #if WITH_SCACHE_PBB_IQ2000BF
344 vpc
= iq2000bf_pbb_chain (current_cpu
, sem_arg
);
355 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
357 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
359 #define FLD(f) abuf->fields.sfmt_empty.f
360 int UNUSED written
= 0;
361 IADDR UNUSED pc
= abuf
->addr
;
362 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
365 #if WITH_SCACHE_PBB_IQ2000BF
366 #if defined DEFINE_SWITCH || defined FAST_P
367 /* In the switch case FAST_P is a constant, allowing several optimizations
368 in any called inline functions. */
369 vpc
= iq2000bf_pbb_begin (current_cpu
, FAST_P
);
371 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
372 vpc
= iq2000bf_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
374 vpc
= iq2000bf_pbb_begin (current_cpu
, 0);
384 CASE (sem
, INSN_ADD
) : /* add $rd,$rs,$rt */
386 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
387 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
388 #define FLD(f) abuf->fields.sfmt_mrgb.f
389 int UNUSED written
= 0;
390 IADDR UNUSED pc
= abuf
->addr
;
391 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
394 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
395 SET_H_GR (FLD (f_rd
), opval
);
396 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
403 CASE (sem
, INSN_ADDI
) : /* addi $rt,$rs,$lo16 */
405 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
406 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
407 #define FLD(f) abuf->fields.sfmt_addi.f
408 int UNUSED written
= 0;
409 IADDR UNUSED pc
= abuf
->addr
;
410 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
413 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))));
414 SET_H_GR (FLD (f_rt
), opval
);
415 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
422 CASE (sem
, INSN_ADDIU
) : /* addiu $rt,$rs,$lo16 */
424 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
425 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
426 #define FLD(f) abuf->fields.sfmt_addi.f
427 int UNUSED written
= 0;
428 IADDR UNUSED pc
= abuf
->addr
;
429 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
432 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))));
433 SET_H_GR (FLD (f_rt
), opval
);
434 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
441 CASE (sem
, INSN_ADDU
) : /* addu $rd,$rs,$rt */
443 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
444 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
445 #define FLD(f) abuf->fields.sfmt_mrgb.f
446 int UNUSED written
= 0;
447 IADDR UNUSED pc
= abuf
->addr
;
448 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
451 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
452 SET_H_GR (FLD (f_rd
), opval
);
453 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
460 CASE (sem
, INSN_ADO16
) : /* ado16 $rd,$rs,$rt */
462 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
463 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
464 #define FLD(f) abuf->fields.sfmt_mrgb.f
465 int UNUSED written
= 0;
466 IADDR UNUSED pc
= abuf
->addr
;
467 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
472 tmp_low
= ADDHI (ANDHI (GET_H_GR (FLD (f_rs
)), 65535), ANDHI (GET_H_GR (FLD (f_rt
)), 65535));
473 tmp_high
= ADDHI (SRLSI (GET_H_GR (FLD (f_rs
)), 16), SRLSI (GET_H_GR (FLD (f_rt
)), 16));
475 SI opval
= ORSI (SLLSI (tmp_high
, 16), tmp_low
);
476 SET_H_GR (FLD (f_rd
), opval
);
477 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
485 CASE (sem
, INSN_AND
) : /* and $rd,$rs,$rt */
487 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
488 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
489 #define FLD(f) abuf->fields.sfmt_mrgb.f
490 int UNUSED written
= 0;
491 IADDR UNUSED pc
= abuf
->addr
;
492 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
495 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
496 SET_H_GR (FLD (f_rd
), opval
);
497 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
504 CASE (sem
, INSN_ANDI
) : /* andi $rt,$rs,$lo16 */
506 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
507 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
508 #define FLD(f) abuf->fields.sfmt_addi.f
509 int UNUSED written
= 0;
510 IADDR UNUSED pc
= abuf
->addr
;
511 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
514 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), ZEXTSISI (FLD (f_imm
)));
515 SET_H_GR (FLD (f_rt
), opval
);
516 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
523 CASE (sem
, INSN_ANDOI
) : /* andoi $rt,$rs,$lo16 */
525 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
526 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
527 #define FLD(f) abuf->fields.sfmt_addi.f
528 int UNUSED written
= 0;
529 IADDR UNUSED pc
= abuf
->addr
;
530 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
533 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm
)))));
534 SET_H_GR (FLD (f_rt
), opval
);
535 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
542 CASE (sem
, INSN_NOR
) : /* nor $rd,$rs,$rt */
544 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
545 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
546 #define FLD(f) abuf->fields.sfmt_mrgb.f
547 int UNUSED written
= 0;
548 IADDR UNUSED pc
= abuf
->addr
;
549 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
552 SI opval
= INVSI (ORSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
))));
553 SET_H_GR (FLD (f_rd
), opval
);
554 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
561 CASE (sem
, INSN_OR
) : /* or $rd,$rs,$rt */
563 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
564 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
565 #define FLD(f) abuf->fields.sfmt_mrgb.f
566 int UNUSED written
= 0;
567 IADDR UNUSED pc
= abuf
->addr
;
568 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
571 SI opval
= ORSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
572 SET_H_GR (FLD (f_rd
), opval
);
573 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
580 CASE (sem
, INSN_ORI
) : /* ori $rt,$rs,$lo16 */
582 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
583 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
584 #define FLD(f) abuf->fields.sfmt_addi.f
585 int UNUSED written
= 0;
586 IADDR UNUSED pc
= abuf
->addr
;
587 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
590 SI opval
= ORSI (GET_H_GR (FLD (f_rs
)), ZEXTSISI (FLD (f_imm
)));
591 SET_H_GR (FLD (f_rt
), opval
);
592 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
599 CASE (sem
, INSN_RAM
) : /* ram $rd,$rt,$shamt,$maskl,$maskr */
601 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
602 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
603 #define FLD(f) abuf->fields.sfmt_ram.f
604 int UNUSED written
= 0;
605 IADDR UNUSED pc
= abuf
->addr
;
606 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
610 SI opval
= RORSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
611 SET_H_GR (FLD (f_rd
), opval
);
612 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
615 SI opval
= ANDSI (GET_H_GR (FLD (f_rd
)), SRLSI (0xffffffff, FLD (f_maskl
)));
616 SET_H_GR (FLD (f_rd
), opval
);
617 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
620 SI opval
= ANDSI (GET_H_GR (FLD (f_rd
)), SLLSI (0xffffffff, FLD (f_rs
)));
621 SET_H_GR (FLD (f_rd
), opval
);
622 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
630 CASE (sem
, INSN_SLL
) : /* sll $rd,$rt,$shamt */
632 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
633 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
634 #define FLD(f) abuf->fields.sfmt_ram.f
635 int UNUSED written
= 0;
636 IADDR UNUSED pc
= abuf
->addr
;
637 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
640 SI opval
= SLLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
641 SET_H_GR (FLD (f_rd
), opval
);
642 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
649 CASE (sem
, INSN_SLLV
) : /* sllv $rd,$rt,$rs */
651 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
652 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
653 #define FLD(f) abuf->fields.sfmt_mrgb.f
654 int UNUSED written
= 0;
655 IADDR UNUSED pc
= abuf
->addr
;
656 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
659 SI opval
= SLLSI (GET_H_GR (FLD (f_rt
)), ANDSI (GET_H_GR (FLD (f_rs
)), 31));
660 SET_H_GR (FLD (f_rd
), opval
);
661 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
668 CASE (sem
, INSN_SLMV
) : /* slmv $rd,$rt,$rs,$shamt */
670 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
671 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
672 #define FLD(f) abuf->fields.sfmt_ram.f
673 int UNUSED written
= 0;
674 IADDR UNUSED pc
= abuf
->addr
;
675 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
678 SI opval
= ANDSI (SLLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs
))));
679 SET_H_GR (FLD (f_rd
), opval
);
680 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
687 CASE (sem
, INSN_SLT
) : /* slt $rd,$rs,$rt */
689 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
690 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
691 #define FLD(f) abuf->fields.sfmt_mrgb.f
692 int UNUSED written
= 0;
693 IADDR UNUSED pc
= abuf
->addr
;
694 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
696 if (LTSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
699 SET_H_GR (FLD (f_rd
), opval
);
701 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
706 SET_H_GR (FLD (f_rd
), opval
);
708 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
712 abuf
->written
= written
;
717 CASE (sem
, INSN_SLTI
) : /* slti $rt,$rs,$imm */
719 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
720 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
721 #define FLD(f) abuf->fields.sfmt_addi.f
722 int UNUSED written
= 0;
723 IADDR UNUSED pc
= abuf
->addr
;
724 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
726 if (LTSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))) {
729 SET_H_GR (FLD (f_rt
), opval
);
731 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
736 SET_H_GR (FLD (f_rt
), opval
);
738 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
742 abuf
->written
= written
;
747 CASE (sem
, INSN_SLTIU
) : /* sltiu $rt,$rs,$imm */
749 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
750 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
751 #define FLD(f) abuf->fields.sfmt_addi.f
752 int UNUSED written
= 0;
753 IADDR UNUSED pc
= abuf
->addr
;
754 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
756 if (LTUSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))) {
759 SET_H_GR (FLD (f_rt
), opval
);
761 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
766 SET_H_GR (FLD (f_rt
), opval
);
768 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
772 abuf
->written
= written
;
777 CASE (sem
, INSN_SLTU
) : /* sltu $rd,$rs,$rt */
779 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
780 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
781 #define FLD(f) abuf->fields.sfmt_mrgb.f
782 int UNUSED written
= 0;
783 IADDR UNUSED pc
= abuf
->addr
;
784 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
786 if (LTUSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
789 SET_H_GR (FLD (f_rd
), opval
);
791 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
796 SET_H_GR (FLD (f_rd
), opval
);
798 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
802 abuf
->written
= written
;
807 CASE (sem
, INSN_SRA
) : /* sra $rd,$rt,$shamt */
809 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
810 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
811 #define FLD(f) abuf->fields.sfmt_ram.f
812 int UNUSED written
= 0;
813 IADDR UNUSED pc
= abuf
->addr
;
814 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
817 SI opval
= SRASI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
818 SET_H_GR (FLD (f_rd
), opval
);
819 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
826 CASE (sem
, INSN_SRAV
) : /* srav $rd,$rt,$rs */
828 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
829 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
830 #define FLD(f) abuf->fields.sfmt_mrgb.f
831 int UNUSED written
= 0;
832 IADDR UNUSED pc
= abuf
->addr
;
833 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
836 SI opval
= SRASI (GET_H_GR (FLD (f_rt
)), ANDSI (GET_H_GR (FLD (f_rs
)), 31));
837 SET_H_GR (FLD (f_rd
), opval
);
838 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
845 CASE (sem
, INSN_SRL
) : /* srl $rd,$rt,$shamt */
847 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
849 #define FLD(f) abuf->fields.sfmt_ram.f
850 int UNUSED written
= 0;
851 IADDR UNUSED pc
= abuf
->addr
;
852 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
855 SI opval
= SRLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
856 SET_H_GR (FLD (f_rd
), opval
);
857 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
864 CASE (sem
, INSN_SRLV
) : /* srlv $rd,$rt,$rs */
866 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
867 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
868 #define FLD(f) abuf->fields.sfmt_mrgb.f
869 int UNUSED written
= 0;
870 IADDR UNUSED pc
= abuf
->addr
;
871 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
874 SI opval
= SRLSI (GET_H_GR (FLD (f_rt
)), ANDSI (GET_H_GR (FLD (f_rs
)), 31));
875 SET_H_GR (FLD (f_rd
), opval
);
876 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
883 CASE (sem
, INSN_SRMV
) : /* srmv $rd,$rt,$rs,$shamt */
885 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
886 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
887 #define FLD(f) abuf->fields.sfmt_ram.f
888 int UNUSED written
= 0;
889 IADDR UNUSED pc
= abuf
->addr
;
890 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
893 SI opval
= ANDSI (SRLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs
))));
894 SET_H_GR (FLD (f_rd
), opval
);
895 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
902 CASE (sem
, INSN_SUB
) : /* sub $rd,$rs,$rt */
904 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
905 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
906 #define FLD(f) abuf->fields.sfmt_mrgb.f
907 int UNUSED written
= 0;
908 IADDR UNUSED pc
= abuf
->addr
;
909 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
912 SI opval
= SUBSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
913 SET_H_GR (FLD (f_rd
), opval
);
914 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
921 CASE (sem
, INSN_SUBU
) : /* subu $rd,$rs,$rt */
923 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
924 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
925 #define FLD(f) abuf->fields.sfmt_mrgb.f
926 int UNUSED written
= 0;
927 IADDR UNUSED pc
= abuf
->addr
;
928 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
931 SI opval
= SUBSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
932 SET_H_GR (FLD (f_rd
), opval
);
933 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
940 CASE (sem
, INSN_XOR
) : /* xor $rd,$rs,$rt */
942 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
943 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
944 #define FLD(f) abuf->fields.sfmt_mrgb.f
945 int UNUSED written
= 0;
946 IADDR UNUSED pc
= abuf
->addr
;
947 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
950 SI opval
= XORSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
951 SET_H_GR (FLD (f_rd
), opval
);
952 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
959 CASE (sem
, INSN_XORI
) : /* xori $rt,$rs,$lo16 */
961 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
962 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
963 #define FLD(f) abuf->fields.sfmt_addi.f
964 int UNUSED written
= 0;
965 IADDR UNUSED pc
= abuf
->addr
;
966 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
969 SI opval
= XORSI (GET_H_GR (FLD (f_rs
)), ZEXTSISI (FLD (f_imm
)));
970 SET_H_GR (FLD (f_rt
), opval
);
971 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
978 CASE (sem
, INSN_BBI
) : /* bbi $rs($bitnum),$offset */
980 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
981 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
982 #define FLD(f) abuf->fields.sfmt_bbi.f
983 int UNUSED written
= 0;
984 IADDR UNUSED pc
= abuf
->addr
;
986 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
988 if (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, FLD (f_rt
)))) {
991 USI opval
= FLD (i_offset
);
992 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
994 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
999 abuf
->written
= written
;
1000 SEM_BRANCH_FINI (vpc
);
1005 CASE (sem
, INSN_BBIN
) : /* bbin $rs($bitnum),$offset */
1007 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1008 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1009 #define FLD(f) abuf->fields.sfmt_bbi.f
1010 int UNUSED written
= 0;
1011 IADDR UNUSED pc
= abuf
->addr
;
1013 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1015 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, FLD (f_rt
))))) {
1018 USI opval
= FLD (i_offset
);
1019 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1020 written
|= (1 << 3);
1021 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1026 abuf
->written
= written
;
1027 SEM_BRANCH_FINI (vpc
);
1032 CASE (sem
, INSN_BBV
) : /* bbv $rs,$rt,$offset */
1034 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1035 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1036 #define FLD(f) abuf->fields.sfmt_bbi.f
1037 int UNUSED written
= 0;
1038 IADDR UNUSED pc
= abuf
->addr
;
1040 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1042 if (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt
)), 31)))) {
1045 USI opval
= FLD (i_offset
);
1046 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1047 written
|= (1 << 3);
1048 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1053 abuf
->written
= written
;
1054 SEM_BRANCH_FINI (vpc
);
1059 CASE (sem
, INSN_BBVN
) : /* bbvn $rs,$rt,$offset */
1061 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1063 #define FLD(f) abuf->fields.sfmt_bbi.f
1064 int UNUSED written
= 0;
1065 IADDR UNUSED pc
= abuf
->addr
;
1067 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1069 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt
)), 31))))) {
1072 USI opval
= FLD (i_offset
);
1073 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1074 written
|= (1 << 3);
1075 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1080 abuf
->written
= written
;
1081 SEM_BRANCH_FINI (vpc
);
1086 CASE (sem
, INSN_BEQ
) : /* beq $rs,$rt,$offset */
1088 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1089 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1090 #define FLD(f) abuf->fields.sfmt_bbi.f
1091 int UNUSED written
= 0;
1092 IADDR UNUSED pc
= abuf
->addr
;
1094 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1096 if (EQSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1099 USI opval
= FLD (i_offset
);
1100 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1101 written
|= (1 << 3);
1102 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1107 abuf
->written
= written
;
1108 SEM_BRANCH_FINI (vpc
);
1113 CASE (sem
, INSN_BEQL
) : /* beql $rs,$rt,$offset */
1115 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1116 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1117 #define FLD(f) abuf->fields.sfmt_bbi.f
1118 int UNUSED written
= 0;
1119 IADDR UNUSED pc
= abuf
->addr
;
1121 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1123 if (EQSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1126 USI opval
= FLD (i_offset
);
1127 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1128 written
|= (1 << 3);
1129 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1134 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1137 abuf
->written
= written
;
1138 SEM_BRANCH_FINI (vpc
);
1143 CASE (sem
, INSN_BGEZ
) : /* bgez $rs,$offset */
1145 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1146 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1147 #define FLD(f) abuf->fields.sfmt_bbi.f
1148 int UNUSED written
= 0;
1149 IADDR UNUSED pc
= abuf
->addr
;
1151 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1153 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1156 USI opval
= FLD (i_offset
);
1157 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1158 written
|= (1 << 2);
1159 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1164 abuf
->written
= written
;
1165 SEM_BRANCH_FINI (vpc
);
1170 CASE (sem
, INSN_BGEZAL
) : /* bgezal $rs,$offset */
1172 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1173 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1174 #define FLD(f) abuf->fields.sfmt_bbi.f
1175 int UNUSED written
= 0;
1176 IADDR UNUSED pc
= abuf
->addr
;
1178 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1180 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1183 SI opval
= ADDSI (pc
, 8);
1184 SET_H_GR (((UINT
) 31), opval
);
1185 written
|= (1 << 3);
1186 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1190 USI opval
= FLD (i_offset
);
1191 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1192 written
|= (1 << 4);
1193 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1199 abuf
->written
= written
;
1200 SEM_BRANCH_FINI (vpc
);
1205 CASE (sem
, INSN_BGEZALL
) : /* bgezall $rs,$offset */
1207 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1208 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1209 #define FLD(f) abuf->fields.sfmt_bbi.f
1210 int UNUSED written
= 0;
1211 IADDR UNUSED pc
= abuf
->addr
;
1213 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1215 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1218 SI opval
= ADDSI (pc
, 8);
1219 SET_H_GR (((UINT
) 31), opval
);
1220 written
|= (1 << 3);
1221 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1225 USI opval
= FLD (i_offset
);
1226 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1227 written
|= (1 << 4);
1228 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1234 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1237 abuf
->written
= written
;
1238 SEM_BRANCH_FINI (vpc
);
1243 CASE (sem
, INSN_BGEZL
) : /* bgezl $rs,$offset */
1245 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1246 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1247 #define FLD(f) abuf->fields.sfmt_bbi.f
1248 int UNUSED written
= 0;
1249 IADDR UNUSED pc
= abuf
->addr
;
1251 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1253 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1256 USI opval
= FLD (i_offset
);
1257 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1258 written
|= (1 << 2);
1259 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1264 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1267 abuf
->written
= written
;
1268 SEM_BRANCH_FINI (vpc
);
1273 CASE (sem
, INSN_BLTZ
) : /* bltz $rs,$offset */
1275 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1276 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1277 #define FLD(f) abuf->fields.sfmt_bbi.f
1278 int UNUSED written
= 0;
1279 IADDR UNUSED pc
= abuf
->addr
;
1281 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1283 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1286 USI opval
= FLD (i_offset
);
1287 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1288 written
|= (1 << 2);
1289 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1294 abuf
->written
= written
;
1295 SEM_BRANCH_FINI (vpc
);
1300 CASE (sem
, INSN_BLTZL
) : /* bltzl $rs,$offset */
1302 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1303 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1304 #define FLD(f) abuf->fields.sfmt_bbi.f
1305 int UNUSED written
= 0;
1306 IADDR UNUSED pc
= abuf
->addr
;
1308 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1310 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1313 USI opval
= FLD (i_offset
);
1314 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1315 written
|= (1 << 2);
1316 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1321 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1324 abuf
->written
= written
;
1325 SEM_BRANCH_FINI (vpc
);
1330 CASE (sem
, INSN_BLTZAL
) : /* bltzal $rs,$offset */
1332 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1333 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1334 #define FLD(f) abuf->fields.sfmt_bbi.f
1335 int UNUSED written
= 0;
1336 IADDR UNUSED pc
= abuf
->addr
;
1338 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1340 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1343 SI opval
= ADDSI (pc
, 8);
1344 SET_H_GR (((UINT
) 31), opval
);
1345 written
|= (1 << 3);
1346 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1350 USI opval
= FLD (i_offset
);
1351 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1352 written
|= (1 << 4);
1353 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1359 abuf
->written
= written
;
1360 SEM_BRANCH_FINI (vpc
);
1365 CASE (sem
, INSN_BLTZALL
) : /* bltzall $rs,$offset */
1367 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1368 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1369 #define FLD(f) abuf->fields.sfmt_bbi.f
1370 int UNUSED written
= 0;
1371 IADDR UNUSED pc
= abuf
->addr
;
1373 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1375 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1378 SI opval
= ADDSI (pc
, 8);
1379 SET_H_GR (((UINT
) 31), opval
);
1380 written
|= (1 << 3);
1381 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1385 USI opval
= FLD (i_offset
);
1386 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1387 written
|= (1 << 4);
1388 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1394 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1397 abuf
->written
= written
;
1398 SEM_BRANCH_FINI (vpc
);
1403 CASE (sem
, INSN_BMB0
) : /* bmb0 $rs,$rt,$offset */
1405 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1406 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1407 #define FLD(f) abuf->fields.sfmt_bbi.f
1408 int UNUSED written
= 0;
1409 IADDR UNUSED pc
= abuf
->addr
;
1411 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1413 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 255), ANDSI (GET_H_GR (FLD (f_rt
)), 255))) {
1416 USI opval
= FLD (i_offset
);
1417 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1418 written
|= (1 << 3);
1419 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1424 abuf
->written
= written
;
1425 SEM_BRANCH_FINI (vpc
);
1430 CASE (sem
, INSN_BMB1
) : /* bmb1 $rs,$rt,$offset */
1432 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1433 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1434 #define FLD(f) abuf->fields.sfmt_bbi.f
1435 int UNUSED written
= 0;
1436 IADDR UNUSED pc
= abuf
->addr
;
1438 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1440 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 65280), ANDSI (GET_H_GR (FLD (f_rt
)), 65280))) {
1443 USI opval
= FLD (i_offset
);
1444 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1445 written
|= (1 << 3);
1446 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1451 abuf
->written
= written
;
1452 SEM_BRANCH_FINI (vpc
);
1457 CASE (sem
, INSN_BMB2
) : /* bmb2 $rs,$rt,$offset */
1459 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1460 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1461 #define FLD(f) abuf->fields.sfmt_bbi.f
1462 int UNUSED written
= 0;
1463 IADDR UNUSED pc
= abuf
->addr
;
1465 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1467 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 16711680), ANDSI (GET_H_GR (FLD (f_rt
)), 16711680))) {
1470 USI opval
= FLD (i_offset
);
1471 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1472 written
|= (1 << 3);
1473 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1478 abuf
->written
= written
;
1479 SEM_BRANCH_FINI (vpc
);
1484 CASE (sem
, INSN_BMB3
) : /* bmb3 $rs,$rt,$offset */
1486 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1487 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1488 #define FLD(f) abuf->fields.sfmt_bbi.f
1489 int UNUSED written
= 0;
1490 IADDR UNUSED pc
= abuf
->addr
;
1492 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1494 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt
)), 0xff000000))) {
1497 USI opval
= FLD (i_offset
);
1498 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1499 written
|= (1 << 3);
1500 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1505 abuf
->written
= written
;
1506 SEM_BRANCH_FINI (vpc
);
1511 CASE (sem
, INSN_BNE
) : /* bne $rs,$rt,$offset */
1513 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1514 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1515 #define FLD(f) abuf->fields.sfmt_bbi.f
1516 int UNUSED written
= 0;
1517 IADDR UNUSED pc
= abuf
->addr
;
1519 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1521 if (NESI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1524 USI opval
= FLD (i_offset
);
1525 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1526 written
|= (1 << 3);
1527 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1532 abuf
->written
= written
;
1533 SEM_BRANCH_FINI (vpc
);
1538 CASE (sem
, INSN_BNEL
) : /* bnel $rs,$rt,$offset */
1540 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1541 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1542 #define FLD(f) abuf->fields.sfmt_bbi.f
1543 int UNUSED written
= 0;
1544 IADDR UNUSED pc
= abuf
->addr
;
1546 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1548 if (NESI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1551 USI opval
= FLD (i_offset
);
1552 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1553 written
|= (1 << 3);
1554 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1559 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1562 abuf
->written
= written
;
1563 SEM_BRANCH_FINI (vpc
);
1568 CASE (sem
, INSN_JALR
) : /* jalr $rd,$rs */
1570 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1571 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1572 #define FLD(f) abuf->fields.sfmt_mrgb.f
1573 int UNUSED written
= 0;
1574 IADDR UNUSED pc
= abuf
->addr
;
1576 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1581 SI opval
= ADDSI (pc
, 8);
1582 SET_H_GR (FLD (f_rd
), opval
);
1583 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1586 USI opval
= GET_H_GR (FLD (f_rs
));
1587 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
1588 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1593 SEM_BRANCH_FINI (vpc
);
1598 CASE (sem
, INSN_JR
) : /* jr $rs */
1600 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1601 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1602 #define FLD(f) abuf->fields.sfmt_bbi.f
1603 int UNUSED written
= 0;
1604 IADDR UNUSED pc
= abuf
->addr
;
1606 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1610 USI opval
= GET_H_GR (FLD (f_rs
));
1611 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
1612 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1616 SEM_BRANCH_FINI (vpc
);
1621 CASE (sem
, INSN_LB
) : /* lb $rt,$lo16($base) */
1623 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1624 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1625 #define FLD(f) abuf->fields.sfmt_addi.f
1626 int UNUSED written
= 0;
1627 IADDR UNUSED pc
= abuf
->addr
;
1628 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1631 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1632 SET_H_GR (FLD (f_rt
), opval
);
1633 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1640 CASE (sem
, INSN_LBU
) : /* lbu $rt,$lo16($base) */
1642 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1643 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1644 #define FLD(f) abuf->fields.sfmt_addi.f
1645 int UNUSED written
= 0;
1646 IADDR UNUSED pc
= abuf
->addr
;
1647 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1650 SI opval
= ZEXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1651 SET_H_GR (FLD (f_rt
), opval
);
1652 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1659 CASE (sem
, INSN_LH
) : /* lh $rt,$lo16($base) */
1661 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1662 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1663 #define FLD(f) abuf->fields.sfmt_addi.f
1664 int UNUSED written
= 0;
1665 IADDR UNUSED pc
= abuf
->addr
;
1666 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1669 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1670 SET_H_GR (FLD (f_rt
), opval
);
1671 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1678 CASE (sem
, INSN_LHU
) : /* lhu $rt,$lo16($base) */
1680 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1681 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1682 #define FLD(f) abuf->fields.sfmt_addi.f
1683 int UNUSED written
= 0;
1684 IADDR UNUSED pc
= abuf
->addr
;
1685 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1688 SI opval
= ZEXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1689 SET_H_GR (FLD (f_rt
), opval
);
1690 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1697 CASE (sem
, INSN_LUI
) : /* lui $rt,$hi16 */
1699 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1700 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1701 #define FLD(f) abuf->fields.sfmt_addi.f
1702 int UNUSED written
= 0;
1703 IADDR UNUSED pc
= abuf
->addr
;
1704 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1707 SI opval
= SLLSI (FLD (f_imm
), 16);
1708 SET_H_GR (FLD (f_rt
), opval
);
1709 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1716 CASE (sem
, INSN_LW
) : /* lw $rt,$lo16($base) */
1718 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1719 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1720 #define FLD(f) abuf->fields.sfmt_addi.f
1721 int UNUSED written
= 0;
1722 IADDR UNUSED pc
= abuf
->addr
;
1723 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1726 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))));
1727 SET_H_GR (FLD (f_rt
), opval
);
1728 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1735 CASE (sem
, INSN_SB
) : /* sb $rt,$lo16($base) */
1737 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1738 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1739 #define FLD(f) abuf->fields.sfmt_addi.f
1740 int UNUSED written
= 0;
1741 IADDR UNUSED pc
= abuf
->addr
;
1742 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1745 QI opval
= ANDQI (GET_H_GR (FLD (f_rt
)), 255);
1746 SETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))), opval
);
1747 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1754 CASE (sem
, INSN_SH
) : /* sh $rt,$lo16($base) */
1756 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1757 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1758 #define FLD(f) abuf->fields.sfmt_addi.f
1759 int UNUSED written
= 0;
1760 IADDR UNUSED pc
= abuf
->addr
;
1761 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1764 HI opval
= ANDHI (GET_H_GR (FLD (f_rt
)), 65535);
1765 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))), opval
);
1766 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1773 CASE (sem
, INSN_SW
) : /* sw $rt,$lo16($base) */
1775 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1777 #define FLD(f) abuf->fields.sfmt_addi.f
1778 int UNUSED written
= 0;
1779 IADDR UNUSED pc
= abuf
->addr
;
1780 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1783 SI opval
= GET_H_GR (FLD (f_rt
));
1784 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))), opval
);
1785 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1792 CASE (sem
, INSN_BREAK
) : /* break */
1794 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1795 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1796 #define FLD(f) abuf->fields.sfmt_empty.f
1797 int UNUSED written
= 0;
1798 IADDR UNUSED pc
= abuf
->addr
;
1799 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1801 do_break (current_cpu
, pc
);
1807 CASE (sem
, INSN_SYSCALL
) : /* syscall */
1809 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1810 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1811 #define FLD(f) abuf->fields.sfmt_empty.f
1812 int UNUSED written
= 0;
1813 IADDR UNUSED pc
= abuf
->addr
;
1814 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1816 do_syscall (current_cpu
, pc
);
1822 CASE (sem
, INSN_ANDOUI
) : /* andoui $rt,$rs,$hi16 */
1824 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1825 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1826 #define FLD(f) abuf->fields.sfmt_addi.f
1827 int UNUSED written
= 0;
1828 IADDR UNUSED pc
= abuf
->addr
;
1829 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1832 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), ORSI (SLLSI (FLD (f_imm
), 16), 65535));
1833 SET_H_GR (FLD (f_rt
), opval
);
1834 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1841 CASE (sem
, INSN_ORUI
) : /* orui $rt,$rs,$hi16 */
1843 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1844 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1845 #define FLD(f) abuf->fields.sfmt_addi.f
1846 int UNUSED written
= 0;
1847 IADDR UNUSED pc
= abuf
->addr
;
1848 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1851 SI opval
= ORSI (GET_H_GR (FLD (f_rs
)), SLLSI (FLD (f_imm
), 16));
1852 SET_H_GR (FLD (f_rt
), opval
);
1853 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1860 CASE (sem
, INSN_BGTZ
) : /* bgtz $rs,$offset */
1862 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1863 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1864 #define FLD(f) abuf->fields.sfmt_bbi.f
1865 int UNUSED written
= 0;
1866 IADDR UNUSED pc
= abuf
->addr
;
1868 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1870 if (GTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1873 USI opval
= FLD (i_offset
);
1874 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1875 written
|= (1 << 2);
1876 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1881 abuf
->written
= written
;
1882 SEM_BRANCH_FINI (vpc
);
1887 CASE (sem
, INSN_BGTZL
) : /* bgtzl $rs,$offset */
1889 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1890 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1891 #define FLD(f) abuf->fields.sfmt_bbi.f
1892 int UNUSED written
= 0;
1893 IADDR UNUSED pc
= abuf
->addr
;
1895 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1897 if (GTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1900 USI opval
= FLD (i_offset
);
1901 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1902 written
|= (1 << 2);
1903 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1908 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1911 abuf
->written
= written
;
1912 SEM_BRANCH_FINI (vpc
);
1917 CASE (sem
, INSN_BLEZ
) : /* blez $rs,$offset */
1919 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1920 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1921 #define FLD(f) abuf->fields.sfmt_bbi.f
1922 int UNUSED written
= 0;
1923 IADDR UNUSED pc
= abuf
->addr
;
1925 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1927 if (LESI (GET_H_GR (FLD (f_rs
)), 0)) {
1930 USI opval
= FLD (i_offset
);
1931 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1932 written
|= (1 << 2);
1933 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1938 abuf
->written
= written
;
1939 SEM_BRANCH_FINI (vpc
);
1944 CASE (sem
, INSN_BLEZL
) : /* blezl $rs,$offset */
1946 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1947 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1948 #define FLD(f) abuf->fields.sfmt_bbi.f
1949 int UNUSED written
= 0;
1950 IADDR UNUSED pc
= abuf
->addr
;
1952 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1954 if (LESI (GET_H_GR (FLD (f_rs
)), 0)) {
1957 USI opval
= FLD (i_offset
);
1958 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1959 written
|= (1 << 2);
1960 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1965 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1968 abuf
->written
= written
;
1969 SEM_BRANCH_FINI (vpc
);
1974 CASE (sem
, INSN_MRGB
) : /* mrgb $rd,$rs,$rt,$mask */
1976 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1977 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1978 #define FLD(f) abuf->fields.sfmt_mrgb.f
1979 int UNUSED written
= 0;
1980 IADDR UNUSED pc
= abuf
->addr
;
1981 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1985 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 0)))) {
1986 tmp_temp
= ANDSI (GET_H_GR (FLD (f_rs
)), 255);
1988 tmp_temp
= ANDSI (GET_H_GR (FLD (f_rt
)), 255);
1990 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 1)))) {
1991 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rs
)), 65280));
1993 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rt
)), 65280));
1995 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 2)))) {
1996 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rs
)), 16711680));
1998 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rt
)), 16711680));
2000 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 3)))) {
2001 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rs
)), 0xff000000));
2003 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rt
)), 0xff000000));
2006 SI opval
= tmp_temp
;
2007 SET_H_GR (FLD (f_rd
), opval
);
2008 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
2016 CASE (sem
, INSN_BCTXT
) : /* bctxt $rs,$offset */
2018 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2019 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2020 #define FLD(f) abuf->fields.sfmt_empty.f
2021 int UNUSED written
= 0;
2022 IADDR UNUSED pc
= abuf
->addr
;
2024 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2028 SEM_BRANCH_FINI (vpc
);
2033 CASE (sem
, INSN_BC0F
) : /* bc0f $offset */
2035 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2036 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2037 #define FLD(f) abuf->fields.sfmt_empty.f
2038 int UNUSED written
= 0;
2039 IADDR UNUSED pc
= abuf
->addr
;
2041 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2045 SEM_BRANCH_FINI (vpc
);
2050 CASE (sem
, INSN_BC0FL
) : /* bc0fl $offset */
2052 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2053 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2054 #define FLD(f) abuf->fields.sfmt_empty.f
2055 int UNUSED written
= 0;
2056 IADDR UNUSED pc
= abuf
->addr
;
2058 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2062 SEM_BRANCH_FINI (vpc
);
2067 CASE (sem
, INSN_BC3F
) : /* bc3f $offset */
2069 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2070 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2071 #define FLD(f) abuf->fields.sfmt_empty.f
2072 int UNUSED written
= 0;
2073 IADDR UNUSED pc
= abuf
->addr
;
2075 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2079 SEM_BRANCH_FINI (vpc
);
2084 CASE (sem
, INSN_BC3FL
) : /* bc3fl $offset */
2086 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2087 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2088 #define FLD(f) abuf->fields.sfmt_empty.f
2089 int UNUSED written
= 0;
2090 IADDR UNUSED pc
= abuf
->addr
;
2092 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2096 SEM_BRANCH_FINI (vpc
);
2101 CASE (sem
, INSN_BC0T
) : /* bc0t $offset */
2103 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2105 #define FLD(f) abuf->fields.sfmt_empty.f
2106 int UNUSED written
= 0;
2107 IADDR UNUSED pc
= abuf
->addr
;
2109 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2113 SEM_BRANCH_FINI (vpc
);
2118 CASE (sem
, INSN_BC0TL
) : /* bc0tl $offset */
2120 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2121 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2122 #define FLD(f) abuf->fields.sfmt_empty.f
2123 int UNUSED written
= 0;
2124 IADDR UNUSED pc
= abuf
->addr
;
2126 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2130 SEM_BRANCH_FINI (vpc
);
2135 CASE (sem
, INSN_BC3T
) : /* bc3t $offset */
2137 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2138 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2139 #define FLD(f) abuf->fields.sfmt_empty.f
2140 int UNUSED written
= 0;
2141 IADDR UNUSED pc
= abuf
->addr
;
2143 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2147 SEM_BRANCH_FINI (vpc
);
2152 CASE (sem
, INSN_BC3TL
) : /* bc3tl $offset */
2154 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2155 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2156 #define FLD(f) abuf->fields.sfmt_empty.f
2157 int UNUSED written
= 0;
2158 IADDR UNUSED pc
= abuf
->addr
;
2160 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2164 SEM_BRANCH_FINI (vpc
);
2169 CASE (sem
, INSN_CFC0
) : /* cfc0 $rt,$rd */
2171 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2172 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2173 #define FLD(f) abuf->fields.sfmt_empty.f
2174 int UNUSED written
= 0;
2175 IADDR UNUSED pc
= abuf
->addr
;
2176 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2184 CASE (sem
, INSN_CFC1
) : /* cfc1 $rt,$rd */
2186 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2187 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2188 #define FLD(f) abuf->fields.sfmt_empty.f
2189 int UNUSED written
= 0;
2190 IADDR UNUSED pc
= abuf
->addr
;
2191 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2199 CASE (sem
, INSN_CFC2
) : /* cfc2 $rt,$rd */
2201 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2202 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2203 #define FLD(f) abuf->fields.sfmt_empty.f
2204 int UNUSED written
= 0;
2205 IADDR UNUSED pc
= abuf
->addr
;
2206 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2214 CASE (sem
, INSN_CFC3
) : /* cfc3 $rt,$rd */
2216 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2217 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2218 #define FLD(f) abuf->fields.sfmt_empty.f
2219 int UNUSED written
= 0;
2220 IADDR UNUSED pc
= abuf
->addr
;
2221 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2229 CASE (sem
, INSN_CHKHDR
) : /* chkhdr $rd,$rt */
2231 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2232 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2233 #define FLD(f) abuf->fields.sfmt_empty.f
2234 int UNUSED written
= 0;
2235 IADDR UNUSED pc
= abuf
->addr
;
2236 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2244 CASE (sem
, INSN_CTC0
) : /* ctc0 $rt,$rd */
2246 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2247 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2248 #define FLD(f) abuf->fields.sfmt_empty.f
2249 int UNUSED written
= 0;
2250 IADDR UNUSED pc
= abuf
->addr
;
2251 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2259 CASE (sem
, INSN_CTC1
) : /* ctc1 $rt,$rd */
2261 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2262 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2263 #define FLD(f) abuf->fields.sfmt_empty.f
2264 int UNUSED written
= 0;
2265 IADDR UNUSED pc
= abuf
->addr
;
2266 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2274 CASE (sem
, INSN_CTC2
) : /* ctc2 $rt,$rd */
2276 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2277 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2278 #define FLD(f) abuf->fields.sfmt_empty.f
2279 int UNUSED written
= 0;
2280 IADDR UNUSED pc
= abuf
->addr
;
2281 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2289 CASE (sem
, INSN_CTC3
) : /* ctc3 $rt,$rd */
2291 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2292 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2293 #define FLD(f) abuf->fields.sfmt_empty.f
2294 int UNUSED written
= 0;
2295 IADDR UNUSED pc
= abuf
->addr
;
2296 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2304 CASE (sem
, INSN_JCR
) : /* jcr $rs */
2306 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2307 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2308 #define FLD(f) abuf->fields.sfmt_empty.f
2309 int UNUSED written
= 0;
2310 IADDR UNUSED pc
= abuf
->addr
;
2312 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2316 SEM_BRANCH_FINI (vpc
);
2321 CASE (sem
, INSN_LUC32
) : /* luc32 $rt,$rd */
2323 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2324 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2325 #define FLD(f) abuf->fields.sfmt_empty.f
2326 int UNUSED written
= 0;
2327 IADDR UNUSED pc
= abuf
->addr
;
2328 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2336 CASE (sem
, INSN_LUC32L
) : /* luc32l $rt,$rd */
2338 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2339 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2340 #define FLD(f) abuf->fields.sfmt_empty.f
2341 int UNUSED written
= 0;
2342 IADDR UNUSED pc
= abuf
->addr
;
2343 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2351 CASE (sem
, INSN_LUC64
) : /* luc64 $rt,$rd */
2353 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2354 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2355 #define FLD(f) abuf->fields.sfmt_empty.f
2356 int UNUSED written
= 0;
2357 IADDR UNUSED pc
= abuf
->addr
;
2358 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2366 CASE (sem
, INSN_LUC64L
) : /* luc64l $rt,$rd */
2368 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2369 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2370 #define FLD(f) abuf->fields.sfmt_empty.f
2371 int UNUSED written
= 0;
2372 IADDR UNUSED pc
= abuf
->addr
;
2373 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2381 CASE (sem
, INSN_LUK
) : /* luk $rt,$rd */
2383 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2384 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2385 #define FLD(f) abuf->fields.sfmt_empty.f
2386 int UNUSED written
= 0;
2387 IADDR UNUSED pc
= abuf
->addr
;
2388 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2396 CASE (sem
, INSN_LULCK
) : /* lulck $rt */
2398 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2399 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2400 #define FLD(f) abuf->fields.sfmt_empty.f
2401 int UNUSED written
= 0;
2402 IADDR UNUSED pc
= abuf
->addr
;
2403 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2411 CASE (sem
, INSN_LUM32
) : /* lum32 $rt,$rd */
2413 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2414 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2415 #define FLD(f) abuf->fields.sfmt_empty.f
2416 int UNUSED written
= 0;
2417 IADDR UNUSED pc
= abuf
->addr
;
2418 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2426 CASE (sem
, INSN_LUM32L
) : /* lum32l $rt,$rd */
2428 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2429 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2430 #define FLD(f) abuf->fields.sfmt_empty.f
2431 int UNUSED written
= 0;
2432 IADDR UNUSED pc
= abuf
->addr
;
2433 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2441 CASE (sem
, INSN_LUM64
) : /* lum64 $rt,$rd */
2443 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2444 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2445 #define FLD(f) abuf->fields.sfmt_empty.f
2446 int UNUSED written
= 0;
2447 IADDR UNUSED pc
= abuf
->addr
;
2448 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2456 CASE (sem
, INSN_LUM64L
) : /* lum64l $rt,$rd */
2458 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2459 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2460 #define FLD(f) abuf->fields.sfmt_empty.f
2461 int UNUSED written
= 0;
2462 IADDR UNUSED pc
= abuf
->addr
;
2463 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2471 CASE (sem
, INSN_LUR
) : /* lur $rt,$rd */
2473 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2474 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2475 #define FLD(f) abuf->fields.sfmt_empty.f
2476 int UNUSED written
= 0;
2477 IADDR UNUSED pc
= abuf
->addr
;
2478 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2486 CASE (sem
, INSN_LURL
) : /* lurl $rt,$rd */
2488 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2489 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2490 #define FLD(f) abuf->fields.sfmt_empty.f
2491 int UNUSED written
= 0;
2492 IADDR UNUSED pc
= abuf
->addr
;
2493 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2501 CASE (sem
, INSN_LUULCK
) : /* luulck $rt */
2503 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2504 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2505 #define FLD(f) abuf->fields.sfmt_empty.f
2506 int UNUSED written
= 0;
2507 IADDR UNUSED pc
= abuf
->addr
;
2508 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2516 CASE (sem
, INSN_MFC0
) : /* mfc0 $rt,$rd */
2518 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2520 #define FLD(f) abuf->fields.sfmt_empty.f
2521 int UNUSED written
= 0;
2522 IADDR UNUSED pc
= abuf
->addr
;
2523 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2531 CASE (sem
, INSN_MFC1
) : /* mfc1 $rt,$rd */
2533 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2534 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2535 #define FLD(f) abuf->fields.sfmt_empty.f
2536 int UNUSED written
= 0;
2537 IADDR UNUSED pc
= abuf
->addr
;
2538 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2546 CASE (sem
, INSN_MFC2
) : /* mfc2 $rt,$rd */
2548 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2550 #define FLD(f) abuf->fields.sfmt_empty.f
2551 int UNUSED written
= 0;
2552 IADDR UNUSED pc
= abuf
->addr
;
2553 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2561 CASE (sem
, INSN_MFC3
) : /* mfc3 $rt,$rd */
2563 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2564 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2565 #define FLD(f) abuf->fields.sfmt_empty.f
2566 int UNUSED written
= 0;
2567 IADDR UNUSED pc
= abuf
->addr
;
2568 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2576 CASE (sem
, INSN_MTC0
) : /* mtc0 $rt,$rd */
2578 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2579 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2580 #define FLD(f) abuf->fields.sfmt_empty.f
2581 int UNUSED written
= 0;
2582 IADDR UNUSED pc
= abuf
->addr
;
2583 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2591 CASE (sem
, INSN_MTC1
) : /* mtc1 $rt,$rd */
2593 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2594 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2595 #define FLD(f) abuf->fields.sfmt_empty.f
2596 int UNUSED written
= 0;
2597 IADDR UNUSED pc
= abuf
->addr
;
2598 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2606 CASE (sem
, INSN_MTC2
) : /* mtc2 $rt,$rd */
2608 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2609 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2610 #define FLD(f) abuf->fields.sfmt_empty.f
2611 int UNUSED written
= 0;
2612 IADDR UNUSED pc
= abuf
->addr
;
2613 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2621 CASE (sem
, INSN_MTC3
) : /* mtc3 $rt,$rd */
2623 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2624 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2625 #define FLD(f) abuf->fields.sfmt_empty.f
2626 int UNUSED written
= 0;
2627 IADDR UNUSED pc
= abuf
->addr
;
2628 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2636 CASE (sem
, INSN_PKRL
) : /* pkrl $rd,$rt */
2638 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2639 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2640 #define FLD(f) abuf->fields.sfmt_empty.f
2641 int UNUSED written
= 0;
2642 IADDR UNUSED pc
= abuf
->addr
;
2643 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2651 CASE (sem
, INSN_PKRLR1
) : /* pkrlr1 $rt,$_index,$count */
2653 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2654 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2655 #define FLD(f) abuf->fields.sfmt_empty.f
2656 int UNUSED written
= 0;
2657 IADDR UNUSED pc
= abuf
->addr
;
2658 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2666 CASE (sem
, INSN_PKRLR30
) : /* pkrlr30 $rt,$_index,$count */
2668 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2669 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2670 #define FLD(f) abuf->fields.sfmt_empty.f
2671 int UNUSED written
= 0;
2672 IADDR UNUSED pc
= abuf
->addr
;
2673 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2681 CASE (sem
, INSN_RB
) : /* rb $rd,$rt */
2683 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2684 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2685 #define FLD(f) abuf->fields.sfmt_empty.f
2686 int UNUSED written
= 0;
2687 IADDR UNUSED pc
= abuf
->addr
;
2688 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2696 CASE (sem
, INSN_RBR1
) : /* rbr1 $rt,$_index,$count */
2698 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2699 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2700 #define FLD(f) abuf->fields.sfmt_empty.f
2701 int UNUSED written
= 0;
2702 IADDR UNUSED pc
= abuf
->addr
;
2703 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2711 CASE (sem
, INSN_RBR30
) : /* rbr30 $rt,$_index,$count */
2713 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2714 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2715 #define FLD(f) abuf->fields.sfmt_empty.f
2716 int UNUSED written
= 0;
2717 IADDR UNUSED pc
= abuf
->addr
;
2718 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2726 CASE (sem
, INSN_RFE
) : /* rfe */
2728 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2729 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2730 #define FLD(f) abuf->fields.sfmt_empty.f
2731 int UNUSED written
= 0;
2732 IADDR UNUSED pc
= abuf
->addr
;
2733 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2741 CASE (sem
, INSN_RX
) : /* rx $rd,$rt */
2743 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2744 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2745 #define FLD(f) abuf->fields.sfmt_empty.f
2746 int UNUSED written
= 0;
2747 IADDR UNUSED pc
= abuf
->addr
;
2748 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2756 CASE (sem
, INSN_RXR1
) : /* rxr1 $rt,$_index,$count */
2758 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2759 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2760 #define FLD(f) abuf->fields.sfmt_empty.f
2761 int UNUSED written
= 0;
2762 IADDR UNUSED pc
= abuf
->addr
;
2763 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2771 CASE (sem
, INSN_RXR30
) : /* rxr30 $rt,$_index,$count */
2773 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2774 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2775 #define FLD(f) abuf->fields.sfmt_empty.f
2776 int UNUSED written
= 0;
2777 IADDR UNUSED pc
= abuf
->addr
;
2778 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2786 CASE (sem
, INSN_SLEEP
) : /* sleep */
2788 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2789 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2790 #define FLD(f) abuf->fields.sfmt_empty.f
2791 int UNUSED written
= 0;
2792 IADDR UNUSED pc
= abuf
->addr
;
2793 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2801 CASE (sem
, INSN_SRRD
) : /* srrd $rt */
2803 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2804 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2805 #define FLD(f) abuf->fields.sfmt_empty.f
2806 int UNUSED written
= 0;
2807 IADDR UNUSED pc
= abuf
->addr
;
2808 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2816 CASE (sem
, INSN_SRRDL
) : /* srrdl $rt */
2818 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2819 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2820 #define FLD(f) abuf->fields.sfmt_empty.f
2821 int UNUSED written
= 0;
2822 IADDR UNUSED pc
= abuf
->addr
;
2823 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2831 CASE (sem
, INSN_SRULCK
) : /* srulck $rt */
2833 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2834 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2835 #define FLD(f) abuf->fields.sfmt_empty.f
2836 int UNUSED written
= 0;
2837 IADDR UNUSED pc
= abuf
->addr
;
2838 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2846 CASE (sem
, INSN_SRWR
) : /* srwr $rt,$rd */
2848 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2849 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2850 #define FLD(f) abuf->fields.sfmt_empty.f
2851 int UNUSED written
= 0;
2852 IADDR UNUSED pc
= abuf
->addr
;
2853 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2861 CASE (sem
, INSN_SRWRU
) : /* srwru $rt,$rd */
2863 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2864 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2865 #define FLD(f) abuf->fields.sfmt_empty.f
2866 int UNUSED written
= 0;
2867 IADDR UNUSED pc
= abuf
->addr
;
2868 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2876 CASE (sem
, INSN_TRAPQFL
) : /* trapqfl */
2878 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2879 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2880 #define FLD(f) abuf->fields.sfmt_empty.f
2881 int UNUSED written
= 0;
2882 IADDR UNUSED pc
= abuf
->addr
;
2883 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2891 CASE (sem
, INSN_TRAPQNE
) : /* trapqne */
2893 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2894 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2895 #define FLD(f) abuf->fields.sfmt_empty.f
2896 int UNUSED written
= 0;
2897 IADDR UNUSED pc
= abuf
->addr
;
2898 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2906 CASE (sem
, INSN_TRAPREL
) : /* traprel $rt */
2908 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2909 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2910 #define FLD(f) abuf->fields.sfmt_empty.f
2911 int UNUSED written
= 0;
2912 IADDR UNUSED pc
= abuf
->addr
;
2913 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2921 CASE (sem
, INSN_WB
) : /* wb $rd,$rt */
2923 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2924 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2925 #define FLD(f) abuf->fields.sfmt_empty.f
2926 int UNUSED written
= 0;
2927 IADDR UNUSED pc
= abuf
->addr
;
2928 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2936 CASE (sem
, INSN_WBU
) : /* wbu $rd,$rt */
2938 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2939 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2940 #define FLD(f) abuf->fields.sfmt_empty.f
2941 int UNUSED written
= 0;
2942 IADDR UNUSED pc
= abuf
->addr
;
2943 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2951 CASE (sem
, INSN_WBR1
) : /* wbr1 $rt,$_index,$count */
2953 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2954 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2955 #define FLD(f) abuf->fields.sfmt_empty.f
2956 int UNUSED written
= 0;
2957 IADDR UNUSED pc
= abuf
->addr
;
2958 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2966 CASE (sem
, INSN_WBR1U
) : /* wbr1u $rt,$_index,$count */
2968 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2969 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2970 #define FLD(f) abuf->fields.sfmt_empty.f
2971 int UNUSED written
= 0;
2972 IADDR UNUSED pc
= abuf
->addr
;
2973 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2981 CASE (sem
, INSN_WBR30
) : /* wbr30 $rt,$_index,$count */
2983 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2984 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2985 #define FLD(f) abuf->fields.sfmt_empty.f
2986 int UNUSED written
= 0;
2987 IADDR UNUSED pc
= abuf
->addr
;
2988 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2996 CASE (sem
, INSN_WBR30U
) : /* wbr30u $rt,$_index,$count */
2998 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2999 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3000 #define FLD(f) abuf->fields.sfmt_empty.f
3001 int UNUSED written
= 0;
3002 IADDR UNUSED pc
= abuf
->addr
;
3003 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3011 CASE (sem
, INSN_WX
) : /* wx $rd,$rt */
3013 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3014 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3015 #define FLD(f) abuf->fields.sfmt_empty.f
3016 int UNUSED written
= 0;
3017 IADDR UNUSED pc
= abuf
->addr
;
3018 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3026 CASE (sem
, INSN_WXU
) : /* wxu $rd,$rt */
3028 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3029 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3030 #define FLD(f) abuf->fields.sfmt_empty.f
3031 int UNUSED written
= 0;
3032 IADDR UNUSED pc
= abuf
->addr
;
3033 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3041 CASE (sem
, INSN_WXR1
) : /* wxr1 $rt,$_index,$count */
3043 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3044 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3045 #define FLD(f) abuf->fields.sfmt_empty.f
3046 int UNUSED written
= 0;
3047 IADDR UNUSED pc
= abuf
->addr
;
3048 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3056 CASE (sem
, INSN_WXR1U
) : /* wxr1u $rt,$_index,$count */
3058 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3059 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3060 #define FLD(f) abuf->fields.sfmt_empty.f
3061 int UNUSED written
= 0;
3062 IADDR UNUSED pc
= abuf
->addr
;
3063 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3071 CASE (sem
, INSN_WXR30
) : /* wxr30 $rt,$_index,$count */
3073 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3074 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3075 #define FLD(f) abuf->fields.sfmt_empty.f
3076 int UNUSED written
= 0;
3077 IADDR UNUSED pc
= abuf
->addr
;
3078 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3086 CASE (sem
, INSN_WXR30U
) : /* wxr30u $rt,$_index,$count */
3088 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3089 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3090 #define FLD(f) abuf->fields.sfmt_empty.f
3091 int UNUSED written
= 0;
3092 IADDR UNUSED pc
= abuf
->addr
;
3093 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3101 CASE (sem
, INSN_LDW
) : /* ldw $rt,$lo16($base) */
3103 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3105 #define FLD(f) abuf->fields.sfmt_addi.f
3106 int UNUSED written
= 0;
3107 IADDR UNUSED pc
= abuf
->addr
;
3108 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3112 tmp_addr
= ANDSI (ADDSI (GET_H_GR (FLD (f_rs
)), FLD (f_imm
)), INVSI (3));
3114 SI opval
= GETMEMSI (current_cpu
, pc
, tmp_addr
);
3115 SET_H_GR (ADDSI (FLD (f_rt
), 1), opval
);
3116 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
3119 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (tmp_addr
, 4));
3120 SET_H_GR (FLD (f_rt
), opval
);
3121 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
3129 CASE (sem
, INSN_SDW
) : /* sdw $rt,$lo16($base) */
3131 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3132 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3133 #define FLD(f) abuf->fields.sfmt_addi.f
3134 int UNUSED written
= 0;
3135 IADDR UNUSED pc
= abuf
->addr
;
3136 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3140 tmp_addr
= ANDSI (ADDSI (GET_H_GR (FLD (f_rs
)), FLD (f_imm
)), INVSI (3));
3142 SI opval
= GET_H_GR (FLD (f_rt
));
3143 SETMEMSI (current_cpu
, pc
, ADDSI (tmp_addr
, 4), opval
);
3144 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3147 SI opval
= GET_H_GR (ADDSI (FLD (f_rt
), 1));
3148 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
3149 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3157 CASE (sem
, INSN_J
) : /* j $jmptarg */
3159 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3160 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3161 #define FLD(f) abuf->fields.sfmt_j.f
3162 int UNUSED written
= 0;
3163 IADDR UNUSED pc
= abuf
->addr
;
3165 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3169 USI opval
= FLD (i_jmptarg
);
3170 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3171 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3175 SEM_BRANCH_FINI (vpc
);
3180 CASE (sem
, INSN_JAL
) : /* jal $jmptarg */
3182 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3184 #define FLD(f) abuf->fields.sfmt_j.f
3185 int UNUSED written
= 0;
3186 IADDR UNUSED pc
= abuf
->addr
;
3188 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3193 SI opval
= ADDSI (pc
, 8);
3194 SET_H_GR (((UINT
) 31), opval
);
3195 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
3198 USI opval
= FLD (i_jmptarg
);
3199 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3200 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3205 SEM_BRANCH_FINI (vpc
);
3210 CASE (sem
, INSN_BMB
) : /* bmb $rs,$rt,$offset */
3212 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
3213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3214 #define FLD(f) abuf->fields.sfmt_bbi.f
3215 int UNUSED written
= 0;
3216 IADDR UNUSED pc
= abuf
->addr
;
3218 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3223 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 255), ANDSI (GET_H_GR (FLD (f_rt
)), 255))) {
3226 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 65280), ANDSI (GET_H_GR (FLD (f_rt
)), 65280))) {
3229 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 16711680), ANDSI (GET_H_GR (FLD (f_rt
)), 16711680))) {
3232 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt
)), 0xff000000))) {
3238 USI opval
= FLD (i_offset
);
3239 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3240 written
|= (1 << 3);
3241 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3247 abuf
->written
= written
;
3248 SEM_BRANCH_FINI (vpc
);
3255 ENDSWITCH (sem
) /* End of semantic switch. */
3257 /* At this point `vpc' contains the next insn to execute. */
3260 #undef DEFINE_SWITCH
3261 #endif /* DEFINE_SWITCH */