diff --git a/gc/ogc/gu.h b/gc/ogc/gu.h index 1863d6e..fd4cb73 100644 --- a/gc/ogc/gu.h +++ b/gc/ogc/gu.h @@ -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 @@ -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 @@ -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 diff --git a/libogc/gu.c b/libogc/gu.c index c393df6..f6a25a9 100644 --- a/libogc/gu.c +++ b/libogc/gu.c @@ -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) diff --git a/libogc/gu_psasm.S b/libogc/gu_psasm.S index 0983cd4..cde023a 100644 --- a/libogc/gu_psasm.S +++ b/libogc/gu_psasm.S @@ -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 @@ -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 @@ -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