Match a few nonmatchings and delete unused asm (#117)

* match a few nonmatchings, delete unused asm

* fix missing returns in f_op_actor_iter

* remove obsolete comments
This commit is contained in:
lepelog
2021-03-03 18:17:19 +01:00
committed by GitHub
parent b2a8f0bdbf
commit 79b5438fc7
94 changed files with 69 additions and 1675 deletions
+2 -2
View File
@@ -13,7 +13,7 @@ int fopAcIt_Executor(fopAcIt_ExecutorFunc pExecFunc, void* pData) {
} userData;
userData.func = pExecFunc;
userData.data = pData;
cLsIt_Method(&lbl_803A35E0, (cNdIt_MethodFunc)cTgIt_MethodCall, &userData);
return cLsIt_Method(&lbl_803A35E0, (cNdIt_MethodFunc)cTgIt_MethodCall, &userData);
}
// fopAcIt_Judge__FPFPvPv_PvPv
@@ -24,5 +24,5 @@ void* fopAcIt_Judge(fopAcIt_JudgeFunc pJudgeFunc, void* pData) {
} userData;
userData.func = pJudgeFunc;
userData.data = pData;
cLsIt_Judge(&lbl_803A35E0, (cNdIt_JudgeFunc)cTgIt_JudgeFilter, &userData);
return cLsIt_Judge(&lbl_803A35E0, (cNdIt_JudgeFunc)cTgIt_JudgeFilter, &userData);
}
+28 -9
View File
@@ -296,9 +296,26 @@ extern u8 lbl_80451C58;
extern u8 lbl_80451C5C;
extern u8 lbl_80451C60;
extern j3dsys lbl_80434AC8;
extern u8 lbl_80450AE0;
extern f32 lbl_80450AE0[4]; // array is fake, to force 2 step load
extern u8 lbl_803DD470;
// this belongs to msl_c/math.h, but can't go there currently because of data
inline f32 sqrtf(f32 mag) {
if (mag > FLOAT_LABEL(lbl_80451C04)) {
f64 tmpd = __frsqrte(mag);
tmpd = DOUBLE_LABEL(lbl_80451C08) * tmpd * (DOUBLE_LABEL(lbl_80451C10) - tmpd * tmpd * mag);
tmpd = DOUBLE_LABEL(lbl_80451C08) * tmpd * (DOUBLE_LABEL(lbl_80451C10) - tmpd * tmpd * mag);
return DOUBLE_LABEL(lbl_80451C08) * tmpd *
(DOUBLE_LABEL(lbl_80451C10) - tmpd * tmpd * mag) * mag;
} else if (mag < DOUBLE_LABEL(lbl_80451C18)) {
return /* __float_nan */ lbl_80450AE0[0];
} else if (fpclassify(mag) == 1) {
return /* __float_nan */ lbl_80450AE0[0];
} else {
return mag;
}
}
inline u32 fopAcM_GetID(const void* pProc) {
return fpcM_GetID(pProc);
}
@@ -777,8 +794,9 @@ s32 fopAcM_seenActorAngleY(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB)
}
// fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c
asm f32 fopAcM_searchActorDistance(const fopAc_ac_c*, const fopAc_ac_c*){nofralloc
#include "f/f_op/f_op_actor_mng/asm/func_8001A7E0.s"
f32 fopAcM_searchActorDistance(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) {
cXyz tmp = (pActorB->mPosition - pActorA->mPosition);
return sqrtf(tmp.abs2());
}
// fopAcM_searchActorDistance2__FPC10fopAc_ac_cPC10fopAc_ac_c
@@ -787,18 +805,19 @@ f32 fopAcM_searchActorDistance2(const fopAc_ac_c* pActorA, const fopAc_ac_c* pAc
return tmp.abs2();
}
// fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c
asm f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c*, const fopAc_ac_c*) {
nofralloc
#include "f/f_op/f_op_actor_mng/asm/func_8001A964.s"
}
// TODO: replace calls to this with .abs2XZ, needs additional float constant at the moment
inline f32 cXyzAbs2XZ(const cXyz& ths) {
cXyz tmp(ths.x, /* 0.0f */ lbl_80451C04, ths.z);
return tmp.abs2();
}
// fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c
f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) {
const cXyz& posA = fopAcM_GetPosition_p(pActorA);
const cXyz& posB = fopAcM_GetPosition_p(pActorB);
return sqrtf(cXyzAbs2XZ(posB - posA));
}
// fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c
f32 fopAcM_searchActorDistanceXZ2(const fopAc_ac_c* pActorA, const fopAc_ac_c* pActorB) {
const cXyz& posA = fopAcM_GetPosition_p(pActorA);
+1 -9
View File
@@ -43,17 +43,9 @@ int fopOvlpM_SceneIsStart(void) {
}
}
// 1 instruction off
#ifdef NONMATCHING
int fopOvlpM_IsOutReq(overlap_task_class* pTaskClass) {
return pTaskClass->field_0xc4 == 2;
return (pTaskClass->field_0xc4 & 0x3F) == 2;
}
#else
asm int fopOvlpM_IsOutReq(overlap_task_class* pTaskClass) {
nofralloc
#include "f/f_op_overlap_mng/asm/func_8001E504.s"
}
#endif
void fopOvlpM_Done(overlap_task_class* pTaskClass) {
cReq_Done((request_base_class*)&pTaskClass->field_0xc4);
+19 -14
View File
@@ -50,19 +50,10 @@ int fopOvlpReq_phase_Done(overlap_request_class* pOvlpReq) {
return 0;
}
// return line is wrong
#ifdef NONMATCHING
s16 fopOvlpReq_phase_IsDone(overlap_request_class* param_1) {
s32 fopOvlpReq_phase_IsDone(overlap_request_class* param_1) {
cReq_Done((request_base_class*)param_1);
param_1->field_0x2--;
return ((int)param_1->field_0x2 | ~-(int)param_1->field_0x2) >> 0x1F & 2;
return param_1->field_0x2-- <= 0 ? 2 : 0;
}
#else
asm void fopOvlpReq_phase_IsDone(overlap_request_class*) {
nofralloc
#include "f/f_op/f_op_overlap_req/asm/func_8001E748.s"
}
#endif
int fopOvlpReq_phase_IsWaitOfFadeout(overlap_request_class* pOvlpReq) {
if (cReq_Is_Done((request_base_class*)(pOvlpReq->field_0x20 + 0xC4))) {
@@ -131,9 +122,23 @@ request_base_class* fopOvlpReq_Request(overlap_request_class* pOvlpReq, s16 para
return (request_base_class*)pOvlpReq;
}
asm int fopOvlpReq_Handler(overlap_request_class*) {
nofralloc
#include "f/f_op/f_op_overlap_req/asm/func_8001E9F0.s"
int fopOvlpReq_Handler(overlap_request_class* pOvlpReq) {
int phsDo = cPhs_Do(&pOvlpReq->field_0x18, pOvlpReq);
switch (phsDo) {
case 2:
return fopOvlpReq_Handler(pOvlpReq);
case 0:
return 0;
case 1:
return 0;
case 4:
return 4;
case 3:
case 5:
return 5;
default:
return 5;
}
}
int fopOvlpReq_Cancel(overlap_request_class* pOvlpReq) {
+11 -11
View File
@@ -1,21 +1,21 @@
/* f_op_scene_iter.cpp autogenerated by split.py v0.4 at 2021-02-15 20:27:34.795954 */
#include "f/f_op/f_op_scene_iter.h"
#include "SComponent/c_list.h"
#include "SComponent/c_list_iter.h"
#include "SComponent/c_tag_iter.h"
#include "global.h"
// additional symbols needed for f_op_scene_iter.cpp
// autogenerated by split.py v0.4 at 2021-02-15 20:27:34.795974
extern "C" {
void cLsIt_Judge(void);
void fopScnIt_Judge(void);
}
// additional symbols needed for f_op_scene_iter.cpp
// autogenerated by split.py v0.4 at 2021-02-15 20:27:34.795978
extern u8 lbl_803A3918;
extern node_list_class lbl_803A3918; // f_op_scene_tag::g_fopScnTg_SceneList
asm void* fopScnIt_Judge(fop_ScnItFunc pFunc1, void* pFunc2) {
nofralloc
#include "f/f_op/f_op_scene_iter/asm/func_8001EC74.s"
void* fopScnIt_Judge(fop_ScnItFunc pFunc1, void* pData) {
struct {
fop_ScnItFunc mFunc;
void* mpData;
} iterParams;
iterParams.mFunc = pFunc1;
iterParams.mpData = pData;
return cLsIt_Judge(&lbl_803A3918, (cNdIt_JudgeFunc)cTgIt_JudgeFilter, &iterParams);
}
+6 -27
View File
@@ -14,53 +14,32 @@ void fopScnRq_Request__FiP11scene_classsPvsUs(void);
// autogenerated by split.py v0.4 at 2021-02-13 20:33:37.409412
extern unsigned int l_scnRqID;
// matches but can be improved
void* fopScnM_SearchByID(unsigned int id) {
unsigned int local_8[2];
local_8[0] = id;
return fopScnIt_Judge((fop_ScnItFunc)fpcSch_JudgeByID, (void*)local_8);
return fopScnIt_Judge((fop_ScnItFunc)fpcSch_JudgeByID, &id);
}
int fopScnM_ChangeReq(scene_class* pScene, s16 param_2, s16 param_3, u16 param_4) {
u32 sceneRequestID = fopScnRq_Request(2, pScene, param_2, 0, param_3, param_4);
// can't get a match unless the request id is unsigned
if (sceneRequestID == -1) {
if (sceneRequestID == 0xFFFFFFFF) {
return 0;
}
l_scnRqID = sceneRequestID;
return 1;
}
#ifdef NONMATCHING
unsigned int fopScnM_DeleteReq(scene_class* pScene) {
u32 sceneRequestID = fopScnRq_Request(1, pScene, 0x7fff, 0, 0x7fff, 0);
u32 tmp = (-sceneRequestID - 1);
u32 tmp2 = (tmp + -1);
return tmp2;
return sceneRequestID != 0xFFFFFFFF;
}
#else
asm unsigned int fopScnM_DeleteReq(scene_class*) {
nofralloc
#include "f/f_op_scene_mng/asm/func_8001ED3C.s"
}
#endif
#ifdef NONMATCHING
void fopScnM_CreateReq(s16 param_1, s16 param_2, u16 param_3, u32 param_4) {
int fopScnM_CreateReq(s16 param_1, s16 param_2, u16 param_3, u32 param_4) {
u32 sceneRequestID = fopScnRq_Request(0, 0, param_1, (void*)param_4, param_2, param_3);
u32 tmp = (-sceneRequestID + -1);
return tmp - (sceneRequestID == 0) + (-sceneRequestID + -2) & 0xFF;
return sceneRequestID != 0xFFFFFFFF;
}
#else
asm void fopScnM_CreateReq(s16, s16, u16, u32) {
nofralloc
#include "f/f_op_scene_mng/asm/func_8001ED84.s"
}
#endif
u32 fopScnM_ReRequest(s16 param_1, u32 param_2) {
if (l_scnRqID == -1) {
if (l_scnRqID == 0xFFFFFFFF) {
return 0;
}