pikmin2/include/sqrt.h
EpochFlame 4bca5a00cd progress for #50
use f32 and f64 in most headers
2023-01-16 15:23:01 -05:00

42 lines
808 B
C

#ifndef _SQRT_H
#define _SQRT_H
#include "types.h"
#define FRSQRTE(input, output) \
{ \
register f32 __frsqrte_v = input; \
asm { frsqrte __frsqrte_v, __frsqrte_v } \
*output = __frsqrte_v; \
}
inline f32 sqrtf(f32& __sqrtf_g)
{
if ((__sqrtf_g > 0.0f)) {
f32 __sqrtf_h;
FRSQRTE(__sqrtf_g, &__sqrtf_h);
__sqrtf_g = __sqrtf_h * __sqrtf_g;
}
return __sqrtf_g;
}
inline f32 _sqrtf(f32 x) { return (x > 0.0f) ? sqrtf(x) : 0.0f; }
// used in pelplant's Obj::getShadowParam(ShadowParam&)
inline void __sqrtf(register f32 x, f32* val)
{
if (x > 0.0f) {
if (x > 0.0f) {
register f32 reg_f0;
asm {
frsqrte reg_f0, x
}
*val = reg_f0 * x;
}
} else {
*val = 0.0f;
}
}
#endif