SSBM Decomp
Toggle main menu visibility
Loading...
Searching...
No Matches
math.h
Go to the documentation of this file.
1
#ifndef MSL_MATH_H
2
#define MSL_MATH_H
3
4
#include <
Runtime/platform.h
>
5
6
#ifdef MWERKS_GEKKO
7
#include <
math_ppc.h
>
8
9
#include <
MetroTRK/intrinsics.h
>
10
#endif
11
12
#define MSL_HI(x) *(int*) &x
13
#define MSL_LO(x) *(1 + (int*) &x)
14
15
#define M_PI 3.14159265358979323846
16
#define M_PI_2 (M_PI / 2)
17
18
enum
FloatType
{
19
FP_NAN
= 1,
20
FP_INFINITE
= 2,
21
FP_ZERO
= 3,
22
FP_NORMAL
= 4,
23
FP_SUBNORMAL
= 5
24
};
25
26
static
inline
s32
__fpclassifyf
(
float
x)
27
{
28
const
s32
exp_mask = 0x7F800000;
29
const
s32
mantissa_mask = 0x007FFFFF;
30
switch
((*(
s32
*) &x) & exp_mask) {
31
case
exp_mask:
32
return
((*(
s32
*) &x) & mantissa_mask) ?
FP_NAN
:
FP_INFINITE
;
33
case
0:
34
return
((*(
s32
*) &x) & mantissa_mask) ?
FP_SUBNORMAL
:
FP_ZERO
;
35
default
:
36
return
FP_NORMAL
;
37
}
38
}
39
40
extern
int
__HI
(
double
);
41
extern
int
__LO
(
double
);
42
43
static
inline
s32
__fpclassifyd
(
double
x)
44
{
45
switch
(
__HI
(x) & 0x7ff00000) {
46
case
0x7ff00000:
47
return
((
__HI
(x) & 0x000fffff) || (
__LO
(x) & 0xffffffff))
48
?
FP_NAN
49
:
FP_INFINITE
;
50
case
0:
51
return
((
__HI
(x) & 0x000fffff) || (
__LO
(x) & 0xffffffff))
52
?
FP_SUBNORMAL
53
:
FP_ZERO
;
54
default
:
55
return
FP_NORMAL
;
56
}
57
}
58
59
#define fpclassify(x) \
60
((sizeof(x) == sizeof(float)) ? __fpclassifyf((float) (x)) \
61
: __fpclassifyd((double) (x)))
62
63
#ifdef MWERKS_GEKKO
64
#define fabsf __fabsf
65
static
inline
double
fabs
(
double
f)
66
{
67
return
__fabs
(f);
68
}
69
#endif
70
71
double
fabs
(
double
);
72
double
frexp
(
double
x,
int
* exponent);
73
float
acosf
(
float
);
74
float
asinf
(
float
);
75
float
atan2f
(
float
y,
float
x);
76
float
atanf
(
float
);
77
float
cos__Ff
(
float
x);
78
float
cosf
(
float
);
79
float
expf
(
float
);
80
float
fabsf
(
float
);
81
float
fabsf__Ff
(
float
);
82
float
logf
(
float
);
83
float
sin__Ff
(
float
x);
84
float
sinf
(
float
);
85
float
sqrt
(
double
);
86
float
sqrtf
(
float
);
87
void
__sinit_trigf_c
(
void
);
88
89
static
inline
float
fmodf
(
float
a
,
float
b)
90
{
91
long
long
quotient;
92
93
if
(
fabsf
(b) >
fabsf
(
a
)) {
94
return
a
;
95
}
96
quotient =
a
/ b;
97
return
a
- b * quotient;
98
}
99
100
#endif
__LO
#define __LO(x)
Definition
ansi_fp.c:6
__HI
#define __HI(x)
Definition
ansi_fp.c:5
s32
signed long s32
Definition
types.h:8
FP_NAN
#define FP_NAN
Definition
math.h:86
FP_ZERO
#define FP_ZERO
Definition
math.h:88
sqrtf
float sqrtf(float x)
Definition
math.h:30
FP_INFINITE
#define FP_INFINITE
Definition
math.h:87
sqrt
float sqrt(float x)
Definition
math.h:53
cosf
float cosf(float x)
Definition
trigf.c:68
__fpclassifyd
long __fpclassifyd(double x)
sinf
float sinf(float x)
Definition
trigf.c:24
fmodf
float fmodf(float x, float m)
Definition
math.h:95
fabs
double fabs(double x)
acosf
float acosf(float x)
Definition
lbtrigf.c:45
fabsf
float fabsf(float x)
__fpclassifyf
long __fpclassifyf(float x)
FP_NORMAL
#define FP_NORMAL
Definition
math.h:89
FP_SUBNORMAL
#define FP_SUBNORMAL
Definition
math.h:90
intrinsics.h
math_ppc.h
__fabs
#define __fabs(f)
Definition
placeholder.h:16
platform.h
expf
float expf(float)
Definition
lb_00CE.c:27
sin__Ff
float sin__Ff(float x)
Definition
trigf.c:113
frexp
double frexp(double x, int *exponent)
Definition
math_1.c:8
fabsf__Ff
float fabsf__Ff(float)
Definition
math_1.c:3
cos__Ff
float cos__Ff(float x)
Definition
trigf.c:118
asinf
float asinf(float)
Definition
lbtrigf.c:63
logf
float logf(float)
Definition
math.c:64
FloatType
FloatType
Definition
math.h:18
__sinit_trigf_c
void __sinit_trigf_c(void)
Definition
trigf.c:14
atanf
float atanf(float)
atan2f
float atan2f(float y, float x)
Definition
lbtrigf.c:22
a
GXColorS10 a
Definition
tev.c:9
src
MSL
math.h
Generated by
1.17.0