1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/* --------------------------------------------------------------------------------*/
/* Depending on the toolchain used, an appropriate precompiled libgcc library */
/* may not exist and cannot be linked against. Until we have a better work around, */
/* necessary gcc functions are hosted here in order to properly compile. */
/* This file is NOT a part of the original game and only exists to help gcc work. */
/* --------------------------------------------------------------------------------*/
asm(" \n\
.set push \n\
.set noat \n\
.set noreorder \n\
.set gp=64 \n\
\n\
.global sqrtf \n\
sqrtf: \n\
jr $ra \n\
sqrt.s $f0, $f12 \n\
nop \n\
nop \n\
\n");
asm(" \n\
.set push \n\
.set noat \n\
.set noreorder \n\
.set gp=64 \n\
\n\
.global __umoddi3 \n\
__umoddi3: \n\
.type __umoddi3, @function \n\
.ent __umoddi3 \n\
sw $a0, ($sp) \n\
sw $a1, 4($sp) \n\
sw $a2, 8($sp) \n\
sw $a3, 0xc($sp) \n\
ld $t7, 8($sp) \n\
ld $t6, ($sp) \n\
ddivu $zero, $t6, $t7 \n\
bnez $t7, 1f \n\
nop \n\
break 7 \n\
1: \n\
mfhi $v0 \n\
dsll32 $v1, $v0, 0 \n\
dsra32 $v1, $v1, 0 \n\
jr $ra \n\
dsra32 $v0, $v0, 0 \n\
.end __umoddi3 \n\
.size __umoddi3, . - __umoddi3 \n\
\n\
.global __udivdi3 \n\
__udivdi3: \n\
.type __udivdi3, @function \n\
.ent __udivdi3 \n\
sw $a0, ($sp) \n\
sw $a1, 4($sp) \n\
sw $a2, 8($sp) \n\
sw $a3, 0xc($sp) \n\
ld $t7, 8($sp) \n\
ld $t6, ($sp) \n\
ddivu $zero, $t6, $t7 \n\
bnez $t7, 1f \n\
nop \n\
break 7 \n\
1: \n\
mflo $v0 \n\
dsll32 $v1, $v0, 0 \n\
dsra32 $v1, $v1, 0 \n\
jr $ra \n\
dsra32 $v0, $v0, 0 \n\
.end __udivdi3 \n\
.size __udivdi3, . - __udivdi3 \n\
\n\
.global __moddi3 \n\
__moddi3: \n\
.type __moddi3, @function \n\
.ent __moddi3 \n\
sw $a0, ($sp) \n\
sw $a1, 4($sp) \n\
sw $a2, 8($sp) \n\
sw $a3, 0xc($sp) \n\
ld $t7, 8($sp) \n\
ld $t6, ($sp) \n\
ddivu $zero, $t6, $t7 \n\
bnez $t7, 1f \n\
nop \n\
break 7 \n\
1: \n\
mfhi $v0 \n\
dsll32 $v1, $v0, 0 \n\
dsra32 $v1, $v1, 0 \n\
jr $ra \n\
dsra32 $v0, $v0, 0 \n\
.end __moddi3 \n\
.size __moddi3, . - __moddi3 \n\
\n\
.global __divdi3 \n\
__divdi3: \n\
.type __divdi3, @function \n\
.ent __divdi3 \n\
sw $a0, ($sp) \n\
sw $a1, 4($sp) \n\
sw $a2, 8($sp) \n\
sw $a3, 0xc($sp) \n\
ld $t7, 8($sp) \n\
ld $t6, ($sp) \n\
ddiv $zero, $t6, $t7 \n\
nop \n\
bnez $t7, 1f \n\
nop \n\
break 7 \n\
1: \n\
daddiu $at, $zero, -1 \n\
bne $t7, $at, 2f \n\
daddiu $at, $zero, 1 \n\
dsll32 $at, $at, 0x1f \n\
bne $t6, $at, 2f \n\
nop \n\
break 6 \n\
2: \n\
mflo $v0 \n\
dsll32 $v1, $v0, 0 \n\
dsra32 $v1, $v1, 0 \n\
jr $ra \n\
dsra32 $v0, $v0, 0 \n\
.end __divdi3 \n\
.size __divdi3, . - __divdi3 \n\
\n\
.set pop \n\
\n");
|