void CVT_L_D() { if (check_cop1_unusable()) return; set_rounding(); *((long long*)(reg_cop1_double[cffd])) = *reg_cop1_double[cffs]; PC++; }
void CVT_S_D() { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_simple[cffd] = *reg_cop1_double[cffs]; PC++; }
void ROUND_W_S() { if (check_cop1_unusable()) return; set_round(); *((long*)reg_cop1_simple[cffd]) = *reg_cop1_simple[cffs]; PC++; }
void ROUND_W_D(void) { if (check_cop1_unusable()) return; set_round(); *((int*)reg_cop1_simple[cffd]) = (int) *reg_cop1_double[cffs]; PC++; }
void FLOOR_L_S() { if (check_cop1_unusable()) return; set_floor(); *((long long*)(reg_cop1_double[cffd])) = *reg_cop1_simple[cffs]; PC++; }
void MFC1(void) { if (check_cop1_unusable()) return; rrt32 = *((int*)reg_cop1_simple[rfs]); sign_extended(rrt); PC++; }
void NEG_D(void) { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = -(*reg_cop1_double[cffs]); PC++; }
void MOV_D(void) { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = *reg_cop1_double[cffs]; PC++; }
void CVT_D_L() { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = *((long long*)reg_cop1_double[cffs]); PC++; }
void TRUNC_L_S() { if (check_cop1_unusable()) return; set_trunc(); *((long long*)(reg_cop1_double[cffd])) = *reg_cop1_simple[cffs]; PC++; }
void CVT_D_W(void) { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = *((int*)reg_cop1_simple[cffs]); PC++; }
void CVT_W_D(void) { if (check_cop1_unusable()) return; set_rounding(); *((int*)reg_cop1_simple[cffd]) = *reg_cop1_double[cffs]; PC++; }
void CEIL_L_S() { if (check_cop1_unusable()) return; set_ceil(); *((long long*)(reg_cop1_double[cffd])) = *reg_cop1_simple[cffs]; PC++; }
void CEIL_W_D(void) { if (check_cop1_unusable()) return; set_ceil(); *((int*)reg_cop1_simple[cffd]) = *reg_cop1_double[cffs]; PC++; }
void FLOOR_W_D(void) { if (check_cop1_unusable()) return; set_floor(); *((int*)reg_cop1_simple[cffd]) = *reg_cop1_double[cffs]; PC++; }
void TRUNC_W_D(void) { if (check_cop1_unusable()) return; set_trunc(); *((int*)reg_cop1_simple[cffd]) = *reg_cop1_double[cffs]; PC++; }
void ROUND_L_D(void) { if (check_cop1_unusable()) return; set_round(); *((long long*)(reg_cop1_double[cffd])) = *reg_cop1_double[cffs]; PC++; }
void ABS_D() { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = fabs(*reg_cop1_double[cffs]); PC++; }
void SQRT_D() { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = sqrt(*reg_cop1_double[cffs]); PC++; }
void MUL_D() { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_double[cffd] = *reg_cop1_double[cffs] * *reg_cop1_double[cfft]; PC++; }
void DIV_S() { if (check_cop1_unusable()) return; set_rounding(); *reg_cop1_simple[cffd] = *reg_cop1_simple[cffs] / *reg_cop1_simple[cfft]; PC++; }
void C_UN_S() { if (check_cop1_unusable()) return; if (isnan(*reg_cop1_simple[cffs]) || isnan(*reg_cop1_simple[cfft])) FCR31 |= 0x800000; else FCR31 &= ~0x800000; PC++; }
void C_OLT_D(void) { if (check_cop1_unusable()) return; if (!isnan(*reg_cop1_double[cffs]) && !isnan(*reg_cop1_double[cfft]) && *reg_cop1_double[cffs] < *reg_cop1_double[cfft]) FCR31 |= 0x800000; else FCR31 &= ~0x800000; PC++; }
void C_OLE_S() { if (check_cop1_unusable()) return; if (!isnan(*reg_cop1_simple[cffs]) && !isnan(*reg_cop1_simple[cfft]) && *reg_cop1_simple[cffs] <= *reg_cop1_simple[cfft]) FCR31 |= 0x800000; else FCR31 &= ~0x800000; PC++; }
void C_ULE_D(void) { if (check_cop1_unusable()) return; if (isnan(*reg_cop1_double[cffs]) || isnan(*reg_cop1_double[cfft]) || *reg_cop1_double[cffs] <= *reg_cop1_double[cfft]) FCR31 |= 0x800000; else FCR31 &= ~0x800000; PC++; }
void C_NGLE_S() { if (check_cop1_unusable()) return; if (isnan(*reg_cop1_simple[cffs]) || isnan(*reg_cop1_simple[cfft])) { printf("Invalid operation exception in C opcode\n"); stop=1; } FCR31 &= ~0x800000; PC++; }
void C_NGT_S(void) { if (check_cop1_unusable()) return; if (isnan(*reg_cop1_simple[cffs]) || isnan(*reg_cop1_simple[cfft])) { DebugMessage(M64MSG_ERROR, "Invalid operation exception in C opcode"); stop=1; } c_ngt_s(reg_cop1_simple[cffs], reg_cop1_simple[cfft]); PC++; }
void BC1T() { if (check_cop1_unusable()) return; PC++; delay_slot=1; PC->ops(); update_count(); delay_slot=0; if ((FCR31 & 0x800000)!=0 && !skip_jump) PC += (PC-2)->f.i.immediate-1; last_addr = PC->addr; if (next_interupt <= Count) gen_interupt(); }
void C_NGT_D() { if (check_cop1_unusable()) return; if (isnan(*reg_cop1_double[cffs]) || isnan(*reg_cop1_double[cfft])) { printf("Invalid operation exception in C opcode\n"); stop=1; } if (*reg_cop1_double[cffs] <= *reg_cop1_double[cfft]) FCR31 |= 0x800000; else FCR31 &= ~0x800000; PC++; }
void C_NGT_D(void) { if (check_cop1_unusable()) return; if (isnan(*reg_cop1_double[cffs]) || isnan(*reg_cop1_double[cfft])) { DebugMessage(M64MSG_ERROR, "Invalid operation exception in C opcode"); stop=1; } if (*reg_cop1_double[cffs] <= *reg_cop1_double[cfft]) FCR31 |= 0x800000; else FCR31 &= ~0x800000; PC++; }