Skip to content

Commit

Permalink
Fix c_guMtxQuat
Browse files Browse the repository at this point in the history
Add missing macros
Commit missed assembly changes
  • Loading branch information
Extrems committed Jan 12, 2025
1 parent ee3e2e0 commit 5ebc34b
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 16 deletions.
4 changes: 3 additions & 1 deletion gc/ogc/gu.h
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,7 @@ void guMtx44RotAxisRad(Mtx44 mt,const guVector *axis,f32 rad);
#define guQuatAdd c_guQuatAdd
#define guQuatSub c_guQuatSub
#define guQuatMultiply c_guQuatMultiply
#define guQuatNoramlize c_guQuatNormalize
#define guQuatNormalize c_guQuatNormalize
#define guQuatInverse c_guQuatInverse
#define guQuatMtx c_guQuatMtx

Expand Down Expand Up @@ -482,6 +482,7 @@ void guMtx44RotAxisRad(Mtx44 mt,const guVector *axis,f32 rad);
#define guQuatMultiply ps_guQuatMultiply
#define guQuatNormalize ps_guQuatNormalize
#define guQuatInverse ps_guQuatInverse
#define guQuatMtx c_guQuatMtx

#define guMtxIdentity ps_guMtxIdentity
#define guMtxCopy ps_guMtxCopy
Expand All @@ -499,6 +500,7 @@ void guMtx44RotAxisRad(Mtx44 mt,const guVector *axis,f32 rad);
#define guMtxRotTrig ps_guMtxRotTrig
#define guMtxRotAxisRad ps_guMtxRotAxisRad
#define guMtxReflect ps_guMtxReflect
#define guMtxQuat c_guMtxQuat

#endif //MTX_USE_PS

Expand Down
15 changes: 9 additions & 6 deletions libogc/gu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1236,16 +1236,19 @@ void c_guQuatMtx(guQuaternion *a,const Mtx m)
void c_guMtxQuat(Mtx m,const guQuaternion *a)
{
guMtxRowCol(m,0,0) = 1.0f - 2.0f*a->y*a->y - 2.0f*a->z*a->z;
guMtxRowCol(m,1,0) = 2.0f*a->x*a->y - 2.0f*a->z*a->w;
guMtxRowCol(m,2,0) = 2.0f*a->x*a->z + 2.0f*a->y*a->w;
guMtxRowCol(m,0,1) = 2.0f*a->x*a->y - 2.0f*a->w*a->z;
guMtxRowCol(m,0,2) = 2.0f*a->x*a->z + 2.0f*a->w*a->y;
guMtxRowCol(m,0,3) = 0.0f;

guMtxRowCol(m,0,1) = 2.0f*a->x*a->y + 2.0f*a->z*a->w;
guMtxRowCol(m,1,0) = 2.0f*a->x*a->y + 2.0f*a->w*a->z;
guMtxRowCol(m,1,1) = 1.0f - 2.0f*a->x*a->x - 2.0f*a->z*a->z;
guMtxRowCol(m,2,1) = 2.0f*a->z*a->y - 2.0f*a->x*a->w;
guMtxRowCol(m,1,2) = 2.0f*a->y*a->z - 2.0f*a->w*a->x;
guMtxRowCol(m,1,3) = 0.0f;

guMtxRowCol(m,0,2) = 2.0f*a->x*a->z - 2.0f*a->y*a->w;
guMtxRowCol(m,1,2) = 2.0f*a->z*a->y + 2.0f*a->x*a->w;
guMtxRowCol(m,2,0) = 2.0f*a->x*a->z - 2.0f*a->w*a->y;
guMtxRowCol(m,2,1) = 2.0f*a->y*a->z + 2.0f*a->w*a->x;
guMtxRowCol(m,2,2) = 1.0f - 2.0f*a->x*a->x - 2.0f*a->y*a->y;
guMtxRowCol(m,2,3) = 0.0f;
}

void guVecHalfAngle(const guVector *a,const guVector *b,guVector *half)
Expand Down
18 changes: 9 additions & 9 deletions libogc/gu_psasm.S
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,15 @@
.globl ps_guMtxConcat
//r3 = mtxA, r4 = mtxB, r5 = mtxAB
ps_guMtxConcat:
stwu r1,-64(r1)
stwu sp,-64(sp)
psq_l A00_A01,0(r3),0,0
stfd fr14,8(r1)
stfd fr14,8(sp)
psq_l B00_B01,0(r4),0,0
lis r6,Unit01@ha
psq_l B02_B03,8(r4),0,0
stfd fr15,16(r1)
stfd fr15,16(sp)
addi r6,r6,Unit01@l
stfd fr31,40(r1)
stfd fr31,40(sp)
psq_l B10_B11,16(r4),0,0
ps_muls0 D00_D01,B00_B01,A00_A01
psq_l A10_A11,16(r3),0,0
Expand Down Expand Up @@ -81,15 +81,15 @@ ps_guMtxConcat:
ps_madds1 D20_D21,B10_B11,A20_A21,D20_D21
ps_madds1 D22_D23,B12_B13,A20_A21,D22_D23
ps_madds0 D20_D21,B20_B21,A22_A23,D20_D21
lfd fr14,8(r1)
lfd fr14,8(sp)
psq_st D12_D13,24(r5),0,0
ps_madds0 D22_D23,B22_B23,A22_A23,D22_D23
psq_st D20_D21,32(r5),0,0
ps_madds1 D22_D23,UNIT01,A22_A23,D22_D23
lfd fr15,16(r1)
lfd fr15,16(sp)
psq_st D22_D23,40(r5),0,0
lfd fr31,40(r1)
addi r1,r1,64
lfd fr31,40(sp)
addi sp,sp,64
blr

.globl ps_guMtxIdentity
Expand Down Expand Up @@ -684,7 +684,7 @@ ps_guVecMultiplySR:
ps_madd fr11,fr3,fr7,fr10
psq_st fr11,4(r5),1,0 // store Y
ps_madd fr13,fr5,fr7,fr12
psq_st fr13,8(r5),1,0 // sore Z
psq_st fr13,8(r5),1,0 // store Z
blr

.globl ps_quQuatScale
Expand Down

0 comments on commit 5ebc34b

Please sign in to comment.