From 5d0da9be7c486a1907a9f4ced12afa87ddafb515 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 26 Nov 2025 16:41:10 -0500 Subject: [PATCH] Match J3DTransformInfo::operator=, fixing several regalloc issues (#2873) --- configure.py | 4 ++-- include/JSystem/J3DGraphBase/J3DTransform.h | 25 +++++++++------------ src/d/actor/d_a_obj_iceleaf.cpp | 1 - src/m_Do/m_Do_ext.cpp | 2 -- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/configure.py b/configure.py index 7bfa046439e..b9f328c58b0 100755 --- a/configure.py +++ b/configure.py @@ -506,7 +506,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "m_Do/m_Do_graphic.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_machine.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_mtx.cpp"), - Object(NonMatching, "m_Do/m_Do_ext.cpp"), + Object(NonMatching, "m_Do/m_Do_ext.cpp"), # weak func order; unused weak func inlining issues Object(MatchingFor(ALL_GCN), "m_Do/m_Do_lib.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_Reset.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_dvd_thread.cpp"), @@ -2053,7 +2053,7 @@ config.libs = [ ActorRel(MatchingFor(ALL_GCN), "d_a_obj_ice_l"), ActorRel(NonMatching, "d_a_obj_ice_s"), ActorRel(MatchingFor(ALL_GCN), "d_a_obj_iceblock"), - ActorRel(NonMatching, "d_a_obj_iceleaf"), + ActorRel(MatchingFor(ALL_GCN), "d_a_obj_iceleaf"), ActorRel(MatchingFor(ALL_GCN), "d_a_obj_ihasi"), ActorRel(MatchingFor(ALL_GCN), "d_a_obj_ikada"), ActorRel(MatchingFor(ALL_GCN), "d_a_obj_inobone"), diff --git a/include/JSystem/J3DGraphBase/J3DTransform.h b/include/JSystem/J3DGraphBase/J3DTransform.h index f08925eac29..242b3b03f6d 100644 --- a/include/JSystem/J3DGraphBase/J3DTransform.h +++ b/include/JSystem/J3DGraphBase/J3DTransform.h @@ -26,24 +26,19 @@ struct J3DTransformInfo { inline J3DTransformInfo& operator=(const register J3DTransformInfo& b) { register const J3DTransformInfo& var_r31 = b; register J3DTransformInfo& var_r30 = *this; - register f32 var_f31; - register f32 var_f0; - register int var_r0; asm { - psq_l var_f31, 0x0(var_r31), 0, 0 - psq_st var_f31, 0x0(var_r30), 0, 0 - lfs var_f31, 0x8(var_r31) - stfs var_f31, 0x8(var_r30) - lwz var_r0, 0xc(var_r31) - stw var_r0, 0xc(var_r30) - lha var_r0, 0x10(var_r31) - sth var_r0, 0x10(var_r30) - psq_l var_f31, 0x14(var_r31), 0, 0 - psq_st var_f31, 0x14(var_r30), 0, 0 - lfs var_f0, 0x1c(var_r31) - stfs var_f0, 0x1c(var_r30) + psq_l var_f31, J3DTransformInfo.mScale(var_r31), 0, 0 + psq_st var_f31, J3DTransformInfo.mScale(var_r30), 0, 0 } + mScale.z = b.mScale.z; + *(u32*)&mRotation = *(u32*)&b.mRotation; + mRotation.z = b.mRotation.z; + asm { + psq_l var_f31, J3DTransformInfo.mTranslate(var_r31), 0, 0 + psq_st var_f31, J3DTransformInfo.mTranslate(var_r30), 0, 0 + } + mTranslate.z = b.mTranslate.z; return *this; } #endif diff --git a/src/d/actor/d_a_obj_iceleaf.cpp b/src/d/actor/d_a_obj_iceleaf.cpp index a08b9142ad9..d342a4e41b8 100644 --- a/src/d/actor/d_a_obj_iceleaf.cpp +++ b/src/d/actor/d_a_obj_iceleaf.cpp @@ -95,7 +95,6 @@ static dCcD_SrcCyl l_cyl_src = { }; /* 80C249E4-80C24BC4 000344 01E0+00 1/1 0/0 0/0 .text Create__14daObjIceLeaf_cFv */ -// NONMATCHING - regalloc int daObjIceLeaf_c::Create() { J3DJoint* joint = mpModel->getModelData()->getJointNodePointer(0); mTransformInfo = joint->getTransformInfo(); diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 3b23d8abd09..226cb9edc32 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -1253,7 +1253,6 @@ int mDoExt_McaMorf::create(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* c } /* 80010074-8001037C 00A9B4 0308+00 1/0 0/0 0/0 .text calc__14mDoExt_McaMorfFv */ -// NONMATCHING regalloc void mDoExt_McaMorf::calc() { if (mpModel == NULL) { return; @@ -1524,7 +1523,6 @@ int mDoExt_McaMorfSO::create(J3DModelData* i_modelData, mDoExt_McaMorfCallBack1_ } /* 80010B68-80010E70 00B4A8 0308+00 1/0 0/0 0/0 .text calc__16mDoExt_McaMorfSOFv */ -// NONMATCHING regalloc void mDoExt_McaMorfSO::calc() { if (mpModel != NULL) { u16 jnt_no = getJoint()->getJntNo();