Files
tww/include/JSystem/JMath/JMath.h
T
LagoLunatic 04a5b59db5 GX work
2024-11-07 14:24:48 -05:00

136 lines
3.1 KiB
C++

#ifndef JMATH_H
#define JMATH_H
#include "dolphin/mtx/quat.h"
#include "math.h"
bool JMANewSinTable(u8 numBits);
void JMAEulerToQuat(s16 x, s16 y, s16 z, Quaternion* out);
void JMAQuatLerp(Quaternion* a, Quaternion* b, f32 t, Quaternion* out);
f32 JMAHermiteInterpolation(f32 frame, f32 time0, f32 value0, f32 tangent0, f32 time1, f32 value1, f32 tangent1);
inline f32 JMAFastReciprocal(f32 value) {
return __fres(value);
}
inline float __frsqrtes(register double f) {
register float out;
// clang-format off
#ifdef __MWERKS__
asm {
frsqrte out, f
}
#endif
// clang-format on
return out;
}
inline f32 JMAFastSqrt(register f32 input) {
if (input > 0.0f) {
register f32 out;
#ifdef __MWERKS__
asm {
frsqrte out, input
}
#endif
return out * input;
} else {
return input;
}
}
namespace JMath {
inline f32 fastReciprocal(f32 value) {
return JMAFastReciprocal(value);
}
inline void gekko_ps_copy3(register void* dst, register const void* src) {
register f32 src0;
register f32 src1;
#ifdef __MWERKS__
asm {
psq_l src0, 0(src), 0, 0
lfs src1, 8(src)
psq_st src0, 0(dst), 0, 0
stfs src1, 8(dst)
};
#endif
}
inline void gekko_ps_copy6(register void* dst, register const void* src) {
register f32 src0;
register f32 src1;
register f32 src2;
#ifdef __MWERKS__
asm {
psq_l src0, 0(src), 0, 0
psq_l src1, 8(src), 0, 0
psq_l src2, 16(src), 0, 0
psq_st src0, 0(dst), 0, 0
psq_st src1, 8(dst), 0, 0
psq_st src2, 16(dst), 0, 0
};
#endif
}
inline void gekko_ps_copy12(register void* dst, register const void* src) {
register f32 src0;
register f32 src1;
register f32 src2;
register f32 src3;
register f32 src4;
register f32 src5;
#ifdef __MWERKS__
asm {
psq_l src0, 0(src), 0, 0
psq_l src1, 8(src), 0, 0
psq_l src2, 16(src), 0, 0
psq_l src3, 24(src), 0, 0
psq_l src4, 32(src), 0, 0
psq_l src5, 40(src), 0, 0
psq_st src0, 0(dst), 0, 0
psq_st src1, 8(dst), 0, 0
psq_st src2, 16(dst), 0, 0
psq_st src3, 24(dst), 0, 0
psq_st src4, 32(dst), 0, 0
psq_st src5, 40(dst), 0, 0
};
#endif
}
inline void gekko_ps_copy16(register void* dst, register const void* src) {
register f32 src0;
register f32 src1;
register f32 src2;
register f32 src3;
register f32 src4;
register f32 src5;
register f32 src6;
register f32 src7;
#ifdef __MWERKS__
asm {
psq_l src0, 0(src), 0, 0
psq_l src1, 8(src), 0, 0
psq_l src2, 16(src), 0, 0
psq_l src3, 24(src), 0, 0
psq_l src4, 32(src), 0, 0
psq_l src5, 40(src), 0, 0
psq_l src6, 48(src), 0, 0
psq_l src7, 56(src), 0, 0
psq_st src0, 0(dst), 0, 0
psq_st src1, 8(dst), 0, 0
psq_st src2, 16(dst), 0, 0
psq_st src3, 24(dst), 0, 0
psq_st src4, 32(dst), 0, 0
psq_st src5, 40(dst), 0, 0
psq_st src6, 48(dst), 0, 0
psq_st src7, 56(dst), 0, 0
};
#endif
}
}; // namespace JMath
#endif /* JMATH_H */