1 /* Simulator instruction semantics for iq2000bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 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.
25 #define WANT_CPU iq2000bf
26 #define WANT_CPU_IQ2000BF
33 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
35 /* This is used so that we can compile two copies of the semantic code,
36 one with full feature support and one without that runs fast(er).
37 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
39 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
41 #define TRACE_RESULT(cpu, abuf, name, type, val)
43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
46 /* x-invalid: --invalid-- */
49 SEM_FN_NAME (iq2000bf
,x_invalid
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
51 #define FLD(f) abuf->fields.sfmt_empty.f
52 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
53 int UNUSED written
= 0;
54 IADDR UNUSED pc
= abuf
->addr
;
55 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
58 /* Update the recorded pc in the cpu state struct.
59 Only necessary for WITH_SCACHE case, but to avoid the
60 conditional compilation .... */
62 /* Virtual insns have zero size. Overwrite vpc with address of next insn
63 using the default-insn-bitsize spec. When executing insns in parallel
64 we may want to queue the fault and continue execution. */
65 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
66 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
73 /* x-after: --after-- */
76 SEM_FN_NAME (iq2000bf
,x_after
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
78 #define FLD(f) abuf->fields.sfmt_empty.f
79 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
80 int UNUSED written
= 0;
81 IADDR UNUSED pc
= abuf
->addr
;
82 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
85 #if WITH_SCACHE_PBB_IQ2000BF
86 iq2000bf_pbb_after (current_cpu
, sem_arg
);
94 /* x-before: --before-- */
97 SEM_FN_NAME (iq2000bf
,x_before
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
99 #define FLD(f) abuf->fields.sfmt_empty.f
100 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
101 int UNUSED written
= 0;
102 IADDR UNUSED pc
= abuf
->addr
;
103 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
106 #if WITH_SCACHE_PBB_IQ2000BF
107 iq2000bf_pbb_before (current_cpu
, sem_arg
);
115 /* x-cti-chain: --cti-chain-- */
118 SEM_FN_NAME (iq2000bf
,x_cti_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
120 #define FLD(f) abuf->fields.sfmt_empty.f
121 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
122 int UNUSED written
= 0;
123 IADDR UNUSED pc
= abuf
->addr
;
124 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
127 #if WITH_SCACHE_PBB_IQ2000BF
129 vpc
= iq2000bf_pbb_cti_chain (current_cpu
, sem_arg
,
130 pbb_br_type
, pbb_br_npc
);
133 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
134 vpc
= iq2000bf_pbb_cti_chain (current_cpu
, sem_arg
,
135 CPU_PBB_BR_TYPE (current_cpu
),
136 CPU_PBB_BR_NPC (current_cpu
));
145 /* x-chain: --chain-- */
148 SEM_FN_NAME (iq2000bf
,x_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
150 #define FLD(f) abuf->fields.sfmt_empty.f
151 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
152 int UNUSED written
= 0;
153 IADDR UNUSED pc
= abuf
->addr
;
154 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
157 #if WITH_SCACHE_PBB_IQ2000BF
158 vpc
= iq2000bf_pbb_chain (current_cpu
, sem_arg
);
169 /* x-begin: --begin-- */
172 SEM_FN_NAME (iq2000bf
,x_begin
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
174 #define FLD(f) abuf->fields.sfmt_empty.f
175 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
176 int UNUSED written
= 0;
177 IADDR UNUSED pc
= abuf
->addr
;
178 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
181 #if WITH_SCACHE_PBB_IQ2000BF
182 #if defined DEFINE_SWITCH || defined FAST_P
183 /* In the switch case FAST_P is a constant, allowing several optimizations
184 in any called inline functions. */
185 vpc
= iq2000bf_pbb_begin (current_cpu
, FAST_P
);
187 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
188 vpc
= iq2000bf_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
190 vpc
= iq2000bf_pbb_begin (current_cpu
, 0);
200 /* add: add $rd,$rs,$rt */
203 SEM_FN_NAME (iq2000bf
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
205 #define FLD(f) abuf->fields.sfmt_mrgb.f
206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
207 int UNUSED written
= 0;
208 IADDR UNUSED pc
= abuf
->addr
;
209 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
212 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
213 SET_H_GR (FLD (f_rd
), opval
);
214 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
221 /* addi: addi $rt,$rs,$lo16 */
224 SEM_FN_NAME (iq2000bf
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
226 #define FLD(f) abuf->fields.sfmt_addi.f
227 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
228 int UNUSED written
= 0;
229 IADDR UNUSED pc
= abuf
->addr
;
230 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
233 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))));
234 SET_H_GR (FLD (f_rt
), opval
);
235 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
242 /* addiu: addiu $rt,$rs,$lo16 */
245 SEM_FN_NAME (iq2000bf
,addiu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
247 #define FLD(f) abuf->fields.sfmt_addi.f
248 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
249 int UNUSED written
= 0;
250 IADDR UNUSED pc
= abuf
->addr
;
251 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
254 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))));
255 SET_H_GR (FLD (f_rt
), opval
);
256 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
263 /* addu: addu $rd,$rs,$rt */
266 SEM_FN_NAME (iq2000bf
,addu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
268 #define FLD(f) abuf->fields.sfmt_mrgb.f
269 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
270 int UNUSED written
= 0;
271 IADDR UNUSED pc
= abuf
->addr
;
272 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
275 SI opval
= ADDSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
276 SET_H_GR (FLD (f_rd
), opval
);
277 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
284 /* ado16: ado16 $rd,$rs,$rt */
287 SEM_FN_NAME (iq2000bf
,ado16
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
289 #define FLD(f) abuf->fields.sfmt_mrgb.f
290 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
291 int UNUSED written
= 0;
292 IADDR UNUSED pc
= abuf
->addr
;
293 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
298 tmp_low
= ADDHI (ANDHI (GET_H_GR (FLD (f_rs
)), 65535), ANDHI (GET_H_GR (FLD (f_rt
)), 65535));
299 tmp_high
= ADDHI (SRLSI (GET_H_GR (FLD (f_rs
)), 16), SRLSI (GET_H_GR (FLD (f_rt
)), 16));
301 SI opval
= ORSI (SLLSI (tmp_high
, 16), tmp_low
);
302 SET_H_GR (FLD (f_rd
), opval
);
303 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
311 /* and: and $rd,$rs,$rt */
314 SEM_FN_NAME (iq2000bf
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
316 #define FLD(f) abuf->fields.sfmt_mrgb.f
317 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
318 int UNUSED written
= 0;
319 IADDR UNUSED pc
= abuf
->addr
;
320 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
323 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
324 SET_H_GR (FLD (f_rd
), opval
);
325 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
332 /* andi: andi $rt,$rs,$lo16 */
335 SEM_FN_NAME (iq2000bf
,andi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
337 #define FLD(f) abuf->fields.sfmt_addi.f
338 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
339 int UNUSED written
= 0;
340 IADDR UNUSED pc
= abuf
->addr
;
341 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
344 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), ZEXTSISI (FLD (f_imm
)));
345 SET_H_GR (FLD (f_rt
), opval
);
346 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
353 /* andoi: andoi $rt,$rs,$lo16 */
356 SEM_FN_NAME (iq2000bf
,andoi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
358 #define FLD(f) abuf->fields.sfmt_addi.f
359 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
360 int UNUSED written
= 0;
361 IADDR UNUSED pc
= abuf
->addr
;
362 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
365 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm
)))));
366 SET_H_GR (FLD (f_rt
), opval
);
367 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
374 /* nor: nor $rd,$rs,$rt */
377 SEM_FN_NAME (iq2000bf
,nor
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
379 #define FLD(f) abuf->fields.sfmt_mrgb.f
380 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
381 int UNUSED written
= 0;
382 IADDR UNUSED pc
= abuf
->addr
;
383 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
386 SI opval
= INVSI (ORSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
))));
387 SET_H_GR (FLD (f_rd
), opval
);
388 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
395 /* or: or $rd,$rs,$rt */
398 SEM_FN_NAME (iq2000bf
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
400 #define FLD(f) abuf->fields.sfmt_mrgb.f
401 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
402 int UNUSED written
= 0;
403 IADDR UNUSED pc
= abuf
->addr
;
404 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
407 SI opval
= ORSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
408 SET_H_GR (FLD (f_rd
), opval
);
409 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
416 /* ori: ori $rt,$rs,$lo16 */
419 SEM_FN_NAME (iq2000bf
,ori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
421 #define FLD(f) abuf->fields.sfmt_addi.f
422 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
423 int UNUSED written
= 0;
424 IADDR UNUSED pc
= abuf
->addr
;
425 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
428 SI opval
= ORSI (GET_H_GR (FLD (f_rs
)), ZEXTSISI (FLD (f_imm
)));
429 SET_H_GR (FLD (f_rt
), opval
);
430 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
437 /* ram: ram $rd,$rt,$shamt,$maskl,$maskr */
440 SEM_FN_NAME (iq2000bf
,ram
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
442 #define FLD(f) abuf->fields.sfmt_ram.f
443 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
444 int UNUSED written
= 0;
445 IADDR UNUSED pc
= abuf
->addr
;
446 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
450 SI opval
= RORSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
451 SET_H_GR (FLD (f_rd
), opval
);
452 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
455 SI opval
= ANDSI (GET_H_GR (FLD (f_rd
)), SRLSI (0xffffffff, FLD (f_maskl
)));
456 SET_H_GR (FLD (f_rd
), opval
);
457 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
460 SI opval
= ANDSI (GET_H_GR (FLD (f_rd
)), SLLSI (0xffffffff, FLD (f_rs
)));
461 SET_H_GR (FLD (f_rd
), opval
);
462 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
470 /* sll: sll $rd,$rt,$shamt */
473 SEM_FN_NAME (iq2000bf
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
475 #define FLD(f) abuf->fields.sfmt_ram.f
476 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
477 int UNUSED written
= 0;
478 IADDR UNUSED pc
= abuf
->addr
;
479 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
482 SI opval
= SLLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
483 SET_H_GR (FLD (f_rd
), opval
);
484 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
491 /* sllv: sllv $rd,$rt,$rs */
494 SEM_FN_NAME (iq2000bf
,sllv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
496 #define FLD(f) abuf->fields.sfmt_mrgb.f
497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
498 int UNUSED written
= 0;
499 IADDR UNUSED pc
= abuf
->addr
;
500 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
503 SI opval
= SLLSI (GET_H_GR (FLD (f_rt
)), ANDSI (GET_H_GR (FLD (f_rs
)), 31));
504 SET_H_GR (FLD (f_rd
), opval
);
505 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
512 /* slmv: slmv $rd,$rt,$rs,$shamt */
515 SEM_FN_NAME (iq2000bf
,slmv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
517 #define FLD(f) abuf->fields.sfmt_ram.f
518 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
519 int UNUSED written
= 0;
520 IADDR UNUSED pc
= abuf
->addr
;
521 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
524 SI opval
= ANDSI (SLLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs
))));
525 SET_H_GR (FLD (f_rd
), opval
);
526 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
533 /* slt: slt $rd,$rs,$rt */
536 SEM_FN_NAME (iq2000bf
,slt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
538 #define FLD(f) abuf->fields.sfmt_mrgb.f
539 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
540 int UNUSED written
= 0;
541 IADDR UNUSED pc
= abuf
->addr
;
542 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
544 if (LTSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
547 SET_H_GR (FLD (f_rd
), opval
);
549 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
554 SET_H_GR (FLD (f_rd
), opval
);
556 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
560 abuf
->written
= written
;
565 /* slti: slti $rt,$rs,$imm */
568 SEM_FN_NAME (iq2000bf
,slti
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
570 #define FLD(f) abuf->fields.sfmt_addi.f
571 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
572 int UNUSED written
= 0;
573 IADDR UNUSED pc
= abuf
->addr
;
574 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
576 if (LTSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))) {
579 SET_H_GR (FLD (f_rt
), opval
);
581 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
586 SET_H_GR (FLD (f_rt
), opval
);
588 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
592 abuf
->written
= written
;
597 /* sltiu: sltiu $rt,$rs,$imm */
600 SEM_FN_NAME (iq2000bf
,sltiu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
602 #define FLD(f) abuf->fields.sfmt_addi.f
603 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
604 int UNUSED written
= 0;
605 IADDR UNUSED pc
= abuf
->addr
;
606 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
608 if (LTUSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))) {
611 SET_H_GR (FLD (f_rt
), opval
);
613 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
618 SET_H_GR (FLD (f_rt
), opval
);
620 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
624 abuf
->written
= written
;
629 /* sltu: sltu $rd,$rs,$rt */
632 SEM_FN_NAME (iq2000bf
,sltu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
634 #define FLD(f) abuf->fields.sfmt_mrgb.f
635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
636 int UNUSED written
= 0;
637 IADDR UNUSED pc
= abuf
->addr
;
638 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
640 if (LTUSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
643 SET_H_GR (FLD (f_rd
), opval
);
645 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
650 SET_H_GR (FLD (f_rd
), opval
);
652 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
656 abuf
->written
= written
;
661 /* sra: sra $rd,$rt,$shamt */
664 SEM_FN_NAME (iq2000bf
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
666 #define FLD(f) abuf->fields.sfmt_ram.f
667 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
668 int UNUSED written
= 0;
669 IADDR UNUSED pc
= abuf
->addr
;
670 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
673 SI opval
= SRASI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
674 SET_H_GR (FLD (f_rd
), opval
);
675 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
682 /* srav: srav $rd,$rt,$rs */
685 SEM_FN_NAME (iq2000bf
,srav
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
687 #define FLD(f) abuf->fields.sfmt_mrgb.f
688 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
689 int UNUSED written
= 0;
690 IADDR UNUSED pc
= abuf
->addr
;
691 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
694 SI opval
= SRASI (GET_H_GR (FLD (f_rt
)), ANDSI (GET_H_GR (FLD (f_rs
)), 31));
695 SET_H_GR (FLD (f_rd
), opval
);
696 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
703 /* srl: srl $rd,$rt,$shamt */
706 SEM_FN_NAME (iq2000bf
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
708 #define FLD(f) abuf->fields.sfmt_ram.f
709 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
710 int UNUSED written
= 0;
711 IADDR UNUSED pc
= abuf
->addr
;
712 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
715 SI opval
= SRLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
));
716 SET_H_GR (FLD (f_rd
), opval
);
717 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
724 /* srlv: srlv $rd,$rt,$rs */
727 SEM_FN_NAME (iq2000bf
,srlv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
729 #define FLD(f) abuf->fields.sfmt_mrgb.f
730 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
731 int UNUSED written
= 0;
732 IADDR UNUSED pc
= abuf
->addr
;
733 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
736 SI opval
= SRLSI (GET_H_GR (FLD (f_rt
)), ANDSI (GET_H_GR (FLD (f_rs
)), 31));
737 SET_H_GR (FLD (f_rd
), opval
);
738 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
745 /* srmv: srmv $rd,$rt,$rs,$shamt */
748 SEM_FN_NAME (iq2000bf
,srmv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
750 #define FLD(f) abuf->fields.sfmt_ram.f
751 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
752 int UNUSED written
= 0;
753 IADDR UNUSED pc
= abuf
->addr
;
754 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
757 SI opval
= ANDSI (SRLSI (GET_H_GR (FLD (f_rt
)), FLD (f_shamt
)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs
))));
758 SET_H_GR (FLD (f_rd
), opval
);
759 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
766 /* sub: sub $rd,$rs,$rt */
769 SEM_FN_NAME (iq2000bf
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
771 #define FLD(f) abuf->fields.sfmt_mrgb.f
772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
773 int UNUSED written
= 0;
774 IADDR UNUSED pc
= abuf
->addr
;
775 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
778 SI opval
= SUBSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
779 SET_H_GR (FLD (f_rd
), opval
);
780 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
787 /* subu: subu $rd,$rs,$rt */
790 SEM_FN_NAME (iq2000bf
,subu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
792 #define FLD(f) abuf->fields.sfmt_mrgb.f
793 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
794 int UNUSED written
= 0;
795 IADDR UNUSED pc
= abuf
->addr
;
796 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
799 SI opval
= SUBSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
800 SET_H_GR (FLD (f_rd
), opval
);
801 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
808 /* xor: xor $rd,$rs,$rt */
811 SEM_FN_NAME (iq2000bf
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
813 #define FLD(f) abuf->fields.sfmt_mrgb.f
814 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
815 int UNUSED written
= 0;
816 IADDR UNUSED pc
= abuf
->addr
;
817 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
820 SI opval
= XORSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)));
821 SET_H_GR (FLD (f_rd
), opval
);
822 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
829 /* xori: xori $rt,$rs,$lo16 */
832 SEM_FN_NAME (iq2000bf
,xori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
834 #define FLD(f) abuf->fields.sfmt_addi.f
835 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
836 int UNUSED written
= 0;
837 IADDR UNUSED pc
= abuf
->addr
;
838 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
841 SI opval
= XORSI (GET_H_GR (FLD (f_rs
)), ZEXTSISI (FLD (f_imm
)));
842 SET_H_GR (FLD (f_rt
), opval
);
843 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
850 /* bbi: bbi $rs($bitnum),$offset */
853 SEM_FN_NAME (iq2000bf
,bbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
855 #define FLD(f) abuf->fields.sfmt_bbi.f
856 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
857 int UNUSED written
= 0;
858 IADDR UNUSED pc
= abuf
->addr
;
860 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
862 if (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, FLD (f_rt
)))) {
865 USI opval
= FLD (i_offset
);
866 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
868 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
873 abuf
->written
= written
;
874 SEM_BRANCH_FINI (vpc
);
879 /* bbin: bbin $rs($bitnum),$offset */
882 SEM_FN_NAME (iq2000bf
,bbin
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
884 #define FLD(f) abuf->fields.sfmt_bbi.f
885 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
886 int UNUSED written
= 0;
887 IADDR UNUSED pc
= abuf
->addr
;
889 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
891 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, FLD (f_rt
))))) {
894 USI opval
= FLD (i_offset
);
895 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
897 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
902 abuf
->written
= written
;
903 SEM_BRANCH_FINI (vpc
);
908 /* bbv: bbv $rs,$rt,$offset */
911 SEM_FN_NAME (iq2000bf
,bbv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
913 #define FLD(f) abuf->fields.sfmt_bbi.f
914 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
915 int UNUSED written
= 0;
916 IADDR UNUSED pc
= abuf
->addr
;
918 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
920 if (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt
)), 31)))) {
923 USI opval
= FLD (i_offset
);
924 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
926 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
931 abuf
->written
= written
;
932 SEM_BRANCH_FINI (vpc
);
937 /* bbvn: bbvn $rs,$rt,$offset */
940 SEM_FN_NAME (iq2000bf
,bbvn
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
942 #define FLD(f) abuf->fields.sfmt_bbi.f
943 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
944 int UNUSED written
= 0;
945 IADDR UNUSED pc
= abuf
->addr
;
947 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
949 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs
)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt
)), 31))))) {
952 USI opval
= FLD (i_offset
);
953 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
955 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
960 abuf
->written
= written
;
961 SEM_BRANCH_FINI (vpc
);
966 /* beq: beq $rs,$rt,$offset */
969 SEM_FN_NAME (iq2000bf
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
971 #define FLD(f) abuf->fields.sfmt_bbi.f
972 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
973 int UNUSED written
= 0;
974 IADDR UNUSED pc
= abuf
->addr
;
976 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
978 if (EQSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
981 USI opval
= FLD (i_offset
);
982 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
984 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
989 abuf
->written
= written
;
990 SEM_BRANCH_FINI (vpc
);
995 /* beql: beql $rs,$rt,$offset */
998 SEM_FN_NAME (iq2000bf
,beql
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1000 #define FLD(f) abuf->fields.sfmt_bbi.f
1001 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1002 int UNUSED written
= 0;
1003 IADDR UNUSED pc
= abuf
->addr
;
1005 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1007 if (EQSI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1010 USI opval
= FLD (i_offset
);
1011 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1012 written
|= (1 << 3);
1013 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1018 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1021 abuf
->written
= written
;
1022 SEM_BRANCH_FINI (vpc
);
1027 /* bgez: bgez $rs,$offset */
1030 SEM_FN_NAME (iq2000bf
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1032 #define FLD(f) abuf->fields.sfmt_bbi.f
1033 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1034 int UNUSED written
= 0;
1035 IADDR UNUSED pc
= abuf
->addr
;
1037 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1039 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1042 USI opval
= FLD (i_offset
);
1043 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1044 written
|= (1 << 2);
1045 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1050 abuf
->written
= written
;
1051 SEM_BRANCH_FINI (vpc
);
1056 /* bgezal: bgezal $rs,$offset */
1059 SEM_FN_NAME (iq2000bf
,bgezal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1061 #define FLD(f) abuf->fields.sfmt_bbi.f
1062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1063 int UNUSED written
= 0;
1064 IADDR UNUSED pc
= abuf
->addr
;
1066 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1068 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1071 SI opval
= ADDSI (pc
, 8);
1072 SET_H_GR (((UINT
) 31), opval
);
1073 written
|= (1 << 3);
1074 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1078 USI opval
= FLD (i_offset
);
1079 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1080 written
|= (1 << 4);
1081 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1087 abuf
->written
= written
;
1088 SEM_BRANCH_FINI (vpc
);
1093 /* bgezall: bgezall $rs,$offset */
1096 SEM_FN_NAME (iq2000bf
,bgezall
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1098 #define FLD(f) abuf->fields.sfmt_bbi.f
1099 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1100 int UNUSED written
= 0;
1101 IADDR UNUSED pc
= abuf
->addr
;
1103 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1105 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1108 SI opval
= ADDSI (pc
, 8);
1109 SET_H_GR (((UINT
) 31), opval
);
1110 written
|= (1 << 3);
1111 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1115 USI opval
= FLD (i_offset
);
1116 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1117 written
|= (1 << 4);
1118 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1124 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1127 abuf
->written
= written
;
1128 SEM_BRANCH_FINI (vpc
);
1133 /* bgezl: bgezl $rs,$offset */
1136 SEM_FN_NAME (iq2000bf
,bgezl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1138 #define FLD(f) abuf->fields.sfmt_bbi.f
1139 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1140 int UNUSED written
= 0;
1141 IADDR UNUSED pc
= abuf
->addr
;
1143 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1145 if (GESI (GET_H_GR (FLD (f_rs
)), 0)) {
1148 USI opval
= FLD (i_offset
);
1149 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1150 written
|= (1 << 2);
1151 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1156 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1159 abuf
->written
= written
;
1160 SEM_BRANCH_FINI (vpc
);
1165 /* bltz: bltz $rs,$offset */
1168 SEM_FN_NAME (iq2000bf
,bltz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1170 #define FLD(f) abuf->fields.sfmt_bbi.f
1171 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1172 int UNUSED written
= 0;
1173 IADDR UNUSED pc
= abuf
->addr
;
1175 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1177 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1180 USI opval
= FLD (i_offset
);
1181 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1182 written
|= (1 << 2);
1183 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1188 abuf
->written
= written
;
1189 SEM_BRANCH_FINI (vpc
);
1194 /* bltzl: bltzl $rs,$offset */
1197 SEM_FN_NAME (iq2000bf
,bltzl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1199 #define FLD(f) abuf->fields.sfmt_bbi.f
1200 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1201 int UNUSED written
= 0;
1202 IADDR UNUSED pc
= abuf
->addr
;
1204 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1206 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1209 USI opval
= FLD (i_offset
);
1210 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1211 written
|= (1 << 2);
1212 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1217 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1220 abuf
->written
= written
;
1221 SEM_BRANCH_FINI (vpc
);
1226 /* bltzal: bltzal $rs,$offset */
1229 SEM_FN_NAME (iq2000bf
,bltzal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1231 #define FLD(f) abuf->fields.sfmt_bbi.f
1232 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1233 int UNUSED written
= 0;
1234 IADDR UNUSED pc
= abuf
->addr
;
1236 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1238 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1241 SI opval
= ADDSI (pc
, 8);
1242 SET_H_GR (((UINT
) 31), opval
);
1243 written
|= (1 << 3);
1244 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1248 USI opval
= FLD (i_offset
);
1249 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1250 written
|= (1 << 4);
1251 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1257 abuf
->written
= written
;
1258 SEM_BRANCH_FINI (vpc
);
1263 /* bltzall: bltzall $rs,$offset */
1266 SEM_FN_NAME (iq2000bf
,bltzall
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1268 #define FLD(f) abuf->fields.sfmt_bbi.f
1269 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1270 int UNUSED written
= 0;
1271 IADDR UNUSED pc
= abuf
->addr
;
1273 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1275 if (LTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1278 SI opval
= ADDSI (pc
, 8);
1279 SET_H_GR (((UINT
) 31), opval
);
1280 written
|= (1 << 3);
1281 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1285 USI opval
= FLD (i_offset
);
1286 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1287 written
|= (1 << 4);
1288 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1294 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1297 abuf
->written
= written
;
1298 SEM_BRANCH_FINI (vpc
);
1303 /* bmb0: bmb0 $rs,$rt,$offset */
1306 SEM_FN_NAME (iq2000bf
,bmb0
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1308 #define FLD(f) abuf->fields.sfmt_bbi.f
1309 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1310 int UNUSED written
= 0;
1311 IADDR UNUSED pc
= abuf
->addr
;
1313 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1315 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 255), ANDSI (GET_H_GR (FLD (f_rt
)), 255))) {
1318 USI opval
= FLD (i_offset
);
1319 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1320 written
|= (1 << 3);
1321 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1326 abuf
->written
= written
;
1327 SEM_BRANCH_FINI (vpc
);
1332 /* bmb1: bmb1 $rs,$rt,$offset */
1335 SEM_FN_NAME (iq2000bf
,bmb1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1337 #define FLD(f) abuf->fields.sfmt_bbi.f
1338 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1339 int UNUSED written
= 0;
1340 IADDR UNUSED pc
= abuf
->addr
;
1342 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1344 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 65280), ANDSI (GET_H_GR (FLD (f_rt
)), 65280))) {
1347 USI opval
= FLD (i_offset
);
1348 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1349 written
|= (1 << 3);
1350 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1355 abuf
->written
= written
;
1356 SEM_BRANCH_FINI (vpc
);
1361 /* bmb2: bmb2 $rs,$rt,$offset */
1364 SEM_FN_NAME (iq2000bf
,bmb2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1366 #define FLD(f) abuf->fields.sfmt_bbi.f
1367 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1368 int UNUSED written
= 0;
1369 IADDR UNUSED pc
= abuf
->addr
;
1371 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1373 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 16711680), ANDSI (GET_H_GR (FLD (f_rt
)), 16711680))) {
1376 USI opval
= FLD (i_offset
);
1377 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1378 written
|= (1 << 3);
1379 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1384 abuf
->written
= written
;
1385 SEM_BRANCH_FINI (vpc
);
1390 /* bmb3: bmb3 $rs,$rt,$offset */
1393 SEM_FN_NAME (iq2000bf
,bmb3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1395 #define FLD(f) abuf->fields.sfmt_bbi.f
1396 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1397 int UNUSED written
= 0;
1398 IADDR UNUSED pc
= abuf
->addr
;
1400 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1402 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt
)), 0xff000000))) {
1405 USI opval
= FLD (i_offset
);
1406 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1407 written
|= (1 << 3);
1408 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1413 abuf
->written
= written
;
1414 SEM_BRANCH_FINI (vpc
);
1419 /* bne: bne $rs,$rt,$offset */
1422 SEM_FN_NAME (iq2000bf
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1424 #define FLD(f) abuf->fields.sfmt_bbi.f
1425 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1426 int UNUSED written
= 0;
1427 IADDR UNUSED pc
= abuf
->addr
;
1429 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1431 if (NESI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1434 USI opval
= FLD (i_offset
);
1435 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1436 written
|= (1 << 3);
1437 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1442 abuf
->written
= written
;
1443 SEM_BRANCH_FINI (vpc
);
1448 /* bnel: bnel $rs,$rt,$offset */
1451 SEM_FN_NAME (iq2000bf
,bnel
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1453 #define FLD(f) abuf->fields.sfmt_bbi.f
1454 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1455 int UNUSED written
= 0;
1456 IADDR UNUSED pc
= abuf
->addr
;
1458 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1460 if (NESI (GET_H_GR (FLD (f_rs
)), GET_H_GR (FLD (f_rt
)))) {
1463 USI opval
= FLD (i_offset
);
1464 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1465 written
|= (1 << 3);
1466 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1471 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1474 abuf
->written
= written
;
1475 SEM_BRANCH_FINI (vpc
);
1480 /* jalr: jalr $rd,$rs */
1483 SEM_FN_NAME (iq2000bf
,jalr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1485 #define FLD(f) abuf->fields.sfmt_mrgb.f
1486 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1487 int UNUSED written
= 0;
1488 IADDR UNUSED pc
= abuf
->addr
;
1490 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1495 SI opval
= ADDSI (pc
, 8);
1496 SET_H_GR (FLD (f_rd
), opval
);
1497 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1500 USI opval
= GET_H_GR (FLD (f_rs
));
1501 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
1502 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1507 SEM_BRANCH_FINI (vpc
);
1515 SEM_FN_NAME (iq2000bf
,jr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1517 #define FLD(f) abuf->fields.sfmt_bbi.f
1518 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1519 int UNUSED written
= 0;
1520 IADDR UNUSED pc
= abuf
->addr
;
1522 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1526 USI opval
= GET_H_GR (FLD (f_rs
));
1527 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
1528 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1532 SEM_BRANCH_FINI (vpc
);
1537 /* lb: lb $rt,$lo16($base) */
1540 SEM_FN_NAME (iq2000bf
,lb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1542 #define FLD(f) abuf->fields.sfmt_addi.f
1543 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1544 int UNUSED written
= 0;
1545 IADDR UNUSED pc
= abuf
->addr
;
1546 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1549 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1550 SET_H_GR (FLD (f_rt
), opval
);
1551 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1558 /* lbu: lbu $rt,$lo16($base) */
1561 SEM_FN_NAME (iq2000bf
,lbu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1563 #define FLD(f) abuf->fields.sfmt_addi.f
1564 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1565 int UNUSED written
= 0;
1566 IADDR UNUSED pc
= abuf
->addr
;
1567 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1570 SI opval
= ZEXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1571 SET_H_GR (FLD (f_rt
), opval
);
1572 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1579 /* lh: lh $rt,$lo16($base) */
1582 SEM_FN_NAME (iq2000bf
,lh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1584 #define FLD(f) abuf->fields.sfmt_addi.f
1585 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1586 int UNUSED written
= 0;
1587 IADDR UNUSED pc
= abuf
->addr
;
1588 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1591 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1592 SET_H_GR (FLD (f_rt
), opval
);
1593 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1600 /* lhu: lhu $rt,$lo16($base) */
1603 SEM_FN_NAME (iq2000bf
,lhu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1605 #define FLD(f) abuf->fields.sfmt_addi.f
1606 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1607 int UNUSED written
= 0;
1608 IADDR UNUSED pc
= abuf
->addr
;
1609 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1612 SI opval
= ZEXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
))))));
1613 SET_H_GR (FLD (f_rt
), opval
);
1614 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1621 /* lui: lui $rt,$hi16 */
1624 SEM_FN_NAME (iq2000bf
,lui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1626 #define FLD(f) abuf->fields.sfmt_addi.f
1627 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1628 int UNUSED written
= 0;
1629 IADDR UNUSED pc
= abuf
->addr
;
1630 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1633 SI opval
= SLLSI (FLD (f_imm
), 16);
1634 SET_H_GR (FLD (f_rt
), opval
);
1635 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1642 /* lw: lw $rt,$lo16($base) */
1645 SEM_FN_NAME (iq2000bf
,lw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1647 #define FLD(f) abuf->fields.sfmt_addi.f
1648 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1649 int UNUSED written
= 0;
1650 IADDR UNUSED pc
= abuf
->addr
;
1651 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1654 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))));
1655 SET_H_GR (FLD (f_rt
), opval
);
1656 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1663 /* sb: sb $rt,$lo16($base) */
1666 SEM_FN_NAME (iq2000bf
,sb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1668 #define FLD(f) abuf->fields.sfmt_addi.f
1669 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1670 int UNUSED written
= 0;
1671 IADDR UNUSED pc
= abuf
->addr
;
1672 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1675 QI opval
= ANDQI (GET_H_GR (FLD (f_rt
)), 255);
1676 SETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))), opval
);
1677 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1684 /* sh: sh $rt,$lo16($base) */
1687 SEM_FN_NAME (iq2000bf
,sh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1689 #define FLD(f) abuf->fields.sfmt_addi.f
1690 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1691 int UNUSED written
= 0;
1692 IADDR UNUSED pc
= abuf
->addr
;
1693 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1696 HI opval
= ANDHI (GET_H_GR (FLD (f_rt
)), 65535);
1697 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))), opval
);
1698 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1705 /* sw: sw $rt,$lo16($base) */
1708 SEM_FN_NAME (iq2000bf
,sw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1710 #define FLD(f) abuf->fields.sfmt_addi.f
1711 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1712 int UNUSED written
= 0;
1713 IADDR UNUSED pc
= abuf
->addr
;
1714 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1717 SI opval
= GET_H_GR (FLD (f_rt
));
1718 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GR (FLD (f_rs
)), EXTHISI (TRUNCSIHI (FLD (f_imm
)))), opval
);
1719 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1729 SEM_FN_NAME (iq2000bf
,break) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1731 #define FLD(f) abuf->fields.sfmt_empty.f
1732 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1733 int UNUSED written
= 0;
1734 IADDR UNUSED pc
= abuf
->addr
;
1735 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1737 do_break (current_cpu
, pc
);
1743 /* syscall: syscall */
1746 SEM_FN_NAME (iq2000bf
,syscall
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1748 #define FLD(f) abuf->fields.sfmt_empty.f
1749 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1750 int UNUSED written
= 0;
1751 IADDR UNUSED pc
= abuf
->addr
;
1752 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1754 do_syscall (current_cpu
);
1760 /* andoui: andoui $rt,$rs,$hi16 */
1763 SEM_FN_NAME (iq2000bf
,andoui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1765 #define FLD(f) abuf->fields.sfmt_addi.f
1766 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1767 int UNUSED written
= 0;
1768 IADDR UNUSED pc
= abuf
->addr
;
1769 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1772 SI opval
= ANDSI (GET_H_GR (FLD (f_rs
)), ORSI (SLLSI (FLD (f_imm
), 16), 65535));
1773 SET_H_GR (FLD (f_rt
), opval
);
1774 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1781 /* orui: orui $rt,$rs,$hi16 */
1784 SEM_FN_NAME (iq2000bf
,orui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1786 #define FLD(f) abuf->fields.sfmt_addi.f
1787 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1788 int UNUSED written
= 0;
1789 IADDR UNUSED pc
= abuf
->addr
;
1790 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1793 SI opval
= ORSI (GET_H_GR (FLD (f_rs
)), SLLSI (FLD (f_imm
), 16));
1794 SET_H_GR (FLD (f_rt
), opval
);
1795 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1802 /* bgtz: bgtz $rs,$offset */
1805 SEM_FN_NAME (iq2000bf
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1807 #define FLD(f) abuf->fields.sfmt_bbi.f
1808 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1809 int UNUSED written
= 0;
1810 IADDR UNUSED pc
= abuf
->addr
;
1812 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1814 if (GTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1817 USI opval
= FLD (i_offset
);
1818 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1819 written
|= (1 << 2);
1820 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1825 abuf
->written
= written
;
1826 SEM_BRANCH_FINI (vpc
);
1831 /* bgtzl: bgtzl $rs,$offset */
1834 SEM_FN_NAME (iq2000bf
,bgtzl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1836 #define FLD(f) abuf->fields.sfmt_bbi.f
1837 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1838 int UNUSED written
= 0;
1839 IADDR UNUSED pc
= abuf
->addr
;
1841 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1843 if (GTSI (GET_H_GR (FLD (f_rs
)), 0)) {
1846 USI opval
= FLD (i_offset
);
1847 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1848 written
|= (1 << 2);
1849 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1854 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1857 abuf
->written
= written
;
1858 SEM_BRANCH_FINI (vpc
);
1863 /* blez: blez $rs,$offset */
1866 SEM_FN_NAME (iq2000bf
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1868 #define FLD(f) abuf->fields.sfmt_bbi.f
1869 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1870 int UNUSED written
= 0;
1871 IADDR UNUSED pc
= abuf
->addr
;
1873 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1875 if (LESI (GET_H_GR (FLD (f_rs
)), 0)) {
1878 USI opval
= FLD (i_offset
);
1879 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1880 written
|= (1 << 2);
1881 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1886 abuf
->written
= written
;
1887 SEM_BRANCH_FINI (vpc
);
1892 /* blezl: blezl $rs,$offset */
1895 SEM_FN_NAME (iq2000bf
,blezl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1897 #define FLD(f) abuf->fields.sfmt_bbi.f
1898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1899 int UNUSED written
= 0;
1900 IADDR UNUSED pc
= abuf
->addr
;
1902 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1904 if (LESI (GET_H_GR (FLD (f_rs
)), 0)) {
1907 USI opval
= FLD (i_offset
);
1908 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
1909 written
|= (1 << 2);
1910 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
1915 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
1918 abuf
->written
= written
;
1919 SEM_BRANCH_FINI (vpc
);
1924 /* mrgb: mrgb $rd,$rs,$rt,$mask */
1927 SEM_FN_NAME (iq2000bf
,mrgb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1929 #define FLD(f) abuf->fields.sfmt_mrgb.f
1930 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1931 int UNUSED written
= 0;
1932 IADDR UNUSED pc
= abuf
->addr
;
1933 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1937 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 0)))) {
1938 tmp_temp
= ANDSI (GET_H_GR (FLD (f_rs
)), 255);
1940 tmp_temp
= ANDSI (GET_H_GR (FLD (f_rt
)), 255);
1942 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 1)))) {
1943 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rs
)), 65280));
1945 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rt
)), 65280));
1947 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 2)))) {
1948 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rs
)), 16711680));
1950 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rt
)), 16711680));
1952 if (NOTSI (ANDSI (FLD (f_mask
), SLLSI (1, 3)))) {
1953 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rs
)), 0xff000000));
1955 tmp_temp
= ORSI (tmp_temp
, ANDSI (GET_H_GR (FLD (f_rt
)), 0xff000000));
1958 SI opval
= tmp_temp
;
1959 SET_H_GR (FLD (f_rd
), opval
);
1960 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
1968 /* bctxt: bctxt $rs,$offset */
1971 SEM_FN_NAME (iq2000bf
,bctxt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1973 #define FLD(f) abuf->fields.sfmt_empty.f
1974 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1975 int UNUSED written
= 0;
1976 IADDR UNUSED pc
= abuf
->addr
;
1978 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1982 SEM_BRANCH_FINI (vpc
);
1987 /* bc0f: bc0f $offset */
1990 SEM_FN_NAME (iq2000bf
,bc0f
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1992 #define FLD(f) abuf->fields.sfmt_empty.f
1993 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1994 int UNUSED written
= 0;
1995 IADDR UNUSED pc
= abuf
->addr
;
1997 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2001 SEM_BRANCH_FINI (vpc
);
2006 /* bc0fl: bc0fl $offset */
2009 SEM_FN_NAME (iq2000bf
,bc0fl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2011 #define FLD(f) abuf->fields.sfmt_empty.f
2012 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2013 int UNUSED written
= 0;
2014 IADDR UNUSED pc
= abuf
->addr
;
2016 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2020 SEM_BRANCH_FINI (vpc
);
2025 /* bc3f: bc3f $offset */
2028 SEM_FN_NAME (iq2000bf
,bc3f
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2030 #define FLD(f) abuf->fields.sfmt_empty.f
2031 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2032 int UNUSED written
= 0;
2033 IADDR UNUSED pc
= abuf
->addr
;
2035 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2039 SEM_BRANCH_FINI (vpc
);
2044 /* bc3fl: bc3fl $offset */
2047 SEM_FN_NAME (iq2000bf
,bc3fl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2049 #define FLD(f) abuf->fields.sfmt_empty.f
2050 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2051 int UNUSED written
= 0;
2052 IADDR UNUSED pc
= abuf
->addr
;
2054 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2058 SEM_BRANCH_FINI (vpc
);
2063 /* bc0t: bc0t $offset */
2066 SEM_FN_NAME (iq2000bf
,bc0t
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2068 #define FLD(f) abuf->fields.sfmt_empty.f
2069 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2070 int UNUSED written
= 0;
2071 IADDR UNUSED pc
= abuf
->addr
;
2073 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2077 SEM_BRANCH_FINI (vpc
);
2082 /* bc0tl: bc0tl $offset */
2085 SEM_FN_NAME (iq2000bf
,bc0tl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2087 #define FLD(f) abuf->fields.sfmt_empty.f
2088 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2089 int UNUSED written
= 0;
2090 IADDR UNUSED pc
= abuf
->addr
;
2092 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2096 SEM_BRANCH_FINI (vpc
);
2101 /* bc3t: bc3t $offset */
2104 SEM_FN_NAME (iq2000bf
,bc3t
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2106 #define FLD(f) abuf->fields.sfmt_empty.f
2107 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2108 int UNUSED written
= 0;
2109 IADDR UNUSED pc
= abuf
->addr
;
2111 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2115 SEM_BRANCH_FINI (vpc
);
2120 /* bc3tl: bc3tl $offset */
2123 SEM_FN_NAME (iq2000bf
,bc3tl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2125 #define FLD(f) abuf->fields.sfmt_empty.f
2126 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2127 int UNUSED written
= 0;
2128 IADDR UNUSED pc
= abuf
->addr
;
2130 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2134 SEM_BRANCH_FINI (vpc
);
2139 /* cfc0: cfc0 $rt,$rd */
2142 SEM_FN_NAME (iq2000bf
,cfc0
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2144 #define FLD(f) abuf->fields.sfmt_empty.f
2145 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2146 int UNUSED written
= 0;
2147 IADDR UNUSED pc
= abuf
->addr
;
2148 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2156 /* cfc1: cfc1 $rt,$rd */
2159 SEM_FN_NAME (iq2000bf
,cfc1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2161 #define FLD(f) abuf->fields.sfmt_empty.f
2162 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2163 int UNUSED written
= 0;
2164 IADDR UNUSED pc
= abuf
->addr
;
2165 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2173 /* cfc2: cfc2 $rt,$rd */
2176 SEM_FN_NAME (iq2000bf
,cfc2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2178 #define FLD(f) abuf->fields.sfmt_empty.f
2179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2180 int UNUSED written
= 0;
2181 IADDR UNUSED pc
= abuf
->addr
;
2182 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2190 /* cfc3: cfc3 $rt,$rd */
2193 SEM_FN_NAME (iq2000bf
,cfc3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2195 #define FLD(f) abuf->fields.sfmt_empty.f
2196 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2197 int UNUSED written
= 0;
2198 IADDR UNUSED pc
= abuf
->addr
;
2199 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2207 /* chkhdr: chkhdr $rd,$rt */
2210 SEM_FN_NAME (iq2000bf
,chkhdr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2212 #define FLD(f) abuf->fields.sfmt_empty.f
2213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2214 int UNUSED written
= 0;
2215 IADDR UNUSED pc
= abuf
->addr
;
2216 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2224 /* ctc0: ctc0 $rt,$rd */
2227 SEM_FN_NAME (iq2000bf
,ctc0
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2229 #define FLD(f) abuf->fields.sfmt_empty.f
2230 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2231 int UNUSED written
= 0;
2232 IADDR UNUSED pc
= abuf
->addr
;
2233 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2241 /* ctc1: ctc1 $rt,$rd */
2244 SEM_FN_NAME (iq2000bf
,ctc1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2246 #define FLD(f) abuf->fields.sfmt_empty.f
2247 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2248 int UNUSED written
= 0;
2249 IADDR UNUSED pc
= abuf
->addr
;
2250 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2258 /* ctc2: ctc2 $rt,$rd */
2261 SEM_FN_NAME (iq2000bf
,ctc2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2263 #define FLD(f) abuf->fields.sfmt_empty.f
2264 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2265 int UNUSED written
= 0;
2266 IADDR UNUSED pc
= abuf
->addr
;
2267 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2275 /* ctc3: ctc3 $rt,$rd */
2278 SEM_FN_NAME (iq2000bf
,ctc3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2280 #define FLD(f) abuf->fields.sfmt_empty.f
2281 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2282 int UNUSED written
= 0;
2283 IADDR UNUSED pc
= abuf
->addr
;
2284 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2295 SEM_FN_NAME (iq2000bf
,jcr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2297 #define FLD(f) abuf->fields.sfmt_empty.f
2298 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2299 int UNUSED written
= 0;
2300 IADDR UNUSED pc
= abuf
->addr
;
2302 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2306 SEM_BRANCH_FINI (vpc
);
2311 /* luc32: luc32 $rt,$rd */
2314 SEM_FN_NAME (iq2000bf
,luc32
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2316 #define FLD(f) abuf->fields.sfmt_empty.f
2317 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2318 int UNUSED written
= 0;
2319 IADDR UNUSED pc
= abuf
->addr
;
2320 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2328 /* luc32l: luc32l $rt,$rd */
2331 SEM_FN_NAME (iq2000bf
,luc32l
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2333 #define FLD(f) abuf->fields.sfmt_empty.f
2334 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2335 int UNUSED written
= 0;
2336 IADDR UNUSED pc
= abuf
->addr
;
2337 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2345 /* luc64: luc64 $rt,$rd */
2348 SEM_FN_NAME (iq2000bf
,luc64
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2350 #define FLD(f) abuf->fields.sfmt_empty.f
2351 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2352 int UNUSED written
= 0;
2353 IADDR UNUSED pc
= abuf
->addr
;
2354 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2362 /* luc64l: luc64l $rt,$rd */
2365 SEM_FN_NAME (iq2000bf
,luc64l
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2367 #define FLD(f) abuf->fields.sfmt_empty.f
2368 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2369 int UNUSED written
= 0;
2370 IADDR UNUSED pc
= abuf
->addr
;
2371 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2379 /* luk: luk $rt,$rd */
2382 SEM_FN_NAME (iq2000bf
,luk
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2384 #define FLD(f) abuf->fields.sfmt_empty.f
2385 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2386 int UNUSED written
= 0;
2387 IADDR UNUSED pc
= abuf
->addr
;
2388 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2396 /* lulck: lulck $rt */
2399 SEM_FN_NAME (iq2000bf
,lulck
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2401 #define FLD(f) abuf->fields.sfmt_empty.f
2402 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2403 int UNUSED written
= 0;
2404 IADDR UNUSED pc
= abuf
->addr
;
2405 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2413 /* lum32: lum32 $rt,$rd */
2416 SEM_FN_NAME (iq2000bf
,lum32
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2418 #define FLD(f) abuf->fields.sfmt_empty.f
2419 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2420 int UNUSED written
= 0;
2421 IADDR UNUSED pc
= abuf
->addr
;
2422 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2430 /* lum32l: lum32l $rt,$rd */
2433 SEM_FN_NAME (iq2000bf
,lum32l
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2435 #define FLD(f) abuf->fields.sfmt_empty.f
2436 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2437 int UNUSED written
= 0;
2438 IADDR UNUSED pc
= abuf
->addr
;
2439 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2447 /* lum64: lum64 $rt,$rd */
2450 SEM_FN_NAME (iq2000bf
,lum64
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2452 #define FLD(f) abuf->fields.sfmt_empty.f
2453 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2454 int UNUSED written
= 0;
2455 IADDR UNUSED pc
= abuf
->addr
;
2456 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2464 /* lum64l: lum64l $rt,$rd */
2467 SEM_FN_NAME (iq2000bf
,lum64l
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2469 #define FLD(f) abuf->fields.sfmt_empty.f
2470 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2471 int UNUSED written
= 0;
2472 IADDR UNUSED pc
= abuf
->addr
;
2473 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2481 /* lur: lur $rt,$rd */
2484 SEM_FN_NAME (iq2000bf
,lur
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2486 #define FLD(f) abuf->fields.sfmt_empty.f
2487 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2488 int UNUSED written
= 0;
2489 IADDR UNUSED pc
= abuf
->addr
;
2490 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2498 /* lurl: lurl $rt,$rd */
2501 SEM_FN_NAME (iq2000bf
,lurl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2503 #define FLD(f) abuf->fields.sfmt_empty.f
2504 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2505 int UNUSED written
= 0;
2506 IADDR UNUSED pc
= abuf
->addr
;
2507 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2515 /* luulck: luulck $rt */
2518 SEM_FN_NAME (iq2000bf
,luulck
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2520 #define FLD(f) abuf->fields.sfmt_empty.f
2521 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2522 int UNUSED written
= 0;
2523 IADDR UNUSED pc
= abuf
->addr
;
2524 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2532 /* mfc0: mfc0 $rt,$rd */
2535 SEM_FN_NAME (iq2000bf
,mfc0
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2537 #define FLD(f) abuf->fields.sfmt_empty.f
2538 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2539 int UNUSED written
= 0;
2540 IADDR UNUSED pc
= abuf
->addr
;
2541 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2549 /* mfc1: mfc1 $rt,$rd */
2552 SEM_FN_NAME (iq2000bf
,mfc1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2554 #define FLD(f) abuf->fields.sfmt_empty.f
2555 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2556 int UNUSED written
= 0;
2557 IADDR UNUSED pc
= abuf
->addr
;
2558 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2566 /* mfc2: mfc2 $rt,$rd */
2569 SEM_FN_NAME (iq2000bf
,mfc2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2571 #define FLD(f) abuf->fields.sfmt_empty.f
2572 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2573 int UNUSED written
= 0;
2574 IADDR UNUSED pc
= abuf
->addr
;
2575 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2583 /* mfc3: mfc3 $rt,$rd */
2586 SEM_FN_NAME (iq2000bf
,mfc3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2588 #define FLD(f) abuf->fields.sfmt_empty.f
2589 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2590 int UNUSED written
= 0;
2591 IADDR UNUSED pc
= abuf
->addr
;
2592 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2600 /* mtc0: mtc0 $rt,$rd */
2603 SEM_FN_NAME (iq2000bf
,mtc0
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2605 #define FLD(f) abuf->fields.sfmt_empty.f
2606 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2607 int UNUSED written
= 0;
2608 IADDR UNUSED pc
= abuf
->addr
;
2609 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2617 /* mtc1: mtc1 $rt,$rd */
2620 SEM_FN_NAME (iq2000bf
,mtc1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2622 #define FLD(f) abuf->fields.sfmt_empty.f
2623 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2624 int UNUSED written
= 0;
2625 IADDR UNUSED pc
= abuf
->addr
;
2626 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2634 /* mtc2: mtc2 $rt,$rd */
2637 SEM_FN_NAME (iq2000bf
,mtc2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2639 #define FLD(f) abuf->fields.sfmt_empty.f
2640 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2641 int UNUSED written
= 0;
2642 IADDR UNUSED pc
= abuf
->addr
;
2643 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2651 /* mtc3: mtc3 $rt,$rd */
2654 SEM_FN_NAME (iq2000bf
,mtc3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2656 #define FLD(f) abuf->fields.sfmt_empty.f
2657 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2658 int UNUSED written
= 0;
2659 IADDR UNUSED pc
= abuf
->addr
;
2660 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2668 /* pkrl: pkrl $rd,$rt */
2671 SEM_FN_NAME (iq2000bf
,pkrl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2673 #define FLD(f) abuf->fields.sfmt_empty.f
2674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2675 int UNUSED written
= 0;
2676 IADDR UNUSED pc
= abuf
->addr
;
2677 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2685 /* pkrlr1: pkrlr1 $rt,$_index,$count */
2688 SEM_FN_NAME (iq2000bf
,pkrlr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2690 #define FLD(f) abuf->fields.sfmt_empty.f
2691 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2692 int UNUSED written
= 0;
2693 IADDR UNUSED pc
= abuf
->addr
;
2694 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2702 /* pkrlr30: pkrlr30 $rt,$_index,$count */
2705 SEM_FN_NAME (iq2000bf
,pkrlr30
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2707 #define FLD(f) abuf->fields.sfmt_empty.f
2708 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2709 int UNUSED written
= 0;
2710 IADDR UNUSED pc
= abuf
->addr
;
2711 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2719 /* rb: rb $rd,$rt */
2722 SEM_FN_NAME (iq2000bf
,rb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2724 #define FLD(f) abuf->fields.sfmt_empty.f
2725 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2726 int UNUSED written
= 0;
2727 IADDR UNUSED pc
= abuf
->addr
;
2728 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2736 /* rbr1: rbr1 $rt,$_index,$count */
2739 SEM_FN_NAME (iq2000bf
,rbr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2741 #define FLD(f) abuf->fields.sfmt_empty.f
2742 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2743 int UNUSED written
= 0;
2744 IADDR UNUSED pc
= abuf
->addr
;
2745 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2753 /* rbr30: rbr30 $rt,$_index,$count */
2756 SEM_FN_NAME (iq2000bf
,rbr30
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2758 #define FLD(f) abuf->fields.sfmt_empty.f
2759 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2760 int UNUSED written
= 0;
2761 IADDR UNUSED pc
= abuf
->addr
;
2762 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2773 SEM_FN_NAME (iq2000bf
,rfe
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2775 #define FLD(f) abuf->fields.sfmt_empty.f
2776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2777 int UNUSED written
= 0;
2778 IADDR UNUSED pc
= abuf
->addr
;
2779 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2787 /* rx: rx $rd,$rt */
2790 SEM_FN_NAME (iq2000bf
,rx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2792 #define FLD(f) abuf->fields.sfmt_empty.f
2793 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2794 int UNUSED written
= 0;
2795 IADDR UNUSED pc
= abuf
->addr
;
2796 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2804 /* rxr1: rxr1 $rt,$_index,$count */
2807 SEM_FN_NAME (iq2000bf
,rxr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2809 #define FLD(f) abuf->fields.sfmt_empty.f
2810 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2811 int UNUSED written
= 0;
2812 IADDR UNUSED pc
= abuf
->addr
;
2813 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2821 /* rxr30: rxr30 $rt,$_index,$count */
2824 SEM_FN_NAME (iq2000bf
,rxr30
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2826 #define FLD(f) abuf->fields.sfmt_empty.f
2827 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2828 int UNUSED written
= 0;
2829 IADDR UNUSED pc
= abuf
->addr
;
2830 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2841 SEM_FN_NAME (iq2000bf
,sleep
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2843 #define FLD(f) abuf->fields.sfmt_empty.f
2844 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2845 int UNUSED written
= 0;
2846 IADDR UNUSED pc
= abuf
->addr
;
2847 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2855 /* srrd: srrd $rt */
2858 SEM_FN_NAME (iq2000bf
,srrd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2860 #define FLD(f) abuf->fields.sfmt_empty.f
2861 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2862 int UNUSED written
= 0;
2863 IADDR UNUSED pc
= abuf
->addr
;
2864 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2872 /* srrdl: srrdl $rt */
2875 SEM_FN_NAME (iq2000bf
,srrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2877 #define FLD(f) abuf->fields.sfmt_empty.f
2878 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2879 int UNUSED written
= 0;
2880 IADDR UNUSED pc
= abuf
->addr
;
2881 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2889 /* srulck: srulck $rt */
2892 SEM_FN_NAME (iq2000bf
,srulck
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2894 #define FLD(f) abuf->fields.sfmt_empty.f
2895 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2896 int UNUSED written
= 0;
2897 IADDR UNUSED pc
= abuf
->addr
;
2898 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2906 /* srwr: srwr $rt,$rd */
2909 SEM_FN_NAME (iq2000bf
,srwr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2911 #define FLD(f) abuf->fields.sfmt_empty.f
2912 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2913 int UNUSED written
= 0;
2914 IADDR UNUSED pc
= abuf
->addr
;
2915 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2923 /* srwru: srwru $rt,$rd */
2926 SEM_FN_NAME (iq2000bf
,srwru
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2928 #define FLD(f) abuf->fields.sfmt_empty.f
2929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2930 int UNUSED written
= 0;
2931 IADDR UNUSED pc
= abuf
->addr
;
2932 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2940 /* trapqfl: trapqfl */
2943 SEM_FN_NAME (iq2000bf
,trapqfl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2945 #define FLD(f) abuf->fields.sfmt_empty.f
2946 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2947 int UNUSED written
= 0;
2948 IADDR UNUSED pc
= abuf
->addr
;
2949 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2957 /* trapqne: trapqne */
2960 SEM_FN_NAME (iq2000bf
,trapqne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2962 #define FLD(f) abuf->fields.sfmt_empty.f
2963 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2964 int UNUSED written
= 0;
2965 IADDR UNUSED pc
= abuf
->addr
;
2966 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2974 /* traprel: traprel $rt */
2977 SEM_FN_NAME (iq2000bf
,traprel
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2979 #define FLD(f) abuf->fields.sfmt_empty.f
2980 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2981 int UNUSED written
= 0;
2982 IADDR UNUSED pc
= abuf
->addr
;
2983 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2991 /* wb: wb $rd,$rt */
2994 SEM_FN_NAME (iq2000bf
,wb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2996 #define FLD(f) abuf->fields.sfmt_empty.f
2997 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2998 int UNUSED written
= 0;
2999 IADDR UNUSED pc
= abuf
->addr
;
3000 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3008 /* wbu: wbu $rd,$rt */
3011 SEM_FN_NAME (iq2000bf
,wbu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3013 #define FLD(f) abuf->fields.sfmt_empty.f
3014 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3015 int UNUSED written
= 0;
3016 IADDR UNUSED pc
= abuf
->addr
;
3017 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3025 /* wbr1: wbr1 $rt,$_index,$count */
3028 SEM_FN_NAME (iq2000bf
,wbr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3030 #define FLD(f) abuf->fields.sfmt_empty.f
3031 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3032 int UNUSED written
= 0;
3033 IADDR UNUSED pc
= abuf
->addr
;
3034 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3042 /* wbr1u: wbr1u $rt,$_index,$count */
3045 SEM_FN_NAME (iq2000bf
,wbr1u
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3047 #define FLD(f) abuf->fields.sfmt_empty.f
3048 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3049 int UNUSED written
= 0;
3050 IADDR UNUSED pc
= abuf
->addr
;
3051 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3059 /* wbr30: wbr30 $rt,$_index,$count */
3062 SEM_FN_NAME (iq2000bf
,wbr30
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3064 #define FLD(f) abuf->fields.sfmt_empty.f
3065 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3066 int UNUSED written
= 0;
3067 IADDR UNUSED pc
= abuf
->addr
;
3068 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3076 /* wbr30u: wbr30u $rt,$_index,$count */
3079 SEM_FN_NAME (iq2000bf
,wbr30u
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3081 #define FLD(f) abuf->fields.sfmt_empty.f
3082 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3083 int UNUSED written
= 0;
3084 IADDR UNUSED pc
= abuf
->addr
;
3085 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3093 /* wx: wx $rd,$rt */
3096 SEM_FN_NAME (iq2000bf
,wx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3098 #define FLD(f) abuf->fields.sfmt_empty.f
3099 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3100 int UNUSED written
= 0;
3101 IADDR UNUSED pc
= abuf
->addr
;
3102 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3110 /* wxu: wxu $rd,$rt */
3113 SEM_FN_NAME (iq2000bf
,wxu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3115 #define FLD(f) abuf->fields.sfmt_empty.f
3116 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3117 int UNUSED written
= 0;
3118 IADDR UNUSED pc
= abuf
->addr
;
3119 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3127 /* wxr1: wxr1 $rt,$_index,$count */
3130 SEM_FN_NAME (iq2000bf
,wxr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3132 #define FLD(f) abuf->fields.sfmt_empty.f
3133 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3134 int UNUSED written
= 0;
3135 IADDR UNUSED pc
= abuf
->addr
;
3136 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3144 /* wxr1u: wxr1u $rt,$_index,$count */
3147 SEM_FN_NAME (iq2000bf
,wxr1u
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3149 #define FLD(f) abuf->fields.sfmt_empty.f
3150 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3151 int UNUSED written
= 0;
3152 IADDR UNUSED pc
= abuf
->addr
;
3153 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3161 /* wxr30: wxr30 $rt,$_index,$count */
3164 SEM_FN_NAME (iq2000bf
,wxr30
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3166 #define FLD(f) abuf->fields.sfmt_empty.f
3167 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3168 int UNUSED written
= 0;
3169 IADDR UNUSED pc
= abuf
->addr
;
3170 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3178 /* wxr30u: wxr30u $rt,$_index,$count */
3181 SEM_FN_NAME (iq2000bf
,wxr30u
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3183 #define FLD(f) abuf->fields.sfmt_empty.f
3184 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3185 int UNUSED written
= 0;
3186 IADDR UNUSED pc
= abuf
->addr
;
3187 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3195 /* ldw: ldw $rt,$lo16($base) */
3198 SEM_FN_NAME (iq2000bf
,ldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3200 #define FLD(f) abuf->fields.sfmt_addi.f
3201 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3202 int UNUSED written
= 0;
3203 IADDR UNUSED pc
= abuf
->addr
;
3204 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3208 tmp_addr
= ANDSI (ADDSI (GET_H_GR (FLD (f_rs
)), FLD (f_imm
)), INVSI (3));
3210 SI opval
= GETMEMSI (current_cpu
, pc
, tmp_addr
);
3211 SET_H_GR (ADDSI (FLD (f_rt
), 1), opval
);
3212 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
3215 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (tmp_addr
, 4));
3216 SET_H_GR (FLD (f_rt
), opval
);
3217 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
3225 /* sdw: sdw $rt,$lo16($base) */
3228 SEM_FN_NAME (iq2000bf
,sdw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3230 #define FLD(f) abuf->fields.sfmt_addi.f
3231 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3232 int UNUSED written
= 0;
3233 IADDR UNUSED pc
= abuf
->addr
;
3234 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3238 tmp_addr
= ANDSI (ADDSI (GET_H_GR (FLD (f_rs
)), FLD (f_imm
)), INVSI (3));
3240 SI opval
= GET_H_GR (FLD (f_rt
));
3241 SETMEMSI (current_cpu
, pc
, ADDSI (tmp_addr
, 4), opval
);
3242 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3245 SI opval
= GET_H_GR (ADDSI (FLD (f_rt
), 1));
3246 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
3247 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3258 SEM_FN_NAME (iq2000bf
,j
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3260 #define FLD(f) abuf->fields.sfmt_j.f
3261 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3262 int UNUSED written
= 0;
3263 IADDR UNUSED pc
= abuf
->addr
;
3265 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3269 USI opval
= FLD (i_jmptarg
);
3270 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3271 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3275 SEM_BRANCH_FINI (vpc
);
3280 /* jal: jal $jmptarg */
3283 SEM_FN_NAME (iq2000bf
,jal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3285 #define FLD(f) abuf->fields.sfmt_j.f
3286 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3287 int UNUSED written
= 0;
3288 IADDR UNUSED pc
= abuf
->addr
;
3290 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3295 SI opval
= ADDSI (pc
, 8);
3296 SET_H_GR (((UINT
) 31), opval
);
3297 TRACE_RESULT (current_cpu
, abuf
, "gr", 'x', opval
);
3300 USI opval
= FLD (i_jmptarg
);
3301 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3302 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3307 SEM_BRANCH_FINI (vpc
);
3312 /* bmb: bmb $rs,$rt,$offset */
3315 SEM_FN_NAME (iq2000bf
,bmb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3317 #define FLD(f) abuf->fields.sfmt_bbi.f
3318 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3319 int UNUSED written
= 0;
3320 IADDR UNUSED pc
= abuf
->addr
;
3322 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3327 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 255), ANDSI (GET_H_GR (FLD (f_rt
)), 255))) {
3330 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 65280), ANDSI (GET_H_GR (FLD (f_rt
)), 65280))) {
3333 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 16711680), ANDSI (GET_H_GR (FLD (f_rt
)), 16711680))) {
3336 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs
)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt
)), 0xff000000))) {
3342 USI opval
= FLD (i_offset
);
3343 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
3344 written
|= (1 << 3);
3345 TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
3351 abuf
->written
= written
;
3352 SEM_BRANCH_FINI (vpc
);
3357 /* Table of all semantic fns. */
3359 static const struct sem_fn_desc sem_fns
[] = {
3360 { IQ2000BF_INSN_X_INVALID
, SEM_FN_NAME (iq2000bf
,x_invalid
) },
3361 { IQ2000BF_INSN_X_AFTER
, SEM_FN_NAME (iq2000bf
,x_after
) },
3362 { IQ2000BF_INSN_X_BEFORE
, SEM_FN_NAME (iq2000bf
,x_before
) },
3363 { IQ2000BF_INSN_X_CTI_CHAIN
, SEM_FN_NAME (iq2000bf
,x_cti_chain
) },
3364 { IQ2000BF_INSN_X_CHAIN
, SEM_FN_NAME (iq2000bf
,x_chain
) },
3365 { IQ2000BF_INSN_X_BEGIN
, SEM_FN_NAME (iq2000bf
,x_begin
) },
3366 { IQ2000BF_INSN_ADD
, SEM_FN_NAME (iq2000bf
,add
) },
3367 { IQ2000BF_INSN_ADDI
, SEM_FN_NAME (iq2000bf
,addi
) },
3368 { IQ2000BF_INSN_ADDIU
, SEM_FN_NAME (iq2000bf
,addiu
) },
3369 { IQ2000BF_INSN_ADDU
, SEM_FN_NAME (iq2000bf
,addu
) },
3370 { IQ2000BF_INSN_ADO16
, SEM_FN_NAME (iq2000bf
,ado16
) },
3371 { IQ2000BF_INSN_AND
, SEM_FN_NAME (iq2000bf
,and) },
3372 { IQ2000BF_INSN_ANDI
, SEM_FN_NAME (iq2000bf
,andi
) },
3373 { IQ2000BF_INSN_ANDOI
, SEM_FN_NAME (iq2000bf
,andoi
) },
3374 { IQ2000BF_INSN_NOR
, SEM_FN_NAME (iq2000bf
,nor
) },
3375 { IQ2000BF_INSN_OR
, SEM_FN_NAME (iq2000bf
,or) },
3376 { IQ2000BF_INSN_ORI
, SEM_FN_NAME (iq2000bf
,ori
) },
3377 { IQ2000BF_INSN_RAM
, SEM_FN_NAME (iq2000bf
,ram
) },
3378 { IQ2000BF_INSN_SLL
, SEM_FN_NAME (iq2000bf
,sll
) },
3379 { IQ2000BF_INSN_SLLV
, SEM_FN_NAME (iq2000bf
,sllv
) },
3380 { IQ2000BF_INSN_SLMV
, SEM_FN_NAME (iq2000bf
,slmv
) },
3381 { IQ2000BF_INSN_SLT
, SEM_FN_NAME (iq2000bf
,slt
) },
3382 { IQ2000BF_INSN_SLTI
, SEM_FN_NAME (iq2000bf
,slti
) },
3383 { IQ2000BF_INSN_SLTIU
, SEM_FN_NAME (iq2000bf
,sltiu
) },
3384 { IQ2000BF_INSN_SLTU
, SEM_FN_NAME (iq2000bf
,sltu
) },
3385 { IQ2000BF_INSN_SRA
, SEM_FN_NAME (iq2000bf
,sra
) },
3386 { IQ2000BF_INSN_SRAV
, SEM_FN_NAME (iq2000bf
,srav
) },
3387 { IQ2000BF_INSN_SRL
, SEM_FN_NAME (iq2000bf
,srl
) },
3388 { IQ2000BF_INSN_SRLV
, SEM_FN_NAME (iq2000bf
,srlv
) },
3389 { IQ2000BF_INSN_SRMV
, SEM_FN_NAME (iq2000bf
,srmv
) },
3390 { IQ2000BF_INSN_SUB
, SEM_FN_NAME (iq2000bf
,sub
) },
3391 { IQ2000BF_INSN_SUBU
, SEM_FN_NAME (iq2000bf
,subu
) },
3392 { IQ2000BF_INSN_XOR
, SEM_FN_NAME (iq2000bf
,xor) },
3393 { IQ2000BF_INSN_XORI
, SEM_FN_NAME (iq2000bf
,xori
) },
3394 { IQ2000BF_INSN_BBI
, SEM_FN_NAME (iq2000bf
,bbi
) },
3395 { IQ2000BF_INSN_BBIN
, SEM_FN_NAME (iq2000bf
,bbin
) },
3396 { IQ2000BF_INSN_BBV
, SEM_FN_NAME (iq2000bf
,bbv
) },
3397 { IQ2000BF_INSN_BBVN
, SEM_FN_NAME (iq2000bf
,bbvn
) },
3398 { IQ2000BF_INSN_BEQ
, SEM_FN_NAME (iq2000bf
,beq
) },
3399 { IQ2000BF_INSN_BEQL
, SEM_FN_NAME (iq2000bf
,beql
) },
3400 { IQ2000BF_INSN_BGEZ
, SEM_FN_NAME (iq2000bf
,bgez
) },
3401 { IQ2000BF_INSN_BGEZAL
, SEM_FN_NAME (iq2000bf
,bgezal
) },
3402 { IQ2000BF_INSN_BGEZALL
, SEM_FN_NAME (iq2000bf
,bgezall
) },
3403 { IQ2000BF_INSN_BGEZL
, SEM_FN_NAME (iq2000bf
,bgezl
) },
3404 { IQ2000BF_INSN_BLTZ
, SEM_FN_NAME (iq2000bf
,bltz
) },
3405 { IQ2000BF_INSN_BLTZL
, SEM_FN_NAME (iq2000bf
,bltzl
) },
3406 { IQ2000BF_INSN_BLTZAL
, SEM_FN_NAME (iq2000bf
,bltzal
) },
3407 { IQ2000BF_INSN_BLTZALL
, SEM_FN_NAME (iq2000bf
,bltzall
) },
3408 { IQ2000BF_INSN_BMB0
, SEM_FN_NAME (iq2000bf
,bmb0
) },
3409 { IQ2000BF_INSN_BMB1
, SEM_FN_NAME (iq2000bf
,bmb1
) },
3410 { IQ2000BF_INSN_BMB2
, SEM_FN_NAME (iq2000bf
,bmb2
) },
3411 { IQ2000BF_INSN_BMB3
, SEM_FN_NAME (iq2000bf
,bmb3
) },
3412 { IQ2000BF_INSN_BNE
, SEM_FN_NAME (iq2000bf
,bne
) },
3413 { IQ2000BF_INSN_BNEL
, SEM_FN_NAME (iq2000bf
,bnel
) },
3414 { IQ2000BF_INSN_JALR
, SEM_FN_NAME (iq2000bf
,jalr
) },
3415 { IQ2000BF_INSN_JR
, SEM_FN_NAME (iq2000bf
,jr
) },
3416 { IQ2000BF_INSN_LB
, SEM_FN_NAME (iq2000bf
,lb
) },
3417 { IQ2000BF_INSN_LBU
, SEM_FN_NAME (iq2000bf
,lbu
) },
3418 { IQ2000BF_INSN_LH
, SEM_FN_NAME (iq2000bf
,lh
) },
3419 { IQ2000BF_INSN_LHU
, SEM_FN_NAME (iq2000bf
,lhu
) },
3420 { IQ2000BF_INSN_LUI
, SEM_FN_NAME (iq2000bf
,lui
) },
3421 { IQ2000BF_INSN_LW
, SEM_FN_NAME (iq2000bf
,lw
) },
3422 { IQ2000BF_INSN_SB
, SEM_FN_NAME (iq2000bf
,sb
) },
3423 { IQ2000BF_INSN_SH
, SEM_FN_NAME (iq2000bf
,sh
) },
3424 { IQ2000BF_INSN_SW
, SEM_FN_NAME (iq2000bf
,sw
) },
3425 { IQ2000BF_INSN_BREAK
, SEM_FN_NAME (iq2000bf
,break) },
3426 { IQ2000BF_INSN_SYSCALL
, SEM_FN_NAME (iq2000bf
,syscall
) },
3427 { IQ2000BF_INSN_ANDOUI
, SEM_FN_NAME (iq2000bf
,andoui
) },
3428 { IQ2000BF_INSN_ORUI
, SEM_FN_NAME (iq2000bf
,orui
) },
3429 { IQ2000BF_INSN_BGTZ
, SEM_FN_NAME (iq2000bf
,bgtz
) },
3430 { IQ2000BF_INSN_BGTZL
, SEM_FN_NAME (iq2000bf
,bgtzl
) },
3431 { IQ2000BF_INSN_BLEZ
, SEM_FN_NAME (iq2000bf
,blez
) },
3432 { IQ2000BF_INSN_BLEZL
, SEM_FN_NAME (iq2000bf
,blezl
) },
3433 { IQ2000BF_INSN_MRGB
, SEM_FN_NAME (iq2000bf
,mrgb
) },
3434 { IQ2000BF_INSN_BCTXT
, SEM_FN_NAME (iq2000bf
,bctxt
) },
3435 { IQ2000BF_INSN_BC0F
, SEM_FN_NAME (iq2000bf
,bc0f
) },
3436 { IQ2000BF_INSN_BC0FL
, SEM_FN_NAME (iq2000bf
,bc0fl
) },
3437 { IQ2000BF_INSN_BC3F
, SEM_FN_NAME (iq2000bf
,bc3f
) },
3438 { IQ2000BF_INSN_BC3FL
, SEM_FN_NAME (iq2000bf
,bc3fl
) },
3439 { IQ2000BF_INSN_BC0T
, SEM_FN_NAME (iq2000bf
,bc0t
) },
3440 { IQ2000BF_INSN_BC0TL
, SEM_FN_NAME (iq2000bf
,bc0tl
) },
3441 { IQ2000BF_INSN_BC3T
, SEM_FN_NAME (iq2000bf
,bc3t
) },
3442 { IQ2000BF_INSN_BC3TL
, SEM_FN_NAME (iq2000bf
,bc3tl
) },
3443 { IQ2000BF_INSN_CFC0
, SEM_FN_NAME (iq2000bf
,cfc0
) },
3444 { IQ2000BF_INSN_CFC1
, SEM_FN_NAME (iq2000bf
,cfc1
) },
3445 { IQ2000BF_INSN_CFC2
, SEM_FN_NAME (iq2000bf
,cfc2
) },
3446 { IQ2000BF_INSN_CFC3
, SEM_FN_NAME (iq2000bf
,cfc3
) },
3447 { IQ2000BF_INSN_CHKHDR
, SEM_FN_NAME (iq2000bf
,chkhdr
) },
3448 { IQ2000BF_INSN_CTC0
, SEM_FN_NAME (iq2000bf
,ctc0
) },
3449 { IQ2000BF_INSN_CTC1
, SEM_FN_NAME (iq2000bf
,ctc1
) },
3450 { IQ2000BF_INSN_CTC2
, SEM_FN_NAME (iq2000bf
,ctc2
) },
3451 { IQ2000BF_INSN_CTC3
, SEM_FN_NAME (iq2000bf
,ctc3
) },
3452 { IQ2000BF_INSN_JCR
, SEM_FN_NAME (iq2000bf
,jcr
) },
3453 { IQ2000BF_INSN_LUC32
, SEM_FN_NAME (iq2000bf
,luc32
) },
3454 { IQ2000BF_INSN_LUC32L
, SEM_FN_NAME (iq2000bf
,luc32l
) },
3455 { IQ2000BF_INSN_LUC64
, SEM_FN_NAME (iq2000bf
,luc64
) },
3456 { IQ2000BF_INSN_LUC64L
, SEM_FN_NAME (iq2000bf
,luc64l
) },
3457 { IQ2000BF_INSN_LUK
, SEM_FN_NAME (iq2000bf
,luk
) },
3458 { IQ2000BF_INSN_LULCK
, SEM_FN_NAME (iq2000bf
,lulck
) },
3459 { IQ2000BF_INSN_LUM32
, SEM_FN_NAME (iq2000bf
,lum32
) },
3460 { IQ2000BF_INSN_LUM32L
, SEM_FN_NAME (iq2000bf
,lum32l
) },
3461 { IQ2000BF_INSN_LUM64
, SEM_FN_NAME (iq2000bf
,lum64
) },
3462 { IQ2000BF_INSN_LUM64L
, SEM_FN_NAME (iq2000bf
,lum64l
) },
3463 { IQ2000BF_INSN_LUR
, SEM_FN_NAME (iq2000bf
,lur
) },
3464 { IQ2000BF_INSN_LURL
, SEM_FN_NAME (iq2000bf
,lurl
) },
3465 { IQ2000BF_INSN_LUULCK
, SEM_FN_NAME (iq2000bf
,luulck
) },
3466 { IQ2000BF_INSN_MFC0
, SEM_FN_NAME (iq2000bf
,mfc0
) },
3467 { IQ2000BF_INSN_MFC1
, SEM_FN_NAME (iq2000bf
,mfc1
) },
3468 { IQ2000BF_INSN_MFC2
, SEM_FN_NAME (iq2000bf
,mfc2
) },
3469 { IQ2000BF_INSN_MFC3
, SEM_FN_NAME (iq2000bf
,mfc3
) },
3470 { IQ2000BF_INSN_MTC0
, SEM_FN_NAME (iq2000bf
,mtc0
) },
3471 { IQ2000BF_INSN_MTC1
, SEM_FN_NAME (iq2000bf
,mtc1
) },
3472 { IQ2000BF_INSN_MTC2
, SEM_FN_NAME (iq2000bf
,mtc2
) },
3473 { IQ2000BF_INSN_MTC3
, SEM_FN_NAME (iq2000bf
,mtc3
) },
3474 { IQ2000BF_INSN_PKRL
, SEM_FN_NAME (iq2000bf
,pkrl
) },
3475 { IQ2000BF_INSN_PKRLR1
, SEM_FN_NAME (iq2000bf
,pkrlr1
) },
3476 { IQ2000BF_INSN_PKRLR30
, SEM_FN_NAME (iq2000bf
,pkrlr30
) },
3477 { IQ2000BF_INSN_RB
, SEM_FN_NAME (iq2000bf
,rb
) },
3478 { IQ2000BF_INSN_RBR1
, SEM_FN_NAME (iq2000bf
,rbr1
) },
3479 { IQ2000BF_INSN_RBR30
, SEM_FN_NAME (iq2000bf
,rbr30
) },
3480 { IQ2000BF_INSN_RFE
, SEM_FN_NAME (iq2000bf
,rfe
) },
3481 { IQ2000BF_INSN_RX
, SEM_FN_NAME (iq2000bf
,rx
) },
3482 { IQ2000BF_INSN_RXR1
, SEM_FN_NAME (iq2000bf
,rxr1
) },
3483 { IQ2000BF_INSN_RXR30
, SEM_FN_NAME (iq2000bf
,rxr30
) },
3484 { IQ2000BF_INSN_SLEEP
, SEM_FN_NAME (iq2000bf
,sleep
) },
3485 { IQ2000BF_INSN_SRRD
, SEM_FN_NAME (iq2000bf
,srrd
) },
3486 { IQ2000BF_INSN_SRRDL
, SEM_FN_NAME (iq2000bf
,srrdl
) },
3487 { IQ2000BF_INSN_SRULCK
, SEM_FN_NAME (iq2000bf
,srulck
) },
3488 { IQ2000BF_INSN_SRWR
, SEM_FN_NAME (iq2000bf
,srwr
) },
3489 { IQ2000BF_INSN_SRWRU
, SEM_FN_NAME (iq2000bf
,srwru
) },
3490 { IQ2000BF_INSN_TRAPQFL
, SEM_FN_NAME (iq2000bf
,trapqfl
) },
3491 { IQ2000BF_INSN_TRAPQNE
, SEM_FN_NAME (iq2000bf
,trapqne
) },
3492 { IQ2000BF_INSN_TRAPREL
, SEM_FN_NAME (iq2000bf
,traprel
) },
3493 { IQ2000BF_INSN_WB
, SEM_FN_NAME (iq2000bf
,wb
) },
3494 { IQ2000BF_INSN_WBU
, SEM_FN_NAME (iq2000bf
,wbu
) },
3495 { IQ2000BF_INSN_WBR1
, SEM_FN_NAME (iq2000bf
,wbr1
) },
3496 { IQ2000BF_INSN_WBR1U
, SEM_FN_NAME (iq2000bf
,wbr1u
) },
3497 { IQ2000BF_INSN_WBR30
, SEM_FN_NAME (iq2000bf
,wbr30
) },
3498 { IQ2000BF_INSN_WBR30U
, SEM_FN_NAME (iq2000bf
,wbr30u
) },
3499 { IQ2000BF_INSN_WX
, SEM_FN_NAME (iq2000bf
,wx
) },
3500 { IQ2000BF_INSN_WXU
, SEM_FN_NAME (iq2000bf
,wxu
) },
3501 { IQ2000BF_INSN_WXR1
, SEM_FN_NAME (iq2000bf
,wxr1
) },
3502 { IQ2000BF_INSN_WXR1U
, SEM_FN_NAME (iq2000bf
,wxr1u
) },
3503 { IQ2000BF_INSN_WXR30
, SEM_FN_NAME (iq2000bf
,wxr30
) },
3504 { IQ2000BF_INSN_WXR30U
, SEM_FN_NAME (iq2000bf
,wxr30u
) },
3505 { IQ2000BF_INSN_LDW
, SEM_FN_NAME (iq2000bf
,ldw
) },
3506 { IQ2000BF_INSN_SDW
, SEM_FN_NAME (iq2000bf
,sdw
) },
3507 { IQ2000BF_INSN_J
, SEM_FN_NAME (iq2000bf
,j
) },
3508 { IQ2000BF_INSN_JAL
, SEM_FN_NAME (iq2000bf
,jal
) },
3509 { IQ2000BF_INSN_BMB
, SEM_FN_NAME (iq2000bf
,bmb
) },
3513 /* Add the semantic fns to IDESC_TABLE. */
3516 SEM_FN_NAME (iq2000bf
,init_idesc_table
) (SIM_CPU
*current_cpu
)
3518 IDESC
*idesc_table
= CPU_IDESC (current_cpu
);
3519 const struct sem_fn_desc
*sf
;
3520 int mach_num
= MACH_NUM (CPU_MACH (current_cpu
));
3522 for (sf
= &sem_fns
[0]; sf
->fn
!= 0; ++sf
)
3524 const CGEN_INSN
*insn
= idesc_table
[sf
->index
].idata
;
3525 int valid_p
= (CGEN_INSN_VIRTUAL_P (insn
)
3526 || CGEN_INSN_MACH_HAS_P (insn
, mach_num
));
3529 idesc_table
[sf
->index
].sem_fast
= sf
->fn
;
3531 idesc_table
[sf
->index
].sem_fast
= SEM_FN_NAME (iq2000bf
,x_invalid
);
3534 idesc_table
[sf
->index
].sem_full
= sf
->fn
;
3536 idesc_table
[sf
->index
].sem_full
= SEM_FN_NAME (iq2000bf
,x_invalid
);