summaryrefslogtreecommitdiff
path: root/asm/MSL_C/MSL_Common_Embedded/Math/e_fmod.s
blob: 7b255589e50be73ca365d4d64771de9f3b66a16a (plain)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global __ieee754_fmod
__ieee754_fmod:
/* 801D13C8 001CD028  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801D13CC 001CD02C  D8 41 00 10 */	stfd f2, 0x10(r1)
/* 801D13D0 001CD030  D8 21 00 08 */	stfd f1, 8(r1)
/* 801D13D4 001CD034  80 01 00 10 */	lwz r0, 0x10(r1)
/* 801D13D8 001CD038  80 E1 00 08 */	lwz r7, 8(r1)
/* 801D13DC 001CD03C  80 C1 00 14 */	lwz r6, 0x14(r1)
/* 801D13E0 001CD040  54 00 00 7E */	clrlwi r0, r0, 1
/* 801D13E4 001CD044  54 E4 00 00 */	rlwinm r4, r7, 0, 0, 0
/* 801D13E8 001CD048  80 A1 00 0C */	lwz r5, 0xc(r1)
/* 801D13EC 001CD04C  7C 03 33 79 */	or. r3, r0, r6
/* 801D13F0 001CD050  7C E8 22 78 */	xor r8, r7, r4
/* 801D13F4 001CD054  41 82 00 28 */	beq lbl_801D141C
/* 801D13F8 001CD058  3C E0 7F F0 */	lis r7, 0x7ff0
/* 801D13FC 001CD05C  7C 08 38 00 */	cmpw r8, r7
/* 801D1400 001CD060  40 80 00 1C */	bge lbl_801D141C
/* 801D1404 001CD064  7C 66 00 D0 */	neg r3, r6
/* 801D1408 001CD068  7C C3 1B 78 */	or r3, r6, r3
/* 801D140C 001CD06C  54 63 0F FE */	srwi r3, r3, 0x1f
/* 801D1410 001CD070  7C 03 1B 78 */	or r3, r0, r3
/* 801D1414 001CD074  7C 03 38 40 */	cmplw r3, r7
/* 801D1418 001CD078  40 81 00 10 */	ble lbl_801D1428
lbl_801D141C:
/* 801D141C 001CD07C  FC 01 00 B2 */	fmul f0, f1, f2
/* 801D1420 001CD080  FC 20 00 24 */	fdiv f1, f0, f0
/* 801D1424 001CD084  48 00 02 CC */	b lbl_801D16F0
lbl_801D1428:
/* 801D1428 001CD088  7C 08 00 00 */	cmpw r8, r0
/* 801D142C 001CD08C  41 81 00 2C */	bgt lbl_801D1458
/* 801D1430 001CD090  41 80 02 C0 */	blt lbl_801D16F0
/* 801D1434 001CD094  7C 05 30 40 */	cmplw r5, r6
/* 801D1438 001CD098  40 80 00 08 */	bge lbl_801D1440
/* 801D143C 001CD09C  48 00 02 B4 */	b lbl_801D16F0
lbl_801D1440:
/* 801D1440 001CD0A0  40 82 00 18 */	bne lbl_801D1458
/* 801D1444 001CD0A4  3C 60 80 40 */	lis r3, lbl_803FD328@ha
/* 801D1448 001CD0A8  54 80 27 38 */	rlwinm r0, r4, 4, 0x1c, 0x1c
/* 801D144C 001CD0AC  38 63 D3 28 */	addi r3, r3, lbl_803FD328@l
/* 801D1450 001CD0B0  7C 23 04 AE */	lfdx f1, r3, r0
/* 801D1454 001CD0B4  48 00 02 9C */	b lbl_801D16F0
lbl_801D1458:
/* 801D1458 001CD0B8  3C 60 00 10 */	lis r3, 0x10
/* 801D145C 001CD0BC  7C 08 18 00 */	cmpw r8, r3
/* 801D1460 001CD0C0  40 80 00 4C */	bge lbl_801D14AC
/* 801D1464 001CD0C4  2C 08 00 00 */	cmpwi r8, 0
/* 801D1468 001CD0C8  40 82 00 24 */	bne lbl_801D148C
/* 801D146C 001CD0CC  7C A3 2B 78 */	mr r3, r5
/* 801D1470 001CD0D0  39 60 FB ED */	li r11, -1043
/* 801D1474 001CD0D4  48 00 00 0C */	b lbl_801D1480
lbl_801D1478:
/* 801D1478 001CD0D8  54 63 08 3C */	slwi r3, r3, 1
/* 801D147C 001CD0DC  39 6B FF FF */	addi r11, r11, -1
lbl_801D1480:
/* 801D1480 001CD0E0  2C 03 00 00 */	cmpwi r3, 0
/* 801D1484 001CD0E4  41 81 FF F4 */	bgt lbl_801D1478
/* 801D1488 001CD0E8  48 00 00 2C */	b lbl_801D14B4
lbl_801D148C:
/* 801D148C 001CD0EC  55 03 58 28 */	slwi r3, r8, 0xb
/* 801D1490 001CD0F0  39 60 FC 02 */	li r11, -1022
/* 801D1494 001CD0F4  48 00 00 0C */	b lbl_801D14A0
lbl_801D1498:
/* 801D1498 001CD0F8  54 63 08 3C */	slwi r3, r3, 1
/* 801D149C 001CD0FC  39 6B FF FF */	addi r11, r11, -1
lbl_801D14A0:
/* 801D14A0 001CD100  2C 03 00 00 */	cmpwi r3, 0
/* 801D14A4 001CD104  41 81 FF F4 */	bgt lbl_801D1498
/* 801D14A8 001CD108  48 00 00 0C */	b lbl_801D14B4
lbl_801D14AC:
/* 801D14AC 001CD10C  7D 03 A6 70 */	srawi r3, r8, 0x14
/* 801D14B0 001CD110  39 63 FC 01 */	addi r11, r3, -1023
lbl_801D14B4:
/* 801D14B4 001CD114  3C 60 00 10 */	lis r3, 0x10
/* 801D14B8 001CD118  7C 00 18 00 */	cmpw r0, r3
/* 801D14BC 001CD11C  40 80 00 4C */	bge lbl_801D1508
/* 801D14C0 001CD120  2C 00 00 00 */	cmpwi r0, 0
/* 801D14C4 001CD124  40 82 00 24 */	bne lbl_801D14E8
/* 801D14C8 001CD128  7C C7 33 78 */	mr r7, r6
/* 801D14CC 001CD12C  38 60 FB ED */	li r3, -1043
/* 801D14D0 001CD130  48 00 00 0C */	b lbl_801D14DC
lbl_801D14D4:
/* 801D14D4 001CD134  54 E7 08 3C */	slwi r7, r7, 1
/* 801D14D8 001CD138  38 63 FF FF */	addi r3, r3, -1
lbl_801D14DC:
/* 801D14DC 001CD13C  2C 07 00 00 */	cmpwi r7, 0
/* 801D14E0 001CD140  41 81 FF F4 */	bgt lbl_801D14D4
/* 801D14E4 001CD144  48 00 00 2C */	b lbl_801D1510
lbl_801D14E8:
/* 801D14E8 001CD148  54 07 58 28 */	slwi r7, r0, 0xb
/* 801D14EC 001CD14C  38 60 FC 02 */	li r3, -1022
/* 801D14F0 001CD150  48 00 00 0C */	b lbl_801D14FC
lbl_801D14F4:
/* 801D14F4 001CD154  54 E7 08 3C */	slwi r7, r7, 1
/* 801D14F8 001CD158  38 63 FF FF */	addi r3, r3, -1
lbl_801D14FC:
/* 801D14FC 001CD15C  2C 07 00 00 */	cmpwi r7, 0
/* 801D1500 001CD160  41 81 FF F4 */	bgt lbl_801D14F4
/* 801D1504 001CD164  48 00 00 0C */	b lbl_801D1510
lbl_801D1508:
/* 801D1508 001CD168  7C 03 A6 70 */	srawi r3, r0, 0x14
/* 801D150C 001CD16C  38 63 FC 01 */	addi r3, r3, -1023
lbl_801D1510:
/* 801D1510 001CD170  2C 0B FC 02 */	cmpwi r11, -1022
/* 801D1514 001CD174  41 80 00 10 */	blt lbl_801D1524
/* 801D1518 001CD178  55 07 03 3E */	clrlwi r7, r8, 0xc
/* 801D151C 001CD17C  64 E9 00 10 */	oris r9, r7, 0x10
/* 801D1520 001CD180  48 00 00 34 */	b lbl_801D1554
lbl_801D1524:
/* 801D1524 001CD184  21 2B FC 02 */	subfic r9, r11, -1022
/* 801D1528 001CD188  2C 09 00 1F */	cmpwi r9, 0x1f
/* 801D152C 001CD18C  41 81 00 1C */	bgt lbl_801D1548
/* 801D1530 001CD190  20 E9 00 20 */	subfic r7, r9, 0x20
/* 801D1534 001CD194  7D 08 48 30 */	slw r8, r8, r9
/* 801D1538 001CD198  7C A7 3C 30 */	srw r7, r5, r7
/* 801D153C 001CD19C  7C A5 48 30 */	slw r5, r5, r9
/* 801D1540 001CD1A0  7D 09 3B 78 */	or r9, r8, r7
/* 801D1544 001CD1A4  48 00 00 10 */	b lbl_801D1554
lbl_801D1548:
/* 801D1548 001CD1A8  38 E9 FF E0 */	addi r7, r9, -32
/* 801D154C 001CD1AC  7C A9 38 30 */	slw r9, r5, r7
/* 801D1550 001CD1B0  38 A0 00 00 */	li r5, 0
lbl_801D1554:
/* 801D1554 001CD1B4  2C 03 FC 02 */	cmpwi r3, -1022
/* 801D1558 001CD1B8  41 80 00 10 */	blt lbl_801D1568
/* 801D155C 001CD1BC  54 00 03 3E */	clrlwi r0, r0, 0xc
/* 801D1560 001CD1C0  64 08 00 10 */	oris r8, r0, 0x10
/* 801D1564 001CD1C4  48 00 00 34 */	b lbl_801D1598
lbl_801D1568:
/* 801D1568 001CD1C8  21 43 FC 02 */	subfic r10, r3, -1022
/* 801D156C 001CD1CC  2C 0A 00 1F */	cmpwi r10, 0x1f
/* 801D1570 001CD1D0  41 81 00 1C */	bgt lbl_801D158C
/* 801D1574 001CD1D4  20 EA 00 20 */	subfic r7, r10, 0x20
/* 801D1578 001CD1D8  7C 08 50 30 */	slw r8, r0, r10
/* 801D157C 001CD1DC  7C C0 3C 30 */	srw r0, r6, r7
/* 801D1580 001CD1E0  7C C6 50 30 */	slw r6, r6, r10
/* 801D1584 001CD1E4  7D 08 03 78 */	or r8, r8, r0
/* 801D1588 001CD1E8  48 00 00 10 */	b lbl_801D1598
lbl_801D158C:
/* 801D158C 001CD1EC  38 0A FF E0 */	addi r0, r10, -32
/* 801D1590 001CD1F0  7C C8 00 30 */	slw r8, r6, r0
/* 801D1594 001CD1F4  38 C0 00 00 */	li r6, 0
lbl_801D1598:
/* 801D1598 001CD1F8  7C 03 58 51 */	subf. r0, r3, r11
/* 801D159C 001CD1FC  7C 09 03 A6 */	mtctr r0
/* 801D15A0 001CD200  41 82 00 64 */	beq lbl_801D1604
lbl_801D15A4:
/* 801D15A4 001CD204  7C 05 30 40 */	cmplw r5, r6
/* 801D15A8 001CD208  7C E8 48 50 */	subf r7, r8, r9
/* 801D15AC 001CD20C  7D 46 28 50 */	subf r10, r6, r5
/* 801D15B0 001CD210  40 80 00 08 */	bge lbl_801D15B8
/* 801D15B4 001CD214  38 E7 FF FF */	addi r7, r7, -1
lbl_801D15B8:
/* 801D15B8 001CD218  2C 07 00 00 */	cmpwi r7, 0
/* 801D15BC 001CD21C  40 80 00 18 */	bge lbl_801D15D4
/* 801D15C0 001CD220  54 A7 0F FE */	srwi r7, r5, 0x1f
/* 801D15C4 001CD224  55 20 08 3C */	slwi r0, r9, 1
/* 801D15C8 001CD228  7D 27 02 14 */	add r9, r7, r0
/* 801D15CC 001CD22C  7C A5 2A 14 */	add r5, r5, r5
/* 801D15D0 001CD230  48 00 00 30 */	b lbl_801D1600
lbl_801D15D4:
/* 801D15D4 001CD234  7C E0 53 79 */	or. r0, r7, r10
/* 801D15D8 001CD238  40 82 00 18 */	bne lbl_801D15F0
/* 801D15DC 001CD23C  3C 60 80 40 */	lis r3, lbl_803FD328@ha
/* 801D15E0 001CD240  54 80 27 38 */	rlwinm r0, r4, 4, 0x1c, 0x1c
/* 801D15E4 001CD244  38 63 D3 28 */	addi r3, r3, lbl_803FD328@l
/* 801D15E8 001CD248  7C 23 04 AE */	lfdx f1, r3, r0
/* 801D15EC 001CD24C  48 00 01 04 */	b lbl_801D16F0
lbl_801D15F0:
/* 801D15F0 001CD250  55 45 0F FE */	srwi r5, r10, 0x1f
/* 801D15F4 001CD254  54 E0 08 3C */	slwi r0, r7, 1
/* 801D15F8 001CD258  7D 25 02 14 */	add r9, r5, r0
/* 801D15FC 001CD25C  55 45 08 3C */	slwi r5, r10, 1
lbl_801D1600:
/* 801D1600 001CD260  42 00 FF A4 */	bdnz lbl_801D15A4
lbl_801D1604:
/* 801D1604 001CD264  7C 05 30 40 */	cmplw r5, r6
/* 801D1608 001CD268  7C E8 48 50 */	subf r7, r8, r9
/* 801D160C 001CD26C  7C 06 28 50 */	subf r0, r6, r5
/* 801D1610 001CD270  40 80 00 08 */	bge lbl_801D1618
/* 801D1614 001CD274  38 E7 FF FF */	addi r7, r7, -1
lbl_801D1618:
/* 801D1618 001CD278  2C 07 00 00 */	cmpwi r7, 0
/* 801D161C 001CD27C  41 80 00 0C */	blt lbl_801D1628
/* 801D1620 001CD280  7C E9 3B 78 */	mr r9, r7
/* 801D1624 001CD284  7C 05 03 78 */	mr r5, r0
lbl_801D1628:
/* 801D1628 001CD288  7D 20 2B 79 */	or. r0, r9, r5
/* 801D162C 001CD28C  40 82 00 18 */	bne lbl_801D1644
/* 801D1630 001CD290  3C 60 80 40 */	lis r3, lbl_803FD328@ha
/* 801D1634 001CD294  54 80 27 38 */	rlwinm r0, r4, 4, 0x1c, 0x1c
/* 801D1638 001CD298  38 63 D3 28 */	addi r3, r3, lbl_803FD328@l
/* 801D163C 001CD29C  7C 23 04 AE */	lfdx f1, r3, r0
/* 801D1640 001CD2A0  48 00 00 B0 */	b lbl_801D16F0
lbl_801D1644:
/* 801D1644 001CD2A4  3C 00 00 10 */	lis r0, 0x10
/* 801D1648 001CD2A8  48 00 00 18 */	b lbl_801D1660
lbl_801D164C:
/* 801D164C 001CD2AC  54 A7 0F FE */	srwi r7, r5, 0x1f
/* 801D1650 001CD2B0  55 26 08 3C */	slwi r6, r9, 1
/* 801D1654 001CD2B4  7D 27 32 14 */	add r9, r7, r6
/* 801D1658 001CD2B8  7C A5 2A 14 */	add r5, r5, r5
/* 801D165C 001CD2BC  38 63 FF FF */	addi r3, r3, -1
lbl_801D1660:
/* 801D1660 001CD2C0  7C 09 00 00 */	cmpw r9, r0
/* 801D1664 001CD2C4  41 80 FF E8 */	blt lbl_801D164C
/* 801D1668 001CD2C8  2C 03 FC 02 */	cmpwi r3, -1022
/* 801D166C 001CD2CC  41 80 00 24 */	blt lbl_801D1690
/* 801D1670 001CD2D0  38 03 03 FF */	addi r0, r3, 0x3ff
/* 801D1674 001CD2D4  3C 69 FF F0 */	addis r3, r9, 0xfff0
/* 801D1678 001CD2D8  54 00 A0 16 */	slwi r0, r0, 0x14
/* 801D167C 001CD2DC  90 A1 00 0C */	stw r5, 0xc(r1)
/* 801D1680 001CD2E0  7C 60 03 78 */	or r0, r3, r0
/* 801D1684 001CD2E4  7C 00 23 78 */	or r0, r0, r4
/* 801D1688 001CD2E8  90 01 00 08 */	stw r0, 8(r1)
/* 801D168C 001CD2EC  48 00 00 60 */	b lbl_801D16EC
lbl_801D1690:
/* 801D1690 001CD2F0  20 C3 FC 02 */	subfic r6, r3, -1022
/* 801D1694 001CD2F4  2C 06 00 14 */	cmpwi r6, 0x14
/* 801D1698 001CD2F8  41 81 00 1C */	bgt lbl_801D16B4
/* 801D169C 001CD2FC  20 06 00 20 */	subfic r0, r6, 0x20
/* 801D16A0 001CD300  7C A3 34 30 */	srw r3, r5, r6
/* 801D16A4 001CD304  7D 20 00 30 */	slw r0, r9, r0
/* 801D16A8 001CD308  7D 29 36 30 */	sraw r9, r9, r6
/* 801D16AC 001CD30C  7C 63 03 78 */	or r3, r3, r0
/* 801D16B0 001CD310  48 00 00 30 */	b lbl_801D16E0
lbl_801D16B4:
/* 801D16B4 001CD314  2C 06 00 1F */	cmpwi r6, 0x1f
/* 801D16B8 001CD318  41 81 00 1C */	bgt lbl_801D16D4
/* 801D16BC 001CD31C  20 66 00 20 */	subfic r3, r6, 0x20
/* 801D16C0 001CD320  7C A0 34 30 */	srw r0, r5, r6
/* 801D16C4 001CD324  7D 23 18 30 */	slw r3, r9, r3
/* 801D16C8 001CD328  7C 89 23 78 */	mr r9, r4
/* 801D16CC 001CD32C  7C 63 03 78 */	or r3, r3, r0
/* 801D16D0 001CD330  48 00 00 10 */	b lbl_801D16E0
lbl_801D16D4:
/* 801D16D4 001CD334  38 06 FF E0 */	addi r0, r6, -32
/* 801D16D8 001CD338  7D 23 06 30 */	sraw r3, r9, r0
/* 801D16DC 001CD33C  7C 89 23 78 */	mr r9, r4
lbl_801D16E0:
/* 801D16E0 001CD340  7D 20 23 78 */	or r0, r9, r4
/* 801D16E4 001CD344  90 61 00 0C */	stw r3, 0xc(r1)
/* 801D16E8 001CD348  90 01 00 08 */	stw r0, 8(r1)
lbl_801D16EC:
/* 801D16EC 001CD34C  C8 21 00 08 */	lfd f1, 8(r1)
lbl_801D16F0:
/* 801D16F0 001CD350  38 21 00 20 */	addi r1, r1, 0x20
/* 801D16F4 001CD354  4E 80 00 20 */	blr