data/method/gdb/gdb-13.2/sim/mips/idecode.c

2059 lines
63 KiB
C

/* 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 <http://www.gnu.org/licenses/>.
--
This file was generated by the program igen */
#ifndef IDECODE_C
#define IDECODE_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
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_IDECODE\
(instruction_address)
idecode_issue (SIM_DESC sd,
instruction_word instruction_0,
instruction_address cia)
{
instruction_address nia;
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;
}
return nia;}
#endif /* _IDECODE_C_*/