summaryrefslogtreecommitdiff
path: root/asm/MSL_C/MSL_Common_Embedded/Math/e_sqrt.s
blob: d86b67f344c4f00599a04cd04d03db79d86d4fac (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
.include "macros.inc"

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

.global __ieee754_sqrt
__ieee754_sqrt:
/* 801D45E8 001D0248  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801D45EC 001D024C  D8 21 00 08 */	stfd f1, 8(r1)
/* 801D45F0 001D0250  80 C1 00 08 */	lwz r6, 8(r1)
/* 801D45F4 001D0254  80 01 00 0C */	lwz r0, 0xc(r1)
/* 801D45F8 001D0258  54 C3 00 56 */	rlwinm r3, r6, 0, 1, 0xb
/* 801D45FC 001D025C  3C 63 80 10 */	addis r3, r3, 0x8010
/* 801D4600 001D0260  28 03 00 00 */	cmplwi r3, 0
/* 801D4604 001D0264  40 82 00 18 */	bne lbl_801D461C
/* 801D4608 001D0268  FC 01 00 72 */	fmul f0, f1, f1
/* 801D460C 001D026C  38 00 00 21 */	li r0, 0x21
/* 801D4610 001D0270  90 0D 9F C8 */	stw r0, lbl_8063F288-_SDA_BASE_(r13)
/* 801D4614 001D0274  FC 21 00 2A */	fadd f1, f1, f0
/* 801D4618 001D0278  48 00 02 10 */	b lbl_801D4828
lbl_801D461C:
/* 801D461C 001D027C  2C 86 00 00 */	cmpwi cr1, r6, 0
/* 801D4620 001D0280  41 85 00 2C */	bgt cr1, lbl_801D464C
/* 801D4624 001D0284  54 C3 00 7E */	clrlwi r3, r6, 1
/* 801D4628 001D0288  7C 03 1B 79 */	or. r3, r0, r3
/* 801D462C 001D028C  40 82 00 08 */	bne lbl_801D4634
/* 801D4630 001D0290  48 00 01 F8 */	b lbl_801D4828
lbl_801D4634:
/* 801D4634 001D0294  40 84 00 18 */	bge cr1, lbl_801D464C
/* 801D4638 001D0298  38 00 00 21 */	li r0, 0x21
/* 801D463C 001D029C  3C 60 80 64 */	lis r3, lbl_8063D6B8@ha
/* 801D4640 001D02A0  90 0D 9F C8 */	stw r0, lbl_8063F288-_SDA_BASE_(r13)
/* 801D4644 001D02A4  C0 23 D6 B8 */	lfs f1, lbl_8063D6B8@l(r3)
/* 801D4648 001D02A8  48 00 01 E0 */	b lbl_801D4828
lbl_801D464C:
/* 801D464C 001D02AC  7C C3 A6 71 */	srawi. r3, r6, 0x14
/* 801D4650 001D02B0  40 82 00 50 */	bne lbl_801D46A0
/* 801D4654 001D02B4  48 00 00 14 */	b lbl_801D4668
lbl_801D4658:
/* 801D4658 001D02B8  54 04 AA FE */	srwi r4, r0, 0xb
/* 801D465C 001D02BC  54 00 A8 14 */	slwi r0, r0, 0x15
/* 801D4660 001D02C0  7C C6 23 78 */	or r6, r6, r4
/* 801D4664 001D02C4  38 63 FF EB */	addi r3, r3, -21
lbl_801D4668:
/* 801D4668 001D02C8  2C 06 00 00 */	cmpwi r6, 0
/* 801D466C 001D02CC  41 82 FF EC */	beq lbl_801D4658
/* 801D4670 001D02D0  38 E0 00 00 */	li r7, 0
/* 801D4674 001D02D4  48 00 00 0C */	b lbl_801D4680
lbl_801D4678:
/* 801D4678 001D02D8  54 C6 08 3C */	slwi r6, r6, 1
/* 801D467C 001D02DC  38 E7 00 01 */	addi r7, r7, 1
lbl_801D4680:
/* 801D4680 001D02E0  54 C4 02 D7 */	rlwinm. r4, r6, 0, 0xb, 0xb
/* 801D4684 001D02E4  41 82 FF F4 */	beq lbl_801D4678
/* 801D4688 001D02E8  20 87 00 20 */	subfic r4, r7, 0x20
/* 801D468C 001D02EC  38 A7 FF FF */	addi r5, r7, -1
/* 801D4690 001D02F0  7C 04 24 30 */	srw r4, r0, r4
/* 801D4694 001D02F4  7C 00 38 30 */	slw r0, r0, r7
/* 801D4698 001D02F8  7C 65 18 50 */	subf r3, r5, r3
/* 801D469C 001D02FC  7C C6 23 78 */	or r6, r6, r4
lbl_801D46A0:
/* 801D46A0 001D0300  38 83 FC 01 */	addi r4, r3, -1023
/* 801D46A4 001D0304  54 C5 03 3E */	clrlwi r5, r6, 0xc
/* 801D46A8 001D0308  54 84 07 FF */	clrlwi. r4, r4, 0x1f
/* 801D46AC 001D030C  64 A6 00 10 */	oris r6, r5, 0x10
/* 801D46B0 001D0310  41 82 00 14 */	beq lbl_801D46C4
/* 801D46B4 001D0314  54 05 0F FE */	srwi r5, r0, 0x1f
/* 801D46B8 001D0318  7C 86 32 14 */	add r4, r6, r6
/* 801D46BC 001D031C  7C C5 22 14 */	add r6, r5, r4
/* 801D46C0 001D0320  7C 00 02 14 */	add r0, r0, r0
lbl_801D46C4:
/* 801D46C4 001D0324  54 05 0F FE */	srwi r5, r0, 0x1f
/* 801D46C8 001D0328  7C 86 32 14 */	add r4, r6, r6
/* 801D46CC 001D032C  7C C5 22 14 */	add r6, r5, r4
/* 801D46D0 001D0330  7C 00 02 14 */	add r0, r0, r0
/* 801D46D4 001D0334  39 20 00 00 */	li r9, 0
/* 801D46D8 001D0338  39 60 00 00 */	li r11, 0
/* 801D46DC 001D033C  39 40 00 00 */	li r10, 0
/* 801D46E0 001D0340  39 80 00 00 */	li r12, 0
/* 801D46E4 001D0344  3C E0 00 20 */	lis r7, 0x20
/* 801D46E8 001D0348  48 00 00 30 */	b lbl_801D4718
lbl_801D46EC:
/* 801D46EC 001D034C  7C 8B 3A 14 */	add r4, r11, r7
/* 801D46F0 001D0350  7C 04 30 00 */	cmpw r4, r6
/* 801D46F4 001D0354  41 81 00 10 */	bgt lbl_801D4704
/* 801D46F8 001D0358  7D 64 3A 14 */	add r11, r4, r7
/* 801D46FC 001D035C  7C C4 30 50 */	subf r6, r4, r6
/* 801D4700 001D0360  7D 8C 3A 14 */	add r12, r12, r7
lbl_801D4704:
/* 801D4704 001D0364  54 05 0F FE */	srwi r5, r0, 0x1f
/* 801D4708 001D0368  7C 86 32 14 */	add r4, r6, r6
/* 801D470C 001D036C  7C C5 22 14 */	add r6, r5, r4
/* 801D4710 001D0370  7C 00 02 14 */	add r0, r0, r0
/* 801D4714 001D0374  54 E7 F8 7E */	srwi r7, r7, 1
lbl_801D4718:
/* 801D4718 001D0378  2C 07 00 00 */	cmpwi r7, 0
/* 801D471C 001D037C  40 82 FF D0 */	bne lbl_801D46EC
/* 801D4720 001D0380  3C E0 80 00 */	lis r7, 0x8000
/* 801D4724 001D0384  48 00 00 6C */	b lbl_801D4790
lbl_801D4728:
/* 801D4728 001D0388  7C 0B 30 00 */	cmpw r11, r6
/* 801D472C 001D038C  7D 65 5B 78 */	mr r5, r11
/* 801D4730 001D0390  7D 09 3A 14 */	add r8, r9, r7
/* 801D4734 001D0394  41 80 00 10 */	blt lbl_801D4744
/* 801D4738 001D0398  40 82 00 44 */	bne lbl_801D477C
/* 801D473C 001D039C  7C 08 00 40 */	cmplw r8, r0
/* 801D4740 001D03A0  41 81 00 3C */	bgt lbl_801D477C
lbl_801D4744:
/* 801D4744 001D03A4  55 04 00 00 */	rlwinm r4, r8, 0, 0, 0
/* 801D4748 001D03A8  7D 28 3A 14 */	add r9, r8, r7
/* 801D474C 001D03AC  3C 84 80 00 */	addis r4, r4, 0x8000
/* 801D4750 001D03B0  28 04 00 00 */	cmplwi r4, 0
/* 801D4754 001D03B4  40 82 00 10 */	bne lbl_801D4764
/* 801D4758 001D03B8  55 24 00 01 */	rlwinm. r4, r9, 0, 0, 0
/* 801D475C 001D03BC  40 82 00 08 */	bne lbl_801D4764
/* 801D4760 001D03C0  39 6B 00 01 */	addi r11, r11, 1
lbl_801D4764:
/* 801D4764 001D03C4  7C 00 40 40 */	cmplw r0, r8
/* 801D4768 001D03C8  7C C5 30 50 */	subf r6, r5, r6
/* 801D476C 001D03CC  40 80 00 08 */	bge lbl_801D4774
/* 801D4770 001D03D0  38 C6 FF FF */	addi r6, r6, -1
lbl_801D4774:
/* 801D4774 001D03D4  7C 08 00 50 */	subf r0, r8, r0
/* 801D4778 001D03D8  7D 4A 3A 14 */	add r10, r10, r7
lbl_801D477C:
/* 801D477C 001D03DC  54 05 0F FE */	srwi r5, r0, 0x1f
/* 801D4780 001D03E0  7C 86 32 14 */	add r4, r6, r6
/* 801D4784 001D03E4  7C C5 22 14 */	add r6, r5, r4
/* 801D4788 001D03E8  7C 00 02 14 */	add r0, r0, r0
/* 801D478C 001D03EC  54 E7 F8 7E */	srwi r7, r7, 1
lbl_801D4790:
/* 801D4790 001D03F0  2C 07 00 00 */	cmpwi r7, 0
/* 801D4794 001D03F4  40 82 FF 94 */	bne lbl_801D4728
/* 801D4798 001D03F8  7C C0 03 79 */	or. r0, r6, r0
/* 801D479C 001D03FC  41 82 00 58 */	beq lbl_801D47F4
/* 801D47A0 001D0400  C8 02 95 D8 */	lfd f0, lbl_80641BD8-_SDA2_BASE_(r2)
/* 801D47A4 001D0404  FC 00 00 40 */	fcmpo cr0, f0, f0
/* 801D47A8 001D0408  D8 01 00 10 */	stfd f0, 0x10(r1)
/* 801D47AC 001D040C  4C 41 13 82 */	cror 2, 1, 2
/* 801D47B0 001D0410  40 82 00 44 */	bne lbl_801D47F4
/* 801D47B4 001D0414  3C 0A 00 01 */	addis r0, r10, 1
/* 801D47B8 001D0418  D8 01 00 10 */	stfd f0, 0x10(r1)
/* 801D47BC 001D041C  28 00 FF FF */	cmplwi r0, 0xffff
/* 801D47C0 001D0420  40 82 00 10 */	bne lbl_801D47D0
/* 801D47C4 001D0424  39 40 00 00 */	li r10, 0
/* 801D47C8 001D0428  39 8C 00 01 */	addi r12, r12, 1
/* 801D47CC 001D042C  48 00 00 28 */	b lbl_801D47F4
lbl_801D47D0:
/* 801D47D0 001D0430  FC 00 00 40 */	fcmpo cr0, f0, f0
/* 801D47D4 001D0434  40 81 00 18 */	ble lbl_801D47EC
/* 801D47D8 001D0438  28 00 FF FE */	cmplwi r0, 0xfffe
/* 801D47DC 001D043C  40 82 00 08 */	bne lbl_801D47E4
/* 801D47E0 001D0440  39 8C 00 01 */	addi r12, r12, 1
lbl_801D47E4:
/* 801D47E4 001D0444  39 4A 00 02 */	addi r10, r10, 2
/* 801D47E8 001D0448  48 00 00 0C */	b lbl_801D47F4
lbl_801D47EC:
/* 801D47EC 001D044C  55 40 07 FE */	clrlwi r0, r10, 0x1f
/* 801D47F0 001D0450  7D 4A 02 14 */	add r10, r10, r0
lbl_801D47F4:
/* 801D47F4 001D0454  55 80 07 FE */	clrlwi r0, r12, 0x1f
/* 801D47F8 001D0458  7D 84 0E 70 */	srawi r4, r12, 1
/* 801D47FC 001D045C  2C 00 00 01 */	cmpwi r0, 1
/* 801D4800 001D0460  55 45 F8 7E */	srwi r5, r10, 1
/* 801D4804 001D0464  3C 84 3F E0 */	addis r4, r4, 0x3fe0
/* 801D4808 001D0468  40 82 00 08 */	bne lbl_801D4810
/* 801D480C 001D046C  64 A5 80 00 */	oris r5, r5, 0x8000
lbl_801D4810:
/* 801D4810 001D0470  38 03 FC 01 */	addi r0, r3, -1023
/* 801D4814 001D0474  90 A1 00 14 */	stw r5, 0x14(r1)
/* 801D4818 001D0478  54 00 98 16 */	rlwinm r0, r0, 0x13, 0, 0xb
/* 801D481C 001D047C  7C 84 02 14 */	add r4, r4, r0
/* 801D4820 001D0480  90 81 00 10 */	stw r4, 0x10(r1)
/* 801D4824 001D0484  C8 21 00 10 */	lfd f1, 0x10(r1)
lbl_801D4828:
/* 801D4828 001D0488  38 21 00 20 */	addi r1, r1, 0x20
/* 801D482C 001D048C  4E 80 00 20 */	blr