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

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

.global ldexp
ldexp:
/* 801D4318 001CFF78  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801D431C 001CFF7C  7C 08 02 A6 */	mflr r0
/* 801D4320 001CFF80  90 01 00 24 */	stw r0, 0x24(r1)
/* 801D4324 001CFF84  DB E1 00 18 */	stfd f31, 0x18(r1)
/* 801D4328 001CFF88  FF E0 08 90 */	fmr f31, f1
/* 801D432C 001CFF8C  93 E1 00 14 */	stw r31, 0x14(r1)
/* 801D4330 001CFF90  7C 7F 1B 78 */	mr r31, r3
/* 801D4334 001CFF94  D8 21 00 08 */	stfd f1, 8(r1)
/* 801D4338 001CFF98  4B FF 63 F9 */	bl __fpclassifyd
/* 801D433C 001CFF9C  2C 03 00 02 */	cmpwi r3, 2
/* 801D4340 001CFFA0  40 81 00 10 */	ble lbl_801D4350
/* 801D4344 001CFFA4  C8 02 95 A0 */	lfd f0, lbl_80641BA0-_SDA2_BASE_(r2)
/* 801D4348 001CFFA8  FC 00 F8 00 */	fcmpu cr0, f0, f31
/* 801D434C 001CFFAC  40 82 00 0C */	bne lbl_801D4358
lbl_801D4350:
/* 801D4350 001CFFB0  FC 20 F8 90 */	fmr f1, f31
/* 801D4354 001CFFB4  48 00 01 18 */	b lbl_801D446C
lbl_801D4358:
/* 801D4358 001CFFB8  80 A1 00 08 */	lwz r5, 8(r1)
/* 801D435C 001CFFBC  80 61 00 0C */	lwz r3, 0xc(r1)
/* 801D4360 001CFFC0  54 A4 65 7F */	rlwinm. r4, r5, 0xc, 0x15, 0x1f
/* 801D4364 001CFFC4  40 82 00 4C */	bne lbl_801D43B0
/* 801D4368 001CFFC8  54 A0 00 7E */	clrlwi r0, r5, 1
/* 801D436C 001CFFCC  7C 60 03 79 */	or. r0, r3, r0
/* 801D4370 001CFFD0  40 82 00 0C */	bne lbl_801D437C
/* 801D4374 001CFFD4  FC 20 F8 90 */	fmr f1, f31
/* 801D4378 001CFFD8  48 00 00 F4 */	b lbl_801D446C
lbl_801D437C:
/* 801D437C 001CFFDC  C8 02 95 A8 */	lfd f0, lbl_80641BA8-_SDA2_BASE_(r2)
/* 801D4380 001CFFE0  3C 60 FF FF */	lis r3, 0xFFFF3CB0@ha
/* 801D4384 001CFFE4  38 03 3C B0 */	addi r0, r3, 0xFFFF3CB0@l
/* 801D4388 001CFFE8  FF FF 00 32 */	fmul f31, f31, f0
/* 801D438C 001CFFEC  7C 1F 00 00 */	cmpw r31, r0
/* 801D4390 001CFFF0  DB E1 00 08 */	stfd f31, 8(r1)
/* 801D4394 001CFFF4  80 A1 00 08 */	lwz r5, 8(r1)
/* 801D4398 001CFFF8  54 A3 65 7E */	rlwinm r3, r5, 0xc, 0x15, 0x1f
/* 801D439C 001CFFFC  38 83 FF CA */	addi r4, r3, -54
/* 801D43A0 001D0000  40 80 00 10 */	bge lbl_801D43B0
/* 801D43A4 001D0004  C8 02 95 B0 */	lfd f0, lbl_80641BB0-_SDA2_BASE_(r2)
/* 801D43A8 001D0008  FC 20 07 F2 */	fmul f1, f0, f31
/* 801D43AC 001D000C  48 00 00 C0 */	b lbl_801D446C
lbl_801D43B0:
/* 801D43B0 001D0010  2C 04 07 FF */	cmpwi r4, 0x7ff
/* 801D43B4 001D0014  40 82 00 0C */	bne lbl_801D43C0
/* 801D43B8 001D0018  FC 3F F8 2A */	fadd f1, f31, f31
/* 801D43BC 001D001C  48 00 00 B0 */	b lbl_801D446C
lbl_801D43C0:
/* 801D43C0 001D0020  7C 84 FA 14 */	add r4, r4, r31
/* 801D43C4 001D0024  2C 04 07 FE */	cmpwi r4, 0x7fe
/* 801D43C8 001D0028  40 81 00 1C */	ble lbl_801D43E4
/* 801D43CC 001D002C  FC 40 F8 90 */	fmr f2, f31
/* 801D43D0 001D0030  C8 22 95 B8 */	lfd f1, lbl_80641BB8-_SDA2_BASE_(r2)
/* 801D43D4 001D0034  4B FF FC 79 */	bl copysign
/* 801D43D8 001D0038  C8 02 95 B8 */	lfd f0, lbl_80641BB8-_SDA2_BASE_(r2)
/* 801D43DC 001D003C  FC 20 00 72 */	fmul f1, f0, f1
/* 801D43E0 001D0040  48 00 00 8C */	b lbl_801D446C
lbl_801D43E4:
/* 801D43E4 001D0044  2C 04 00 00 */	cmpwi r4, 0
/* 801D43E8 001D0048  40 81 00 1C */	ble lbl_801D4404
/* 801D43EC 001D004C  54 A3 03 00 */	rlwinm r3, r5, 0, 0xc, 0
/* 801D43F0 001D0050  54 80 A0 16 */	slwi r0, r4, 0x14
/* 801D43F4 001D0054  7C 60 03 78 */	or r0, r3, r0
/* 801D43F8 001D0058  90 01 00 08 */	stw r0, 8(r1)
/* 801D43FC 001D005C  C8 21 00 08 */	lfd f1, 8(r1)
/* 801D4400 001D0060  48 00 00 6C */	b lbl_801D446C
lbl_801D4404:
/* 801D4404 001D0064  2C 04 FF CA */	cmpwi r4, -54
/* 801D4408 001D0068  41 81 00 44 */	bgt lbl_801D444C
/* 801D440C 001D006C  3C 60 00 01 */	lis r3, 0x0000C350@ha
/* 801D4410 001D0070  38 03 C3 50 */	addi r0, r3, 0x0000C350@l
/* 801D4414 001D0074  7C 1F 00 00 */	cmpw r31, r0
/* 801D4418 001D0078  40 81 00 1C */	ble lbl_801D4434
/* 801D441C 001D007C  FC 40 F8 90 */	fmr f2, f31
/* 801D4420 001D0080  C8 22 95 B8 */	lfd f1, lbl_80641BB8-_SDA2_BASE_(r2)
/* 801D4424 001D0084  4B FF FC 29 */	bl copysign
/* 801D4428 001D0088  C8 02 95 B8 */	lfd f0, lbl_80641BB8-_SDA2_BASE_(r2)
/* 801D442C 001D008C  FC 20 00 72 */	fmul f1, f0, f1
/* 801D4430 001D0090  48 00 00 3C */	b lbl_801D446C
lbl_801D4434:
/* 801D4434 001D0094  FC 40 F8 90 */	fmr f2, f31
/* 801D4438 001D0098  C8 22 95 B0 */	lfd f1, lbl_80641BB0-_SDA2_BASE_(r2)
/* 801D443C 001D009C  4B FF FC 11 */	bl copysign
/* 801D4440 001D00A0  C8 02 95 B0 */	lfd f0, lbl_80641BB0-_SDA2_BASE_(r2)
/* 801D4444 001D00A4  FC 20 00 72 */	fmul f1, f0, f1
/* 801D4448 001D00A8  48 00 00 24 */	b lbl_801D446C
lbl_801D444C:
/* 801D444C 001D00AC  38 04 00 36 */	addi r0, r4, 0x36
/* 801D4450 001D00B0  54 A3 03 00 */	rlwinm r3, r5, 0, 0xc, 0
/* 801D4454 001D00B4  54 00 A0 16 */	slwi r0, r0, 0x14
/* 801D4458 001D00B8  C8 22 95 C0 */	lfd f1, lbl_80641BC0-_SDA2_BASE_(r2)
/* 801D445C 001D00BC  7C 60 03 78 */	or r0, r3, r0
/* 801D4460 001D00C0  90 01 00 08 */	stw r0, 8(r1)
/* 801D4464 001D00C4  C8 01 00 08 */	lfd f0, 8(r1)
/* 801D4468 001D00C8  FC 21 00 32 */	fmul f1, f1, f0
lbl_801D446C:
/* 801D446C 001D00CC  80 01 00 24 */	lwz r0, 0x24(r1)
/* 801D4470 001D00D0  CB E1 00 18 */	lfd f31, 0x18(r1)
/* 801D4474 001D00D4  83 E1 00 14 */	lwz r31, 0x14(r1)
/* 801D4478 001D00D8  7C 08 03 A6 */	mtlr r0
/* 801D447C 001D00DC  38 21 00 20 */	addi r1, r1, 0x20
/* 801D4480 001D00E0  4E 80 00 20 */	blr