33inline f32 FAbs(
register f32 x) {
45inline f32 FCeil(f32 x) {
49inline f32 FExp(f32 x) {
50 return detail::FExp(x);
53inline f32 FFloor(f32 x) {
54 return std::floorf(x);
57inline f32 FInv(
register f32 x) {
58 register f32 work0, work1, work2, work3;
66 ps_add work2, work0, work0
67 ps_mul work3, work0, work0
68 ps_nmsub work0, work1, work3, work2
75inline f32 FMod(f32 x, f32 y) {
76 return std::fmodf(x, y);
79inline f32 FModf(f32 x, f32* pY) {
80 return std::modff(x, pY);
83inline f32 FSqrt(f32 x) {
84 return x <= 0.0f ? 0.0f : x * FrSqrt(x);
87inline f32 FLog(f32 x) {
89 return detail::FLog(x);
92 return NW4R_MATH_QNAN;
95inline f32 FSelect(
register f32 value,
register f32 ge_zero,
96 register f32 lt_zero) {
101 fsel ret, value, ge_zero, lt_zero
113inline f32 U16ToF32(u16 arg) {
115 OSu16tof32(&arg, &ret);
118inline u16 F32ToU16(f32 arg) {
120 OSf32tou16(&arg, &ret);
124inline f32 S16ToF32(s16 arg) {
126 OSs16tof32(&arg, &ret);
129inline s16 F32ToS16(f32 arg) {
131 OSf32tos16(&arg, &ret);
135inline ulong F32Asulong(f32 arg) {
136 return *
reinterpret_cast<ulong*
>(&arg);
138inline f32 ulongAsF32(ulong arg) {
139 return *
reinterpret_cast<f32*
>(&arg);
142inline s32 FGetExpPart(f32 x) {
143 s32 s = F32Asulong(x);
144 return ((s >> 23) & 0xFF) - 127;
146inline f32 FGetMantPart(f32 x) {
147 ulong u = F32Asulong(x);
148 return ulongAsF32((u & 0x807FFFFF) | 0x3F800000);