/* This file is part of GDB. Copyright 2002, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -- This file was generated by the program igen */ #ifndef ENGINE_C #define ENGINE_C #include "sim-inline.c" #if C_REVEALS_MODULE_P (ITABLE_INLINE) #include "itable.c" #else #include "itable.h" #endif #if C_REVEALS_MODULE_P (IDECODE_INLINE) #include "idecode.c" #else #include "idecode.h" #endif #if C_REVEALS_MODULE_P (SUPPORT_INLINE) #include "support.c" #else #include "support.h" #endif #if C_REVEALS_MODULE_P (SEMANTICS_INLINE) #include "semantics.c" #else #include "semantics.h" #endif #include "engine.h" #include "sim-assert.h" enum { /* greater or equal to zero => table */ function_entry = -1, boolean_entry = -2, }; typedef struct _idecode_table_entry { int shift; uint32_t mask; uint32_t value; void *function_or_table; } idecode_table_entry; INLINE_ENGINE\ (void) engine_run (SIM_DESC sd, int next_cpu_nr, int nr_cpus, int siggnal) { instruction_address cia; int current_cpu = next_cpu_nr; /* CASE 1: NO SMP (with or with out instruction cache). In this case, we can take advantage of the fact that the current instruction address (CIA) does not need to be read from / written to the CPU object after the execution of an instruction. Instead, CIA is only saved when the main loop exits. This occures when either sim_engine_halt or sim_engine_restart is called. Both of these functions save the current instruction address before halting / restarting the simulator. As a variation, there may also be support for an instruction cracking cache. */ /* prime the main loop */ SIM_ASSERT (current_cpu == 0); SIM_ASSERT (nr_cpus == 1); cia = CPU_PC_GET (CPU); while (1) { instruction_address nia; instruction_word instruction_0 = IMEM32 (cia); #if defined (ENGINE_ISSUE_PREFIX_HOOK) ENGINE_ISSUE_PREFIX_HOOK(); #endif switch (EXTRACTED32 (instruction_0, 31, 26)) { case 0: { { switch (EXTRACTED32 (instruction_0, 5, 0)) { case 0: { nia = semantic_SLLa_SPECIAL (sd, instruction_0, cia); break; } case 1: { nia = semantic_MOVtf_SPECIAL (sd, instruction_0, cia); break; } case 2: { nia = semantic_SRL_SPECIAL (sd, instruction_0, cia); break; } case 3: { nia = semantic_SRA_SPECIAL (sd, instruction_0, cia); break; } case 4: { nia = semantic_SLLV_SPECIAL (sd, instruction_0, cia); break; } case 6: { nia = semantic_SRLV_SPECIAL (sd, instruction_0, cia); break; } case 7: { nia = semantic_SRAV_SPECIAL (sd, instruction_0, cia); break; } case 8: { nia = semantic_JR_SPECIAL (sd, instruction_0, cia); break; } case 9: { nia = semantic_JALR_SPECIAL (sd, instruction_0, cia); break; } case 10: { nia = semantic_MOVZ_SPECIAL (sd, instruction_0, cia); break; } case 11: { nia = semantic_MOVN_SPECIAL (sd, instruction_0, cia); break; } case 12: { nia = semantic_SYSCALL_SPECIAL (sd, instruction_0, cia); break; } case 13: { nia = semantic_BREAK_SPECIAL (sd, instruction_0, cia); break; } case 15: { nia = semantic_SYNC_SPECIAL (sd, instruction_0, cia); break; } case 16: { nia = semantic_MFHI_SPECIAL (sd, instruction_0, cia); break; } case 17: { nia = semantic_MTHI_SPECIAL (sd, instruction_0, cia); break; } case 18: { nia = semantic_MFLO_SPECIAL (sd, instruction_0, cia); break; } case 19: { nia = semantic_MTLO_SPECIAL (sd, instruction_0, cia); break; } case 24: { nia = semantic_MULT_SPECIAL (sd, instruction_0, cia); break; } case 25: { nia = semantic_MULTU_SPECIAL (sd, instruction_0, cia); break; } case 26: { nia = semantic_DIV_SPECIAL (sd, instruction_0, cia); break; } case 27: { nia = semantic_DIVU_SPECIAL (sd, instruction_0, cia); break; } case 32: { nia = semantic_ADD_SPECIAL (sd, instruction_0, cia); break; } case 33: { nia = semantic_ADDU_SPECIAL (sd, instruction_0, cia); break; } case 34: { nia = semantic_SUB_SPECIAL (sd, instruction_0, cia); break; } case 35: { nia = semantic_SUBU_SPECIAL (sd, instruction_0, cia); break; } case 36: { nia = semantic_AND_SPECIAL (sd, instruction_0, cia); break; } case 37: { nia = semantic_OR_SPECIAL (sd, instruction_0, cia); break; } case 38: { nia = semantic_XOR_SPECIAL (sd, instruction_0, cia); break; } case 39: { nia = semantic_NOR_SPECIAL (sd, instruction_0, cia); break; } case 42: { nia = semantic_SLT_SPECIAL (sd, instruction_0, cia); break; } case 43: { nia = semantic_SLTU_SPECIAL (sd, instruction_0, cia); break; } case 48: { nia = semantic_TGE_SPECIAL (sd, instruction_0, cia); break; } case 49: { nia = semantic_TGEU_SPECIAL (sd, instruction_0, cia); break; } case 50: { nia = semantic_TLT_SPECIAL (sd, instruction_0, cia); break; } case 51: { nia = semantic_TLTU_SPECIAL (sd, instruction_0, cia); break; } case 52: { nia = semantic_TEQ_SPECIAL (sd, instruction_0, cia); break; } case 54: { nia = semantic_TNE_SPECIAL (sd, instruction_0, cia); break; } case 57: { nia = semantic_RSVD_SPECIAL (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 20, 16)) { case 0: { nia = semantic_BLTZ_REGIMM (sd, instruction_0, cia); break; } case 1: { nia = semantic_BGEZ_REGIMM (sd, instruction_0, cia); break; } case 2: { nia = semantic_BLTZL_REGIMM (sd, instruction_0, cia); break; } case 3: { nia = semantic_BGEZL_REGIMM (sd, instruction_0, cia); break; } case 8: { nia = semantic_TGEI_REGIMM (sd, instruction_0, cia); break; } case 9: { nia = semantic_TGEIU_REGIMM (sd, instruction_0, cia); break; } case 10: { nia = semantic_TLTI_REGIMM (sd, instruction_0, cia); break; } case 11: { nia = semantic_TLTIU_REGIMM (sd, instruction_0, cia); break; } case 12: { nia = semantic_TEQI_REGIMM (sd, instruction_0, cia); break; } case 14: { nia = semantic_TNEI_REGIMM (sd, instruction_0, cia); break; } case 16: { nia = semantic_BLTZAL_REGIMM (sd, instruction_0, cia); break; } case 17: { nia = semantic_BGEZAL_REGIMM (sd, instruction_0, cia); break; } case 18: { nia = semantic_BLTZALL_REGIMM (sd, instruction_0, cia); break; } case 19: { nia = semantic_BGEZALL_REGIMM (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 2: { nia = semantic_J_NORMAL (sd, instruction_0, cia); break; } case 3: { nia = semantic_JAL_NORMAL (sd, instruction_0, cia); break; } case 4: { nia = semantic_BEQ_NORMAL (sd, instruction_0, cia); break; } case 5: { nia = semantic_BNE_NORMAL (sd, instruction_0, cia); break; } case 6: { nia = semantic_BLEZ_NORMAL (sd, instruction_0, cia); break; } case 7: { nia = semantic_BGTZ_NORMAL (sd, instruction_0, cia); break; } case 8: { nia = semantic_ADDI_NORMAL (sd, instruction_0, cia); break; } case 9: { nia = semantic_ADDIU_NORMAL (sd, instruction_0, cia); break; } case 10: { nia = semantic_SLTI_NORMAL (sd, instruction_0, cia); break; } case 11: { nia = semantic_SLTIU_NORMAL (sd, instruction_0, cia); break; } case 12: { nia = semantic_ANDI_NORMAL (sd, instruction_0, cia); break; } case 13: { nia = semantic_ORI_NORMAL (sd, instruction_0, cia); break; } case 14: { nia = semantic_XORI_NORMAL (sd, instruction_0, cia); break; } case 15: { nia = semantic_LUI_NORMAL (sd, instruction_0, cia); break; } case 16: { { switch (EXTRACTED32 (instruction_0, 4, 0)) { case 0: case 3: case 4: case 5: case 7: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 2: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 3: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 4: { nia = semantic_TLBR_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 2: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 3: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 2: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 4: { nia = semantic_TLBWI_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 2: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 3: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 6: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 4: { nia = semantic_TLBWR_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 2: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 3: { { switch (EXTRACTED32 (instruction_0, 24, 23)) { case 0: { nia = semantic_MFC0_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_MTC0_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 8: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 24)) { case 1: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_TLBP_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } case 3: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 25: case 26: case 27: case 28: case 29: case 30: case 31: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 1: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } case 3: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 16: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 24)) { case 1: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_RFE_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } case 3: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 24: { { switch (EXTRACTED32 (instruction_0, 17, 16)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 24)) { case 1: { nia = semantic_BC0F_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_ERET_COP0 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { nia = semantic_BC0T_COP0 (sd, instruction_0, cia); break; } case 2: { nia = semantic_BC0FL_COP0 (sd, instruction_0, cia); break; } case 3: { nia = semantic_BC0TL_COP0 (sd, instruction_0, cia); break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 17: { { switch (EXTRACTED32 (instruction_0, 5, 0)) { case 0: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 0: { nia = semantic_MFC1b_COP1 (sd, instruction_0, cia); break; } case 2: { nia = semantic_CFC1b_COP1 (sd, instruction_0, cia); break; } case 4: { nia = semantic_MTC1b_COP1 (sd, instruction_0, cia); break; } case 6: { nia = semantic_CTC1b_COP1 (sd, instruction_0, cia); break; } case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_ADD_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 1: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_SUB_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 2: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_MUL_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 3: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_DIV_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 4: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_SQRT_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 5: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_ABS_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 6: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_MOV_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 7: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_NEG_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 8: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_ROUND_L_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 9: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_TRUNC_L_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 10: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_CEIL_L_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 11: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_FLOOR_L_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 12: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_ROUND_W_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 13: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_TRUNC_W_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 14: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_CEIL_W_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 15: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_FLOOR_W_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 16: case 20: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 34: case 35: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 17: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_MOVtf_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 18: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_MOVZ_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 19: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_MOVN_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 21: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_RECIP_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 22: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_RSQRT_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 32: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 17: case 20: case 21: { nia = semantic_CVT_S_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 33: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 20: case 21: { nia = semantic_CVT_D_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 36: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_CVT_W_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 37: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: { nia = semantic_CVT_L_fmt_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: { { switch (EXTRACTED32 (instruction_0, 25, 21)) { case 8: { nia = semantic_BC1b_COP1S (sd, instruction_0, cia); break; } case 16: case 17: case 22: { nia = semantic_C_cond_fmtb_COP1 (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } } break; } case 18: { nia = semantic_COPz_NORMAL (sd, instruction_0, cia); break; } case 19: { { switch (EXTRACTED32 (instruction_0, 5, 0)) { case 0: { nia = semantic_LWXC1_COP1X (sd, instruction_0, cia); break; } case 8: { nia = semantic_SWXC1_COP1X (sd, instruction_0, cia); break; } case 15: { nia = semantic_PREFX_COP1X (sd, instruction_0, cia); break; } case 32: case 33: case 38: { nia = semantic_MADD_fmt_COP1X (sd, instruction_0, cia); break; } case 40: case 41: case 46: { nia = semantic_MSUB_fmt_COP1X (sd, instruction_0, cia); break; } case 48: case 49: case 54: { nia = semantic_NMADD_fmt_COP1X (sd, instruction_0, cia); break; } case 56: case 57: case 62: { nia = semantic_NMSUB_fmt_COP1X (sd, instruction_0, cia); break; } default: nia = semantic_illegal (sd, cia); break; } } break; } case 20: { nia = semantic_BEQL_NORMAL (sd, instruction_0, cia); break; } case 21: { nia = semantic_BNEL_NORMAL (sd, instruction_0, cia); break; } case 22: { nia = semantic_BLEZL_NORMAL (sd, instruction_0, cia); break; } case 23: { nia = semantic_BGTZL_NORMAL (sd, instruction_0, cia); break; } case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 39: case 44: case 45: case 52: case 54: case 55: case 59: case 60: case 62: case 63: { nia = semantic_illegal (sd, cia); break; } case 32: { nia = semantic_LB_NORMAL (sd, instruction_0, cia); break; } case 33: { nia = semantic_LH_NORMAL (sd, instruction_0, cia); break; } case 34: { nia = semantic_LWL_NORMAL (sd, instruction_0, cia); break; } case 35: { nia = semantic_LW_NORMAL (sd, instruction_0, cia); break; } case 36: { nia = semantic_LBU_NORMAL (sd, instruction_0, cia); break; } case 37: { nia = semantic_LHU_NORMAL (sd, instruction_0, cia); break; } case 38: { nia = semantic_LWR_NORMAL (sd, instruction_0, cia); break; } case 40: { nia = semantic_SB_NORMAL (sd, instruction_0, cia); break; } case 41: { nia = semantic_SH_NORMAL (sd, instruction_0, cia); break; } case 42: { nia = semantic_SWL_NORMAL (sd, instruction_0, cia); break; } case 43: { nia = semantic_SW_NORMAL (sd, instruction_0, cia); break; } case 46: { nia = semantic_SWR_NORMAL (sd, instruction_0, cia); break; } case 47: { nia = semantic_CACHE_NORMAL (sd, instruction_0, cia); break; } case 48: { nia = semantic_LL_NORMAL (sd, instruction_0, cia); break; } case 49: { nia = semantic_LWC1_COP1 (sd, instruction_0, cia); break; } case 50: { nia = semantic_LWCz_NORMAL (sd, instruction_0, cia); break; } case 51: { nia = semantic_PREF_NORMAL (sd, instruction_0, cia); break; } case 53: { nia = semantic_LDC1b_COP1 (sd, instruction_0, cia); break; } case 56: { nia = semantic_SC_NORMAL (sd, instruction_0, cia); break; } case 57: { nia = semantic_SWC1_COP1 (sd, instruction_0, cia); break; } case 58: { nia = semantic_SWCz_NORMAL (sd, instruction_0, cia); break; } case 61: { nia = semantic_SDC1b_COP1 (sd, instruction_0, cia); break; } default: sim_engine_abort (SD, CPU, cia, "Internal error - bad switch generated"); nia = NULL_CIA; break; } #if defined (ENGINE_ISSUE_POSTFIX_HOOK) ENGINE_ISSUE_POSTFIX_HOOK(); #endif /* Update the instruction address */ cia = nia; /* process any events */ if (sim_events_tick (sd)) { CPU_PC_SET (CPU, cia); sim_events_process (sd); cia = CPU_PC_GET (CPU); } } } #endif /* _ENGINE_C_*/