mirror of https://github.com/PrimeDecomp/prime.git
Runtime/math matches; better libc headers
This commit is contained in:
parent
e50328cd89
commit
bef7db1748
74
Makefile
74
Makefile
|
@ -50,9 +50,9 @@ include obj_files.mk
|
|||
|
||||
O_FILES := $(INIT_O_FILES) $(METROTRK_FILES) \
|
||||
$(METROIDPRIME) $(WORLDFORMAT) $(WEAPONS) $(METARENDER) $(GUISYS) $(COLLISION) \
|
||||
$(KYOTO) $(AI_FILES) \
|
||||
$(KYOTO_1) $(ZLIB_FILES) $(KYOTO_2) $(AI_FILES) \
|
||||
$(AR_FILES) $(BASE_FILES) $(DB_FILES) $(DSP_FILES) $(DVD_FILES) $(GX_FILES) $(MTX_FILES) \
|
||||
$(OS_FILES) $(PAD_FILES) $(VI_FILES) $(MSL_PPCEABI_BARE_H) $(MUSYX_FILES) \
|
||||
$(OS_FILES) $(PAD_FILES) $(VI_FILES) $(MSL_PPCEABI_BARE_H) $(MSL_COMMON_MATH) $(MUSYX_FILES) \
|
||||
$(DTK_FILES) $(CARD_FILES) $(SI_FILES) $(EXI_FILES) $(THP_FILES) \
|
||||
$(GBA_FILES)
|
||||
DEPENDS := $(O_FILES:.o=.d)
|
||||
|
@ -95,9 +95,13 @@ TRANSFORM_DEP := tools/transform-dep.py
|
|||
FRANK := tools/franklite.py
|
||||
|
||||
# Options
|
||||
INCLUDES := -i include/
|
||||
INCLUDES := -i include/ -i libc/
|
||||
ASM_INCLUDES := -I include/
|
||||
|
||||
# DotKuribo/llvm-project
|
||||
CLANG_CC ?= clang-kuribo
|
||||
CLANG_CFLAGS := --target=ppc32-kuribo -mcpu=750 -nostdlib -fno-exceptions -fno-rtti -O3 -Wall -Wno-trigraphs -Wno-inline-new-delete -Wno-unused-private-field -fpermissive -std=gnu++11 $(ASM_INCLUDES)
|
||||
|
||||
ASFLAGS := -mgekko $(ASM_INCLUDES) --defsym version=$(VERSION_NUM)
|
||||
ifeq ($(VERBOSE),1)
|
||||
# this set of LDFLAGS outputs warnings.
|
||||
|
@ -107,50 +111,32 @@ ifeq ($(VERBOSE),0)
|
|||
# this set of LDFLAGS generates no warnings.
|
||||
LDFLAGS := $(MAPGEN) -fp fmadd -nodefaults -w off
|
||||
endif
|
||||
CFLAGS_1.2 = -proc gekko -nodefaults -Cpp_exceptions off -RTTI off -fp fmadd -fp_contract on -O4,p -maxerrors 1 -enum int -inline auto -MMD $(INCLUDES)
|
||||
CFLAGS_MUSYX = -proc gekko -nodefaults -Cpp_exceptions off -RTTI off -fp fmadd -str reuse,pool,readonly -O4,p -maxerrors 1 -enum int -inline auto -MMD $(INCLUDES)
|
||||
CFLAGS = $(CFLAGS_1.2) -use_lmw_stmw on -str reuse,pool,readonly -gccinc -nosyspath -inline deferred,noauto -common on
|
||||
CFLAGS_ZLIB = $(CFLAGS_1.2) -use_lmw_stmw on -str reuse,pool,readonly -gccinc -nosyspath -inline deferred,auto
|
||||
CFLAGS_1.2 += -str reuse
|
||||
CFLAGS_BASE = -proc gekko -nodefaults -Cpp_exceptions off -RTTI off -fp hard -fp_contract on -O4,p -maxerrors 1 -enum int -inline auto -str reuse -nosyspath -MMD $(INCLUDES)
|
||||
CFLAGS = $(CFLAGS_BASE) -use_lmw_stmw on -str reuse,pool,readonly -gccinc -inline deferred,noauto -common on
|
||||
CFLAGS_RUNTIME = $(CFLAGS_BASE) -use_lmw_stmw on -str reuse,pool,readonly -gccinc -inline deferred,auto
|
||||
CFLAGS_MUSYX = $(CFLAGS_BASE) -str reuse,pool,readonly
|
||||
|
||||
ifeq ($(VERBOSE),0)
|
||||
# this set of ASFLAGS generates no warnings.
|
||||
ASFLAGS += -W
|
||||
endif
|
||||
|
||||
$(BUILD_DIR)/src/os/__start.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/os/__start.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/MetroTRK/mslsupp.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/MetroTRK/mslsupp.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/PPCArch.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/PPCArch.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/ai.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/ai.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/os/OSAudioSystem.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/os/OSAudioSystem.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/os/OSReset.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/os/OSReset.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/dsp/dsp.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/dsp/dsp.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/dsp/dsp_debug.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/musyx/seq_api.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/synth_dbtab.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/snd_service.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/snd_init.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/dsp_import.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/hw_memory.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/reverb_fx.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/delay_fx.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/creverb_fx.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/musyx/synth_ac.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/adler32.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/infblock.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/infcodes.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/inffast.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/inflate.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/inftrees.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/infutil.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/zutil.o: CFLAGS := $(CFLAGS_ZLIB)
|
||||
$(INIT_O_FILES): MWCC_VERSION := 1.2.5
|
||||
$(INIT_O_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(METROTRK_FILES): MWCC_VERSION := 1.2.5
|
||||
$(METROTRK_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(BASE_FILES): MWCC_VERSION := 1.2.5
|
||||
$(BASE_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(AI_FILES): MWCC_VERSION := 1.2.5
|
||||
$(AI_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(OS_FILES): MWCC_VERSION := 1.2.5
|
||||
$(OS_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(DSP_FILES): MWCC_VERSION := 1.2.5
|
||||
$(DSP_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(MUSYX_FILES): CFLAGS := $(CFLAGS_MUSYX)
|
||||
$(ZLIB_FILES): CFLAGS := $(CFLAGS_RUNTIME)
|
||||
$(MSL_PPCEABI_BARE_H): CFLAGS := $(CFLAGS_RUNTIME)
|
||||
$(MSL_COMMON_MATH): CFLAGS := $(CFLAGS_RUNTIME)
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
@ -199,9 +185,13 @@ $(ELF): $(O_FILES) $(LDSCRIPT)
|
|||
-include $(DEPENDS)
|
||||
|
||||
$(BUILD_DIR)/%.o: %.s
|
||||
@echo Assembling $<
|
||||
@echo "Assembling" $<
|
||||
$(QUIET) $(AS) $(ASFLAGS) -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/%.clang.o: %.cpp
|
||||
@echo "Clang " $<
|
||||
$(QUIET) $(CLANG_CC) $(CLANG_CFLAGS) -c -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/%.ep.o: $(BUILD_DIR)/%.o
|
||||
@echo Frank is fixing $<
|
||||
$(QUIET) $(PYTHON) $(FRANK) $< $@
|
||||
|
|
|
@ -46,9 +46,9 @@ FourCCToTypeIdx__11CFactoryMgrFUi:
|
|||
/* 803385E4 00335544 38 00 FF FF */ li r0, -1
|
||||
/* 803385E8 00335548 48 00 00 14 */ b lbl_803385FC
|
||||
lbl_803385EC:
|
||||
/* 803385EC 0033554C 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 803385EC 0033554C 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 803385F0 00335550 54 00 06 3E */ clrlwi r0, r0, 0x18
|
||||
/* 803385F4 00335554 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 803385F4 00335554 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 803385F8 00335558 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_803385FC:
|
||||
/* 803385FC 0033555C 88 81 00 09 */ lbz r4, 9(r1)
|
||||
|
@ -59,9 +59,9 @@ lbl_803385FC:
|
|||
/* 80338610 00335570 38 00 FF FF */ li r0, -1
|
||||
/* 80338614 00335574 48 00 00 14 */ b lbl_80338628
|
||||
lbl_80338618:
|
||||
/* 80338618 00335578 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80338618 00335578 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 8033861C 0033557C 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80338620 00335580 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80338620 00335580 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80338624 00335584 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_80338628:
|
||||
/* 80338628 00335588 88 81 00 0A */ lbz r4, 0xa(r1)
|
||||
|
@ -72,9 +72,9 @@ lbl_80338628:
|
|||
/* 8033863C 0033559C 38 00 FF FF */ li r0, -1
|
||||
/* 80338640 003355A0 48 00 00 14 */ b lbl_80338654
|
||||
lbl_80338644:
|
||||
/* 80338644 003355A4 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80338644 003355A4 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80338648 003355A8 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 8033864C 003355AC 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 8033864C 003355AC 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80338650 003355B0 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_80338654:
|
||||
/* 80338654 003355B4 88 81 00 0B */ lbz r4, 0xb(r1)
|
||||
|
@ -85,9 +85,9 @@ lbl_80338654:
|
|||
/* 80338668 003355C8 38 00 FF FF */ li r0, -1
|
||||
/* 8033866C 003355CC 48 00 00 14 */ b lbl_80338680
|
||||
lbl_80338670:
|
||||
/* 80338670 003355D0 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80338670 003355D0 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80338674 003355D4 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80338678 003355D8 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80338678 003355D8 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 8033867C 003355DC 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_80338680:
|
||||
/* 80338680 003355E0 98 01 00 0B */ stb r0, 0xb(r1)
|
||||
|
|
|
@ -24,8 +24,8 @@ Type2Text__10SObjectTagFUi:
|
|||
/* 80341010 0033DF70 38 00 FF FF */ li r0, -1
|
||||
/* 80341014 0033DF74 48 00 00 10 */ b lbl_80341024
|
||||
lbl_80341018:
|
||||
/* 80341018 0033DF78 3C 80 80 3F */ lis r4, lbl_803F2C20@ha
|
||||
/* 8034101C 0033DF7C 38 84 2C 20 */ addi r4, r4, lbl_803F2C20@l
|
||||
/* 80341018 0033DF78 3C 80 80 3F */ lis r4, __upper_map@ha
|
||||
/* 8034101C 0033DF7C 38 84 2C 20 */ addi r4, r4, __upper_map@l
|
||||
/* 80341020 0033DF80 7C 04 00 AE */ lbzx r0, r4, r0
|
||||
lbl_80341024:
|
||||
/* 80341024 0033DF84 54 65 86 3E */ rlwinm r5, r3, 0x10, 0x18, 0x1f
|
||||
|
@ -35,8 +35,8 @@ lbl_80341024:
|
|||
/* 80341034 0033DF94 38 00 FF FF */ li r0, -1
|
||||
/* 80341038 0033DF98 48 00 00 10 */ b lbl_80341048
|
||||
lbl_8034103C:
|
||||
/* 8034103C 0033DF9C 3C 80 80 3F */ lis r4, lbl_803F2C20@ha
|
||||
/* 80341040 0033DFA0 38 84 2C 20 */ addi r4, r4, lbl_803F2C20@l
|
||||
/* 8034103C 0033DF9C 3C 80 80 3F */ lis r4, __upper_map@ha
|
||||
/* 80341040 0033DFA0 38 84 2C 20 */ addi r4, r4, __upper_map@l
|
||||
/* 80341044 0033DFA4 7C 04 28 AE */ lbzx r0, r4, r5
|
||||
lbl_80341048:
|
||||
/* 80341048 0033DFA8 54 65 C6 3E */ rlwinm r5, r3, 0x18, 0x18, 0x1f
|
||||
|
@ -47,8 +47,8 @@ lbl_80341048:
|
|||
/* 8034105C 0033DFBC 38 00 FF FF */ li r0, -1
|
||||
/* 80341060 0033DFC0 48 00 00 10 */ b lbl_80341070
|
||||
lbl_80341064:
|
||||
/* 80341064 0033DFC4 3C 80 80 3F */ lis r4, lbl_803F2C20@ha
|
||||
/* 80341068 0033DFC8 38 84 2C 20 */ addi r4, r4, lbl_803F2C20@l
|
||||
/* 80341064 0033DFC4 3C 80 80 3F */ lis r4, __upper_map@ha
|
||||
/* 80341068 0033DFC8 38 84 2C 20 */ addi r4, r4, __upper_map@l
|
||||
/* 8034106C 0033DFCC 7C 04 28 AE */ lbzx r0, r4, r5
|
||||
lbl_80341070:
|
||||
/* 80341070 0033DFD0 54 64 06 3E */ clrlwi r4, r3, 0x18
|
||||
|
@ -59,15 +59,15 @@ lbl_80341070:
|
|||
/* 80341084 0033DFE4 38 60 FF FF */ li r3, -1
|
||||
/* 80341088 0033DFE8 48 00 00 10 */ b lbl_80341098
|
||||
lbl_8034108C:
|
||||
/* 8034108C 0033DFEC 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80341090 0033DFF0 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 8034108C 0033DFEC 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80341090 0033DFF0 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80341094 0033DFF4 7C 63 20 AE */ lbzx r3, r3, r4
|
||||
lbl_80341098:
|
||||
/* 80341098 0033DFF8 38 AD A9 58 */ addi r5, r13, lbl_805A9518@sda21
|
||||
/* 8034109C 0033DFFC 38 00 00 00 */ li r0, 0
|
||||
/* 803410A0 0033E000 98 65 00 03 */ stb r3, 3(r5)
|
||||
/* 803410A4 0033E004 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 803410A8 0033E008 38 83 2A 20 */ addi r4, r3, lbl_803F2A20@l
|
||||
/* 803410A4 0033E004 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 803410A8 0033E008 38 83 2A 20 */ addi r4, r3, __ctype_map@l
|
||||
/* 803410AC 0033E00C 98 05 00 04 */ stb r0, 4(r5)
|
||||
/* 803410B0 0033E010 38 00 00 2D */ li r0, 0x2d
|
||||
/* 803410B4 0033E014 88 6D A9 58 */ lbz r3, lbl_805A9518@sda21(r13)
|
||||
|
|
|
@ -580,12 +580,12 @@ lbl_80315438:
|
|||
lbl_80315444:
|
||||
/* 80315444 003123A4 FC 01 10 00 */ fcmpu cr0, f1, f2
|
||||
/* 80315448 003123A8 41 82 00 10 */ beq lbl_80315458
|
||||
/* 8031544C 003123AC 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80315450 003123B0 C0 43 8B A0 */ lfs f2, lbl_805A8BA0@l(r3)
|
||||
/* 8031544C 003123AC 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80315450 003123B0 C0 43 8B A0 */ lfs f2, __float_nan@l(r3)
|
||||
/* 80315454 003123B4 48 00 00 0C */ b lbl_80315460
|
||||
lbl_80315458:
|
||||
/* 80315458 003123B8 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8031545C 003123BC C0 43 8B A4 */ lfs f2, lbl_805A8BA4@l(r3)
|
||||
/* 80315458 003123B8 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8031545C 003123BC C0 43 8B A4 */ lfs f2, __float_huge@l(r3)
|
||||
lbl_80315460:
|
||||
/* 80315460 003123C0 C8 02 C9 C8 */ lfd f0, lbl_805AE6E8@sda21(r2)
|
||||
/* 80315464 003123C4 FC 20 10 24 */ fdiv f1, f0, f2
|
||||
|
@ -625,12 +625,12 @@ lbl_803154D0:
|
|||
lbl_803154DC:
|
||||
/* 803154DC 0031243C FC 01 00 00 */ fcmpu cr0, f1, f0
|
||||
/* 803154E0 00312440 41 82 00 10 */ beq lbl_803154F0
|
||||
/* 803154E4 00312444 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 803154E8 00312448 C0 03 8B A0 */ lfs f0, lbl_805A8BA0@l(r3)
|
||||
/* 803154E4 00312444 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 803154E8 00312448 C0 03 8B A0 */ lfs f0, __float_nan@l(r3)
|
||||
/* 803154EC 0031244C 48 00 00 0C */ b lbl_803154F8
|
||||
lbl_803154F0:
|
||||
/* 803154F0 00312450 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 803154F4 00312454 C0 03 8B A4 */ lfs f0, lbl_805A8BA4@l(r3)
|
||||
/* 803154F0 00312450 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 803154F4 00312454 C0 03 8B A4 */ lfs f0, __float_huge@l(r3)
|
||||
lbl_803154F8:
|
||||
/* 803154F8 00312458 FC 20 00 90 */ fmr f1, f0
|
||||
/* 803154FC 0031245C 4E 80 00 20 */ blr
|
||||
|
@ -668,12 +668,12 @@ lbl_80315560:
|
|||
lbl_8031556C:
|
||||
/* 8031556C 003124CC FC 01 00 00 */ fcmpu cr0, f1, f0
|
||||
/* 80315570 003124D0 41 82 00 10 */ beq lbl_80315580
|
||||
/* 80315574 003124D4 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80315578 003124D8 C0 03 8B A0 */ lfs f0, lbl_805A8BA0@l(r3)
|
||||
/* 80315574 003124D4 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80315578 003124D8 C0 03 8B A0 */ lfs f0, __float_nan@l(r3)
|
||||
/* 8031557C 003124DC 48 00 00 0C */ b lbl_80315588
|
||||
lbl_80315580:
|
||||
/* 80315580 003124E0 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 80315584 003124E4 C0 03 8B A4 */ lfs f0, lbl_805A8BA4@l(r3)
|
||||
/* 80315580 003124E0 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 80315584 003124E4 C0 03 8B A4 */ lfs f0, __float_huge@l(r3)
|
||||
lbl_80315588:
|
||||
/* 80315588 003124E8 FC 20 00 18 */ frsp f1, f0
|
||||
/* 8031558C 003124EC 4E 80 00 20 */ blr
|
||||
|
|
|
@ -1923,6 +1923,8 @@ lbl_803D8368:
|
|||
# ROM: 0x3D5368
|
||||
.asciz "??(??)"
|
||||
.balign 4
|
||||
|
||||
# what's going on here?
|
||||
.if version < 2
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
|
|
@ -2031,12 +2031,12 @@ lbl_8005452C:
|
|||
lbl_80054538:
|
||||
/* 80054538 00051498 FC 04 08 00 */ fcmpu cr0, f4, f1
|
||||
/* 8005453C 0005149C 41 82 00 10 */ beq lbl_8005454C
|
||||
/* 80054540 000514A0 3C 80 80 5B */ lis r4, lbl_805A8BA0@ha
|
||||
/* 80054544 000514A4 C0 24 8B A0 */ lfs f1, lbl_805A8BA0@l(r4)
|
||||
/* 80054540 000514A0 3C 80 80 5B */ lis r4, __float_nan@ha
|
||||
/* 80054544 000514A4 C0 24 8B A0 */ lfs f1, __float_nan@l(r4)
|
||||
/* 80054548 000514A8 48 00 00 0C */ b lbl_80054554
|
||||
lbl_8005454C:
|
||||
/* 8005454C 000514AC 3C 80 80 5B */ lis r4, lbl_805A8BA4@ha
|
||||
/* 80054550 000514B0 C0 24 8B A4 */ lfs f1, lbl_805A8BA4@l(r4)
|
||||
/* 8005454C 000514AC 3C 80 80 5B */ lis r4, __float_huge@ha
|
||||
/* 80054550 000514B0 C0 24 8B A4 */ lfs f1, __float_huge@l(r4)
|
||||
lbl_80054554:
|
||||
/* 80054554 000514B4 FC 20 08 18 */ frsp f1, f1
|
||||
/* 80054558 000514B8 C0 02 86 60 */ lfs f0, lbl_805AA380@sda21(r2)
|
||||
|
|
|
@ -144,12 +144,12 @@ lbl_8001B704:
|
|||
lbl_8001B710:
|
||||
/* 8001B710 00018670 FC 04 48 00 */ fcmpu cr0, f4, f9
|
||||
/* 8001B714 00018674 41 82 00 10 */ beq lbl_8001B724
|
||||
/* 8001B718 00018678 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8001B71C 0001867C C1 23 8B A0 */ lfs f9, lbl_805A8BA0@l(r3)
|
||||
/* 8001B718 00018678 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8001B71C 0001867C C1 23 8B A0 */ lfs f9, __float_nan@l(r3)
|
||||
/* 8001B720 00018680 48 00 00 0C */ b lbl_8001B72C
|
||||
lbl_8001B724:
|
||||
/* 8001B724 00018684 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8001B728 00018688 C1 23 8B A4 */ lfs f9, lbl_805A8BA4@l(r3)
|
||||
/* 8001B724 00018684 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8001B728 00018688 C1 23 8B A4 */ lfs f9, __float_huge@l(r3)
|
||||
lbl_8001B72C:
|
||||
/* 8001B72C 0001868C FF 80 48 18 */ frsp f28, f9
|
||||
/* 8001B730 00018690 C0 A2 82 5C */ lfs f5, lbl_805A9F7C@sda21(r2)
|
||||
|
@ -257,12 +257,12 @@ lbl_8001B8A4:
|
|||
lbl_8001B8B0:
|
||||
/* 8001B8B0 00018810 FC 04 08 00 */ fcmpu cr0, f4, f1
|
||||
/* 8001B8B4 00018814 41 82 00 10 */ beq lbl_8001B8C4
|
||||
/* 8001B8B8 00018818 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8001B8BC 0001881C C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 8001B8B8 00018818 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8001B8BC 0001881C C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 8001B8C0 00018820 48 00 00 0C */ b lbl_8001B8CC
|
||||
lbl_8001B8C4:
|
||||
/* 8001B8C4 00018824 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8001B8C8 00018828 C0 23 8B A4 */ lfs f1, lbl_805A8BA4@l(r3)
|
||||
/* 8001B8C4 00018824 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8001B8C8 00018828 C0 23 8B A4 */ lfs f1, __float_huge@l(r3)
|
||||
lbl_8001B8CC:
|
||||
/* 8001B8CC 0001882C FF E0 08 18 */ frsp f31, f1
|
||||
/* 8001B8D0 00018830 C0 22 82 5C */ lfs f1, lbl_805A9F7C@sda21(r2)
|
||||
|
|
|
@ -38,7 +38,7 @@ lbl_805A9110:
|
|||
|
||||
.section .text, "ax"
|
||||
|
||||
.if version == 2
|
||||
.if version >= 2
|
||||
|
||||
.global PollResponse__11CGBASupportFv
|
||||
PollResponse__11CGBASupportFv:
|
||||
|
|
|
@ -8130,12 +8130,12 @@ lbl_800F4080:
|
|||
lbl_800F408C:
|
||||
/* 800F408C 000F0FEC FC 04 08 00 */ fcmpu cr0, f4, f1
|
||||
/* 800F4090 000F0FF0 41 82 00 10 */ beq lbl_800F40A0
|
||||
/* 800F4094 000F0FF4 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 800F4098 000F0FF8 C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 800F4094 000F0FF4 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 800F4098 000F0FF8 C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 800F409C 000F0FFC 48 00 00 0C */ b lbl_800F40A8
|
||||
lbl_800F40A0:
|
||||
/* 800F40A0 000F1000 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 800F40A4 000F1004 C0 23 8B A4 */ lfs f1, lbl_805A8BA4@l(r3)
|
||||
/* 800F40A0 000F1000 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 800F40A4 000F1004 C0 23 8B A4 */ lfs f1, __float_huge@l(r3)
|
||||
lbl_800F40A8:
|
||||
/* 800F40A8 000F1008 FF 80 08 18 */ frsp f28, f1
|
||||
/* 800F40AC 000F100C FC 20 E8 90 */ fmr f1, f29
|
||||
|
@ -8192,12 +8192,12 @@ lbl_800F4168:
|
|||
lbl_800F4174:
|
||||
/* 800F4174 000F10D4 FC 06 10 00 */ fcmpu cr0, f6, f2
|
||||
/* 800F4178 000F10D8 41 82 00 10 */ beq lbl_800F4188
|
||||
/* 800F417C 000F10DC 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 800F4180 000F10E0 C0 43 8B A0 */ lfs f2, lbl_805A8BA0@l(r3)
|
||||
/* 800F417C 000F10DC 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 800F4180 000F10E0 C0 43 8B A0 */ lfs f2, __float_nan@l(r3)
|
||||
/* 800F4184 000F10E4 48 00 00 0C */ b lbl_800F4190
|
||||
lbl_800F4188:
|
||||
/* 800F4188 000F10E8 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 800F418C 000F10EC C0 43 8B A4 */ lfs f2, lbl_805A8BA4@l(r3)
|
||||
/* 800F4188 000F10E8 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 800F418C 000F10EC C0 43 8B A4 */ lfs f2, __float_huge@l(r3)
|
||||
lbl_800F4190:
|
||||
/* 800F4190 000F10F0 FC 60 10 18 */ frsp f3, f2
|
||||
/* 800F4194 000F10F4 C0 42 91 50 */ lfs f2, lbl_805AAE70@sda21(r2)
|
||||
|
@ -8250,12 +8250,12 @@ lbl_800F4240:
|
|||
lbl_800F424C:
|
||||
/* 800F424C 000F11AC FC 04 10 00 */ fcmpu cr0, f4, f2
|
||||
/* 800F4250 000F11B0 41 82 00 10 */ beq lbl_800F4260
|
||||
/* 800F4254 000F11B4 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 800F4258 000F11B8 C0 43 8B A0 */ lfs f2, lbl_805A8BA0@l(r3)
|
||||
/* 800F4254 000F11B4 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 800F4258 000F11B8 C0 43 8B A0 */ lfs f2, __float_nan@l(r3)
|
||||
/* 800F425C 000F11BC 48 00 00 0C */ b lbl_800F4268
|
||||
lbl_800F4260:
|
||||
/* 800F4260 000F11C0 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 800F4264 000F11C4 C0 43 8B A4 */ lfs f2, lbl_805A8BA4@l(r3)
|
||||
/* 800F4260 000F11C0 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 800F4264 000F11C4 C0 43 8B A4 */ lfs f2, __float_huge@l(r3)
|
||||
lbl_800F4268:
|
||||
/* 800F4268 000F11C8 FC 20 E8 90 */ fmr f1, f29
|
||||
/* 800F426C 000F11CC FC 40 10 18 */ frsp f2, f2
|
||||
|
|
|
@ -3997,12 +3997,12 @@ lbl_80285524:
|
|||
lbl_80285530:
|
||||
/* 80285530 00282490 FC 04 18 00 */ fcmpu cr0, f4, f3
|
||||
/* 80285534 00282494 41 82 00 10 */ beq lbl_80285544
|
||||
/* 80285538 00282498 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8028553C 0028249C C0 63 8B A0 */ lfs f3, lbl_805A8BA0@l(r3)
|
||||
/* 80285538 00282498 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8028553C 0028249C C0 63 8B A0 */ lfs f3, __float_nan@l(r3)
|
||||
/* 80285540 002824A0 48 00 00 0C */ b lbl_8028554C
|
||||
lbl_80285544:
|
||||
/* 80285544 002824A4 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 80285548 002824A8 C0 63 8B A4 */ lfs f3, lbl_805A8BA4@l(r3)
|
||||
/* 80285544 002824A4 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 80285548 002824A8 C0 63 8B A4 */ lfs f3, __float_huge@l(r3)
|
||||
lbl_8028554C:
|
||||
/* 8028554C 002824AC FF E0 18 18 */ frsp f31, f3
|
||||
/* 80285550 002824B0 80 7E 08 8C */ lwz r3, 0x88c(r30)
|
||||
|
|
|
@ -2958,12 +2958,12 @@ lbl_802180D0:
|
|||
lbl_802180DC:
|
||||
/* 802180DC 0021503C FC 04 00 00 */ fcmpu cr0, f4, f0
|
||||
/* 802180E0 00215040 41 82 00 10 */ beq lbl_802180F0
|
||||
/* 802180E4 00215044 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 802180E8 00215048 C0 03 8B A0 */ lfs f0, lbl_805A8BA0@l(r3)
|
||||
/* 802180E4 00215044 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 802180E8 00215048 C0 03 8B A0 */ lfs f0, __float_nan@l(r3)
|
||||
/* 802180EC 0021504C 48 00 00 0C */ b lbl_802180F8
|
||||
lbl_802180F0:
|
||||
/* 802180F0 00215050 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 802180F4 00215054 C0 03 8B A4 */ lfs f0, lbl_805A8BA4@l(r3)
|
||||
/* 802180F0 00215050 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 802180F4 00215054 C0 03 8B A4 */ lfs f0, __float_huge@l(r3)
|
||||
lbl_802180F8:
|
||||
/* 802180F8 00215058 FC 20 00 18 */ frsp f1, f0
|
||||
/* 802180FC 0021505C C0 02 B3 B0 */ lfs f0, lbl_805AD0D0@sda21(r2)
|
||||
|
@ -3248,12 +3248,12 @@ lbl_80218518:
|
|||
lbl_80218524:
|
||||
/* 80218524 00215484 FC 04 00 00 */ fcmpu cr0, f4, f0
|
||||
/* 80218528 00215488 41 82 00 10 */ beq lbl_80218538
|
||||
/* 8021852C 0021548C 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80218530 00215490 C0 03 8B A0 */ lfs f0, lbl_805A8BA0@l(r3)
|
||||
/* 8021852C 0021548C 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80218530 00215490 C0 03 8B A0 */ lfs f0, __float_nan@l(r3)
|
||||
/* 80218534 00215494 48 00 00 0C */ b lbl_80218540
|
||||
lbl_80218538:
|
||||
/* 80218538 00215498 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8021853C 0021549C C0 03 8B A4 */ lfs f0, lbl_805A8BA4@l(r3)
|
||||
/* 80218538 00215498 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8021853C 0021549C C0 03 8B A4 */ lfs f0, __float_huge@l(r3)
|
||||
lbl_80218540:
|
||||
/* 80218540 002154A0 FC 20 00 18 */ frsp f1, f0
|
||||
/* 80218544 002154A4 C0 02 B3 B0 */ lfs f0, lbl_805AD0D0@sda21(r2)
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
.section .sbss
|
||||
.balign 8
|
||||
.global lbl_805A99D0
|
||||
lbl_805A99D0:
|
||||
.global errno
|
||||
errno:
|
||||
.skip 0x8
|
||||
|
||||
.section .text, "ax"
|
||||
|
@ -39,7 +39,7 @@ _fseek:
|
|||
lbl_8038D4C8:
|
||||
/* 8038D4C8 0038A428 38 00 00 28 */ li r0, 0x28
|
||||
/* 8038D4CC 0038A42C 38 60 FF FF */ li r3, -1
|
||||
/* 8038D4D0 0038A430 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 8038D4D0 0038A430 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 8038D4D4 0038A434 48 00 01 DC */ b lbl_8038D6B0
|
||||
lbl_8038D4D8:
|
||||
/* 8038D4D8 0038A438 88 1E 00 08 */ lbz r0, 8(r30)
|
||||
|
@ -56,7 +56,7 @@ lbl_8038D4D8:
|
|||
/* 8038D504 0038A464 38 00 00 28 */ li r0, 0x28
|
||||
/* 8038D508 0038A468 38 60 FF FF */ li r3, -1
|
||||
/* 8038D50C 0038A46C 90 9E 00 28 */ stw r4, 0x28(r30)
|
||||
/* 8038D510 0038A470 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 8038D510 0038A470 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 8038D514 0038A474 48 00 01 9C */ b lbl_8038D6B0
|
||||
lbl_8038D518:
|
||||
/* 8038D518 0038A478 2C 1F 00 01 */ cmpwi r31, 1
|
||||
|
@ -75,7 +75,7 @@ lbl_8038D53C:
|
|||
lbl_8038D548:
|
||||
/* 8038D548 0038A4A8 38 00 00 28 */ li r0, 0x28
|
||||
/* 8038D54C 0038A4AC 38 60 FF FF */ li r3, -1
|
||||
/* 8038D550 0038A4B0 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 8038D550 0038A4B0 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 8038D554 0038A4B4 48 00 00 3C */ b lbl_8038D590
|
||||
lbl_8038D558:
|
||||
/* 8038D558 0038A4B8 88 1E 00 08 */ lbz r0, 8(r30)
|
||||
|
@ -164,7 +164,7 @@ lbl_8038D640:
|
|||
/* 8038D684 0038A5E4 38 00 00 28 */ li r0, 0x28
|
||||
/* 8038D688 0038A5E8 38 60 FF FF */ li r3, -1
|
||||
/* 8038D68C 0038A5EC 90 9E 00 28 */ stw r4, 0x28(r30)
|
||||
/* 8038D690 0038A5F0 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 8038D690 0038A5F0 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 8038D694 0038A5F4 48 00 00 1C */ b lbl_8038D6B0
|
||||
lbl_8038D698:
|
||||
/* 8038D698 0038A5F8 38 60 00 00 */ li r3, 0
|
||||
|
@ -197,7 +197,7 @@ lbl_8038D6E0:
|
|||
lbl_8038D6EC:
|
||||
/* 8038D6EC 0038A64C 38 00 00 28 */ li r0, 0x28
|
||||
/* 8038D6F0 0038A650 38 60 FF FF */ li r3, -1
|
||||
/* 8038D6F4 0038A654 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 8038D6F4 0038A654 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 8038D6F8 0038A658 4E 80 00 20 */ blr
|
||||
lbl_8038D6FC:
|
||||
/* 8038D6FC 0038A65C 88 03 00 08 */ lbz r0, 8(r3)
|
||||
|
|
|
@ -193,11 +193,11 @@ lbl_extabindex:
|
|||
.4byte 0x000000B8
|
||||
.4byte __partial_array_destructor_extab
|
||||
|
||||
.global lbl_80003604
|
||||
lbl_80003604:
|
||||
.global _eti_init_info_
|
||||
_eti_init_info_:
|
||||
# ROM: 0x3C8184
|
||||
.4byte lbl_extabindex
|
||||
.4byte lbl_80003604
|
||||
.4byte _eti_init_info_
|
||||
.4byte __destroy_arr
|
||||
.4byte 0x00000228
|
||||
.4byte 0
|
||||
|
|
|
@ -33,9 +33,9 @@ __init_cpp_exceptions:
|
|||
/* 8038A130 00387090 2C 00 FF FE */ cmpwi r0, -2
|
||||
/* 8038A134 00387094 40 82 00 1C */ bne lbl_8038A150
|
||||
/* 8038A138 00387098 4B FF FF AD */ bl GetR2__Fv
|
||||
/* 8038A13C 0038709C 3C A0 80 00 */ lis r5, lbl_80003604@ha
|
||||
/* 8038A13C 0038709C 3C A0 80 00 */ lis r5, _eti_init_info_@ha
|
||||
/* 8038A140 003870A0 7C 64 1B 78 */ mr r4, r3
|
||||
/* 8038A144 003870A4 38 65 36 04 */ addi r3, r5, lbl_80003604@l
|
||||
/* 8038A144 003870A4 38 65 36 04 */ addi r3, r5, _eti_init_info_@l
|
||||
/* 8038A148 003870A8 48 00 00 4D */ bl __register_fragment
|
||||
/* 8038A14C 003870AC 90 6D 9F C8 */ stw r3, fragmentID@sda21(r13)
|
||||
lbl_8038A150:
|
||||
|
@ -62,4 +62,3 @@ __fini_cpp_exceptions_reference:
|
|||
.balign 8
|
||||
fragmentID:
|
||||
.4byte 0xFFFFFFFE
|
||||
.4byte 0
|
||||
|
|
|
@ -2,21 +2,19 @@
|
|||
|
||||
.section .bss
|
||||
.balign 8
|
||||
.lcomm lbl_80542198, 0x100, 4
|
||||
.lcomm __atexit_funcs, 0x100, 4
|
||||
|
||||
.section .sbss
|
||||
.balign 8
|
||||
.global lbl_805A99B8
|
||||
lbl_805A99B8:
|
||||
.global __aborting
|
||||
__aborting:
|
||||
.skip 0x4
|
||||
.global lbl_805A99BC
|
||||
lbl_805A99BC:
|
||||
__atexit_curr_func:
|
||||
.skip 0x4
|
||||
.global lbl_805A99C0
|
||||
lbl_805A99C0:
|
||||
.global __stdio_exit
|
||||
__stdio_exit:
|
||||
.skip 0x4
|
||||
.global lbl_805A99C4
|
||||
lbl_805A99C4:
|
||||
__console_exit:
|
||||
.skip 0x4
|
||||
|
||||
.section .text, "ax"
|
||||
|
@ -27,7 +25,7 @@ exit:
|
|||
/* 8038A1CC 0038712C 7C 08 02 A6 */ mflr r0
|
||||
/* 8038A1D0 00387130 90 01 00 14 */ stw r0, 0x14(r1)
|
||||
/* 8038A1D4 00387134 93 E1 00 0C */ stw r31, 0xc(r1)
|
||||
/* 8038A1D8 00387138 80 0D AD F8 */ lwz r0, lbl_805A99B8@sda21(r13)
|
||||
/* 8038A1D8 00387138 80 0D AD F8 */ lwz r0, __aborting@sda21(r13)
|
||||
/* 8038A1DC 0038713C 2C 00 00 00 */ cmpwi r0, 0
|
||||
/* 8038A1E0 00387140 40 82 00 4C */ bne lbl_8038A22C
|
||||
/* 8038A1E4 00387144 4B FF F4 61 */ bl __destroy_global_chain
|
||||
|
@ -43,36 +41,36 @@ lbl_8038A204:
|
|||
/* 8038A204 00387164 81 9F 00 00 */ lwz r12, 0(r31)
|
||||
/* 8038A208 00387168 28 0C 00 00 */ cmplwi r12, 0
|
||||
/* 8038A20C 0038716C 40 82 FF EC */ bne lbl_8038A1F8
|
||||
/* 8038A210 00387170 81 8D AE 00 */ lwz r12, lbl_805A99C0@sda21(r13)
|
||||
/* 8038A210 00387170 81 8D AE 00 */ lwz r12, __stdio_exit@sda21(r13)
|
||||
/* 8038A214 00387174 28 0C 00 00 */ cmplwi r12, 0
|
||||
/* 8038A218 00387178 41 82 00 14 */ beq lbl_8038A22C
|
||||
/* 8038A21C 0038717C 7D 89 03 A6 */ mtctr r12
|
||||
/* 8038A220 00387180 4E 80 04 21 */ bctrl
|
||||
/* 8038A224 00387184 38 00 00 00 */ li r0, 0
|
||||
/* 8038A228 00387188 90 0D AE 00 */ stw r0, lbl_805A99C0@sda21(r13)
|
||||
/* 8038A228 00387188 90 0D AE 00 */ stw r0, __stdio_exit@sda21(r13)
|
||||
lbl_8038A22C:
|
||||
/* 8038A22C 0038718C 3C 60 80 54 */ lis r3, lbl_80542198@ha
|
||||
/* 8038A230 00387190 3B E3 21 98 */ addi r31, r3, lbl_80542198@l
|
||||
/* 8038A22C 0038718C 3C 60 80 54 */ lis r3, __atexit_funcs@ha
|
||||
/* 8038A230 00387190 3B E3 21 98 */ addi r31, r3, __atexit_funcs@l
|
||||
/* 8038A234 00387194 48 00 00 20 */ b lbl_8038A254
|
||||
lbl_8038A238:
|
||||
/* 8038A238 00387198 80 6D AD FC */ lwz r3, lbl_805A99BC@sda21(r13)
|
||||
/* 8038A238 00387198 80 6D AD FC */ lwz r3, __atexit_curr_func@sda21(r13)
|
||||
/* 8038A23C 0038719C 38 63 FF FF */ addi r3, r3, -1
|
||||
/* 8038A240 003871A0 54 60 10 3A */ slwi r0, r3, 2
|
||||
/* 8038A244 003871A4 90 6D AD FC */ stw r3, lbl_805A99BC@sda21(r13)
|
||||
/* 8038A244 003871A4 90 6D AD FC */ stw r3, __atexit_curr_func@sda21(r13)
|
||||
/* 8038A248 003871A8 7D 9F 00 2E */ lwzx r12, r31, r0
|
||||
/* 8038A24C 003871AC 7D 89 03 A6 */ mtctr r12
|
||||
/* 8038A250 003871B0 4E 80 04 21 */ bctrl
|
||||
lbl_8038A254:
|
||||
/* 8038A254 003871B4 80 0D AD FC */ lwz r0, lbl_805A99BC@sda21(r13)
|
||||
/* 8038A254 003871B4 80 0D AD FC */ lwz r0, __atexit_curr_func@sda21(r13)
|
||||
/* 8038A258 003871B8 2C 00 00 00 */ cmpwi r0, 0
|
||||
/* 8038A25C 003871BC 41 81 FF DC */ bgt lbl_8038A238
|
||||
/* 8038A260 003871C0 81 8D AE 04 */ lwz r12, lbl_805A99C4@sda21(r13)
|
||||
/* 8038A260 003871C0 81 8D AE 04 */ lwz r12, __console_exit@sda21(r13)
|
||||
/* 8038A264 003871C4 28 0C 00 00 */ cmplwi r12, 0
|
||||
/* 8038A268 003871C8 41 82 00 14 */ beq lbl_8038A27C
|
||||
/* 8038A26C 003871CC 7D 89 03 A6 */ mtctr r12
|
||||
/* 8038A270 003871D0 4E 80 04 21 */ bctrl
|
||||
/* 8038A274 003871D4 38 00 00 00 */ li r0, 0
|
||||
/* 8038A278 003871D8 90 0D AE 04 */ stw r0, lbl_805A99C4@sda21(r13)
|
||||
/* 8038A278 003871D8 90 0D AE 04 */ stw r0, __console_exit@sda21(r13)
|
||||
lbl_8038A27C:
|
||||
/* 8038A27C 003871DC 4B FF B6 1D */ bl _ExitProcess
|
||||
/* 8038A280 003871E0 80 01 00 14 */ lwz r0, 0x14(r1)
|
||||
|
|
|
@ -1,5 +1,205 @@
|
|||
.include "macros.inc"
|
||||
|
||||
.section .data, "wa"
|
||||
.balign 8
|
||||
|
||||
.global lbl_803F2778
|
||||
lbl_803F2778:
|
||||
# ROM: 0x3EF778
|
||||
.4byte 0
|
||||
.4byte 0x0A800000
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte stdin_buff
|
||||
.4byte 0x00000100
|
||||
.4byte stdin_buff
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __read_console
|
||||
.4byte __write_console
|
||||
.4byte __close_console
|
||||
.4byte 0
|
||||
.4byte lbl_803F27C8
|
||||
|
||||
.global lbl_803F27C8
|
||||
lbl_803F27C8:
|
||||
|
||||
# ROM: 0x3EF7C8
|
||||
.4byte 0x00000001
|
||||
.4byte 0x12800000
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte stdout_buff
|
||||
.4byte 0x00000100
|
||||
.4byte stdout_buff
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __read_console
|
||||
.4byte __write_console
|
||||
.4byte __close_console
|
||||
.4byte 0
|
||||
.4byte lbl_803F2818
|
||||
|
||||
.global lbl_803F2818
|
||||
lbl_803F2818:
|
||||
|
||||
# ROM: 0x3EF818
|
||||
.4byte 0x00000002
|
||||
.4byte 0x10800000
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte stderr_buff
|
||||
.4byte 0x00000100
|
||||
.4byte stderr_buff
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __read_console
|
||||
.4byte __write_console
|
||||
.4byte __close_console
|
||||
.4byte 0
|
||||
.4byte lbl_803F2868
|
||||
|
||||
.global lbl_803F2868
|
||||
lbl_803F2868:
|
||||
|
||||
# ROM: 0x3EF868
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803F28B8
|
||||
lbl_803F28B8:
|
||||
# ROM: 0x3EF8B8
|
||||
.4byte 0x40240000
|
||||
.4byte 0
|
||||
.4byte 0x40590000
|
||||
.4byte 0
|
||||
.4byte 0x408F4000
|
||||
.4byte 0
|
||||
.4byte 0x40C38800
|
||||
.4byte 0
|
||||
.4byte 0x40F86A00
|
||||
.4byte 0
|
||||
.4byte 0x412E8480
|
||||
.4byte 0
|
||||
.4byte 0x416312D0
|
||||
.4byte 0
|
||||
.4byte 0x4197D784
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803F28F8
|
||||
lbl_803F28F8:
|
||||
# ROM: 0x3EF8F8
|
||||
.4byte lbl_8038C62C
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C644
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C65C
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C674
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C68C
|
||||
.4byte lbl_8038C6A4
|
||||
.4byte lbl_8038C6BC
|
||||
.4byte lbl_8038C6D4
|
||||
.4byte lbl_8038C6EC
|
||||
.4byte lbl_8038C704
|
||||
.4byte lbl_8038C71C
|
||||
.4byte lbl_8038C734
|
||||
.4byte lbl_8038C74C
|
||||
.4byte lbl_8038C764
|
||||
.4byte lbl_8038C77C
|
||||
.4byte lbl_8038C794
|
||||
.4byte lbl_8038C7AC
|
||||
.4byte lbl_8038C7C4
|
||||
.4byte lbl_8038C7DC
|
||||
.4byte lbl_8038C7F4
|
||||
.4byte lbl_8038C80C
|
||||
.4byte 0
|
||||
|
||||
.section .rodata
|
||||
.balign 8
|
||||
.global lbl_803D85D8
|
||||
|
@ -32,19 +232,6 @@ lbl_803D85D8:
|
|||
.4byte 0x00323536
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803D86B8
|
||||
lbl_803D86B8:
|
||||
|
||||
# ROM: 0x3D56B8
|
||||
.2byte 0x2E00
|
||||
|
||||
.global lbl_803D86BA
|
||||
lbl_803D86BA:
|
||||
|
||||
# ROM: 0x3D56BA
|
||||
.byte 0x00, 0x43
|
||||
.4byte 0
|
||||
|
||||
|
||||
.section .text, "ax"
|
||||
.global __dec2num
|
||||
|
@ -96,8 +283,8 @@ lbl_8038B240:
|
|||
/* 8038B244 003881A4 48 00 08 A0 */ b lbl_8038BAE4
|
||||
lbl_8038B248:
|
||||
/* 8038B248 003881A8 88 03 00 00 */ lbz r0, 0(r3)
|
||||
/* 8038B24C 003881AC 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8038B250 003881B0 C0 23 8B A4 */ lfs f1, lbl_805A8BA4@l(r3)
|
||||
/* 8038B24C 003881AC 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8038B250 003881B0 C0 23 8B A4 */ lfs f1, __float_huge@l(r3)
|
||||
/* 8038B254 003881B4 7C 00 07 75 */ extsb. r0, r0
|
||||
/* 8038B258 003881B8 40 82 00 0C */ bne lbl_8038B264
|
||||
/* 8038B25C 003881BC C8 42 CF 48 */ lfd f2, lbl_805AEC68@sda21(r2)
|
||||
|
@ -137,9 +324,9 @@ lbl_8038B2BC:
|
|||
/* 8038B2D0 00388230 40 81 00 08 */ ble lbl_8038B2D8
|
||||
/* 8038B2D4 00388234 38 C0 00 0E */ li r6, 0xe
|
||||
lbl_8038B2D8:
|
||||
/* 8038B2D8 00388238 3C 80 80 3F */ lis r4, lbl_803F2A20@ha
|
||||
/* 8038B2D8 00388238 3C 80 80 3F */ lis r4, __ctype_map@ha
|
||||
/* 8038B2DC 0038823C 38 06 FF FF */ addi r0, r6, -1
|
||||
/* 8038B2E0 00388240 38 A4 2A 20 */ addi r5, r4, lbl_803F2A20@l
|
||||
/* 8038B2E0 00388240 38 A4 2A 20 */ addi r5, r4, __ctype_map@l
|
||||
/* 8038B2E4 00388244 39 40 00 01 */ li r10, 1
|
||||
/* 8038B2E8 00388248 7C 09 03 A6 */ mtctr r0
|
||||
/* 8038B2EC 0038824C 2C 06 00 01 */ cmpwi r6, 1
|
||||
|
@ -158,8 +345,8 @@ lbl_8038B310:
|
|||
/* 8038B318 00388278 38 80 FF FF */ li r4, -1
|
||||
/* 8038B31C 0038827C 48 00 00 10 */ b lbl_8038B32C
|
||||
lbl_8038B320:
|
||||
/* 8038B320 00388280 3C 80 80 3F */ lis r4, lbl_803F2B20@ha
|
||||
/* 8038B324 00388284 38 84 2B 20 */ addi r4, r4, lbl_803F2B20@l
|
||||
/* 8038B320 00388280 3C 80 80 3F */ lis r4, __lower_map@ha
|
||||
/* 8038B324 00388284 38 84 2B 20 */ addi r4, r4, __lower_map@l
|
||||
/* 8038B328 00388288 7C 84 30 AE */ lbzx r4, r4, r6
|
||||
lbl_8038B32C:
|
||||
/* 8038B32C 0038828C 38 04 FF A9 */ addi r0, r4, -87
|
||||
|
@ -442,8 +629,8 @@ lbl_8038B6E4:
|
|||
/* 8038B708 00388668 48 00 0C D9 */ bl __less_dec
|
||||
/* 8038B70C 0038866C 2C 03 00 00 */ cmpwi r3, 0
|
||||
/* 8038B710 00388670 40 82 03 B8 */ bne lbl_8038BAC8
|
||||
/* 8038B714 00388674 3C 60 80 5B */ lis r3, lbl_805A8BB0@ha
|
||||
/* 8038B718 00388678 C8 03 8B B0 */ lfd f0, lbl_805A8BB0@l(r3)
|
||||
/* 8038B714 00388674 3C 60 80 5B */ lis r3, __double_max@ha
|
||||
/* 8038B718 00388678 C8 03 8B B0 */ lfd f0, __double_max@l(r3)
|
||||
/* 8038B71C 0038867C D8 01 00 20 */ stfd f0, 0x20(r1)
|
||||
lbl_8038B720:
|
||||
/* 8038B720 00388680 C8 21 00 20 */ lfd f1, 0x20(r1)
|
||||
|
@ -459,9 +646,9 @@ lbl_8038B720:
|
|||
/* 8038B748 003886A8 48 00 0C 99 */ bl __less_dec
|
||||
/* 8038B74C 003886AC 2C 03 00 00 */ cmpwi r3, 0
|
||||
/* 8038B750 003886B0 41 82 02 44 */ beq lbl_8038B994
|
||||
/* 8038B754 003886B4 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8038B754 003886B4 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8038B758 003886B8 C8 21 00 20 */ lfd f1, 0x20(r1)
|
||||
/* 8038B75C 003886BC C0 43 8B A4 */ lfs f2, lbl_805A8BA4@l(r3)
|
||||
/* 8038B75C 003886BC C0 43 8B A4 */ lfs f2, __float_huge@l(r3)
|
||||
/* 8038B760 003886C0 48 00 91 F9 */ bl nextafter
|
||||
/* 8038B764 003886C4 FF E0 08 90 */ fmr f31, f1
|
||||
/* 8038B768 003886C8 3C 00 7F F0 */ lis r0, 0x7ff0
|
||||
|
@ -509,9 +696,9 @@ lbl_8038B7EC:
|
|||
/* 8038B7EC 0038874C FC 20 F8 90 */ fmr f1, f31
|
||||
/* 8038B7F0 00388750 38 61 01 0C */ addi r3, r1, 0x10c
|
||||
/* 8038B7F4 00388754 48 00 04 B5 */ bl __num2dec_internal
|
||||
/* 8038B7F8 00388758 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8038B7F8 00388758 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8038B7FC 0038875C 3F E0 7F F0 */ lis r31, 0x7ff0
|
||||
/* 8038B800 00388760 3B C3 8B A4 */ addi r30, r3, lbl_805A8BA4@l
|
||||
/* 8038B800 00388760 3B C3 8B A4 */ addi r30, r3, __float_huge@l
|
||||
/* 8038B804 00388764 48 00 00 FC */ b lbl_8038B900
|
||||
lbl_8038B808:
|
||||
/* 8038B808 00388768 81 81 01 0C */ lwz r12, 0x10c(r1)
|
||||
|
@ -625,16 +812,16 @@ lbl_8038B978:
|
|||
/* 8038B98C 003888EC DB E1 00 20 */ stfd f31, 0x20(r1)
|
||||
/* 8038B990 003888F0 48 00 01 38 */ b lbl_8038BAC8
|
||||
lbl_8038B994:
|
||||
/* 8038B994 003888F4 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8038B994 003888F4 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8038B998 003888F8 C8 21 00 20 */ lfd f1, 0x20(r1)
|
||||
/* 8038B99C 003888FC C0 03 8B A4 */ lfs f0, lbl_805A8BA4@l(r3)
|
||||
/* 8038B99C 003888FC C0 03 8B A4 */ lfs f0, __float_huge@l(r3)
|
||||
/* 8038B9A0 00388900 FC 40 00 50 */ fneg f2, f0
|
||||
/* 8038B9A4 00388904 48 00 8F B5 */ bl nextafter
|
||||
/* 8038B9A8 00388908 FF E0 08 90 */ fmr f31, f1
|
||||
/* 8038B9AC 0038890C 38 61 00 88 */ addi r3, r1, 0x88
|
||||
/* 8038B9B0 00388910 48 00 02 F9 */ bl __num2dec_internal
|
||||
/* 8038B9B4 00388914 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 8038B9B8 00388918 3B E3 8B A4 */ addi r31, r3, lbl_805A8BA4@l
|
||||
/* 8038B9B4 00388914 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 8038B9B8 00388918 3B E3 8B A4 */ addi r31, r3, __float_huge@l
|
||||
/* 8038B9BC 0038891C 48 00 00 7C */ b lbl_8038BA38
|
||||
lbl_8038B9C0:
|
||||
/* 8038B9C0 00388920 C0 1F 00 00 */ lfs f0, 0(r31)
|
||||
|
|
|
@ -1,5 +1,212 @@
|
|||
.include "macros.inc"
|
||||
|
||||
.section .data, "wa"
|
||||
.balign 8
|
||||
|
||||
.global __ctype_map
|
||||
__ctype_map:
|
||||
# ROM: 0x3EFA20
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01020202
|
||||
.4byte 0x02020101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x04080808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x30303030
|
||||
.4byte 0x30303030
|
||||
.4byte 0x30300808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08A0A0A0
|
||||
.4byte 0xA0A0A080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808008
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08606060
|
||||
.4byte 0x60606040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404008
|
||||
.4byte 0x08080801
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
||||
.global __lower_map
|
||||
__lower_map:
|
||||
# ROM: 0x3EFB20
|
||||
.4byte 0x00010203
|
||||
.4byte 0x04050607
|
||||
.4byte 0x08090A0B
|
||||
.4byte 0x0C0D0E0F
|
||||
.4byte 0x10111213
|
||||
.4byte 0x14151617
|
||||
.4byte 0x18191A1B
|
||||
.4byte 0x1C1D1E1F
|
||||
.4byte 0x20212223
|
||||
.4byte 0x24252627
|
||||
.4byte 0x28292A2B
|
||||
.4byte 0x2C2D2E2F
|
||||
.4byte 0x30313233
|
||||
.4byte 0x34353637
|
||||
.4byte 0x38393A3B
|
||||
.4byte 0x3C3D3E3F
|
||||
.4byte 0x40616263
|
||||
.4byte 0x64656667
|
||||
.4byte 0x68696A6B
|
||||
.4byte 0x6C6D6E6F
|
||||
.4byte 0x70717273
|
||||
.4byte 0x74757677
|
||||
.4byte 0x78797A5B
|
||||
.4byte 0x5C5D5E5F
|
||||
.4byte 0x60616263
|
||||
.4byte 0x64656667
|
||||
.4byte 0x68696A6B
|
||||
.4byte 0x6C6D6E6F
|
||||
.4byte 0x70717273
|
||||
.4byte 0x74757677
|
||||
.4byte 0x78797A7B
|
||||
.4byte 0x7C7D7E7F
|
||||
.4byte 0x80818283
|
||||
.4byte 0x84858687
|
||||
.4byte 0x88898A8B
|
||||
.4byte 0x8C8D8E8F
|
||||
.4byte 0x90919293
|
||||
.4byte 0x94959697
|
||||
.4byte 0x98999A9B
|
||||
.4byte 0x9C9D9E9F
|
||||
.4byte 0xA0A1A2A3
|
||||
.4byte 0xA4A5A6A7
|
||||
.4byte 0xA8A9AAAB
|
||||
.4byte 0xACADAEAF
|
||||
.4byte 0xB0B1B2B3
|
||||
.4byte 0xB4B5B6B7
|
||||
.4byte 0xB8B9BABB
|
||||
.4byte 0xBCBDBEBF
|
||||
.4byte 0xC0C1C2C3
|
||||
.4byte 0xC4C5C6C7
|
||||
.4byte 0xC8C9CACB
|
||||
.4byte 0xCCCDCECF
|
||||
.4byte 0xD0D1D2D3
|
||||
.4byte 0xD4D5D6D7
|
||||
.4byte 0xD8D9DADB
|
||||
.4byte 0xDCDDDEDF
|
||||
.4byte 0xE0E1E2E3
|
||||
.4byte 0xE4E5E6E7
|
||||
.4byte 0xE8E9EAEB
|
||||
.4byte 0xECEDEEEF
|
||||
.4byte 0xF0F1F2F3
|
||||
.4byte 0xF4F5F6F7
|
||||
.4byte 0xF8F9FAFB
|
||||
.4byte 0xFCFDFEFF
|
||||
|
||||
.global __upper_map
|
||||
__upper_map:
|
||||
# ROM: 0x3EFC20
|
||||
.4byte 0x00010203
|
||||
.4byte 0x04050607
|
||||
.4byte 0x08090A0B
|
||||
.4byte 0x0C0D0E0F
|
||||
.4byte 0x10111213
|
||||
.4byte 0x14151617
|
||||
.4byte 0x18191A1B
|
||||
.4byte 0x1C1D1E1F
|
||||
.4byte 0x20212223
|
||||
.4byte 0x24252627
|
||||
.4byte 0x28292A2B
|
||||
.4byte 0x2C2D2E2F
|
||||
.4byte 0x30313233
|
||||
.4byte 0x34353637
|
||||
.4byte 0x38393A3B
|
||||
.4byte 0x3C3D3E3F
|
||||
.4byte 0x40414243
|
||||
.4byte 0x44454647
|
||||
.4byte 0x48494A4B
|
||||
.4byte 0x4C4D4E4F
|
||||
.4byte 0x50515253
|
||||
.4byte 0x54555657
|
||||
.4byte 0x58595A5B
|
||||
.4byte 0x5C5D5E5F
|
||||
.4byte 0x60414243
|
||||
.4byte 0x44454647
|
||||
.4byte 0x48494A4B
|
||||
.4byte 0x4C4D4E4F
|
||||
.4byte 0x50515253
|
||||
.4byte 0x54555657
|
||||
.4byte 0x58595A7B
|
||||
.4byte 0x7C7D7E7F
|
||||
.4byte 0x80818283
|
||||
.4byte 0x84858687
|
||||
.4byte 0x88898A8B
|
||||
.4byte 0x8C8D8E8F
|
||||
.4byte 0x90919293
|
||||
.4byte 0x94959697
|
||||
.4byte 0x98999A9B
|
||||
.4byte 0x9C9D9E9F
|
||||
.4byte 0xA0A1A2A3
|
||||
.4byte 0xA4A5A6A7
|
||||
.4byte 0xA8A9AAAB
|
||||
.4byte 0xACADAEAF
|
||||
.4byte 0xB0B1B2B3
|
||||
.4byte 0xB4B5B6B7
|
||||
.4byte 0xB8B9BABB
|
||||
.4byte 0xBCBDBEBF
|
||||
.4byte 0xC0C1C2C3
|
||||
.4byte 0xC4C5C6C7
|
||||
.4byte 0xC8C9CACB
|
||||
.4byte 0xCCCDCECF
|
||||
.4byte 0xD0D1D2D3
|
||||
.4byte 0xD4D5D6D7
|
||||
.4byte 0xD8D9DADB
|
||||
.4byte 0xDCDDDEDF
|
||||
.4byte 0xE0E1E2E3
|
||||
.4byte 0xE4E5E6E7
|
||||
.4byte 0xE8E9EAEB
|
||||
.4byte 0xECEDEEEF
|
||||
.4byte 0xF0F1F2F3
|
||||
.4byte 0xF4F5F6F7
|
||||
.4byte 0xF8F9FAFB
|
||||
.4byte 0xFCFDFEFF
|
||||
|
||||
.section .text, "ax"
|
||||
|
||||
.global tolower
|
||||
|
@ -9,8 +216,8 @@ tolower:
|
|||
/* 8038CF2C 00389E8C 38 60 FF FF */ li r3, -1
|
||||
/* 8038CF30 00389E90 4E 80 00 20 */ blr
|
||||
lbl_8038CF34:
|
||||
/* 8038CF34 00389E94 3C 80 80 3F */ lis r4, lbl_803F2B20@ha
|
||||
/* 8038CF34 00389E94 3C 80 80 3F */ lis r4, __lower_map@ha
|
||||
/* 8038CF38 00389E98 54 60 06 3E */ clrlwi r0, r3, 0x18
|
||||
/* 8038CF3C 00389E9C 38 64 2B 20 */ addi r3, r4, lbl_803F2B20@l
|
||||
/* 8038CF3C 00389E9C 38 64 2B 20 */ addi r3, r4, __lower_map@l
|
||||
/* 8038CF40 00389EA0 7C 63 00 AE */ lbzx r3, r3, r0
|
||||
/* 8038CF44 00389EA4 4E 80 00 20 */ blr
|
||||
|
|
|
@ -23,8 +23,8 @@ lbl_80391404:
|
|||
/* 80391404 0038E364 C8 22 CF A0 */ lfd f1, lbl_805AECC0@sda21(r2)
|
||||
/* 80391408 0038E368 48 00 02 C8 */ b lbl_803916D0
|
||||
lbl_8039140C:
|
||||
/* 8039140C 0038E36C 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80391410 0038E370 C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 8039140C 0038E36C 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80391410 0038E370 C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 80391414 0038E374 48 00 02 BC */ b lbl_803916D0
|
||||
lbl_80391418:
|
||||
/* 80391418 0038E378 3C 00 3F E0 */ lis r0, 0x3fe0
|
||||
|
@ -122,12 +122,12 @@ lbl_80391570:
|
|||
lbl_8039157C:
|
||||
/* 8039157C 0038E4DC FC 01 58 00 */ fcmpu cr0, f1, f11
|
||||
/* 80391580 0038E4E0 41 82 00 10 */ beq lbl_80391590
|
||||
/* 80391584 0038E4E4 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80391588 0038E4E8 C1 63 8B A0 */ lfs f11, lbl_805A8BA0@l(r3)
|
||||
/* 80391584 0038E4E4 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80391588 0038E4E8 C1 63 8B A0 */ lfs f11, __float_nan@l(r3)
|
||||
/* 8039158C 0038E4EC 48 00 00 0C */ b lbl_80391598
|
||||
lbl_80391590:
|
||||
/* 80391590 0038E4F0 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 80391594 0038E4F4 C1 63 8B A4 */ lfs f11, lbl_805A8BA4@l(r3)
|
||||
/* 80391590 0038E4F0 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 80391594 0038E4F4 C1 63 8B A4 */ lfs f11, __float_huge@l(r3)
|
||||
lbl_80391598:
|
||||
/* 80391598 0038E4F8 FC 45 30 24 */ fdiv f2, f5, f6
|
||||
/* 8039159C 0038E4FC C8 22 CF B0 */ lfd f1, lbl_805AECD0@sda21(r2)
|
||||
|
@ -172,12 +172,12 @@ lbl_80391624:
|
|||
lbl_80391630:
|
||||
/* 80391630 0038E590 FC 00 48 00 */ fcmpu cr0, f0, f9
|
||||
/* 80391634 0038E594 41 82 00 10 */ beq lbl_80391644
|
||||
/* 80391638 0038E598 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8039163C 0038E59C C1 23 8B A0 */ lfs f9, lbl_805A8BA0@l(r3)
|
||||
/* 80391638 0038E598 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8039163C 0038E59C C1 23 8B A0 */ lfs f9, __float_nan@l(r3)
|
||||
/* 80391640 0038E5A0 48 00 00 0C */ b lbl_8039164C
|
||||
lbl_80391644:
|
||||
/* 80391644 0038E5A4 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 80391648 0038E5A8 C1 23 8B A4 */ lfs f9, lbl_805A8BA4@l(r3)
|
||||
/* 80391644 0038E5A4 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 80391648 0038E5A8 C1 23 8B A4 */ lfs f9, __float_huge@l(r3)
|
||||
lbl_8039164C:
|
||||
/* 8039164C 0038E5AC C8 42 CF E0 */ lfd f2, lbl_805AED00@sda21(r2)
|
||||
/* 80391650 0038E5B0 38 00 00 00 */ li r0, 0
|
||||
|
|
|
@ -21,8 +21,8 @@ __ieee754_asin:
|
|||
/* 80391710 0038E670 FC 22 00 7A */ fmadd f1, f2, f1, f0
|
||||
/* 80391714 0038E674 48 00 02 20 */ b lbl_80391934
|
||||
lbl_80391718:
|
||||
/* 80391718 0038E678 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8039171C 0038E67C C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 80391718 0038E678 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8039171C 0038E67C C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 80391720 0038E680 48 00 02 14 */ b lbl_80391934
|
||||
lbl_80391724:
|
||||
/* 80391724 0038E684 3C 00 3F E0 */ lis r0, 0x3fe0
|
||||
|
@ -123,12 +123,12 @@ lbl_80391884:
|
|||
lbl_80391890:
|
||||
/* 80391890 0038E7F0 FC 02 08 00 */ fcmpu cr0, f2, f1
|
||||
/* 80391894 0038E7F4 41 82 00 10 */ beq lbl_803918A4
|
||||
/* 80391898 0038E7F8 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8039189C 0038E7FC C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 80391898 0038E7F8 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8039189C 0038E7FC C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 803918A0 0038E800 48 00 00 0C */ b lbl_803918AC
|
||||
lbl_803918A4:
|
||||
/* 803918A4 0038E804 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 803918A8 0038E808 C0 23 8B A4 */ lfs f1, lbl_805A8BA4@l(r3)
|
||||
/* 803918A4 0038E804 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 803918A8 0038E808 C0 23 8B A4 */ lfs f1, __float_huge@l(r3)
|
||||
lbl_803918AC:
|
||||
/* 803918AC 0038E80C 3C 60 3F EF */ lis r3, 0x3FEF3333@ha
|
||||
/* 803918B0 0038E810 38 03 33 33 */ addi r0, r3, 0x3FEF3333@l
|
||||
|
|
|
@ -31,7 +31,7 @@ lbl_80392160:
|
|||
/* 80392168 0038F0C8 FC 21 08 28 */ fsub f1, f1, f1
|
||||
/* 8039216C 0038F0CC C8 0D AE 20 */ lfd f0, lbl_805A99E0@sda21(r13)
|
||||
/* 80392170 0038F0D0 38 00 00 21 */ li r0, 0x21
|
||||
/* 80392174 0038F0D4 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 80392174 0038F0D4 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 80392178 0038F0D8 FC 21 00 24 */ fdiv f1, f1, f0
|
||||
/* 8039217C 0038F0DC 48 00 02 1C */ b lbl_80392398
|
||||
lbl_80392180:
|
||||
|
|
|
@ -193,12 +193,12 @@ lbl_803925F4:
|
|||
lbl_80392600:
|
||||
/* 80392600 0038F560 FC 04 08 00 */ fcmpu cr0, f4, f1
|
||||
/* 80392604 0038F564 41 82 00 10 */ beq lbl_80392614
|
||||
/* 80392608 0038F568 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 8039260C 0038F56C C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 80392608 0038F568 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 8039260C 0038F56C C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 80392610 0038F570 48 00 05 F4 */ b lbl_80392C04
|
||||
lbl_80392614:
|
||||
/* 80392614 0038F574 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 80392618 0038F578 C0 23 8B A4 */ lfs f1, lbl_805A8BA4@l(r3)
|
||||
/* 80392614 0038F574 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 80392618 0038F578 C0 23 8B A4 */ lfs f1, __float_huge@l(r3)
|
||||
/* 8039261C 0038F57C 48 00 05 E8 */ b lbl_80392C04
|
||||
lbl_80392620:
|
||||
/* 80392620 0038F580 C8 01 00 08 */ lfd f0, 8(r1)
|
||||
|
@ -246,10 +246,10 @@ lbl_803926B0:
|
|||
/* 803926B4 0038F614 38 63 00 01 */ addi r3, r3, 1
|
||||
/* 803926B8 0038F618 7C 68 23 79 */ or. r8, r3, r4
|
||||
/* 803926BC 0038F61C 40 82 00 18 */ bne lbl_803926D4
|
||||
/* 803926C0 0038F620 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 803926C0 0038F620 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 803926C4 0038F624 38 00 00 21 */ li r0, 0x21
|
||||
/* 803926C8 0038F628 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 803926CC 0038F62C C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 803926C8 0038F628 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
/* 803926CC 0038F62C C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
/* 803926D0 0038F630 48 00 05 34 */ b lbl_80392C04
|
||||
lbl_803926D4:
|
||||
/* 803926D4 0038F634 3D 00 41 E0 */ lis r8, 0x41e0
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
.include "macros.inc"
|
||||
|
||||
.section .sdata, "wa"
|
||||
.balign 8
|
||||
|
||||
.global __float_nan
|
||||
__float_nan:
|
||||
# ROM: 0x3F6540
|
||||
.4byte 0x7FFFFFFF
|
||||
|
||||
.global __float_huge
|
||||
__float_huge:
|
||||
# ROM: 0x3F6544
|
||||
.4byte 0x7F800000
|
||||
|
||||
.global __double_min
|
||||
__double_min:
|
||||
# ROM: 0x3F6548
|
||||
.4byte 0x00100000
|
||||
.4byte 0
|
||||
|
||||
.global __double_max
|
||||
__double_max:
|
||||
# ROM: 0x3F6550
|
||||
.4byte 0x7FEFFFFF
|
||||
.4byte 0xFFFFFFFF
|
||||
|
||||
.global __double_huge
|
||||
__double_huge:
|
||||
# ROM: 0x3F6558
|
||||
.4byte 0x7FF00000
|
||||
.4byte 0
|
||||
|
||||
.global __extended_min
|
||||
__extended_min:
|
||||
# ROM: 0x3F6560
|
||||
.4byte 0x00100000
|
||||
.4byte 0
|
||||
|
||||
.global __extended_max
|
||||
__extended_max:
|
||||
# ROM: 0x3F6568
|
||||
.4byte 0x7FEFFFFF
|
||||
.4byte 0xFFFFFFFF
|
|
@ -0,0 +1,39 @@
|
|||
.include "macros.inc"
|
||||
|
||||
.section .data, "wa"
|
||||
.balign 8
|
||||
|
||||
.global __lconv
|
||||
__lconv:
|
||||
# ROM: 0x3EFD20
|
||||
.4byte lbl_803D86B8
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte 0x7F7F7F7F
|
||||
.4byte 0x7F7F7F00
|
||||
.4byte lbl_803D86BA
|
||||
.4byte 0x7F7F7F7F
|
||||
.4byte 0x7F7F7F00
|
||||
|
||||
.section .rodata
|
||||
.balign 8
|
||||
|
||||
.global lbl_803D86B8
|
||||
lbl_803D86B8:
|
||||
|
||||
# ROM: 0x3D56B8
|
||||
.asciz "."
|
||||
|
||||
.global lbl_803D86BA
|
||||
lbl_803D86BA:
|
||||
|
||||
# ROM: 0x3D56BA
|
||||
.asciz ""
|
||||
.asciz "C"
|
||||
.balign 4
|
|
@ -2,10 +2,9 @@
|
|||
|
||||
.section .text, "ax"
|
||||
|
||||
# THIS DOESN'T WORK????
|
||||
# .global __stdio_atexit
|
||||
# __stdio_atexit:
|
||||
# /* 8038DCCC 0038AC2C 3C 60 80 39 */ lis r3, __close_all@ha
|
||||
# /* 8038DCD0 0038AC30 38 03 B1 18 */ addi r0, r3, __close_all@l
|
||||
# /* 8038DCD4 0038AC34 90 0D AE 00 */ stw r0, lbl_805A99C0@sda21(r13)
|
||||
# /* 8038DCD8 0038AC38 4E 80 00 20 */ blr
|
||||
.global __stdio_atexit
|
||||
__stdio_atexit:
|
||||
/* 8038DCCC 0038AC2C 3C 60 80 39 */ lis r3, __close_all@ha
|
||||
/* 8038DCD0 0038AC30 38 03 B1 18 */ addi r0, r3, __close_all@l
|
||||
/* 8038DCD4 0038AC34 90 0D AE 00 */ stw r0, __stdio_exit@sda21(r13)
|
||||
/* 8038DCD8 0038AC38 4E 80 00 20 */ blr
|
||||
|
|
|
@ -19,425 +19,8 @@ lbl_803D86C0:
|
|||
|
||||
.section .data, "wa"
|
||||
.balign 8
|
||||
# TODO: Move these where they actually belong
|
||||
.global lbl_803F2778
|
||||
lbl_803F2778:
|
||||
# ROM: 0x3EF778
|
||||
.4byte 0
|
||||
.4byte 0x0A800000
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte stdin_buff
|
||||
.4byte 0x00000100
|
||||
.4byte stdin_buff
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __read_console
|
||||
.4byte __write_console
|
||||
.4byte __close_console
|
||||
.4byte 0
|
||||
.4byte lbl_803F27C8
|
||||
|
||||
.global lbl_803F27C8
|
||||
lbl_803F27C8:
|
||||
|
||||
# ROM: 0x3EF7C8
|
||||
.4byte 0x00000001
|
||||
.4byte 0x12800000
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte stdout_buff
|
||||
.4byte 0x00000100
|
||||
.4byte stdout_buff
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __read_console
|
||||
.4byte __write_console
|
||||
.4byte __close_console
|
||||
.4byte 0
|
||||
.4byte lbl_803F2818
|
||||
|
||||
.global lbl_803F2818
|
||||
lbl_803F2818:
|
||||
|
||||
# ROM: 0x3EF818
|
||||
.4byte 0x00000002
|
||||
.4byte 0x10800000
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte stderr_buff
|
||||
.4byte 0x00000100
|
||||
.4byte stderr_buff
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte __read_console
|
||||
.4byte __write_console
|
||||
.4byte __close_console
|
||||
.4byte 0
|
||||
.4byte lbl_803F2868
|
||||
|
||||
.global lbl_803F2868
|
||||
lbl_803F2868:
|
||||
|
||||
# ROM: 0x3EF868
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803F28B8
|
||||
lbl_803F28B8:
|
||||
# ROM: 0x3EF8B8
|
||||
.4byte 0x40240000
|
||||
.4byte 0
|
||||
.4byte 0x40590000
|
||||
.4byte 0
|
||||
.4byte 0x408F4000
|
||||
.4byte 0
|
||||
.4byte 0x40C38800
|
||||
.4byte 0
|
||||
.4byte 0x40F86A00
|
||||
.4byte 0
|
||||
.4byte 0x412E8480
|
||||
.4byte 0
|
||||
.4byte 0x416312D0
|
||||
.4byte 0
|
||||
.4byte 0x4197D784
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803F28F8
|
||||
lbl_803F28F8:
|
||||
# ROM: 0x3EF8F8
|
||||
.4byte lbl_8038C62C
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C644
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C65C
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C674
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C824
|
||||
.4byte lbl_8038C68C
|
||||
.4byte lbl_8038C6A4
|
||||
.4byte lbl_8038C6BC
|
||||
.4byte lbl_8038C6D4
|
||||
.4byte lbl_8038C6EC
|
||||
.4byte lbl_8038C704
|
||||
.4byte lbl_8038C71C
|
||||
.4byte lbl_8038C734
|
||||
.4byte lbl_8038C74C
|
||||
.4byte lbl_8038C764
|
||||
.4byte lbl_8038C77C
|
||||
.4byte lbl_8038C794
|
||||
.4byte lbl_8038C7AC
|
||||
.4byte lbl_8038C7C4
|
||||
.4byte lbl_8038C7DC
|
||||
.4byte lbl_8038C7F4
|
||||
.4byte lbl_8038C80C
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803F2A20
|
||||
lbl_803F2A20:
|
||||
# ROM: 0x3EFA20
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01020202
|
||||
.4byte 0x02020101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x01010101
|
||||
.4byte 0x04080808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x30303030
|
||||
.4byte 0x30303030
|
||||
.4byte 0x30300808
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08A0A0A0
|
||||
.4byte 0xA0A0A080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808080
|
||||
.4byte 0x80808008
|
||||
.4byte 0x08080808
|
||||
.4byte 0x08606060
|
||||
.4byte 0x60606040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404040
|
||||
.4byte 0x40404008
|
||||
.4byte 0x08080801
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
||||
.global lbl_803F2B20
|
||||
lbl_803F2B20:
|
||||
# ROM: 0x3EFB20
|
||||
.4byte 0x00010203
|
||||
.4byte 0x04050607
|
||||
.4byte 0x08090A0B
|
||||
.4byte 0x0C0D0E0F
|
||||
.4byte 0x10111213
|
||||
.4byte 0x14151617
|
||||
.4byte 0x18191A1B
|
||||
.4byte 0x1C1D1E1F
|
||||
.4byte 0x20212223
|
||||
.4byte 0x24252627
|
||||
.4byte 0x28292A2B
|
||||
.4byte 0x2C2D2E2F
|
||||
.4byte 0x30313233
|
||||
.4byte 0x34353637
|
||||
.4byte 0x38393A3B
|
||||
.4byte 0x3C3D3E3F
|
||||
.4byte 0x40616263
|
||||
.4byte 0x64656667
|
||||
.4byte 0x68696A6B
|
||||
.4byte 0x6C6D6E6F
|
||||
.4byte 0x70717273
|
||||
.4byte 0x74757677
|
||||
.4byte 0x78797A5B
|
||||
.4byte 0x5C5D5E5F
|
||||
.4byte 0x60616263
|
||||
.4byte 0x64656667
|
||||
.4byte 0x68696A6B
|
||||
.4byte 0x6C6D6E6F
|
||||
.4byte 0x70717273
|
||||
.4byte 0x74757677
|
||||
.4byte 0x78797A7B
|
||||
.4byte 0x7C7D7E7F
|
||||
.4byte 0x80818283
|
||||
.4byte 0x84858687
|
||||
.4byte 0x88898A8B
|
||||
.4byte 0x8C8D8E8F
|
||||
.4byte 0x90919293
|
||||
.4byte 0x94959697
|
||||
.4byte 0x98999A9B
|
||||
.4byte 0x9C9D9E9F
|
||||
.4byte 0xA0A1A2A3
|
||||
.4byte 0xA4A5A6A7
|
||||
.4byte 0xA8A9AAAB
|
||||
.4byte 0xACADAEAF
|
||||
.4byte 0xB0B1B2B3
|
||||
.4byte 0xB4B5B6B7
|
||||
.4byte 0xB8B9BABB
|
||||
.4byte 0xBCBDBEBF
|
||||
.4byte 0xC0C1C2C3
|
||||
.4byte 0xC4C5C6C7
|
||||
.4byte 0xC8C9CACB
|
||||
.4byte 0xCCCDCECF
|
||||
.4byte 0xD0D1D2D3
|
||||
.4byte 0xD4D5D6D7
|
||||
.4byte 0xD8D9DADB
|
||||
.4byte 0xDCDDDEDF
|
||||
.4byte 0xE0E1E2E3
|
||||
.4byte 0xE4E5E6E7
|
||||
.4byte 0xE8E9EAEB
|
||||
.4byte 0xECEDEEEF
|
||||
.4byte 0xF0F1F2F3
|
||||
.4byte 0xF4F5F6F7
|
||||
.4byte 0xF8F9FAFB
|
||||
.4byte 0xFCFDFEFF
|
||||
|
||||
.global lbl_803F2C20
|
||||
lbl_803F2C20:
|
||||
# ROM: 0x3EFC20
|
||||
.4byte 0x00010203
|
||||
.4byte 0x04050607
|
||||
.4byte 0x08090A0B
|
||||
.4byte 0x0C0D0E0F
|
||||
.4byte 0x10111213
|
||||
.4byte 0x14151617
|
||||
.4byte 0x18191A1B
|
||||
.4byte 0x1C1D1E1F
|
||||
.4byte 0x20212223
|
||||
.4byte 0x24252627
|
||||
.4byte 0x28292A2B
|
||||
.4byte 0x2C2D2E2F
|
||||
.4byte 0x30313233
|
||||
.4byte 0x34353637
|
||||
.4byte 0x38393A3B
|
||||
.4byte 0x3C3D3E3F
|
||||
.4byte 0x40414243
|
||||
.4byte 0x44454647
|
||||
.4byte 0x48494A4B
|
||||
.4byte 0x4C4D4E4F
|
||||
.4byte 0x50515253
|
||||
.4byte 0x54555657
|
||||
.4byte 0x58595A5B
|
||||
.4byte 0x5C5D5E5F
|
||||
.4byte 0x60414243
|
||||
.4byte 0x44454647
|
||||
.4byte 0x48494A4B
|
||||
.4byte 0x4C4D4E4F
|
||||
.4byte 0x50515253
|
||||
.4byte 0x54555657
|
||||
.4byte 0x58595A7B
|
||||
.4byte 0x7C7D7E7F
|
||||
.4byte 0x80818283
|
||||
.4byte 0x84858687
|
||||
.4byte 0x88898A8B
|
||||
.4byte 0x8C8D8E8F
|
||||
.4byte 0x90919293
|
||||
.4byte 0x94959697
|
||||
.4byte 0x98999A9B
|
||||
.4byte 0x9C9D9E9F
|
||||
.4byte 0xA0A1A2A3
|
||||
.4byte 0xA4A5A6A7
|
||||
.4byte 0xA8A9AAAB
|
||||
.4byte 0xACADAEAF
|
||||
.4byte 0xB0B1B2B3
|
||||
.4byte 0xB4B5B6B7
|
||||
.4byte 0xB8B9BABB
|
||||
.4byte 0xBCBDBEBF
|
||||
.4byte 0xC0C1C2C3
|
||||
.4byte 0xC4C5C6C7
|
||||
.4byte 0xC8C9CACB
|
||||
.4byte 0xCCCDCECF
|
||||
.4byte 0xD0D1D2D3
|
||||
.4byte 0xD4D5D6D7
|
||||
.4byte 0xD8D9DADB
|
||||
.4byte 0xDCDDDEDF
|
||||
.4byte 0xE0E1E2E3
|
||||
.4byte 0xE4E5E6E7
|
||||
.4byte 0xE8E9EAEB
|
||||
.4byte 0xECEDEEEF
|
||||
.4byte 0xF0F1F2F3
|
||||
.4byte 0xF4F5F6F7
|
||||
.4byte 0xF8F9FAFB
|
||||
.4byte 0xFCFDFEFF
|
||||
|
||||
.global lbl_803F2D20
|
||||
lbl_803F2D20:
|
||||
# ROM: 0x3EFD20
|
||||
.4byte lbl_803D86B8
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte lbl_803D86BA
|
||||
.4byte 0x7F7F7F7F
|
||||
.4byte 0x7F7F7F00
|
||||
.4byte lbl_803D86BA
|
||||
.4byte 0x7F7F7F7F
|
||||
.4byte 0x7F7F7F00
|
||||
|
||||
.global lbl_803F2D58
|
||||
lbl_803F2D58:
|
||||
|
@ -595,16 +178,15 @@ lbl_803F2F40:
|
|||
.4byte lbl_8038F8E0
|
||||
.4byte 0
|
||||
|
||||
.section .sdata, "wa"
|
||||
.balign 8
|
||||
.global lbl_805A8B90
|
||||
lbl_805A8B90:
|
||||
# ROM: 0x3F6530
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
||||
.section .text, "ax"
|
||||
# TODO: Move __stdio_atexit to its own file (misc_io),
|
||||
# it's here to work around a bug with CW
|
||||
.global __stdio_atexit
|
||||
__stdio_atexit:
|
||||
/* 8038DCCC 0038AC2C 3C 60 80 39 */ lis r3, __close_all@ha
|
||||
/* 8038DCD0 0038AC30 38 03 B1 18 */ addi r0, r3, __close_all@l
|
||||
/* 8038DCD4 0038AC34 90 0D AE 00 */ stw r0, lbl_805A99C0@sda21(r13)
|
||||
/* 8038DCD8 0038AC38 4E 80 00 20 */ blr
|
||||
|
||||
.global sprintf
|
||||
sprintf:
|
||||
|
@ -1463,9 +1045,9 @@ lbl_8038E884:
|
|||
/* 8038E884 0038B7E4 C8 02 CF 78 */ lfd f0, lbl_805AEC98@sda21(r2)
|
||||
/* 8038E888 0038B7E8 FC 1F 00 40 */ fcmpo cr0, f31, f0
|
||||
/* 8038E88C 0038B7EC 40 80 00 50 */ bge lbl_8038E8DC
|
||||
/* 8038E890 0038B7F0 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8038E890 0038B7F0 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 8038E894 0038B7F4 88 1D 00 05 */ lbz r0, 5(r29)
|
||||
/* 8038E898 0038B7F8 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8038E898 0038B7F8 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8038E89C 0038B7FC 3B 9C FF FB */ addi r28, r28, -5
|
||||
/* 8038E8A0 0038B800 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 8038E8A4 0038B804 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18
|
||||
|
@ -1484,9 +1066,9 @@ lbl_8038E8C4:
|
|||
/* 8038E8D4 0038B834 48 00 18 35 */ bl strcpy
|
||||
/* 8038E8D8 0038B838 48 00 00 4C */ b lbl_8038E924
|
||||
lbl_8038E8DC:
|
||||
/* 8038E8DC 0038B83C 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8038E8DC 0038B83C 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 8038E8E0 0038B840 88 1D 00 05 */ lbz r0, 5(r29)
|
||||
/* 8038E8E4 0038B844 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8038E8E4 0038B844 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8038E8E8 0038B848 3B 9C FF FC */ addi r28, r28, -4
|
||||
/* 8038E8EC 0038B84C 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 8038E8F0 0038B850 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18
|
||||
|
@ -1510,9 +1092,9 @@ lbl_8038E92C:
|
|||
/* 8038E92C 0038B88C 88 01 00 0C */ lbz r0, 0xc(r1)
|
||||
/* 8038E930 0038B890 7C 00 07 75 */ extsb. r0, r0
|
||||
/* 8038E934 0038B894 41 82 00 50 */ beq lbl_8038E984
|
||||
/* 8038E938 0038B898 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8038E938 0038B898 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 8038E93C 0038B89C 88 1D 00 05 */ lbz r0, 5(r29)
|
||||
/* 8038E940 0038B8A0 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8038E940 0038B8A0 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8038E944 0038B8A4 3B 9C FF FB */ addi r28, r28, -5
|
||||
/* 8038E948 0038B8A8 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 8038E94C 0038B8AC 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18
|
||||
|
@ -1531,9 +1113,9 @@ lbl_8038E96C:
|
|||
/* 8038E97C 0038B8DC 48 00 17 8D */ bl strcpy
|
||||
/* 8038E980 0038B8E0 48 00 00 4C */ b lbl_8038E9CC
|
||||
lbl_8038E984:
|
||||
/* 8038E984 0038B8E4 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8038E984 0038B8E4 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 8038E988 0038B8E8 88 1D 00 05 */ lbz r0, 5(r29)
|
||||
/* 8038E98C 0038B8EC 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8038E98C 0038B8EC 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8038E990 0038B8F0 3B 9C FF FC */ addi r28, r28, -4
|
||||
/* 8038E994 0038B8F4 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 8038E998 0038B8F8 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18
|
||||
|
@ -2706,8 +2288,8 @@ lbl_8038F944:
|
|||
/* 8038F948 0038C8A8 7C C6 07 74 */ extsb r6, r6
|
||||
/* 8038F94C 0038C8AC 48 00 00 3C */ b lbl_8038F988
|
||||
lbl_8038F950:
|
||||
/* 8038F950 0038C8B0 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8038F954 0038C8B4 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8038F950 0038C8B0 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 8038F954 0038C8B4 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8038F958 0038C8B8 48 00 00 20 */ b lbl_8038F978
|
||||
lbl_8038F95C:
|
||||
/* 8038F95C 0038C8BC 80 01 00 10 */ lwz r0, 0x10(r1)
|
||||
|
@ -2760,8 +2342,8 @@ lbl_8038FA04:
|
|||
/* 8038FA08 0038C968 7C C6 07 74 */ extsb r6, r6
|
||||
/* 8038FA0C 0038C96C 48 00 00 3C */ b lbl_8038FA48
|
||||
lbl_8038FA10:
|
||||
/* 8038FA10 0038C970 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8038FA14 0038C974 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8038FA10 0038C970 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 8038FA14 0038C974 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8038FA18 0038C978 48 00 00 20 */ b lbl_8038FA38
|
||||
lbl_8038FA1C:
|
||||
/* 8038FA1C 0038C97C 80 01 00 14 */ lwz r0, 0x14(r1)
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
.include "macros.inc"
|
||||
|
||||
.section .sdata, "wa"
|
||||
.balign 8
|
||||
.global lbl_805A8B98
|
||||
lbl_805A8B98:
|
||||
# ROM: 0x3F6538
|
||||
.4byte 0x00000001
|
||||
|
||||
.section .text, "ax"
|
||||
|
||||
.global srand
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
.section .sdata
|
||||
.balign 8
|
||||
|
||||
# TODO: Split this
|
||||
|
||||
.global lbl_805A8B90
|
||||
lbl_805A8B90:
|
||||
# ROM: 0x3F6530
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
||||
.global lbl_805A8B98
|
||||
lbl_805A8B98:
|
||||
# ROM: 0x3F6538
|
||||
.4byte 0x00000001
|
||||
.4byte 0
|
||||
|
||||
.global lbl_805A8BA0
|
||||
lbl_805A8BA0:
|
||||
# ROM: 0x3F6540
|
||||
.4byte 0x7FFFFFFF
|
||||
|
||||
.global lbl_805A8BA4
|
||||
lbl_805A8BA4:
|
||||
# ROM: 0x3F6544
|
||||
.4byte 0x7F800000
|
||||
|
||||
.global lbl_805A8BA8
|
||||
lbl_805A8BA8:
|
||||
# ROM: 0x3F6548
|
||||
.4byte 0x00100000
|
||||
.4byte 0
|
||||
|
||||
.global lbl_805A8BB0
|
||||
lbl_805A8BB0:
|
||||
# ROM: 0x3F6550
|
||||
.4byte 0x7FEFFFFF
|
||||
.4byte 0xFFFFFFFF
|
||||
|
||||
.global lbl_805A8BB8
|
||||
lbl_805A8BB8:
|
||||
# ROM: 0x3F6558
|
||||
.4byte 0x7FF00000
|
||||
.4byte 0
|
||||
|
||||
.global lbl_805A8BC0
|
||||
lbl_805A8BC0:
|
||||
# ROM: 0x3F6560
|
||||
.4byte 0x00100000
|
||||
.4byte 0
|
||||
|
||||
.global lbl_805A8BC8
|
||||
lbl_805A8BC8:
|
||||
# ROM: 0x3F6568
|
||||
.4byte 0x7FEFFFFF
|
||||
.4byte 0xFFFFFFFF
|
||||
|
||||
|
|
@ -50,17 +50,17 @@ atof:
|
|||
/* 80390224 0038D184 C8 02 CF 88 */ lfd f0, lbl_805AECA8@sda21(r2)
|
||||
/* 80390228 0038D188 FC 00 08 00 */ fcmpu cr0, f0, f1
|
||||
/* 8039022C 0038D18C 41 82 00 2C */ beq lbl_80390258
|
||||
/* 80390230 0038D190 3C 60 80 5B */ lis r3, lbl_805A8BA8@ha
|
||||
/* 80390234 0038D194 C8 03 8B A8 */ lfd f0, lbl_805A8BA8@l(r3)
|
||||
/* 80390230 0038D190 3C 60 80 5B */ lis r3, __double_min@ha
|
||||
/* 80390234 0038D194 C8 03 8B A8 */ lfd f0, __double_min@l(r3)
|
||||
/* 80390238 0038D198 FC 02 00 40 */ fcmpo cr0, f2, f0
|
||||
/* 8039023C 0038D19C 41 80 00 14 */ blt lbl_80390250
|
||||
/* 80390240 0038D1A0 3C 60 80 5B */ lis r3, lbl_805A8BB0@ha
|
||||
/* 80390244 0038D1A4 C8 03 8B B0 */ lfd f0, lbl_805A8BB0@l(r3)
|
||||
/* 80390240 0038D1A0 3C 60 80 5B */ lis r3, __double_max@ha
|
||||
/* 80390244 0038D1A4 C8 03 8B B0 */ lfd f0, __double_max@l(r3)
|
||||
/* 80390248 0038D1A8 FC 02 00 40 */ fcmpo cr0, f2, f0
|
||||
/* 8039024C 0038D1AC 40 81 00 0C */ ble lbl_80390258
|
||||
lbl_80390250:
|
||||
/* 80390250 0038D1B0 38 00 00 22 */ li r0, 0x22
|
||||
/* 80390254 0038D1B4 90 0D AE 10 */ stw r0, lbl_805A99D0@sda21(r13)
|
||||
/* 80390254 0038D1B4 90 0D AE 10 */ stw r0, errno@sda21(r13)
|
||||
lbl_80390258:
|
||||
/* 80390258 0038D1B8 80 01 00 24 */ lwz r0, 0x24(r1)
|
||||
/* 8039025C 0038D1BC 7C 08 03 A6 */ mtlr r0
|
||||
|
@ -77,8 +77,8 @@ __strtold:
|
|||
/* 8039027C 0038D1DC BD C1 00 68 */ stmw r14, 0x68(r1)
|
||||
/* 80390280 0038D1E0 3A E8 86 E8 */ addi r23, r8, lbl_803D86E8@l
|
||||
/* 80390284 0038D1E4 7C 90 23 78 */ mr r16, r4
|
||||
/* 80390288 0038D1E8 3C 80 80 3F */ lis r4, lbl_803F2D20@ha
|
||||
/* 8039028C 0038D1EC 39 C4 2D 20 */ addi r14, r4, lbl_803F2D20@l
|
||||
/* 80390288 0038D1E8 3C 80 80 3F */ lis r4, __lconv@ha
|
||||
/* 8039028C 0038D1EC 39 C4 2D 20 */ addi r14, r4, __lconv@l
|
||||
/* 80390290 0038D1F0 7C B1 2B 78 */ mr r17, r5
|
||||
/* 80390294 0038D1F4 7C F2 3B 78 */ mr r18, r7
|
||||
/* 80390298 0038D1F8 90 C1 00 0C */ stw r6, 0xc(r1)
|
||||
|
@ -186,9 +186,9 @@ lbl_803903FC:
|
|||
/* 80390414 0038D374 41 82 01 24 */ beq lbl_80390538
|
||||
/* 80390418 0038D378 48 00 0B 94 */ b lbl_80390FAC
|
||||
lbl_8039041C:
|
||||
/* 8039041C 0038D37C 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8039041C 0038D37C 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390420 0038D380 54 85 06 3E */ clrlwi r5, r4, 0x18
|
||||
/* 80390424 0038D384 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390424 0038D384 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390428 0038D388 7C 03 28 AE */ lbzx r0, r3, r5
|
||||
/* 8039042C 0038D38C 54 00 07 7D */ rlwinm. r0, r0, 0, 0x1d, 0x1e
|
||||
/* 80390430 0038D390 41 82 00 28 */ beq lbl_80390458
|
||||
|
@ -207,8 +207,8 @@ lbl_80390458:
|
|||
/* 80390460 0038D3C0 38 00 FF FF */ li r0, -1
|
||||
/* 80390464 0038D3C4 48 00 00 10 */ b lbl_80390474
|
||||
lbl_80390468:
|
||||
/* 80390468 0038D3C8 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 8039046C 0038D3CC 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80390468 0038D3C8 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 8039046C 0038D3CC 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80390470 0038D3D0 7C 03 28 AE */ lbzx r0, r3, r5
|
||||
lbl_80390474:
|
||||
/* 80390474 0038D3D4 2C 00 00 49 */ cmpwi r0, 0x49
|
||||
|
@ -300,9 +300,9 @@ lbl_8039058C:
|
|||
/* 803905A4 0038D504 38 00 FF FF */ li r0, -1
|
||||
/* 803905A8 0038D508 48 00 00 14 */ b lbl_803905BC
|
||||
lbl_803905AC:
|
||||
/* 803905AC 0038D50C 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 803905AC 0038D50C 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 803905B0 0038D510 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 803905B4 0038D514 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 803905B4 0038D514 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 803905B8 0038D518 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_803905BC:
|
||||
/* 803905BC 0038D51C 7C 05 00 00 */ cmpw r5, r0
|
||||
|
@ -315,13 +315,13 @@ lbl_803905C4:
|
|||
lbl_803905D4:
|
||||
/* 803905D4 0038D534 2C 0E 00 00 */ cmpwi r14, 0
|
||||
/* 803905D8 0038D538 41 82 00 14 */ beq lbl_803905EC
|
||||
/* 803905DC 0038D53C 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 803905E0 0038D540 C0 03 8B A4 */ lfs f0, lbl_805A8BA4@l(r3)
|
||||
/* 803905DC 0038D53C 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 803905E0 0038D540 C0 03 8B A4 */ lfs f0, __float_huge@l(r3)
|
||||
/* 803905E4 0038D544 FC 20 00 50 */ fneg f1, f0
|
||||
/* 803905E8 0038D548 48 00 00 0C */ b lbl_803905F4
|
||||
lbl_803905EC:
|
||||
/* 803905EC 0038D54C 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 803905F0 0038D550 C0 23 8B A4 */ lfs f1, lbl_805A8BA4@l(r3)
|
||||
/* 803905EC 0038D54C 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 803905F0 0038D550 C0 23 8B A4 */ lfs f1, __float_huge@l(r3)
|
||||
lbl_803905F4:
|
||||
/* 803905F4 0038D554 80 01 00 5C */ lwz r0, 0x5c(r1)
|
||||
/* 803905F8 0038D558 80 61 00 0C */ lwz r3, 0xc(r1)
|
||||
|
@ -363,9 +363,9 @@ lbl_80390660:
|
|||
/* 80390678 0038D5D8 38 00 FF FF */ li r0, -1
|
||||
/* 8039067C 0038D5DC 48 00 00 14 */ b lbl_80390690
|
||||
lbl_80390680:
|
||||
/* 80390680 0038D5E0 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80390680 0038D5E0 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80390684 0038D5E4 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390688 0038D5E8 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80390688 0038D5E8 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 8039068C 0038D5EC 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_80390690:
|
||||
/* 80390690 0038D5F0 7C 05 00 00 */ cmpw r5, r0
|
||||
|
@ -378,8 +378,8 @@ lbl_80390698:
|
|||
lbl_803906A8:
|
||||
/* 803906A8 0038D608 2C 14 00 04 */ cmpwi r20, 4
|
||||
/* 803906AC 0038D60C 40 82 00 68 */ bne lbl_80390714
|
||||
/* 803906B0 0038D610 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 803906B4 0038D614 39 E3 2A 20 */ addi r15, r3, lbl_803F2A20@l
|
||||
/* 803906B0 0038D610 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 803906B4 0038D614 39 E3 2A 20 */ addi r15, r3, __ctype_map@l
|
||||
/* 803906B8 0038D618 48 00 00 28 */ b lbl_803906E0
|
||||
lbl_803906BC:
|
||||
/* 803906BC 0038D61C 7E 0C 83 78 */ mr r12, r16
|
||||
|
@ -410,13 +410,13 @@ lbl_80390710:
|
|||
lbl_80390714:
|
||||
/* 80390714 0038D674 2C 0E 00 00 */ cmpwi r14, 0
|
||||
/* 80390718 0038D678 41 82 00 14 */ beq lbl_8039072C
|
||||
/* 8039071C 0038D67C 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80390720 0038D680 C0 03 8B A0 */ lfs f0, lbl_805A8BA0@l(r3)
|
||||
/* 8039071C 0038D67C 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80390720 0038D680 C0 03 8B A0 */ lfs f0, __float_nan@l(r3)
|
||||
/* 80390724 0038D684 FC 20 00 50 */ fneg f1, f0
|
||||
/* 80390728 0038D688 48 00 00 0C */ b lbl_80390734
|
||||
lbl_8039072C:
|
||||
/* 8039072C 0038D68C 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 80390730 0038D690 C0 23 8B A0 */ lfs f1, lbl_805A8BA0@l(r3)
|
||||
/* 8039072C 0038D68C 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 80390730 0038D690 C0 23 8B A0 */ lfs f1, __float_nan@l(r3)
|
||||
lbl_80390734:
|
||||
/* 80390734 0038D694 80 01 00 5C */ lwz r0, 0x5c(r1)
|
||||
/* 80390738 0038D698 7C 74 9A 14 */ add r3, r20, r19
|
||||
|
@ -443,9 +443,9 @@ lbl_8039075C:
|
|||
/* 80390784 0038D6E4 7C 64 1B 78 */ mr r4, r3
|
||||
/* 80390788 0038D6E8 48 00 08 24 */ b lbl_80390FAC
|
||||
lbl_8039078C:
|
||||
/* 8039078C 0038D6EC 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 8039078C 0038D6EC 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390790 0038D6F0 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390794 0038D6F4 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390794 0038D6F4 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390798 0038D6F8 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 8039079C 0038D6FC 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 803907A0 0038D700 40 82 00 0C */ bne lbl_803907AC
|
||||
|
@ -467,9 +467,9 @@ lbl_803907AC:
|
|||
/* 803907DC 0038D73C 38 00 FF FF */ li r0, -1
|
||||
/* 803907E0 0038D740 48 00 00 14 */ b lbl_803907F4
|
||||
lbl_803907E4:
|
||||
/* 803907E4 0038D744 3C A0 80 3F */ lis r5, lbl_803F2C20@ha
|
||||
/* 803907E4 0038D744 3C A0 80 3F */ lis r5, __upper_map@ha
|
||||
/* 803907E8 0038D748 54 60 06 3E */ clrlwi r0, r3, 0x18
|
||||
/* 803907EC 0038D74C 38 65 2C 20 */ addi r3, r5, lbl_803F2C20@l
|
||||
/* 803907EC 0038D74C 38 65 2C 20 */ addi r3, r5, __upper_map@l
|
||||
/* 803907F0 0038D750 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_803907F4:
|
||||
/* 803907F4 0038D754 2C 00 00 58 */ cmpwi r0, 0x58
|
||||
|
@ -500,9 +500,9 @@ lbl_80390848:
|
|||
/* 80390848 0038D7A8 39 E0 00 08 */ li r15, 8
|
||||
/* 8039084C 0038D7AC 48 00 07 60 */ b lbl_80390FAC
|
||||
lbl_80390850:
|
||||
/* 80390850 0038D7B0 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390850 0038D7B0 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390854 0038D7B4 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390858 0038D7B8 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390858 0038D7B8 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 8039085C 0038D7BC 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 80390860 0038D7C0 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390864 0038D7C4 40 82 00 3C */ bne lbl_803908A0
|
||||
|
@ -544,9 +544,9 @@ lbl_803908C8:
|
|||
/* 803908E4 0038D844 7C 64 1B 78 */ mr r4, r3
|
||||
/* 803908E8 0038D848 48 00 06 C4 */ b lbl_80390FAC
|
||||
lbl_803908EC:
|
||||
/* 803908EC 0038D84C 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 803908EC 0038D84C 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 803908F0 0038D850 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 803908F4 0038D854 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 803908F4 0038D854 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 803908F8 0038D858 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 803908FC 0038D85C 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390900 0038D860 40 82 00 0C */ bne lbl_8039090C
|
||||
|
@ -556,9 +556,9 @@ lbl_8039090C:
|
|||
/* 8039090C 0038D86C 39 E0 00 20 */ li r15, 0x20
|
||||
/* 80390910 0038D870 48 00 06 9C */ b lbl_80390FAC
|
||||
lbl_80390914:
|
||||
/* 80390914 0038D874 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390914 0038D874 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390918 0038D878 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 8039091C 0038D87C 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 8039091C 0038D87C 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390920 0038D880 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 80390924 0038D884 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390928 0038D888 40 82 00 0C */ bne lbl_80390934
|
||||
|
@ -597,9 +597,9 @@ lbl_80390990:
|
|||
/* 80390998 0038D8F8 38 00 FF FF */ li r0, -1
|
||||
/* 8039099C 0038D8FC 48 00 00 14 */ b lbl_803909B0
|
||||
lbl_803909A0:
|
||||
/* 803909A0 0038D900 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 803909A0 0038D900 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 803909A4 0038D904 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 803909A8 0038D908 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 803909A8 0038D908 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 803909AC 0038D90C 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_803909B0:
|
||||
/* 803909B0 0038D910 2C 00 00 45 */ cmpwi r0, 0x45
|
||||
|
@ -646,9 +646,9 @@ lbl_80390A44:
|
|||
/* 80390A44 0038D9A4 39 E0 01 00 */ li r15, 0x100
|
||||
/* 80390A48 0038D9A8 48 00 05 64 */ b lbl_80390FAC
|
||||
lbl_80390A4C:
|
||||
/* 80390A4C 0038D9AC 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390A4C 0038D9AC 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390A50 0038D9B0 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390A54 0038D9B4 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390A54 0038D9B4 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390A58 0038D9B8 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 80390A5C 0038D9BC 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390A60 0038D9C0 40 82 00 0C */ bne lbl_80390A6C
|
||||
|
@ -686,9 +686,9 @@ lbl_80390AD0:
|
|||
/* 80390AD0 0038DA30 39 E0 04 00 */ li r15, 0x400
|
||||
/* 80390AD4 0038DA34 48 00 04 D8 */ b lbl_80390FAC
|
||||
lbl_80390AD8:
|
||||
/* 80390AD8 0038DA38 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390AD8 0038DA38 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390ADC 0038DA3C 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390AE0 0038DA40 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390AE0 0038DA40 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390AE4 0038DA44 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 80390AE8 0038DA48 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390AEC 0038DA4C 40 82 00 0C */ bne lbl_80390AF8
|
||||
|
@ -777,9 +777,9 @@ lbl_80390C14:
|
|||
/* 80390C14 0038DB74 3B E0 00 04 */ li r31, 4
|
||||
/* 80390C18 0038DB78 48 00 03 94 */ b lbl_80390FAC
|
||||
lbl_80390C1C:
|
||||
/* 80390C1C 0038DB7C 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390C1C 0038DB7C 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390C20 0038DB80 54 85 06 3E */ clrlwi r5, r4, 0x18
|
||||
/* 80390C24 0038DB84 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390C24 0038DB84 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390C28 0038DB88 7C 03 28 AE */ lbzx r0, r3, r5
|
||||
/* 80390C2C 0038DB8C 54 00 06 B5 */ rlwinm. r0, r0, 0, 0x1a, 0x1a
|
||||
/* 80390C30 0038DB90 40 82 00 3C */ bne lbl_80390C6C
|
||||
|
@ -811,8 +811,8 @@ lbl_80390C6C:
|
|||
/* 80390C90 0038DBF0 38 60 FF FF */ li r3, -1
|
||||
/* 80390C94 0038DBF4 48 00 00 10 */ b lbl_80390CA4
|
||||
lbl_80390C98:
|
||||
/* 80390C98 0038DBF8 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80390C9C 0038DBFC 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80390C98 0038DBF8 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80390C9C 0038DBFC 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80390CA0 0038DC00 7C 63 28 AE */ lbzx r3, r3, r5
|
||||
lbl_80390CA4:
|
||||
/* 80390CA4 0038DC04 2C 03 00 41 */ cmpwi r3, 0x41
|
||||
|
@ -859,9 +859,9 @@ lbl_80390D1C:
|
|||
/* 80390D38 0038DC98 7C 64 1B 78 */ mr r4, r3
|
||||
/* 80390D3C 0038DC9C 48 00 02 70 */ b lbl_80390FAC
|
||||
lbl_80390D40:
|
||||
/* 80390D40 0038DCA0 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390D40 0038DCA0 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390D44 0038DCA4 54 85 06 3E */ clrlwi r5, r4, 0x18
|
||||
/* 80390D48 0038DCA8 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390D48 0038DCA8 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390D4C 0038DCAC 7C 03 28 AE */ lbzx r0, r3, r5
|
||||
/* 80390D50 0038DCB0 54 00 06 B5 */ rlwinm. r0, r0, 0, 0x1a, 0x1a
|
||||
/* 80390D54 0038DCB4 40 82 00 0C */ bne lbl_80390D60
|
||||
|
@ -879,8 +879,8 @@ lbl_80390D60:
|
|||
/* 80390D80 0038DCE0 38 60 FF FF */ li r3, -1
|
||||
/* 80390D84 0038DCE4 48 00 00 10 */ b lbl_80390D94
|
||||
lbl_80390D88:
|
||||
/* 80390D88 0038DCE8 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80390D8C 0038DCEC 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80390D88 0038DCE8 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80390D8C 0038DCEC 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80390D90 0038DCF0 7C 63 28 AE */ lbzx r3, r3, r5
|
||||
lbl_80390D94:
|
||||
/* 80390D94 0038DCF4 2C 03 00 41 */ cmpwi r3, 0x41
|
||||
|
@ -932,9 +932,9 @@ lbl_80390E30:
|
|||
/* 80390E38 0038DD98 38 00 FF FF */ li r0, -1
|
||||
/* 80390E3C 0038DD9C 48 00 00 14 */ b lbl_80390E50
|
||||
lbl_80390E40:
|
||||
/* 80390E40 0038DDA0 3C 60 80 3F */ lis r3, lbl_803F2C20@ha
|
||||
/* 80390E40 0038DDA0 3C 60 80 3F */ lis r3, __upper_map@ha
|
||||
/* 80390E44 0038DDA4 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390E48 0038DDA8 38 63 2C 20 */ addi r3, r3, lbl_803F2C20@l
|
||||
/* 80390E48 0038DDA8 38 63 2C 20 */ addi r3, r3, __upper_map@l
|
||||
/* 80390E4C 0038DDAC 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
lbl_80390E50:
|
||||
/* 80390E50 0038DDB0 2C 00 00 50 */ cmpwi r0, 0x50
|
||||
|
@ -981,9 +981,9 @@ lbl_80390EC4:
|
|||
/* 80390EE4 0038DE44 7C 64 1B 78 */ mr r4, r3
|
||||
/* 80390EE8 0038DE48 48 00 00 C4 */ b lbl_80390FAC
|
||||
lbl_80390EEC:
|
||||
/* 80390EEC 0038DE4C 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390EEC 0038DE4C 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390EF0 0038DE50 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390EF4 0038DE54 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390EF4 0038DE54 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390EF8 0038DE58 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 80390EFC 0038DE5C 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390F00 0038DE60 40 82 00 0C */ bne lbl_80390F0C
|
||||
|
@ -1007,9 +1007,9 @@ lbl_80390F40:
|
|||
/* 80390F40 0038DEA0 3B E0 01 00 */ li r31, 0x100
|
||||
/* 80390F44 0038DEA4 48 00 00 68 */ b lbl_80390FAC
|
||||
lbl_80390F48:
|
||||
/* 80390F48 0038DEA8 3C 60 80 3F */ lis r3, lbl_803F2A20@ha
|
||||
/* 80390F48 0038DEA8 3C 60 80 3F */ lis r3, __ctype_map@ha
|
||||
/* 80390F4C 0038DEAC 54 80 06 3E */ clrlwi r0, r4, 0x18
|
||||
/* 80390F50 0038DEB0 38 63 2A 20 */ addi r3, r3, lbl_803F2A20@l
|
||||
/* 80390F50 0038DEB0 38 63 2A 20 */ addi r3, r3, __ctype_map@l
|
||||
/* 80390F54 0038DEB4 7C 03 00 AE */ lbzx r0, r3, r0
|
||||
/* 80390F58 0038DEB8 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
|
||||
/* 80390F5C 0038DEBC 40 82 00 0C */ bne lbl_80390F68
|
||||
|
@ -1112,13 +1112,13 @@ lbl_8039108C:
|
|||
lbl_803910AC:
|
||||
/* 803910AC 0038E00C 2C 0E 00 00 */ cmpwi r14, 0
|
||||
/* 803910B0 0038E010 41 82 00 14 */ beq lbl_803910C4
|
||||
/* 803910B4 0038E014 3C 60 80 5B */ lis r3, lbl_805A8BB8@ha
|
||||
/* 803910B8 0038E018 C8 03 8B B8 */ lfd f0, lbl_805A8BB8@l(r3)
|
||||
/* 803910B4 0038E014 3C 60 80 5B */ lis r3, __double_huge@ha
|
||||
/* 803910B8 0038E018 C8 03 8B B8 */ lfd f0, __double_huge@l(r3)
|
||||
/* 803910BC 0038E01C FC 20 00 50 */ fneg f1, f0
|
||||
/* 803910C0 0038E020 48 00 01 A0 */ b lbl_80391260
|
||||
lbl_803910C4:
|
||||
/* 803910C4 0038E024 3C 60 80 5B */ lis r3, lbl_805A8BB8@ha
|
||||
/* 803910C8 0038E028 C8 23 8B B8 */ lfd f1, lbl_805A8BB8@l(r3)
|
||||
/* 803910C4 0038E024 3C 60 80 5B */ lis r3, __double_huge@ha
|
||||
/* 803910C8 0038E028 C8 23 8B B8 */ lfd f1, __double_huge@l(r3)
|
||||
/* 803910CC 0038E02C 48 00 01 94 */ b lbl_80391260
|
||||
lbl_803910D0:
|
||||
/* 803910D0 0038E030 B3 81 00 2E */ sth r28, 0x2e(r1)
|
||||
|
@ -1128,22 +1128,22 @@ lbl_803910D0:
|
|||
/* 803910E0 0038E040 D8 21 00 18 */ stfd f1, 0x18(r1)
|
||||
/* 803910E4 0038E044 FC 00 08 00 */ fcmpu cr0, f0, f1
|
||||
/* 803910E8 0038E048 41 82 00 20 */ beq lbl_80391108
|
||||
/* 803910EC 0038E04C 3C 60 80 5B */ lis r3, lbl_805A8BC0@ha
|
||||
/* 803910F0 0038E050 C8 03 8B C0 */ lfd f0, lbl_805A8BC0@l(r3)
|
||||
/* 803910EC 0038E04C 3C 60 80 5B */ lis r3, __extended_min@ha
|
||||
/* 803910F0 0038E050 C8 03 8B C0 */ lfd f0, __extended_min@l(r3)
|
||||
/* 803910F4 0038E054 FC 01 00 40 */ fcmpo cr0, f1, f0
|
||||
/* 803910F8 0038E058 40 80 00 10 */ bge lbl_80391108
|
||||
/* 803910FC 0038E05C 38 00 00 01 */ li r0, 1
|
||||
/* 80391100 0038E060 90 12 00 00 */ stw r0, 0(r18)
|
||||
/* 80391104 0038E064 48 00 00 28 */ b lbl_8039112C
|
||||
lbl_80391108:
|
||||
/* 80391108 0038E068 3C 60 80 5B */ lis r3, lbl_805A8BC8@ha
|
||||
/* 8039110C 0038E06C C8 03 8B C8 */ lfd f0, lbl_805A8BC8@l(r3)
|
||||
/* 80391108 0038E068 3C 60 80 5B */ lis r3, __extended_max@ha
|
||||
/* 8039110C 0038E06C C8 03 8B C8 */ lfd f0, __extended_max@l(r3)
|
||||
/* 80391110 0038E070 FC 01 00 40 */ fcmpo cr0, f1, f0
|
||||
/* 80391114 0038E074 40 81 00 18 */ ble lbl_8039112C
|
||||
/* 80391118 0038E078 38 00 00 01 */ li r0, 1
|
||||
/* 8039111C 0038E07C 3C 60 80 5B */ lis r3, lbl_805A8BB8@ha
|
||||
/* 8039111C 0038E07C 3C 60 80 5B */ lis r3, __double_huge@ha
|
||||
/* 80391120 0038E080 90 12 00 00 */ stw r0, 0(r18)
|
||||
/* 80391124 0038E084 C8 03 8B B8 */ lfd f0, lbl_805A8BB8@l(r3)
|
||||
/* 80391124 0038E084 C8 03 8B B8 */ lfd f0, __double_huge@l(r3)
|
||||
/* 80391128 0038E088 D8 01 00 18 */ stfd f0, 0x18(r1)
|
||||
lbl_8039112C:
|
||||
/* 8039112C 0038E08C 2C 0E 00 00 */ cmpwi r14, 0
|
||||
|
@ -1201,8 +1201,8 @@ lbl_80391198:
|
|||
/* 803911EC 0038E14C 90 03 00 00 */ stw r0, 0(r3)
|
||||
/* 803911F0 0038E150 FC 01 10 00 */ fcmpu cr0, f1, f2
|
||||
/* 803911F4 0038E154 41 82 00 24 */ beq lbl_80391218
|
||||
/* 803911F8 0038E158 3C 60 80 5B */ lis r3, lbl_805A8BC0@ha
|
||||
/* 803911FC 0038E15C C8 03 8B C0 */ lfd f0, lbl_805A8BC0@l(r3)
|
||||
/* 803911F8 0038E158 3C 60 80 5B */ lis r3, __extended_min@ha
|
||||
/* 803911FC 0038E15C C8 03 8B C0 */ lfd f0, __extended_min@l(r3)
|
||||
/* 80391200 0038E160 FC 02 00 40 */ fcmpo cr0, f2, f0
|
||||
/* 80391204 0038E164 40 80 00 14 */ bge lbl_80391218
|
||||
/* 80391208 0038E168 38 00 00 01 */ li r0, 1
|
||||
|
@ -1210,14 +1210,14 @@ lbl_80391198:
|
|||
/* 80391210 0038E170 90 12 00 00 */ stw r0, 0(r18)
|
||||
/* 80391214 0038E174 48 00 00 28 */ b lbl_8039123C
|
||||
lbl_80391218:
|
||||
/* 80391218 0038E178 3C 60 80 5B */ lis r3, lbl_805A8BC8@ha
|
||||
/* 8039121C 0038E17C C8 03 8B C8 */ lfd f0, lbl_805A8BC8@l(r3)
|
||||
/* 80391218 0038E178 3C 60 80 5B */ lis r3, __extended_max@ha
|
||||
/* 8039121C 0038E17C C8 03 8B C8 */ lfd f0, __extended_max@l(r3)
|
||||
/* 80391220 0038E180 FC 02 00 40 */ fcmpo cr0, f2, f0
|
||||
/* 80391224 0038E184 40 81 00 18 */ ble lbl_8039123C
|
||||
/* 80391228 0038E188 38 00 00 01 */ li r0, 1
|
||||
/* 8039122C 0038E18C 3C 60 80 5B */ lis r3, lbl_805A8BB8@ha
|
||||
/* 8039122C 0038E18C 3C 60 80 5B */ lis r3, __double_huge@ha
|
||||
/* 80391230 0038E190 90 12 00 00 */ stw r0, 0(r18)
|
||||
/* 80391234 0038E194 C8 03 8B B8 */ lfd f0, lbl_805A8BB8@l(r3)
|
||||
/* 80391234 0038E194 C8 03 8B B8 */ lfd f0, __double_huge@l(r3)
|
||||
/* 80391238 0038E198 D8 01 00 18 */ stfd f0, 0x18(r1)
|
||||
lbl_8039123C:
|
||||
/* 8039123C 0038E19C 2C 0E 00 00 */ cmpwi r14, 0
|
||||
|
|
|
@ -1261,12 +1261,12 @@ lbl_802AAB00:
|
|||
lbl_802AAB0C:
|
||||
/* 802AAB0C 002A7A6C FC 09 38 00 */ fcmpu cr0, f9, f7
|
||||
/* 802AAB10 002A7A70 41 82 00 10 */ beq lbl_802AAB20
|
||||
/* 802AAB14 002A7A74 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 802AAB18 002A7A78 C0 E3 8B A0 */ lfs f7, lbl_805A8BA0@l(r3)
|
||||
/* 802AAB14 002A7A74 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 802AAB18 002A7A78 C0 E3 8B A0 */ lfs f7, __float_nan@l(r3)
|
||||
/* 802AAB1C 002A7A7C 48 00 00 0C */ b lbl_802AAB28
|
||||
lbl_802AAB20:
|
||||
/* 802AAB20 002A7A80 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 802AAB24 002A7A84 C0 E3 8B A4 */ lfs f7, lbl_805A8BA4@l(r3)
|
||||
/* 802AAB20 002A7A80 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 802AAB24 002A7A84 C0 E3 8B A4 */ lfs f7, __float_huge@l(r3)
|
||||
lbl_802AAB28:
|
||||
/* 802AAB28 002A7A88 FC 60 00 50 */ fneg f3, f0
|
||||
/* 802AAB2C 002A7A8C C8 02 C1 C0 */ lfd f0, lbl_805ADEE0@sda21(r2)
|
||||
|
|
|
@ -2553,12 +2553,12 @@ lbl_802A5520:
|
|||
lbl_802A552C:
|
||||
/* 802A552C 002A248C FC 09 38 00 */ fcmpu cr0, f9, f7
|
||||
/* 802A5530 002A2490 41 82 00 10 */ beq lbl_802A5540
|
||||
/* 802A5534 002A2494 3C 60 80 5B */ lis r3, lbl_805A8BA0@ha
|
||||
/* 802A5538 002A2498 C0 E3 8B A0 */ lfs f7, lbl_805A8BA0@l(r3)
|
||||
/* 802A5534 002A2494 3C 60 80 5B */ lis r3, __float_nan@ha
|
||||
/* 802A5538 002A2498 C0 E3 8B A0 */ lfs f7, __float_nan@l(r3)
|
||||
/* 802A553C 002A249C 48 00 00 0C */ b lbl_802A5548
|
||||
lbl_802A5540:
|
||||
/* 802A5540 002A24A0 3C 60 80 5B */ lis r3, lbl_805A8BA4@ha
|
||||
/* 802A5544 002A24A4 C0 E3 8B A4 */ lfs f7, lbl_805A8BA4@l(r3)
|
||||
/* 802A5540 002A24A0 3C 60 80 5B */ lis r3, __float_huge@ha
|
||||
/* 802A5544 002A24A4 C0 E3 8B A4 */ lfs f7, __float_huge@l(r3)
|
||||
lbl_802A5548:
|
||||
/* 802A5548 002A24A8 FC 60 00 50 */ fneg f3, f0
|
||||
/* 802A554C 002A24AC C8 02 C1 58 */ lfd f0, lbl_805ADE78@sda21(r2)
|
||||
|
|
|
@ -15,7 +15,11 @@ extern "C" {
|
|||
#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16)
|
||||
#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16)
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define AT_ADDRESS(xyz) : (xyz)
|
||||
#else
|
||||
#define AT_ADDRESS
|
||||
#endif
|
||||
u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h
|
||||
u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h
|
||||
#define OS_BUS_CLOCK __OSBusClock
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "Dolphin/os/OSFastCast.h"
|
||||
|
||||
namespace CCast {
|
||||
#ifdef __MWERKS__
|
||||
inline u8 ToUint8(register f32 in) {
|
||||
u8 a;
|
||||
register u8* ptr = &a;
|
||||
|
@ -24,6 +25,14 @@ inline f32 ToReal32(register const u8& in) {
|
|||
}
|
||||
return r;
|
||||
}
|
||||
#else
|
||||
inline u8 ToUint8(f32 in) {
|
||||
return static_cast<u8>(in);
|
||||
}
|
||||
inline f32 ToReal32(u8 in) {
|
||||
return static_cast<f32>(in);
|
||||
}
|
||||
#endif
|
||||
} // namespace CCast
|
||||
|
||||
#endif
|
||||
|
|
|
@ -5,7 +5,9 @@
|
|||
|
||||
#include "Kyoto/Basics/CCast.hpp"
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#pragma cpp_extensions on
|
||||
#endif
|
||||
|
||||
class CInputStream;
|
||||
class CColor {
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
static CVParamTransfer Null();
|
||||
|
||||
private:
|
||||
rstl::rc_ptr< void > x0_;
|
||||
rstl::rc_ptr< unkptr > x0_;
|
||||
};
|
||||
class CObjectReference {
|
||||
public:
|
||||
|
|
|
@ -11,8 +11,8 @@ inline T cinput_stream_helper(const TType< T >& type, CInputStream& in);
|
|||
|
||||
class CInputStream {
|
||||
public:
|
||||
CInputStream(size_t len);
|
||||
CInputStream(const void* ptr, size_t len, bool owned);
|
||||
CInputStream(s32 len);
|
||||
CInputStream(const void* ptr, s32 len, bool owned);
|
||||
virtual ~CInputStream();
|
||||
virtual u32 Read(void* dest, u32 len) = 0;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include "rstl/optional_object.hpp"
|
||||
#include "rstl/reserved_vector.hpp"
|
||||
|
||||
template < typename T, size_t N >
|
||||
template < typename T, s32 N >
|
||||
class TReservedAverage : rstl::reserved_vector< T, N > {
|
||||
public:
|
||||
TReservedAverage(const T& value) {
|
||||
|
@ -14,7 +14,7 @@ public:
|
|||
}
|
||||
void AddValue(const T& value) {
|
||||
push_back(value);
|
||||
for (size_t i = size() - 1; i > 0; --i) {
|
||||
for (s32 i = size() - 1; i > 0; --i) {
|
||||
operator[](i) = operator[](i - 1);
|
||||
}
|
||||
operator[](0) = value;
|
||||
|
|
|
@ -29,7 +29,7 @@ template < typename T >
|
|||
class TCachedToken : public TToken< T > {
|
||||
public:
|
||||
TCachedToken() {}
|
||||
TCachedToken(const CToken& token) : TToken(token), x8_item(nullptr) {}
|
||||
TCachedToken(const CToken& token) : TToken< T >(token), x8_item(nullptr) {}
|
||||
|
||||
// TODO
|
||||
operator const TToken< T >&() const;
|
||||
|
@ -42,7 +42,7 @@ template < typename T >
|
|||
class TLockedToken : public TCachedToken< T > {
|
||||
public:
|
||||
TLockedToken() {}
|
||||
TLockedToken(const CToken& token) : TCachedToken(token) { Lock(); }
|
||||
TLockedToken(const CToken& token) : TCachedToken< T >(token) { this->Lock(); }
|
||||
|
||||
// TODO
|
||||
operator const TToken< T >&() const;
|
||||
|
|
|
@ -99,11 +99,11 @@ private:
|
|||
|
||||
template < typename T >
|
||||
const T* TCastToConstPtr(const CEntity* p) {
|
||||
return TCastToPtr(const_cast< CEntity* >(p));
|
||||
return TCastToPtr< T >(const_cast< CEntity* >(p));
|
||||
}
|
||||
template < typename T >
|
||||
const T* TCastToConstPtr(const CEntity& p) {
|
||||
return TCastToPtr(const_cast< CEntity* >(&p));
|
||||
return TCastToPtr< T >(const_cast< CEntity* >(&p));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,22 +1,4 @@
|
|||
#ifndef _MATH_PPC_H_
|
||||
#define _MATH_PPC_H_
|
||||
|
||||
inline float sqrtf(float x)
|
||||
{
|
||||
static const double _half=.5;
|
||||
static const double _three=3.0;
|
||||
volatile float y;
|
||||
|
||||
if(x > 0.0f)
|
||||
{
|
||||
double guess = __frsqrte((double)x); /* returns an approximation to */
|
||||
guess = _half*guess*(_three - guess*guess*x); /* now have 12 sig bits */
|
||||
guess = _half*guess*(_three - guess*guess*x); /* now have 24 sig bits */
|
||||
guess = _half*guess*(_three - guess*guess*x); /* now have 32 sig bits */
|
||||
y=(float)(x*guess);
|
||||
return y ;
|
||||
}
|
||||
return x ;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -66,8 +66,8 @@ inline void uninitialized_copy_2(S* begin, D* out, S* end) {
|
|||
}
|
||||
|
||||
template < typename S, typename D >
|
||||
inline void uninitialized_copy_n(D* dest, S* src, size_t count) {
|
||||
for (size_t i = 0; i < count; ++dest, ++i, ++src) {
|
||||
inline void uninitialized_copy_n(D* dest, S* src, int count) {
|
||||
for (int i = 0; i < count; ++dest, ++i, ++src) {
|
||||
construct(dest, *src);
|
||||
}
|
||||
// destroy(src, src + count); ??
|
||||
|
|
|
@ -30,19 +30,19 @@ public:
|
|||
template < typename T, typename Vec, typename Alloc >
|
||||
class pointer_iterator : public const_pointer_iterator< T, Vec, Alloc > {
|
||||
public:
|
||||
pointer_iterator() : const_pointer_iterator(nullptr) {}
|
||||
pointer_iterator(T* begin) : const_pointer_iterator(begin) {}
|
||||
pointer_iterator() : const_pointer_iterator< T, Vec, Alloc >(nullptr) {}
|
||||
pointer_iterator(T* begin) : const_pointer_iterator< T, Vec, Alloc >(begin) {}
|
||||
void operator=(const T& other) {
|
||||
if (CheckValid()) {
|
||||
if (this->CheckValid()) {
|
||||
*get_pointer() = other;
|
||||
}
|
||||
}
|
||||
T* get_pointer() const { return const_cast< T* >(current); }
|
||||
T* get_pointer() const { return const_cast< T* >(this->current); }
|
||||
// T* operator*() const { if (CheckValid()) return get_pointer(); else return
|
||||
// nullptr; }
|
||||
T* operator->() const { return get_pointer(); }
|
||||
void destroy() const {
|
||||
if (CheckValid()) {
|
||||
if (this->CheckValid()) {
|
||||
rstl::destroy(get_pointer());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
#include "rstl/pointer_iterator.hpp"
|
||||
|
||||
namespace rstl {
|
||||
template < typename T, size_t N >
|
||||
template < typename T, s32 N >
|
||||
class reserved_vector {
|
||||
size_t x0_count;
|
||||
s32 x0_count;
|
||||
u8 x4_data[N * sizeof(T)];
|
||||
|
||||
public:
|
||||
|
@ -36,7 +36,7 @@ public:
|
|||
return *this;
|
||||
}
|
||||
void clear() {
|
||||
for (size_t i = 0; i < x0_count; ++i) {
|
||||
for (s32 i = 0; i < x0_count; ++i) {
|
||||
rstl::destroy(&data()[i]);
|
||||
}
|
||||
x0_count = 0;
|
||||
|
@ -54,14 +54,14 @@ public:
|
|||
|
||||
inline T* data() { return reinterpret_cast< T* >(x4_data); }
|
||||
inline const T* data() const { return reinterpret_cast< const T* >(x4_data); }
|
||||
inline size_t size() const { return x0_count; }
|
||||
inline size_t capacity() const { return N; }
|
||||
inline s32 size() const { return x0_count; }
|
||||
inline s32 capacity() const { return N; }
|
||||
inline T& front() { return data()[0]; }
|
||||
inline const T& front() const { return data()[0]; }
|
||||
inline T& back() { return data()[x0_count - 1]; }
|
||||
inline const T& back() const { return data()[x0_count - 1]; }
|
||||
inline T& operator[](size_t idx) { return data()[idx]; }
|
||||
inline const T& operator[](size_t idx) const { return data()[idx]; }
|
||||
inline T& operator[](s32 idx) { return data()[idx]; }
|
||||
inline const T& operator[](s32 idx) const { return data()[idx]; }
|
||||
};
|
||||
} // namespace rstl
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
namespace rstl {
|
||||
struct rmemory_allocator {
|
||||
template < typename T >
|
||||
static void allocate(T*& out, size_t sz) {
|
||||
static void allocate(T*& out, s32 sz) {
|
||||
out = reinterpret_cast< T* >(new u8[sz]);
|
||||
}
|
||||
template < typename T >
|
||||
|
|
|
@ -10,8 +10,8 @@ namespace rstl {
|
|||
template < typename T, typename Alloc = rmemory_allocator >
|
||||
class vector {
|
||||
Alloc x0_allocator;
|
||||
size_t x4_count;
|
||||
size_t x8_capacity;
|
||||
s32 x4_count;
|
||||
s32 x8_capacity;
|
||||
T* xc_items;
|
||||
|
||||
public:
|
||||
|
@ -23,14 +23,14 @@ public:
|
|||
inline iterator end() { return iterator(xc_items + x4_count); }
|
||||
inline const_iterator end() const { return const_iterator(xc_items + x4_count); }
|
||||
inline vector() : x4_count(0), x8_capacity(0), xc_items(NULL) {}
|
||||
inline vector(size_t count) : x4_count(0), x8_capacity(0), xc_items(0) { reserve(count); }
|
||||
inline vector(s32 count) : x4_count(0), x8_capacity(0), xc_items(0) { reserve(count); }
|
||||
vector(const vector& other) {
|
||||
x4_count = other.x4_count;
|
||||
x8_capacity = other.x8_capacity;
|
||||
if (other.x4_count == 0 && other.x8_capacity == 0) {
|
||||
xc_items = NULL;
|
||||
} else {
|
||||
size_t sz = x8_capacity * sizeof(T);
|
||||
s32 sz = x8_capacity * sizeof(T);
|
||||
if (sz == 0) {
|
||||
xc_items = NULL;
|
||||
} else {
|
||||
|
@ -44,7 +44,7 @@ public:
|
|||
x0_allocator.deallocate(xc_items);
|
||||
}
|
||||
|
||||
void reserve(size_t size);
|
||||
void reserve(s32 size);
|
||||
|
||||
void push_back(const T& in) {
|
||||
if (x4_count >= x8_capacity) {
|
||||
|
@ -79,21 +79,21 @@ public:
|
|||
|
||||
inline T* data() { return xc_items; }
|
||||
inline const T* data() const { return xc_items; }
|
||||
inline size_t size() const { return x4_count; }
|
||||
inline size_t capacity() const { return x8_capacity; }
|
||||
inline s32 size() const { return x4_count; }
|
||||
inline s32 capacity() const { return x8_capacity; }
|
||||
inline T& front() { return xc_items[0]; }
|
||||
inline const T& front() const { return xc_items[0]; }
|
||||
inline T& back() { return xc_items[x4_count - 1]; }
|
||||
inline const T& back() const { return xc_items[x4_count - 1]; }
|
||||
inline T& operator[](size_t idx) { return xc_items[idx]; }
|
||||
inline const T& operator[](size_t idx) const { return xc_items[idx]; }
|
||||
inline T& operator[](s32 idx) { return xc_items[idx]; }
|
||||
inline const T& operator[](s32 idx) const { return xc_items[idx]; }
|
||||
};
|
||||
|
||||
template < typename T, typename Alloc >
|
||||
void vector< T, Alloc >::reserve(size_t size) {
|
||||
void vector< T, Alloc >::reserve(s32 size) {
|
||||
if (size <= x8_capacity)
|
||||
return;
|
||||
size_t sz = size * sizeof(T);
|
||||
s32 sz = size * sizeof(T);
|
||||
T* newData;
|
||||
if (sz == 0) {
|
||||
newData = nullptr;
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
#ifndef _STRING_H_
|
||||
#define _STRING_H_
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void *memcpy(void *dest, const void *src, size_t num);
|
||||
void *memset(void *dest, int ch, size_t count);
|
||||
|
||||
size_t strlen(const char *s);
|
||||
char *strcpy(char *dest, const char *src);
|
||||
char *strncpy(char *dest, const char *src, size_t num);
|
||||
int strcmp(const char *s1, const char *s2);
|
||||
int strncmp(const char *s1, const char *s2, size_t n);
|
||||
char *strncat(char *dest, const char *src, size_t n);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -33,9 +33,6 @@ typedef double f64;
|
|||
typedef volatile float vf32;
|
||||
typedef volatile double vf64;
|
||||
|
||||
typedef s32 size_t;
|
||||
typedef u32 uintptr_t;
|
||||
|
||||
typedef s16 __OSInterrupt;
|
||||
typedef s64 OSTime;
|
||||
typedef u32 OSTick;
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef _ASSERT_H_
|
||||
#define _ASSERT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if __STDC_VERSION__ >= 201112L
|
||||
// The C11 way
|
||||
#define static_assert(cond, msg) _Static_assert(cond, #msg)
|
||||
#else
|
||||
// The old, hacky way
|
||||
#define static_assert(cond, msg) typedef char static_assertion_##msg[(cond) ? 1 : -1]
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,84 @@
|
|||
#ifndef _CTYPE_H_
|
||||
#define _CTYPE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// eof.h
|
||||
#define EOF -1L
|
||||
|
||||
extern unsigned char __ctype_map[];
|
||||
extern unsigned char __lower_map[];
|
||||
extern unsigned char __upper_map[];
|
||||
|
||||
#define __control_char 0x01
|
||||
#define __motion_char 0x02
|
||||
#define __space_char 0x04
|
||||
#define __punctuation 0x08
|
||||
#define __digit 0x10
|
||||
#define __hex_digit 0x20
|
||||
#define __lower_case 0x40
|
||||
#define __upper_case 0x80
|
||||
|
||||
#define __letter (__lower_case | __upper_case)
|
||||
#define __alphanumeric (__letter | __digit)
|
||||
#define __graphic (__alphanumeric | __punctuation)
|
||||
#define __printable (__graphic | __space_char)
|
||||
#define __whitespace (__motion_char | __space_char)
|
||||
#define __control (__motion_char | __control_char)
|
||||
#define __zero_fill(c) ((int)(unsigned char)(c))
|
||||
|
||||
int isalnum(int);
|
||||
int isalpha(int);
|
||||
int iscntrl(int);
|
||||
int isdigit(int);
|
||||
int isgraph(int);
|
||||
int islower(int);
|
||||
int isprint(int);
|
||||
int ispunct(int);
|
||||
int isspace(int);
|
||||
int isupper(int);
|
||||
int isxdigit(int);
|
||||
int tolower(int);
|
||||
int toupper(int);
|
||||
int iswblank(int);
|
||||
|
||||
#ifndef _CTYPE_INLINE
|
||||
#define _CTYPE_INLINE static inline
|
||||
#endif
|
||||
|
||||
_CTYPE_INLINE
|
||||
int isalnum(int c) { return __ctype_map[__zero_fill(c)] & __alphanumeric; }
|
||||
_CTYPE_INLINE
|
||||
int isalpha(int c) { return __ctype_map[__zero_fill(c)] & __letter; }
|
||||
_CTYPE_INLINE
|
||||
int iscntrl(int c) { return __ctype_map[__zero_fill(c)] & __control; }
|
||||
_CTYPE_INLINE
|
||||
int isdigit(int c) { return __ctype_map[__zero_fill(c)] & __digit; }
|
||||
_CTYPE_INLINE
|
||||
int isgraph(int c) { return __ctype_map[__zero_fill(c)] & __graphic; }
|
||||
_CTYPE_INLINE
|
||||
int islower(int c) { return __ctype_map[__zero_fill(c)] & __lower_case; }
|
||||
_CTYPE_INLINE
|
||||
int isprint(int c) { return __ctype_map[__zero_fill(c)] & __printable; }
|
||||
_CTYPE_INLINE
|
||||
int ispunct(int c) { return __ctype_map[__zero_fill(c)] & __punctuation; }
|
||||
_CTYPE_INLINE
|
||||
int isspace(int c) { return __ctype_map[__zero_fill(c)] & __whitespace; }
|
||||
_CTYPE_INLINE
|
||||
int isupper(int c) { return __ctype_map[__zero_fill(c)] & __upper_case; }
|
||||
_CTYPE_INLINE
|
||||
int isxdigit(int c) { return __ctype_map[__zero_fill(c)] & __hex_digit; }
|
||||
_CTYPE_INLINE
|
||||
int tolower(int c) { return ((c == EOF) ? EOF : ((int)__lower_map[__zero_fill(c)])); }
|
||||
_CTYPE_INLINE
|
||||
int toupper(int c) { return ((c == EOF) ? EOF : ((int)__upper_map[__zero_fill(c)])); }
|
||||
_CTYPE_INLINE
|
||||
int iswblank(int c) { return ((c == (int)L' ') || (c == (int)L'\t')); }
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef _ERRNO_H_
|
||||
#define _ERRNO_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern int errno;
|
||||
|
||||
#define ENOERR 0
|
||||
#define EDOM 33
|
||||
#define ERANGE 34
|
||||
#define EFPOS 35
|
||||
#define ESIGPARM 36
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef _FLOAT_H_
|
||||
#define _FLOAT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define FLT_EPSILON 1.1920928955078125e-07f
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,24 @@
|
|||
#ifndef _LIMITS_H_
|
||||
#define _LIMITS_H_
|
||||
|
||||
#define SCHAR_MAX 0x7f
|
||||
#define UCHAR_MAX 0xffU
|
||||
|
||||
#if defined(__MWERKS__) && __option(unsigned_char)
|
||||
#define CHAR_MIN 0U
|
||||
#define CHAR_MAX UCHAR_MAX
|
||||
#else
|
||||
#define CHAR_MIN SCHAR_MIN
|
||||
#define CHAR_MAX SCHAR_MAX
|
||||
#endif
|
||||
|
||||
#define SHRT_MAX 0x7fff
|
||||
#define USHRT_MAX 0xffffU
|
||||
|
||||
#define INT_MAX 0x7fffffff
|
||||
#define UINT_MAX 0xffffffffU
|
||||
|
||||
#define LONG_MAX 0x7fffffffL
|
||||
#define ULONG_MAX 0xffffffffUL
|
||||
|
||||
#endif
|
|
@ -0,0 +1,39 @@
|
|||
#ifndef _LOCALE_H_
|
||||
#define _LOCALE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct lconv {
|
||||
char* decimal_point;
|
||||
char* thousands_sep;
|
||||
char* grouping;
|
||||
char* mon_decimal_point;
|
||||
char* mon_thousands_sep;
|
||||
char* mon_grouping;
|
||||
char* positive_sign;
|
||||
char* negative_sign;
|
||||
char* currency_symbol;
|
||||
char frac_digits;
|
||||
char p_cs_precedes;
|
||||
char n_cs_precedes;
|
||||
char p_sep_by_space;
|
||||
char n_sep_by_space;
|
||||
char p_sign_posn;
|
||||
char n_sign_posn;
|
||||
char* int_curr_symbol;
|
||||
char int_frac_digits;
|
||||
char int_p_cs_precedes;
|
||||
char int_n_cs_precedes;
|
||||
char int_p_sep_by_space;
|
||||
char int_n_sep_by_space;
|
||||
char int_p_sign_posn;
|
||||
char int_n_sign_posn;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,198 @@
|
|||
#ifndef _MATH_H_
|
||||
#define _MATH_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __MWERKS__
|
||||
|
||||
/* Metrowerks */
|
||||
#if __option(little_endian)
|
||||
#define __IEEE_LITTLE_ENDIAN
|
||||
#else
|
||||
#define __IEEE_BIG_ENDIAN
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
/* GCC */
|
||||
#ifdef __BIG_ENDIAN__
|
||||
#define __IEEE_BIG_ENDIAN
|
||||
#endif
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
#define __IEEE_LITTLE_ENDIAN
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __IEEE_BIG_ENDIAN
|
||||
#ifndef __IEEE_LITTLE_ENDIAN
|
||||
#error Must define endianness
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _INT32
|
||||
typedef int _INT32;
|
||||
typedef unsigned int _UINT32;
|
||||
#endif
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define abs(n) __abs(n)
|
||||
#define labs(n) __labs(n)
|
||||
static inline double fabs(double x) { return __fabs(x); }
|
||||
static inline float fabsf(float x) { return (float)fabs((double)x); }
|
||||
#else
|
||||
static inline int abs(int n) {
|
||||
int mask = n >> 31;
|
||||
return (n + mask) ^ mask;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern _INT32 __float_huge[];
|
||||
extern _INT32 __float_nan[];
|
||||
extern _INT32 __double_huge[];
|
||||
extern _INT32 __extended_huge[];
|
||||
|
||||
#define HUGE_VAL (*(double*)__double_huge)
|
||||
#define INFINITY (*(float*)__float_huge)
|
||||
#define NAN (*(float*)__float_nan)
|
||||
#define HUGE_VALF (*(float*)__float_huge)
|
||||
#define HUGE_VALL (*(long double*)__extended_huge)
|
||||
|
||||
double fabs(double x);
|
||||
double sin(double x);
|
||||
double cos(double x);
|
||||
double atan(double x);
|
||||
|
||||
float sinf(float x);
|
||||
float cosf(float x);
|
||||
float tanf(float x);
|
||||
float acosf(float x);
|
||||
|
||||
double ldexp(double x, int exp);
|
||||
|
||||
double copysign(double x, double y);
|
||||
|
||||
double floor(double x);
|
||||
|
||||
double fabs(double x);
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#pragma cplusplus on
|
||||
#endif
|
||||
|
||||
#ifdef __IEEE_LITTLE_ENDIAN
|
||||
#define __HI(x) (sizeof(x) == 8 ? *(1 + (_INT32*)&x) : (*(_INT32*)&x))
|
||||
#define __LO(x) (*(_INT32*)&x)
|
||||
#define __UHI(x) (sizeof(x) == 8 ? *(1 + (_UINT32*)&x) : (*(_UINT32*)&x))
|
||||
#define __ULO(x) (*(_UINT32*)&x)
|
||||
#else
|
||||
#define __LO(x) (sizeof(x) == 8 ? *(1 + (_INT32*)&x) : (*(_INT32*)&x))
|
||||
#define __HI(x) (*(_INT32*)&x)
|
||||
#define __ULO(x) (sizeof(x) == 8 ? *(1 + (_UINT32*)&x) : (*(_UINT32*)&x))
|
||||
#define __UHI(x) (*(_UINT32*)&x)
|
||||
#endif
|
||||
|
||||
#define FP_NAN 1
|
||||
#define FP_INFINITE 2
|
||||
#define FP_ZERO 3
|
||||
#define FP_NORMAL 4
|
||||
#define FP_SUBNORMAL 5
|
||||
|
||||
static inline int __fpclassifyf(float x) {
|
||||
switch ((*(_INT32*)&x) & 0x7f800000) {
|
||||
case 0x7f800000: {
|
||||
if ((*(_INT32*)&x) & 0x007fffff)
|
||||
return FP_NAN;
|
||||
else
|
||||
return FP_INFINITE;
|
||||
break;
|
||||
}
|
||||
case 0: {
|
||||
if ((*(_INT32*)&x) & 0x007fffff)
|
||||
return FP_SUBNORMAL;
|
||||
else
|
||||
return FP_ZERO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return FP_NORMAL;
|
||||
}
|
||||
|
||||
static inline int __fpclassifyd(double x) {
|
||||
switch (__HI(x) & 0x7ff00000) {
|
||||
case 0x7ff00000: {
|
||||
if ((__HI(x) & 0x000fffff) || (__LO(x) & 0xffffffff))
|
||||
return FP_NAN;
|
||||
else
|
||||
return FP_INFINITE;
|
||||
break;
|
||||
}
|
||||
case 0: {
|
||||
if ((__HI(x) & 0x000fffff) || (__LO(x) & 0xffffffff))
|
||||
return FP_SUBNORMAL;
|
||||
else
|
||||
return FP_ZERO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return FP_NORMAL;
|
||||
}
|
||||
|
||||
#define fpclassify(x) (sizeof(x) == sizeof(float) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)))
|
||||
#define isnormal(x) (fpclassify(x) == FP_NORMAL)
|
||||
#define isnan(x) (fpclassify(x) == FP_NAN)
|
||||
#define isinf(x) (fpclassify(x) == FP_INFINITE)
|
||||
#define isfinite(x) ((fpclassify(x) > FP_INFINITE))
|
||||
|
||||
static inline float sqrtf(float x) {
|
||||
static const double _half = .5;
|
||||
static const double _three = 3.0;
|
||||
|
||||
if (x > 0.0f) {
|
||||
double xd = (double)x;
|
||||
double guess = __frsqrte(xd); /* returns an approximation to */
|
||||
guess = _half * guess * (_three - guess * guess * xd); /* now have 12 sig bits */
|
||||
guess = _half * guess * (_three - guess * guess * xd); /* now have 24 sig bits */
|
||||
guess = _half * guess * (_three - guess * guess * xd); /* now have 32 sig bits */
|
||||
return (float)(xd * guess);
|
||||
} else if (x < 0.0)
|
||||
return NAN;
|
||||
else if (isnan(x))
|
||||
return NAN;
|
||||
else
|
||||
return x;
|
||||
}
|
||||
|
||||
static inline double sqrt(double x) {
|
||||
if (x > 0.0) {
|
||||
double guess = __frsqrte(x); /* returns an approximation to */
|
||||
guess = .5 * guess * (3.0 - guess * guess * x); /* now have 8 sig bits */
|
||||
guess = .5 * guess * (3.0 - guess * guess * x); /* now have 16 sig bits */
|
||||
guess = .5 * guess * (3.0 - guess * guess * x); /* now have 32 sig bits */
|
||||
guess = .5 * guess * (3.0 - guess * guess * x); /* now have > 53 sig bits */
|
||||
return x * guess;
|
||||
} else if (x == 0.0) {
|
||||
return 0;
|
||||
} else if (x) {
|
||||
return NAN;
|
||||
}
|
||||
return INFINITY;
|
||||
}
|
||||
|
||||
static inline float ldexpf(float x, int exp) { return (float)ldexp((double)x, exp); }
|
||||
static inline double scalbn(double x, int n) { return ldexp(x, n); }
|
||||
static inline float scalbnf(float x, int n) { return (float)ldexpf(x, n); }
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#pragma cplusplus reset
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef _MEM_FUNCS_H_
|
||||
#define _MEM_FUNCS_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define __min_bytes_for_long_copy 32
|
||||
|
||||
void __copy_mem(void* dst, const void* src, unsigned long n);
|
||||
void __move_mem(void* dst, const void* src, unsigned long n);
|
||||
void __copy_longs_aligned(void* dst, const void* src, unsigned long n);
|
||||
void __copy_longs_rev_aligned(void* dst, const void* src, unsigned long n);
|
||||
void __copy_longs_unaligned(void* dst, const void* src, unsigned long n);
|
||||
void __copy_longs_rev_unaligned(void* dst, const void* src, unsigned long n);
|
||||
void __fill_mem(void* dst, int val, unsigned long n);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,39 @@
|
|||
#ifndef _STDARG_H_
|
||||
#define _STDARG_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __MWERKS__
|
||||
typedef struct {
|
||||
char gpr;
|
||||
char fpr;
|
||||
char reserved[2];
|
||||
char* input_arg_area;
|
||||
char* reg_save_area;
|
||||
} __va_list[1];
|
||||
typedef __va_list va_list;
|
||||
|
||||
#ifndef __MWERKS__
|
||||
extern void __builtin_va_info(va_list*);
|
||||
#endif
|
||||
|
||||
void* __va_arg(va_list v_list, unsigned char type);
|
||||
|
||||
#define va_start(ap, fmt) ((void)fmt, __builtin_va_info(&ap))
|
||||
#define va_arg(ap, t) (*((t*)__va_arg(ap, _var_arg_typeof(t))))
|
||||
#define va_end(ap) (void)0
|
||||
|
||||
#else
|
||||
typedef __builtin_va_list va_list;
|
||||
#define va_start(v, l) __builtin_va_start(v, l)
|
||||
#define va_end(v) __builtin_va_end(v)
|
||||
#define va_arg(v, l) __builtin_va_arg(v, l)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef _STDDEF_H_
|
||||
#define _STDDEF_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define offsetof(type, member) ((size_t) & (((type*)0)->member))
|
||||
|
||||
typedef unsigned int size_t;
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0L
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef _STDINT_H_
|
||||
#define _STDINT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef unsigned long int uintptr_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,76 @@
|
|||
#ifndef _STDIO_H_
|
||||
#define _STDIO_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define __ungetc_buffer_size 2
|
||||
|
||||
typedef unsigned long __file_handle;
|
||||
typedef unsigned long fpos_t;
|
||||
typedef unsigned short wchar_t;
|
||||
|
||||
enum __file_kinds { __closed_file, __disk_file, __console_file, __unavailable_file };
|
||||
enum __file_orientation { __unoriented, __char_oriented, __wide_oriented };
|
||||
|
||||
typedef struct {
|
||||
unsigned int open_mode : 2;
|
||||
unsigned int io_mode : 3;
|
||||
unsigned int buffer_mode : 2;
|
||||
unsigned int file_kind : 3;
|
||||
unsigned int file_orientation : 2;
|
||||
unsigned int binary_io : 1;
|
||||
} __file_modes;
|
||||
|
||||
typedef struct {
|
||||
unsigned int io_state : 3;
|
||||
unsigned int free_buffer : 1;
|
||||
unsigned char eof;
|
||||
unsigned char error;
|
||||
} __file_state;
|
||||
|
||||
typedef void* __ref_con;
|
||||
typedef int (*__pos_proc)(__file_handle file, fpos_t* position, int mode, __ref_con ref_con);
|
||||
typedef int (*__io_proc)(__file_handle file, unsigned char* buff, size_t* count, __ref_con ref_con);
|
||||
typedef int (*__close_proc)(__file_handle file);
|
||||
|
||||
typedef struct _FILE {
|
||||
__file_handle handle;
|
||||
__file_modes mode;
|
||||
__file_state state;
|
||||
unsigned char is_dynamically_allocated;
|
||||
unsigned char char_buffer;
|
||||
unsigned char char_buffer_overflow;
|
||||
unsigned char ungetc_buffer[__ungetc_buffer_size];
|
||||
wchar_t ungetwc_buffer[__ungetc_buffer_size];
|
||||
unsigned long position;
|
||||
unsigned char* buffer;
|
||||
unsigned long buffer_size;
|
||||
unsigned char* buffer_ptr;
|
||||
unsigned long buffer_len;
|
||||
unsigned long buffer_alignment;
|
||||
unsigned long saved_buffer_len;
|
||||
unsigned long buffer_pos;
|
||||
__pos_proc position_proc;
|
||||
__io_proc read_proc;
|
||||
__io_proc write_proc;
|
||||
__close_proc close_proc;
|
||||
__ref_con ref_con;
|
||||
struct _FILE* next_file_struct;
|
||||
} FILE;
|
||||
|
||||
int puts(const char* s);
|
||||
int printf(const char*, ...);
|
||||
int sprintf(char* s, const char* format, ...);
|
||||
int vprintf(const char* format, va_list arg);
|
||||
int vsprintf(char* s, const char* format, va_list arg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef _STDLIB_H_
|
||||
#define _STDLIB_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <wchar.h>
|
||||
|
||||
#define RAND_MAX 32767
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void srand(unsigned int seed);
|
||||
int rand(void);
|
||||
void exit(int status);
|
||||
size_t wcstombs(char* dest, const wchar_t* src, size_t max);
|
||||
|
||||
typedef int (*_compare_function)(const void*, const void*);
|
||||
void qsort(void*, size_t, size_t, _compare_function);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,24 @@
|
|||
#ifndef _STRING_H_
|
||||
#define _STRING_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void* memcpy(void* dest, const void* src, size_t num);
|
||||
void* memset(void* dest, int ch, size_t count);
|
||||
|
||||
size_t strlen(const char* s);
|
||||
char* strcpy(char* dest, const char* src);
|
||||
char* strncpy(char* dest, const char* src, size_t num);
|
||||
int strcmp(const char* s1, const char* s2);
|
||||
int strncmp(const char* s1, const char* s2, size_t n);
|
||||
char* strncat(char* dest, const char* src, size_t n);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef _WCHAR_H_
|
||||
#define _WCHAR_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int fwide(FILE* stream, int mode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
81
obj_files.mk
81
obj_files.mk
|
@ -423,7 +423,7 @@ COLLISION :=\
|
|||
$(BUILD_DIR)/asm/Collision/COBBox.o\
|
||||
$(BUILD_DIR)/asm/Collision/CMRay.o\
|
||||
|
||||
KYOTO :=\
|
||||
KYOTO_1 :=\
|
||||
$(BUILD_DIR)/asm/Kyoto/Basics/CBasics.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/Basics/CStopwatch.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/Basics/CBasicsDolphin.o\
|
||||
|
@ -565,7 +565,9 @@ KYOTO :=\
|
|||
$(BUILD_DIR)/asm/Kyoto/Streams/CZipSupport.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/CSimplePool.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/CToken.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/IObj.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/IObj.o
|
||||
|
||||
ZLIB_FILES :=\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/adler32.o\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/infblock.o\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/infcodes.o\
|
||||
|
@ -573,7 +575,9 @@ KYOTO :=\
|
|||
$(BUILD_DIR)/src/Kyoto/zlib/inflate.o\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/inftrees.o\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/infutil.o\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/zutil.o\
|
||||
$(BUILD_DIR)/src/Kyoto/zlib/zutil.o
|
||||
|
||||
KYOTO_2 :=\
|
||||
$(BUILD_DIR)/asm/Kyoto/CARAMManager.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/Math/CFrustumPlanes.o\
|
||||
$(BUILD_DIR)/asm/Kyoto/Graphics/CCubeMaterial.o\
|
||||
|
@ -720,60 +724,63 @@ MSL_PPCEABI_BARE_H :=\
|
|||
$(BUILD_DIR)/asm/Runtime/ptmf.o\
|
||||
$(BUILD_DIR)/asm/Runtime/runtime.o\
|
||||
$(BUILD_DIR)/asm/Runtime/__init_cpp_exceptions.o\
|
||||
$(BUILD_DIR)/asm/Runtime/sdata.o\
|
||||
$(BUILD_DIR)/asm/Runtime/Gecko_ExceptionPPC.o\
|
||||
$(BUILD_DIR)/asm/Runtime/abort_exit.o\
|
||||
$(BUILD_DIR)/src/Runtime/abort_exit.o\
|
||||
$(BUILD_DIR)/asm/Runtime/alloc.o\
|
||||
$(BUILD_DIR)/asm/Runtime/ansi_files.o\
|
||||
$(BUILD_DIR)/asm/Runtime/ansi_fp.o\
|
||||
$(BUILD_DIR)/asm/Runtime/arith.o\
|
||||
$(BUILD_DIR)/asm/Runtime/buffer_io.o\
|
||||
$(BUILD_DIR)/asm/Runtime/ctype.o\
|
||||
$(BUILD_DIR)/src/Runtime/ctype.o\
|
||||
$(BUILD_DIR)/src/Runtime/locale.o\
|
||||
$(BUILD_DIR)/asm/Runtime/direct_io.o\
|
||||
$(BUILD_DIR)/asm/Runtime/file_io.o\
|
||||
$(BUILD_DIR)/asm/Runtime/FILE_POS.o\
|
||||
$(BUILD_DIR)/asm/Runtime/mbstring.o\
|
||||
$(BUILD_DIR)/asm/Runtime/mem.o\
|
||||
$(BUILD_DIR)/asm/Runtime/mem_funcs.o\
|
||||
$(BUILD_DIR)/asm/Runtime/misc_io.o\
|
||||
$(BUILD_DIR)/src/Runtime/mem.o\
|
||||
$(BUILD_DIR)/src/Runtime/mem_funcs.o\
|
||||
$(BUILD_DIR)/src/Runtime/misc_io.o\
|
||||
$(BUILD_DIR)/asm/Runtime/printf.o\
|
||||
$(BUILD_DIR)/asm/Runtime/qsort.o\
|
||||
$(BUILD_DIR)/asm/Runtime/rand.o\
|
||||
$(BUILD_DIR)/src/Runtime/rand.o\
|
||||
$(BUILD_DIR)/asm/Runtime/sscanf.o\
|
||||
$(BUILD_DIR)/asm/Runtime/string.o\
|
||||
$(BUILD_DIR)/asm/Runtime/float.o\
|
||||
$(BUILD_DIR)/asm/Runtime/strtold.o\
|
||||
$(BUILD_DIR)/asm/Runtime/uart_console_io.o\
|
||||
$(BUILD_DIR)/asm/Runtime/widechar_io.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_acos.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_asin.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_atan2.o\
|
||||
$(BUILD_DIR)/src/Runtime/wchar_io.o
|
||||
|
||||
MSL_COMMON_MATH :=\
|
||||
$(BUILD_DIR)/src/Runtime/e_acos.o\
|
||||
$(BUILD_DIR)/src/Runtime/e_asin.o\
|
||||
$(BUILD_DIR)/src/Runtime/e_atan2.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_exp.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_fmod.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_log.o\
|
||||
$(BUILD_DIR)/src/Runtime/e_fmod.o\
|
||||
$(BUILD_DIR)/src/Runtime/e_log.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_pow.o\
|
||||
$(BUILD_DIR)/asm/Runtime/e_rem_pio2.o\
|
||||
$(BUILD_DIR)/asm/Runtime/k_cos.o\
|
||||
$(BUILD_DIR)/src/Runtime/e_rem_pio2.o\
|
||||
$(BUILD_DIR)/src/Runtime/k_cos.o\
|
||||
$(BUILD_DIR)/asm/Runtime/k_rem_pio2.o\
|
||||
$(BUILD_DIR)/asm/Runtime/k_sin.o\
|
||||
$(BUILD_DIR)/asm/Runtime/k_tan.o\
|
||||
$(BUILD_DIR)/src/Runtime/k_sin.o\
|
||||
$(BUILD_DIR)/src/Runtime/k_tan.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_atan.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_copysign.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_cos.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_floor.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_frexp.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_ldexp.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_modf.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_nextafter.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_sin.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_tan.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_acos.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_asin.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_atan2.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_exp.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_fmod.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_log.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_pow.o\
|
||||
$(BUILD_DIR)/asm/Runtime/s_cosf.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_copysign.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_cos.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_floor.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_frexp.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_ldexp.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_modf.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_nextafter.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_sin.o\
|
||||
$(BUILD_DIR)/src/Runtime/s_tan.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_acos.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_asin.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_atan2.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_exp.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_fmod.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_log.o\
|
||||
$(BUILD_DIR)/src/Runtime/w_pow.o\
|
||||
$(BUILD_DIR)/src/Runtime/math_ppc.o\
|
||||
|
||||
MUSYX_FILES :=\
|
||||
$(BUILD_DIR)/asm/musyx/seq.o\
|
||||
|
|
|
@ -3,8 +3,9 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
static u8 DSPInitCode[128] = {
|
||||
// clang-format off
|
||||
0x02, 0x9F, 0x00, 0x10, 0x02, 0x9F, 0x00, 0x33, 0x02, 0x9F, 0x00, 0x34, 0x02, 0x9F, 0x00, 0x35,
|
||||
0x02, 0x9F, 0x00, 0x36, 0x02, 0x9F, 0x00, 0x37, 0x02, 0x9F, 0x00, 0x38, 0x02, 0x9F, 0x00, 0x39,
|
||||
0x12, 0x06, 0x12, 0x03, 0x12, 0x04, 0x12, 0x05, 0x00, 0x80, 0x80, 0x00, 0x00, 0x88, 0xFF, 0xFF,
|
||||
|
@ -12,91 +13,103 @@ static u8 DSPInitCode[128] = {
|
|||
0x00, 0x44, 0x1B, 0x1E, 0x00, 0x84, 0x08, 0x00, 0x00, 0x64, 0x00, 0x27, 0x19, 0x1E, 0x00, 0x00,
|
||||
0x00, 0xDE, 0xFF, 0xFC, 0x02, 0xA0, 0x80, 0x00, 0x02, 0x9C, 0x00, 0x28, 0x16, 0xFC, 0x00, 0x54,
|
||||
0x16, 0xFD, 0x43, 0x48, 0x00, 0x21, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF,
|
||||
0x02, 0xFF, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
0x02, 0xFF, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
volatile u16 __DSPRegs[] : 0xCC005000;
|
||||
#define __DSPWorkBuffer (void *)0x81000000
|
||||
#define __DSPWorkBuffer (void*)0x81000000
|
||||
|
||||
void __OSInitAudioSystem(void) {
|
||||
u32 r28;
|
||||
u16 r3;
|
||||
|
||||
u32 padding;
|
||||
|
||||
memcpy((void*)((u8*)OSGetArenaHi() - 128), __DSPWorkBuffer, 128);
|
||||
memcpy(__DSPWorkBuffer, (void*)DSPInitCode, 128);
|
||||
|
||||
DCFlushRange(__DSPWorkBuffer, 128);
|
||||
|
||||
__DSPRegs[9] = 0x43;
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[5] |= 1;
|
||||
while (__DSPRegs[5] & 1);
|
||||
__DSPRegs[0] = 0;
|
||||
while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000);
|
||||
*(u32 *)&__DSPRegs[16] = 0x1000000;
|
||||
*(u32 *)&__DSPRegs[18] = 0;
|
||||
*(u32 *)&__DSPRegs[20] = 0x20;
|
||||
u32 r28;
|
||||
u16 r3;
|
||||
|
||||
r3 = __DSPRegs[5];
|
||||
while (!(r3 & 0x20))
|
||||
r3 = __DSPRegs[5];
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
r28 = OSGetTick();
|
||||
while ((s32)(OSGetTick() - r28) < 0x892)
|
||||
;
|
||||
|
||||
*(u32 *)&__DSPRegs[16] = 0x1000000;
|
||||
*(u32 *)&__DSPRegs[18] = 0;
|
||||
*(u32 *)&__DSPRegs[20] = 0x20;
|
||||
u32 padding;
|
||||
|
||||
r3 = __DSPRegs[5];
|
||||
while (!(r3 & 0x20))
|
||||
r3 = __DSPRegs[5];
|
||||
__DSPRegs[5] = r3;
|
||||
memcpy((void*)((u8*)OSGetArenaHi() - 128), __DSPWorkBuffer, 128);
|
||||
memcpy(__DSPWorkBuffer, (void*)DSPInitCode, 128);
|
||||
|
||||
__DSPRegs[5] &= ~0x800;
|
||||
while ((__DSPRegs[5]) & 0x400)
|
||||
;
|
||||
__DSPRegs[5] &= ~4;
|
||||
|
||||
r3 = __DSPRegs[2];
|
||||
DCFlushRange(__DSPWorkBuffer, 128);
|
||||
|
||||
// the nonmatching part
|
||||
while (!(r3 & 0x8000))
|
||||
r3 = __DSPRegs[2];
|
||||
__DSPRegs[9] = 0x43;
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[5] |= 1;
|
||||
while (__DSPRegs[5] & 1)
|
||||
;
|
||||
__DSPRegs[0] = 0;
|
||||
while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000)
|
||||
;
|
||||
*(u32*)&__DSPRegs[16] = 0x1000000;
|
||||
*(u32*)&__DSPRegs[18] = 0;
|
||||
*(u32*)&__DSPRegs[20] = 0x20;
|
||||
|
||||
(void)__DSPRegs[3];
|
||||
r3 != 42069;
|
||||
__DSPRegs[5] |= 4;
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[5] |= 1;
|
||||
while (__DSPRegs[5] & 1);
|
||||
memcpy(__DSPWorkBuffer, (void*)((u8*)OSGetArenaHi() - 128), 128);
|
||||
r3 = __DSPRegs[5];
|
||||
while (!(r3 & 0x20))
|
||||
r3 = __DSPRegs[5];
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
r28 = OSGetTick();
|
||||
while ((s32)(OSGetTick() - r28) < 0x892)
|
||||
;
|
||||
|
||||
*(u32*)&__DSPRegs[16] = 0x1000000;
|
||||
*(u32*)&__DSPRegs[18] = 0;
|
||||
*(u32*)&__DSPRegs[20] = 0x20;
|
||||
|
||||
r3 = __DSPRegs[5];
|
||||
while (!(r3 & 0x20))
|
||||
r3 = __DSPRegs[5];
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
__DSPRegs[5] &= ~0x800;
|
||||
while ((__DSPRegs[5]) & 0x400)
|
||||
;
|
||||
__DSPRegs[5] &= ~4;
|
||||
|
||||
r3 = __DSPRegs[2];
|
||||
|
||||
// the nonmatching part
|
||||
while (!(r3 & 0x8000))
|
||||
r3 = __DSPRegs[2];
|
||||
|
||||
(void)__DSPRegs[3];
|
||||
r3 != 42069;
|
||||
__DSPRegs[5] |= 4;
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[5] |= 1;
|
||||
while (__DSPRegs[5] & 1)
|
||||
;
|
||||
memcpy(__DSPWorkBuffer, (void*)((u8*)OSGetArenaHi() - 128), 128);
|
||||
}
|
||||
|
||||
void __OSStopAudioSystem(void) {
|
||||
u32 r28;
|
||||
|
||||
#define waitUntil(load, mask) r28 = (load); while (r28 & (mask)) { r28 = (load); }
|
||||
u32 r28;
|
||||
|
||||
__DSPRegs[5] = 0x804;
|
||||
r28 = __DSPRegs[27]; __DSPRegs[27] = r28 & ~0x8000;
|
||||
waitUntil(__DSPRegs[5], 0x400);
|
||||
waitUntil(__DSPRegs[5], 0x200);
|
||||
__DSPRegs[5] = 0x8ac;
|
||||
__DSPRegs[0] = 0;
|
||||
#define waitUntil(load, mask) \
|
||||
r28 = (load); \
|
||||
while (r28 & (mask)) { \
|
||||
r28 = (load); \
|
||||
}
|
||||
|
||||
while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000);
|
||||
r28 = OSGetTick();
|
||||
while ((s32)(OSGetTick() - r28) < 0x2c);
|
||||
__DSPRegs[5] |= 1;
|
||||
waitUntil(__DSPRegs[5], 0x001);
|
||||
__DSPRegs[5] = 0x804;
|
||||
r28 = __DSPRegs[27];
|
||||
__DSPRegs[27] = r28 & ~0x8000;
|
||||
waitUntil(__DSPRegs[5], 0x400);
|
||||
waitUntil(__DSPRegs[5], 0x200);
|
||||
__DSPRegs[5] = 0x8ac;
|
||||
__DSPRegs[0] = 0;
|
||||
|
||||
while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000)
|
||||
;
|
||||
r28 = OSGetTick();
|
||||
while ((s32)(OSGetTick() - r28) < 0x2c)
|
||||
;
|
||||
__DSPRegs[5] |= 1;
|
||||
waitUntil(__DSPRegs[5], 0x001);
|
||||
|
||||
#undef waitUntil
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#include "Kyoto/Alloc/CMemory.hpp"
|
||||
|
||||
CInputStream::CInputStream(size_t len)
|
||||
CInputStream::CInputStream(s32 len)
|
||||
: x4_blockOffset(0)
|
||||
, x8_blockLen(0)
|
||||
, xc_len(len)
|
||||
|
@ -14,7 +14,7 @@ CInputStream::CInputStream(size_t len)
|
|||
, x1c_bitWord(0)
|
||||
, x20_bitOffset(0) {}
|
||||
|
||||
CInputStream::CInputStream(const void* ptr, size_t len, bool owned)
|
||||
CInputStream::CInputStream(const void* ptr, s32 len, bool owned)
|
||||
: x4_blockOffset(0)
|
||||
, x8_blockLen(len)
|
||||
, xc_len(len)
|
||||
|
|
|
@ -11,15 +11,15 @@ static const wchar_t skInvalidString[] = L"Invalid";
|
|||
CStringTable::CStringTable(CInputStream& in) : x0_stringCount(0), x4_data(NULL) {
|
||||
in.ReadLong();
|
||||
in.ReadLong();
|
||||
size_t langCount = in.Get(TType< size_t >());
|
||||
s32 langCount = in.Get(TType< s32 >());
|
||||
x0_stringCount = in.Get(TType< u32 >());
|
||||
rstl::vector< rstl::pair< FourCC, u32 > > langOffsets(langCount);
|
||||
for (size_t i = 0; i < langCount; ++i) {
|
||||
for (s32 i = 0; i < langCount; ++i) {
|
||||
langOffsets.push_back(in.Get(TType< rstl::pair< FourCC, u32 > >()));
|
||||
}
|
||||
|
||||
size_t offset = langOffsets.front().second;
|
||||
for (size_t i = 0; i < langCount; ++i) {
|
||||
s32 offset = langOffsets.front().second;
|
||||
for (s32 i = 0; i < langCount; ++i) {
|
||||
if (langOffsets[i].first == mCurrentLanguage) {
|
||||
offset = langOffsets[i].second;
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct DestructorChain {
|
||||
struct DestructorChain* next;
|
||||
void* destructor;
|
||||
void* object;
|
||||
} DestructorChain;
|
||||
|
||||
void __unregister_fragment(int fragmentID);
|
||||
int __register_fragment(struct __eti_init_info* info, char* TOC);
|
||||
void* __register_global_object(void* object, void* destructor, void* regmem);
|
||||
void __destroy_global_chain(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,38 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
void __destroy_global_chain(void);
|
||||
void _ExitProcess(void);
|
||||
|
||||
extern void (*_dtors[])(void);
|
||||
|
||||
static void (*__console_exit)(void);
|
||||
void (*__stdio_exit)(void);
|
||||
static int __atexit_curr_func;
|
||||
int __aborting;
|
||||
|
||||
static void (*__atexit_funcs[64])(void);
|
||||
|
||||
void exit(int status) {
|
||||
int i;
|
||||
void (**dtor)(void);
|
||||
|
||||
if (!__aborting) {
|
||||
__destroy_global_chain();
|
||||
dtor = _dtors;
|
||||
while (*dtor != NULL) {
|
||||
(*dtor)();
|
||||
dtor++;
|
||||
}
|
||||
if (__stdio_exit != NULL) {
|
||||
__stdio_exit();
|
||||
__stdio_exit = NULL;
|
||||
}
|
||||
}
|
||||
while (__atexit_curr_func > 0)
|
||||
__atexit_funcs[--__atexit_curr_func]();
|
||||
if (__console_exit != NULL) {
|
||||
__console_exit();
|
||||
__console_exit = NULL;
|
||||
}
|
||||
_ExitProcess();
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
#define _CTYPE_INLINE __declspec(weak)
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define ctrl __control_char
|
||||
#define motn __motion_char
|
||||
#define spac __space_char
|
||||
#define punc __punctuation
|
||||
#define digi __digit
|
||||
#define hexd __hex_digit
|
||||
#define lowc __lower_case
|
||||
#define uppc __upper_case
|
||||
#define dhex (hexd | digi)
|
||||
#define uhex (hexd | uppc)
|
||||
#define lhex (hexd | lowc)
|
||||
|
||||
unsigned char __ctype_map[256] = {
|
||||
// clang-format off
|
||||
ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, motn, motn, motn, motn, motn, ctrl, ctrl,
|
||||
ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl, ctrl,
|
||||
spac, punc, punc, punc, punc, punc, punc, punc, punc, punc, punc, punc, punc, punc, punc, punc,
|
||||
dhex, dhex, dhex, dhex, dhex, dhex, dhex, dhex, dhex, dhex, punc, punc, punc, punc, punc, punc,
|
||||
punc, uhex, uhex, uhex, uhex, uhex, uhex, uppc, uppc, uppc, uppc, uppc, uppc, uppc, uppc, uppc,
|
||||
uppc, uppc, uppc, uppc, uppc, uppc, uppc, uppc, uppc, uppc, uppc, punc, punc, punc, punc, punc,
|
||||
punc, lhex, lhex, lhex, lhex, lhex, lhex, lowc, lowc, lowc, lowc, lowc, lowc, lowc, lowc, lowc,
|
||||
lowc, lowc, lowc, lowc, lowc, lowc, lowc, lowc, lowc, lowc, lowc, punc, punc, punc, punc, ctrl,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
unsigned char __lower_map[256] = {
|
||||
// clang-format off
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
|
||||
' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/',
|
||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',
|
||||
'@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
|
||||
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '[', '\\', ']', '^', '_',
|
||||
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
|
||||
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 0x7F,
|
||||
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
|
||||
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
|
||||
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
|
||||
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
|
||||
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
|
||||
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
|
||||
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
|
||||
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
unsigned char __upper_map[256] = {
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
|
||||
0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+',
|
||||
',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A',
|
||||
'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
|
||||
'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', 0x7F, 0x80, 0x81, 0x82, 0x83,
|
||||
0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
|
||||
0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
|
||||
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5,
|
||||
0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB,
|
||||
0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1,
|
||||
0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
|
||||
// clang-format on
|
||||
};
|
|
@ -0,0 +1,107 @@
|
|||
/* @(#)e_acos.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __ieee754_acos(x)
|
||||
* Method :
|
||||
* acos(x) = pi/2 - asin(x)
|
||||
* acos(-x) = pi/2 + asin(x)
|
||||
* For |x|<=0.5
|
||||
* acos(x) = pi/2 - (x + x*x^2*R(x^2)) (see asin.c)
|
||||
* For x>0.5
|
||||
* acos(x) = pi/2 - (pi/2 - 2asin(sqrt((1-x)/2)))
|
||||
* = 2asin(sqrt((1-x)/2))
|
||||
* = 2s + 2s*z*R(z) ...z=(1-x)/2, s=sqrt(z)
|
||||
* = 2f + (2c + 2s*z*R(z))
|
||||
* where f=hi part of s, and c = (z-f*f)/(s+f) is the correction term
|
||||
* for f so that f+c ~ sqrt(z).
|
||||
* For x<-0.5
|
||||
* acos(x) = pi - 2asin(sqrt((1-|x|)/2))
|
||||
* = pi - 0.5*(s+s*z*R(z)), where z=(1-|x|)/2,s=sqrt(z)
|
||||
*
|
||||
* Special cases:
|
||||
* if x is NaN, return x itself;
|
||||
* if |x|>1, return NaN with invalid signal.
|
||||
*
|
||||
* Function needed: sqrt
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */
|
||||
pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */
|
||||
pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */
|
||||
pS0 = 1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */
|
||||
pS1 = -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */
|
||||
pS2 = 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */
|
||||
pS3 = -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */
|
||||
pS4 = 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */
|
||||
pS5 = 3.47933107596021167570e-05, /* 0x3F023DE1, 0x0DFDF709 */
|
||||
qS1 = -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */
|
||||
qS2 = 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */
|
||||
qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
|
||||
qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_acos(double x)
|
||||
#else
|
||||
double __ieee754_acos(x)
|
||||
double x;
|
||||
#endif
|
||||
{
|
||||
double z, p, q, r, w, s, c, df;
|
||||
_INT32 hx, ix; /*- cc 020130 -*/
|
||||
hx = __HI(x);
|
||||
ix = hx & 0x7fffffff;
|
||||
if (ix >= 0x3ff00000) { /* |x| >= 1 */
|
||||
if (((ix - 0x3ff00000) | __LO(x)) == 0) { /* |x|==1 */
|
||||
if (hx > 0)
|
||||
return 0.0; /* acos(1) = 0 */
|
||||
else
|
||||
return pi + 2.0 * pio2_lo; /* acos(-1)= pi */
|
||||
}
|
||||
return NAN; /* acos(|x|>1) is NaN */
|
||||
}
|
||||
if (ix < 0x3fe00000) { /* |x| < 0.5 */
|
||||
if (ix <= 0x3c600000)
|
||||
return pio2_hi + pio2_lo; /*if|x|<2**-57*/
|
||||
z = x * x;
|
||||
p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z * pS5)))));
|
||||
q = one + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));
|
||||
r = p / q;
|
||||
return pio2_hi - (x - (pio2_lo - x * r));
|
||||
} else if (hx < 0) { /* x < -0.5 */
|
||||
z = (one + x) * 0.5;
|
||||
p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z * pS5)))));
|
||||
q = one + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));
|
||||
s = sqrt(z);
|
||||
r = p / q;
|
||||
w = r * s - pio2_lo;
|
||||
return pi - 2.0 * (s + w);
|
||||
} else { /* x > 0.5 */
|
||||
z = (one - x) * 0.5;
|
||||
s = sqrt(z);
|
||||
df = s;
|
||||
__LO(df) = 0;
|
||||
c = (z - df * df) / (s + df);
|
||||
p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z * pS5)))));
|
||||
q = one + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));
|
||||
r = p / q;
|
||||
w = r * s + c;
|
||||
return 2.0 * (df + w);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
/* @(#)e_asin.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __ieee754_asin(x)
|
||||
* Method :
|
||||
* Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ...
|
||||
* we approximate asin(x) on [0,0.5] by
|
||||
* asin(x) = x + x*x^2*R(x^2)
|
||||
* where
|
||||
* R(x^2) is a rational approximation of (asin(x)-x)/x^3
|
||||
* and its remez error is bounded by
|
||||
* |(asin(x)-x)/x^3 - R(x^2)| < 2^(-58.75)
|
||||
*
|
||||
* For x in [0.5,1]
|
||||
* asin(x) = pi/2-2*asin(sqrt((1-x)/2))
|
||||
* Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2;
|
||||
* then for x>0.98
|
||||
* asin(x) = pi/2 - 2*(s+s*z*R(z))
|
||||
* = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo)
|
||||
* For x<=0.98, let pio4_hi = pio2_hi/2, then
|
||||
* f = hi part of s;
|
||||
* c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z)
|
||||
* and
|
||||
* asin(x) = pi/2 - 2*(s+s*z*R(z))
|
||||
* = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo)
|
||||
* = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c))
|
||||
*
|
||||
* Special cases:
|
||||
* if x is NaN, return x itself;
|
||||
* if |x|>1, return NaN with invalid signal.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
big = 1.000e+300, pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */
|
||||
pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */
|
||||
pio4_hi = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */
|
||||
/* coefficient for R(x^2) */
|
||||
pS0 = 1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */
|
||||
pS1 = -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */
|
||||
pS2 = 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */
|
||||
pS3 = -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */
|
||||
pS4 = 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */
|
||||
pS5 = 3.47933107596021167570e-05, /* 0x3F023DE1, 0x0DFDF709 */
|
||||
qS1 = -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */
|
||||
qS2 = 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */
|
||||
qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
|
||||
qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_asin(double x)
|
||||
#else
|
||||
double __ieee754_asin(x)
|
||||
double x;
|
||||
#endif
|
||||
{
|
||||
double t, w, p, q, c, r, s;
|
||||
_INT32 hx, ix; /*- cc 020130 -*/
|
||||
hx = __HI(x);
|
||||
ix = hx & 0x7fffffff;
|
||||
if (ix >= 0x3ff00000) { /* |x|>= 1 */
|
||||
if (((ix - 0x3ff00000) | __LO(x)) == 0)
|
||||
/* asin(1)=+-pi/2 with inexact */
|
||||
return x * pio2_hi + x * pio2_lo;
|
||||
return NAN; /* asin(|x|>1) is NaN */
|
||||
} else if (ix < 0x3fe00000) { /* |x|<0.5 */
|
||||
if (ix < 0x3e400000) { /* if |x| < 2**-27 */
|
||||
if (big + x > one)
|
||||
return x; /* return x with inexact if x!=0*/
|
||||
} else
|
||||
t = x * x;
|
||||
p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5)))));
|
||||
q = one + t * (qS1 + t * (qS2 + t * (qS3 + t * qS4)));
|
||||
w = p / q;
|
||||
return x + x * w;
|
||||
}
|
||||
/* 1> |x|>= 0.5 */
|
||||
w = one - fabs(x);
|
||||
t = w * 0.5;
|
||||
p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5)))));
|
||||
q = one + t * (qS1 + t * (qS2 + t * (qS3 + t * qS4)));
|
||||
s = sqrt(t);
|
||||
if (ix >= 0x3FEF3333) { /* if |x| > 0.975 */
|
||||
w = p / q;
|
||||
t = pio2_hi - (2.0 * (s + s * w) - pio2_lo);
|
||||
} else {
|
||||
w = s;
|
||||
__LO(w) = 0;
|
||||
c = (t - w * w) / (s + w);
|
||||
r = p / q;
|
||||
p = 2.0 * s * r - (pio2_lo - 2.0 * c);
|
||||
q = pio4_hi - 2.0 * w;
|
||||
t = pio4_hi - (p - q);
|
||||
}
|
||||
if (hx > 0)
|
||||
return t;
|
||||
else
|
||||
return -t;
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/* @(#)e_atan2.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
*/
|
||||
|
||||
/* __ieee754_atan2(y,x)
|
||||
* Method :
|
||||
* 1. Reduce y to positive by atan2(y,x)=-atan2(-y,x).
|
||||
* 2. Reduce x to positive by (if x and y are unexceptional):
|
||||
* ARG (x+iy) = arctan(y/x) ... if x > 0,
|
||||
* ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0,
|
||||
*
|
||||
* Special cases:
|
||||
*
|
||||
* ATAN2((anything), NaN ) is NaN;
|
||||
* ATAN2(NAN , (anything) ) is NaN;
|
||||
* ATAN2(+-0, +(anything but NaN)) is +-0 ;
|
||||
* ATAN2(+-0, -(anything but NaN)) is +-pi ;
|
||||
* ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2;
|
||||
* ATAN2(+-(anything but INF and NaN), +INF) is +-0 ;
|
||||
* ATAN2(+-(anything but INF and NaN), -INF) is +-pi;
|
||||
* ATAN2(+-INF,+INF ) is +-pi/4 ;
|
||||
* ATAN2(+-INF,-INF ) is +-3pi/4;
|
||||
* ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2;
|
||||
*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
tiny = 1.0e-300,
|
||||
zero = 0.0, pi_o_4 = 7.8539816339744827900E-01, /* 0x3FE921FB, 0x54442D18 */
|
||||
pi_o_2 = 1.5707963267948965580E+00, /* 0x3FF921FB, 0x54442D18 */
|
||||
pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
|
||||
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_atan2(double y, double x)
|
||||
#else
|
||||
double __ieee754_atan2(y, x)
|
||||
double y, x;
|
||||
#endif
|
||||
{
|
||||
double z;
|
||||
_INT32 k, m, hx, hy, ix, iy; /*- cc 020130 -*/
|
||||
_UINT32 lx, ly; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x);
|
||||
ix = hx & 0x7fffffff;
|
||||
lx = __LO(x);
|
||||
hy = __HI(y);
|
||||
iy = hy & 0x7fffffff;
|
||||
ly = __LO(y);
|
||||
if (((ix | ((lx | -lx) >> 31)) > 0x7ff00000) || ((iy | ((ly | -ly) >> 31)) > 0x7ff00000)) /* x or y is NaN */
|
||||
return x + y;
|
||||
if ((hx - 0x3ff00000 | lx) == 0)
|
||||
return atan(y); /* x=1.0 */
|
||||
m = ((hy >> 31) & 1) | ((hx >> 30) & 2); /* 2*sign(x)+sign(y) */
|
||||
|
||||
/* when y = 0 */
|
||||
if ((iy | ly) == 0) {
|
||||
switch (m) {
|
||||
case 0:
|
||||
case 1:
|
||||
return y; /* atan(+-0,+anything)=+-0 */
|
||||
case 2:
|
||||
return pi + tiny; /* atan(+0,-anything) = pi */
|
||||
case 3:
|
||||
return -pi - tiny; /* atan(-0,-anything) =-pi */
|
||||
}
|
||||
}
|
||||
/* when x = 0 */
|
||||
if ((ix | lx) == 0)
|
||||
return (hy < 0) ? -pi_o_2 - tiny : pi_o_2 + tiny;
|
||||
|
||||
/* when x is INF */
|
||||
if (ix == 0x7ff00000) {
|
||||
if (iy == 0x7ff00000) {
|
||||
switch (m) {
|
||||
case 0:
|
||||
return pi_o_4 + tiny; /* atan(+INF,+INF) */
|
||||
case 1:
|
||||
return -pi_o_4 - tiny; /* atan(-INF,+INF) */
|
||||
case 2:
|
||||
return 3.0 * pi_o_4 + tiny; /*atan(+INF,-INF)*/
|
||||
case 3:
|
||||
return -3.0 * pi_o_4 - tiny; /*atan(-INF,-INF)*/
|
||||
}
|
||||
} else {
|
||||
switch (m) {
|
||||
case 0:
|
||||
return zero; /* atan(+...,+INF) */
|
||||
case 1:
|
||||
return -zero; /* atan(-...,+INF) */
|
||||
case 2:
|
||||
return pi + tiny; /* atan(+...,-INF) */
|
||||
case 3:
|
||||
return -pi - tiny; /* atan(-...,-INF) */
|
||||
}
|
||||
}
|
||||
}
|
||||
/* when y is INF */
|
||||
if (iy == 0x7ff00000)
|
||||
return (hy < 0) ? -pi_o_2 - tiny : pi_o_2 + tiny;
|
||||
|
||||
/* compute y/x */
|
||||
k = (iy - ix) >> 20;
|
||||
if (k > 60)
|
||||
z = pi_o_2 + 0.5 * pi_lo; /* |y/x| > 2**60 */
|
||||
else if (hx < 0 && k < -60)
|
||||
z = 0.0; /* |y|/x < -2**60 */
|
||||
else
|
||||
z = atan(fabs(y / x)); /* safe to do y/x */
|
||||
switch (m) {
|
||||
case 0:
|
||||
return z; /* atan(+,+) */
|
||||
case 1:
|
||||
__HI(z) ^= 0x80000000;
|
||||
return z; /* atan(-,+) */
|
||||
case 2:
|
||||
return pi - (z - pi_lo); /* atan(+,-) */
|
||||
default: /* case 3 */
|
||||
return (z - pi_lo) - pi; /* atan(-,-) */
|
||||
}
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
/* @(#)e_exp.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __ieee754_exp(x)
|
||||
* Returns the exponential of x.
|
||||
*
|
||||
* Method
|
||||
* 1. Argument reduction:
|
||||
* Reduce x to an r so that |r| <= 0.5*ln2 ~ 0.34658.
|
||||
* Given x, find r and integer k such that
|
||||
*
|
||||
* x = k*ln2 + r, |r| <= 0.5*ln2.
|
||||
*
|
||||
* Here r will be represented as r = hi-lo for better
|
||||
* accuracy.
|
||||
*
|
||||
* 2. Approximation of exp(r) by a special rational function on
|
||||
* the interval [0,0.34658]:
|
||||
* Write
|
||||
* R(r**2) = r*(exp(r)+1)/(exp(r)-1) = 2 + r*r/6 - r**4/360 + ...
|
||||
* We use a special Reme algorithm on [0,0.34658] to generate
|
||||
* a polynomial of degree 5 to approximate R. The maximum error
|
||||
* of this polynomial approximation is bounded by 2**-59. In
|
||||
* other words,
|
||||
* R(z) ~ 2.0 + P1*z + P2*z**2 + P3*z**3 + P4*z**4 + P5*z**5
|
||||
* (where z=r*r, and the values of P1 to P5 are listed below)
|
||||
* and
|
||||
* | 5 | -59
|
||||
* | 2.0+P1*z+...+P5*z - R(z) | <= 2
|
||||
* | |
|
||||
* The computation of exp(r) thus becomes
|
||||
* 2*r
|
||||
* exp(r) = 1 + -------
|
||||
* R - r
|
||||
* r*R1(r)
|
||||
* = 1 + r + ----------- (for better accuracy)
|
||||
* 2 - R1(r)
|
||||
* where
|
||||
* 2 4 10
|
||||
* R1(r) = r - (P1*r + P2*r + ... + P5*r ).
|
||||
*
|
||||
* 3. Scale back to obtain exp(x):
|
||||
* From step 1, we have
|
||||
* exp(x) = 2^k * exp(r)
|
||||
*
|
||||
* Special cases:
|
||||
* exp(INF) is INF, exp(NaN) is NaN;
|
||||
* exp(-INF) is 0, and
|
||||
* for finite argument, only exp(0)=1 is exact.
|
||||
*
|
||||
* Accuracy:
|
||||
* according to an error analysis, the error is always less than
|
||||
* 1 ulp (unit in the last place).
|
||||
*
|
||||
* Misc. info.
|
||||
* For IEEE double
|
||||
* if x > 7.09782712893383973096e+02 then exp(x) overflow
|
||||
* if x < -7.45133219101941108420e+02 then exp(x) underflow
|
||||
*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
one = 1.0,
|
||||
halF[2] =
|
||||
{
|
||||
0.5,
|
||||
-0.5,
|
||||
},
|
||||
big = 1.0e+300, twom1000 = 9.33263618503218878990e-302, /* 2**-1000=0x01700000,0*/
|
||||
o_threshold = 7.09782712893383973096e+02, /* 0x40862E42, 0xFEFA39EF */
|
||||
u_threshold = -7.45133219101941108420e+02, /* 0xc0874910, 0xD52D3051 */
|
||||
ln2HI[2] =
|
||||
{
|
||||
6.93147180369123816490e-01, /* 0x3fe62e42, 0xfee00000 */
|
||||
-6.93147180369123816490e-01,
|
||||
}, /* 0xbfe62e42, 0xfee00000 */
|
||||
ln2LO[2] =
|
||||
{
|
||||
1.90821492927058770002e-10, /* 0x3dea39ef, 0x35793c76 */
|
||||
-1.90821492927058770002e-10,
|
||||
}, /* 0xbdea39ef, 0x35793c76 */
|
||||
invln2 = 1.44269504088896338700e+00, /* 0x3ff71547, 0x652b82fe */
|
||||
P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
|
||||
P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
|
||||
P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
|
||||
P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
|
||||
P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_exp(double x) /* default IEEE double exp */
|
||||
#else
|
||||
double __ieee754_exp(x) /* default IEEE double exp */
|
||||
double x;
|
||||
#endif
|
||||
{
|
||||
double y, hi, lo, c, t;
|
||||
_INT32 k, xsb; /*- cc 020130 -*/
|
||||
_UINT32 hx; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x); /* high word of x */
|
||||
xsb = (hx >> 31) & 1; /* sign bit of x */
|
||||
hx &= 0x7fffffff; /* high word of |x| */
|
||||
|
||||
/* filter out non-finite argument */
|
||||
if (hx >= 0x40862E42) { /* if |x|>=709.78... */
|
||||
if (hx >= 0x7ff00000) {
|
||||
if (((hx & 0xfffff) | __LO(x)) != 0)
|
||||
return x + x; /* NaN */
|
||||
else
|
||||
return (xsb == 0) ? x : 0.0; /* exp(+-inf)={inf,0} */
|
||||
}
|
||||
if (x > o_threshold)
|
||||
return big * big; /* overflow */
|
||||
if (x < u_threshold)
|
||||
return twom1000 * twom1000; /* underflow */
|
||||
}
|
||||
|
||||
/* argument reduction */
|
||||
if (hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */
|
||||
if (hx < 0x3FF0A2B2) { /* and |x| < 1.5 ln2 */
|
||||
hi = x - ln2HI[xsb];
|
||||
lo = ln2LO[xsb];
|
||||
k = 1 - xsb - xsb;
|
||||
} else {
|
||||
k = invln2 * x + halF[xsb];
|
||||
t = k;
|
||||
hi = x - t * ln2HI[0]; /* t*ln2HI is exact here */
|
||||
lo = t * ln2LO[0];
|
||||
}
|
||||
x = hi - lo;
|
||||
} else if (hx < 0x3e300000) { /* when |x|<2**-28 */
|
||||
if (big + x > one)
|
||||
return one + x; /* trigger inexact */
|
||||
} else
|
||||
k = 0;
|
||||
|
||||
/* x is now in primary range */
|
||||
t = x * x;
|
||||
c = x - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
|
||||
if (k == 0)
|
||||
return one - ((x * c) / (c - 2.0) - x);
|
||||
else
|
||||
y = one - ((lo - (x * c) / (2.0 - c)) - hi);
|
||||
if (k >= -1021) {
|
||||
__HI(y) += (k << 20); /* add k to y's exponent */
|
||||
return y;
|
||||
} else {
|
||||
__HI(y) += ((k + 1000) << 20); /* add k to y's exponent */
|
||||
return y * twom1000;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
/* @(#)e_fmod.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* __ieee754_fmod(x,y)
|
||||
* Return x mod y in exact arithmetic
|
||||
* Method: shift and subtract
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double one = 1.0, Zero[] = {
|
||||
0.0,
|
||||
-0.0,
|
||||
};
|
||||
#else
|
||||
static double one = 1.0, Zero[] = {
|
||||
0.0,
|
||||
-0.0,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_fmod(double x, double y)
|
||||
#else
|
||||
double __ieee754_fmod(x, y)
|
||||
double x, y;
|
||||
#endif
|
||||
{
|
||||
_INT32 n, hx, hy, hz, ix, iy, sx, i; /*- cc 020130 -*/
|
||||
_UINT32 lx, ly, lz; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x); /* high word of x */
|
||||
lx = __LO(x); /* low word of x */
|
||||
hy = __HI(y); /* high word of y */
|
||||
ly = __LO(y); /* low word of y */
|
||||
sx = hx & 0x80000000; /* sign of x */
|
||||
hx ^= sx; /* |x| */
|
||||
hy &= 0x7fffffff; /* |y| */
|
||||
|
||||
/* purge off exception values */
|
||||
if ((hy | ly) == 0 || (hx >= 0x7ff00000) || /* y=0,or x not finite */
|
||||
((hy | ((ly | -ly) >> 31)) > 0x7ff00000)) /* or y is NaN */
|
||||
return (x * y) / (x * y);
|
||||
if (hx <= hy) {
|
||||
if ((hx < hy) || (lx < ly))
|
||||
return x; /* |x|<|y| return x */
|
||||
if (lx == ly)
|
||||
return Zero[(_UINT32)sx >> 31]; /* |x|=|y| return x*0*/ /*- cc 020130 -*/
|
||||
}
|
||||
|
||||
/* determine ix = ilogb(x) */
|
||||
if (hx < 0x00100000) { /* subnormal x */
|
||||
if (hx == 0) {
|
||||
for (ix = -1043, i = lx; i > 0; i <<= 1)
|
||||
ix -= 1;
|
||||
} else {
|
||||
for (ix = -1022, i = (hx << 11); i > 0; i <<= 1)
|
||||
ix -= 1;
|
||||
}
|
||||
} else
|
||||
ix = (hx >> 20) - 1023;
|
||||
|
||||
/* determine iy = ilogb(y) */
|
||||
if (hy < 0x00100000) { /* subnormal y */
|
||||
if (hy == 0) {
|
||||
for (iy = -1043, i = ly; i > 0; i <<= 1)
|
||||
iy -= 1;
|
||||
} else {
|
||||
for (iy = -1022, i = (hy << 11); i > 0; i <<= 1)
|
||||
iy -= 1;
|
||||
}
|
||||
} else
|
||||
iy = (hy >> 20) - 1023;
|
||||
|
||||
/* set up {hx,lx}, {hy,ly} and align y to x */
|
||||
if (ix >= -1022)
|
||||
hx = 0x00100000 | (0x000fffff & hx);
|
||||
else { /* subnormal x, shift x to normal */
|
||||
n = -1022 - ix;
|
||||
if (n <= 31) {
|
||||
hx = (hx << n) | (lx >> (32 - n));
|
||||
lx <<= n;
|
||||
} else {
|
||||
hx = lx << (n - 32);
|
||||
lx = 0;
|
||||
}
|
||||
}
|
||||
if (iy >= -1022)
|
||||
hy = 0x00100000 | (0x000fffff & hy);
|
||||
else { /* subnormal y, shift y to normal */
|
||||
n = -1022 - iy;
|
||||
if (n <= 31) {
|
||||
hy = (hy << n) | (ly >> (32 - n));
|
||||
ly <<= n;
|
||||
} else {
|
||||
hy = ly << (n - 32);
|
||||
ly = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* fix point fmod */
|
||||
n = ix - iy;
|
||||
while (n--) {
|
||||
hz = hx - hy;
|
||||
lz = lx - ly;
|
||||
if (lx < ly)
|
||||
hz -= 1;
|
||||
if (hz < 0) {
|
||||
hx = hx + hx + (lx >> 31);
|
||||
lx = lx + lx;
|
||||
} else {
|
||||
if ((hz | lz) == 0) /* return sign(x)*0 */
|
||||
return Zero[(_UINT32)sx >> 31]; /*- cc 020130 -*/
|
||||
hx = hz + hz + (lz >> 31);
|
||||
lx = lz + lz;
|
||||
}
|
||||
}
|
||||
hz = hx - hy;
|
||||
lz = lx - ly;
|
||||
if (lx < ly)
|
||||
hz -= 1;
|
||||
if (hz >= 0) {
|
||||
hx = hz;
|
||||
lx = lz;
|
||||
}
|
||||
|
||||
/* convert back to floating value and restore the sign */
|
||||
if ((hx | lx) == 0) /* return sign(x)*0 */
|
||||
return Zero[(_UINT32)sx >> 31]; /*- cc 020130 -*/
|
||||
while (hx < 0x00100000) { /* normalize x */
|
||||
hx = hx + hx + (lx >> 31);
|
||||
lx = lx + lx;
|
||||
iy -= 1;
|
||||
}
|
||||
if (iy >= -1022) { /* normalize output */
|
||||
hx = ((hx - 0x00100000) | ((iy + 1023) << 20));
|
||||
__HI(x) = hx | sx;
|
||||
__LO(x) = lx;
|
||||
} else { /* subnormal output */
|
||||
n = -1022 - iy;
|
||||
if (n <= 20) {
|
||||
lx = (lx >> n) | ((_UINT32)hx << (32 - n)); /*- cc 020130 -*/
|
||||
hx >>= n;
|
||||
} else if (n <= 31) {
|
||||
lx = (hx << (32 - n)) | (lx >> n);
|
||||
hx = sx;
|
||||
} else {
|
||||
lx = hx >> (n - 32);
|
||||
hx = sx;
|
||||
}
|
||||
__HI(x) = hx | sx;
|
||||
__LO(x) = lx;
|
||||
x *= one; /* create necessary signal */
|
||||
}
|
||||
return x; /* exact output */
|
||||
}
|
|
@ -0,0 +1,158 @@
|
|||
/* @(#)e_log.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __ieee754_log(x)
|
||||
* Return the logrithm of x
|
||||
*
|
||||
* Method :
|
||||
* 1. Argument Reduction: find k and f such that
|
||||
* x = 2^k * (1+f),
|
||||
* where sqrt(2)/2 < 1+f < sqrt(2) .
|
||||
*
|
||||
* 2. Approximation of log(1+f).
|
||||
* Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s)
|
||||
* = 2s + 2/3 s**3 + 2/5 s**5 + .....,
|
||||
* = 2s + s*R
|
||||
* We use a special Reme algorithm on [0,0.1716] to generate
|
||||
* a polynomial of degree 14 to approximate R The maximum error
|
||||
* of this polynomial approximation is bounded by 2**-58.45. In
|
||||
* other words,
|
||||
* 2 4 6 8 10 12 14
|
||||
* R(z) ~ Lg1*s +Lg2*s +Lg3*s +Lg4*s +Lg5*s +Lg6*s +Lg7*s
|
||||
* (the values of Lg1 to Lg7 are listed in the program)
|
||||
* and
|
||||
* | 2 14 | -58.45
|
||||
* | Lg1*s +...+Lg7*s - R(z) | <= 2
|
||||
* | |
|
||||
* Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2.
|
||||
* In order to guarantee error in log below 1ulp, we compute log
|
||||
* by
|
||||
* log(1+f) = f - s*(f - R) (if f is not too large)
|
||||
* log(1+f) = f - (hfsq - s*(hfsq+R)). (better accuracy)
|
||||
*
|
||||
* 3. Finally, log(x) = k*ln2 + log(1+f).
|
||||
* = k*ln2_hi+(f-(hfsq-(s*(hfsq+R)+k*ln2_lo)))
|
||||
* Here ln2 is split into two floating point number:
|
||||
* ln2_hi + ln2_lo,
|
||||
* where n*ln2_hi is always exact for |n| < 2000.
|
||||
*
|
||||
* Special cases:
|
||||
* log(x) is NaN with signal if x < 0 (including -INF) ;
|
||||
* log(+INF) is +INF; log(0) is -INF with signal;
|
||||
* log(NaN) is that NaN with no signal.
|
||||
*
|
||||
* Accuracy:
|
||||
* according to an error analysis, the error is always less than
|
||||
* 1 ulp (unit in the last place).
|
||||
*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
|
||||
ln2_lo = 1.90821492927058770002e-10, /* 3dea39ef 35793c76 */
|
||||
two54 = 1.80143985094819840000e+16, /* 43500000 00000000 */
|
||||
Lg1 = 6.666666666666735130e-01, /* 3FE55555 55555593 */
|
||||
Lg2 = 3.999999999940941908e-01, /* 3FD99999 9997FA04 */
|
||||
Lg3 = 2.857142874366239149e-01, /* 3FD24924 94229359 */
|
||||
Lg4 = 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */
|
||||
Lg5 = 1.818357216161805012e-01, /* 3FC74664 96CB03DE */
|
||||
Lg6 = 1.531383769920937332e-01, /* 3FC39A09 D078C69F */
|
||||
Lg7 = 1.479819860511658591e-01; /* 3FC2F112 DF3E5244 */
|
||||
|
||||
static double zero = 0.0;
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_log(double x)
|
||||
#else
|
||||
double __ieee754_log(x)
|
||||
double x;
|
||||
#endif
|
||||
{
|
||||
double hfsq, f, s, z, R, w, t1, t2, dk;
|
||||
_INT32 k, hx, i, j; /*- cc 020130 -*/
|
||||
_UINT32 lx; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x); /* high word of x */
|
||||
lx = __LO(x); /* low word of x */
|
||||
|
||||
k = 0;
|
||||
if (hx < 0x00100000) { /* x < 2**-1022 */
|
||||
if (((hx & 0x7fffffff) | lx) == 0)
|
||||
return -two54 / zero; /* log(+-0)=-inf */
|
||||
if (hx < 0) {
|
||||
#ifdef __STDC__
|
||||
errno = EDOM;
|
||||
#endif
|
||||
return (x - x) / zero; /* log(-#) = NaN */
|
||||
}
|
||||
k -= 54;
|
||||
x *= two54; /* subnormal number, scale up x */
|
||||
hx = __HI(x); /* high word of x */
|
||||
}
|
||||
if (hx >= 0x7ff00000)
|
||||
return x + x;
|
||||
k += (hx >> 20) - 1023;
|
||||
hx &= 0x000fffff;
|
||||
i = (hx + 0x95f64) & 0x100000;
|
||||
__HI(x) = hx | (i ^ 0x3ff00000); /* normalize x or x/2 */
|
||||
k += (i >> 20);
|
||||
f = x - 1.0;
|
||||
if ((0x000fffff & (2 + hx)) < 3) { /* |f| < 2**-20 */
|
||||
if (f == zero)
|
||||
if (k == 0)
|
||||
return zero;
|
||||
else {
|
||||
dk = (double)k;
|
||||
return dk * ln2_hi + dk * ln2_lo;
|
||||
}
|
||||
R = f * f * (0.5 - 0.33333333333333333 * f);
|
||||
if (k == 0)
|
||||
return f - R;
|
||||
else {
|
||||
dk = (double)k;
|
||||
return dk * ln2_hi - ((R - dk * ln2_lo) - f);
|
||||
}
|
||||
}
|
||||
s = f / (2.0 + f);
|
||||
dk = (double)k;
|
||||
z = s * s;
|
||||
i = hx - 0x6147a;
|
||||
w = z * z;
|
||||
j = 0x6b851 - hx;
|
||||
t1 = w * (Lg2 + w * (Lg4 + w * Lg6));
|
||||
t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));
|
||||
i |= j;
|
||||
R = t2 + t1;
|
||||
if (i > 0) {
|
||||
hfsq = 0.5 * f * f;
|
||||
if (k == 0)
|
||||
return f - (hfsq - s * (hfsq + R));
|
||||
else
|
||||
return dk * ln2_hi - ((hfsq - (s * (hfsq + R) + dk * ln2_lo)) - f);
|
||||
} else {
|
||||
if (k == 0)
|
||||
return f - s * (f - R);
|
||||
else
|
||||
return dk * ln2_hi - ((s * (f - R) - dk * ln2_lo) - f);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,353 @@
|
|||
/* @(#)e_pow.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __ieee754_pow(x,y) return x**y
|
||||
*
|
||||
* n
|
||||
* Method: Let x = 2 * (1+f)
|
||||
* 1. Compute and return log2(x) in two pieces:
|
||||
* log2(x) = w1 + w2,
|
||||
* where w1 has 53-24 = 29 bit trailing zeros.
|
||||
* 2. Perform y*log2(x) = n+y' by simulating muti-precision
|
||||
* arithmetic, where |y'|<=0.5.
|
||||
* 3. Return x**y = 2**n*exp(y'*log2)
|
||||
*
|
||||
* Special cases:
|
||||
* 1. (anything) ** 0 is 1
|
||||
* 2. (anything) ** 1 is itself
|
||||
* 3. (anything) ** NAN is NAN
|
||||
* 4. NAN ** (anything except 0) is NAN
|
||||
* 5. +-(|x| > 1) ** +INF is +INF
|
||||
* 6. +-(|x| > 1) ** -INF is +0
|
||||
* 7. +-(|x| < 1) ** +INF is +0
|
||||
* 8. +-(|x| < 1) ** -INF is +INF
|
||||
* 9. +-1 ** +-INF is NAN
|
||||
* 10. +0 ** (+anything except 0, NAN) is +0
|
||||
* 11. -0 ** (+anything except 0, NAN, odd integer) is +0
|
||||
* 12. +0 ** (-anything except 0, NAN) is +INF
|
||||
* 13. -0 ** (-anything except 0, NAN, odd integer) is +INF
|
||||
* 14. -0 ** (odd integer) = -( +0 ** (odd integer) )
|
||||
* 15. +INF ** (+anything except 0,NAN) is +INF
|
||||
* 16. +INF ** (-anything except 0,NAN) is +0
|
||||
* 17. -INF ** (anything) = -0 ** (-anything)
|
||||
* 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer)
|
||||
* 19. (-anything except 0 and inf) ** (non-integer) is NAN
|
||||
*
|
||||
* Accuracy:
|
||||
* pow(x,y) returns x**y nearly rounded. In particular
|
||||
* pow(integer,integer)
|
||||
* always returns the correct integer provided it is
|
||||
* representable.
|
||||
*
|
||||
* Constants :
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
bp[] =
|
||||
{
|
||||
1.0,
|
||||
1.5,
|
||||
},
|
||||
dp_h[] =
|
||||
{
|
||||
0.0,
|
||||
5.84962487220764160156e-01,
|
||||
}, /* 0x3FE2B803, 0x40000000 */
|
||||
dp_l[] =
|
||||
{
|
||||
0.0,
|
||||
1.35003920212974897128e-08,
|
||||
}, /* 0x3E4CFDEB, 0x43CFD006 */
|
||||
zero = 0.0, one = 1.0, two = 2.0, two53 = 9007199254740992.0, /* 0x43400000, 0x00000000 */
|
||||
big = 1.0e300, tiny = 1.0e-300,
|
||||
/* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */
|
||||
L1 = 5.99999999999994648725e-01, /* 0x3FE33333, 0x33333303 */
|
||||
L2 = 4.28571428578550184252e-01, /* 0x3FDB6DB6, 0xDB6FABFF */
|
||||
L3 = 3.33333329818377432918e-01, /* 0x3FD55555, 0x518F264D */
|
||||
L4 = 2.72728123808534006489e-01, /* 0x3FD17460, 0xA91D4101 */
|
||||
L5 = 2.30660745775561754067e-01, /* 0x3FCD864A, 0x93C9DB65 */
|
||||
L6 = 2.06975017800338417784e-01, /* 0x3FCA7E28, 0x4A454EEF */
|
||||
P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
|
||||
P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
|
||||
P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
|
||||
P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
|
||||
P5 = 4.13813679705723846039e-08, /* 0x3E663769, 0x72BEA4D0 */
|
||||
lg2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */
|
||||
lg2_h = 6.93147182464599609375e-01, /* 0x3FE62E43, 0x00000000 */
|
||||
lg2_l = -1.90465429995776804525e-09, /* 0xBE205C61, 0x0CA86C39 */
|
||||
ovt = 8.0085662595372944372e-0017, /* -(1024-log2(ovfl+.5ulp)) */
|
||||
cp = 9.61796693925975554329e-01, /* 0x3FEEC709, 0xDC3A03FD =2/(3ln2) */
|
||||
cp_h = 9.61796700954437255859e-01, /* 0x3FEEC709, 0xE0000000 =(float)cp */
|
||||
cp_l = -7.02846165095275826516e-09, /* 0xBE3E2FE0, 0x145B01F5 =tail of cp_h*/
|
||||
ivln2 = 1.44269504088896338700e+00, /* 0x3FF71547, 0x652B82FE =1/ln2 */
|
||||
ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/
|
||||
ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/
|
||||
|
||||
#ifdef __STDC__
|
||||
double __ieee754_pow(double x, double y)
|
||||
#else
|
||||
double __ieee754_pow(x, y)
|
||||
double x, y;
|
||||
#endif
|
||||
{
|
||||
double z, ax, z_h, z_l, p_h, p_l;
|
||||
double y1, t1, t2, r, s, t, u, v, w;
|
||||
_INT32 i, j, k, yisint, n; /*- cc 020130 -*/
|
||||
_INT32 hx, hy, ix, iy; /*- cc 020130 -*/
|
||||
_UINT32 lx, ly; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x);
|
||||
lx = __LO(x);
|
||||
hy = __HI(y);
|
||||
ly = __LO(y);
|
||||
ix = hx & 0x7fffffff;
|
||||
iy = hy & 0x7fffffff;
|
||||
|
||||
/* y==zero: x**0 = 1 */
|
||||
if ((iy | ly) == 0)
|
||||
return one;
|
||||
|
||||
/* +-NaN return x+y */
|
||||
if (ix > 0x7ff00000 || ((ix == 0x7ff00000) && (lx != 0)) || iy > 0x7ff00000 || ((iy == 0x7ff00000) && (ly != 0))) {
|
||||
return x + y;
|
||||
#ifdef __STDC__
|
||||
errno = EDOM; /* mf-- added to conform to old ANSI standard */
|
||||
#endif
|
||||
}
|
||||
|
||||
/* determine if y is an odd int when x < 0
|
||||
* yisint = 0 ... y is not an integer
|
||||
* yisint = 1 ... y is an odd int
|
||||
* yisint = 2 ... y is an even int
|
||||
*/
|
||||
yisint = 0;
|
||||
if (hx < 0) {
|
||||
if (iy >= 0x43400000)
|
||||
yisint = 2; /* even integer y */
|
||||
else if (iy >= 0x3ff00000) {
|
||||
k = (iy >> 20) - 0x3ff; /* exponent */
|
||||
if (k > 20) {
|
||||
j = ly >> (52 - k);
|
||||
if ((j << (52 - k)) == ly)
|
||||
yisint = 2 - (j & 1);
|
||||
} else if (ly == 0) {
|
||||
j = iy >> (20 - k);
|
||||
if ((j << (20 - k)) == iy)
|
||||
yisint = 2 - (j & 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* special value of y */
|
||||
if (ly == 0) {
|
||||
if (iy == 0x7ff00000) {
|
||||
|
||||
/* y is +-inf */
|
||||
if (((ix - 0x3ff00000) | lx) == 0)
|
||||
return y - y; /* inf**+-1 is NaN */
|
||||
else if (ix >= 0x3ff00000) /* (|x|>1)**+-inf = inf,0 */
|
||||
return (hy >= 0) ? y : zero;
|
||||
else /* (|x|<1)**-,+inf = inf,0 */
|
||||
return (hy < 0) ? -y : zero;
|
||||
}
|
||||
if (iy == 0x3ff00000) {
|
||||
/* y is +-1 */
|
||||
if (hy < 0)
|
||||
return one / x;
|
||||
else
|
||||
return x;
|
||||
}
|
||||
if (hy == 0x40000000)
|
||||
return x * x; /* y is 2 */
|
||||
if (hy == 0x3fe00000) { /* y is 0.5 */
|
||||
if (hx >= 0) /* x >= +0 */
|
||||
return sqrt(x);
|
||||
}
|
||||
}
|
||||
|
||||
ax = fabs(x);
|
||||
/* special value of x */
|
||||
if (lx == 0) {
|
||||
if (ix == 0x7ff00000 || ix == 0 || ix == 0x3ff00000) {
|
||||
z = ax; /*x is +-0,+-inf,+-1*/
|
||||
if (hy < 0)
|
||||
z = one / z; /* z = (1/|x|) */
|
||||
if (hx < 0) {
|
||||
if (((ix - 0x3ff00000) | yisint) == 0) {
|
||||
z = (z - z) / (z - z); /* (-1)**non-int is NaN */
|
||||
} else if (yisint == 1)
|
||||
z = -z; /* (x<0)**odd = -(|x|**odd) */
|
||||
}
|
||||
return z;
|
||||
}
|
||||
}
|
||||
|
||||
/* (x<0)**(non-int) is NaN */
|
||||
if ((((hx >> 31) + 1) | yisint) == 0) {
|
||||
#ifdef __STDC__
|
||||
errno = EDOM; /* mf-- added to conform to old ANSI standard */
|
||||
#endif
|
||||
return NAN;
|
||||
}
|
||||
|
||||
/* |y| is big */
|
||||
if (iy > 0x41e00000) { /* if |y| > 2**31 */
|
||||
if (iy > 0x43f00000) { /* if |y| > 2**64, must o/uflow */
|
||||
if (ix <= 0x3fefffff)
|
||||
return (hy < 0) ? big * big : tiny * tiny;
|
||||
if (ix >= 0x3ff00000)
|
||||
return (hy > 0) ? big * big : tiny * tiny;
|
||||
}
|
||||
/* over/underflow if x is not close to one */
|
||||
if (ix < 0x3fefffff)
|
||||
return (hy < 0) ? big * big : tiny * tiny;
|
||||
if (ix > 0x3ff00000)
|
||||
return (hy > 0) ? big * big : tiny * tiny;
|
||||
/* now |1-x| is tiny <= 2**-20, suffice to compute
|
||||
log(x) by x-x^2/2+x^3/3-x^4/4 */
|
||||
t = x - 1; /* t has 20 trailing zeros */
|
||||
w = (t * t) * (0.5 - t * (0.3333333333333333333333 - t * 0.25));
|
||||
u = ivln2_h * t; /* ivln2_h has 21 sig. bits */
|
||||
v = t * ivln2_l - w * ivln2;
|
||||
t1 = u + v;
|
||||
__LO(t1) = 0;
|
||||
t2 = v - (t1 - u);
|
||||
} else {
|
||||
double s2, s_h, s_l, t_h, t_l;
|
||||
n = 0;
|
||||
/* take care subnormal number */
|
||||
if (ix < 0x00100000) {
|
||||
ax *= two53;
|
||||
n -= 53;
|
||||
ix = __HI(ax);
|
||||
}
|
||||
n += ((ix) >> 20) - 0x3ff;
|
||||
j = ix & 0x000fffff;
|
||||
/* determine interval */
|
||||
ix = j | 0x3ff00000; /* normalize ix */
|
||||
if (j <= 0x3988E)
|
||||
k = 0; /* |x|<sqrt(3/2) */
|
||||
else if (j < 0xBB67A)
|
||||
k = 1; /* |x|<sqrt(3) */
|
||||
else {
|
||||
k = 0;
|
||||
n += 1;
|
||||
ix -= 0x00100000;
|
||||
}
|
||||
__HI(ax) = ix;
|
||||
|
||||
/* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
|
||||
u = ax - bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
|
||||
v = one / (ax + bp[k]);
|
||||
s = u * v;
|
||||
s_h = s;
|
||||
__LO(s_h) = 0;
|
||||
/* t_h=ax+bp[k] High */
|
||||
t_h = zero;
|
||||
__HI(t_h) = ((ix >> 1) | 0x20000000) + 0x00080000 + (k << 18);
|
||||
t_l = ax - (t_h - bp[k]);
|
||||
s_l = v * ((u - s_h * t_h) - s_h * t_l);
|
||||
/* compute log(ax) */
|
||||
s2 = s * s;
|
||||
r = s2 * s2 * (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));
|
||||
r += s_l * (s_h + s);
|
||||
s2 = s_h * s_h;
|
||||
t_h = 3.0 + s2 + r;
|
||||
__LO(t_h) = 0;
|
||||
t_l = r - ((t_h - 3.0) - s2);
|
||||
/* u+v = s*(1+...) */
|
||||
u = s_h * t_h;
|
||||
v = s_l * t_h + t_l * s;
|
||||
/* 2/(3log2)*(s+...) */
|
||||
p_h = u + v;
|
||||
__LO(p_h) = 0;
|
||||
p_l = v - (p_h - u);
|
||||
z_h = cp_h * p_h; /* cp_h+cp_l = 2/(3*log2) */
|
||||
z_l = cp_l * p_h + p_l * cp + dp_l[k];
|
||||
/* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
|
||||
t = (double)n;
|
||||
t1 = (((z_h + z_l) + dp_h[k]) + t);
|
||||
__LO(t1) = 0;
|
||||
t2 = z_l - (((t1 - t) - dp_h[k]) - z_h);
|
||||
}
|
||||
|
||||
s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
|
||||
if ((((hx >> 31) + 1) | (yisint - 1)) == 0)
|
||||
s = -one; /* (-ve)**(odd int) */
|
||||
|
||||
/* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
|
||||
y1 = y;
|
||||
__LO(y1) = 0;
|
||||
p_l = (y - y1) * t1 + y * t2;
|
||||
p_h = y1 * t1;
|
||||
z = p_l + p_h;
|
||||
j = __HI(z);
|
||||
i = __LO(z);
|
||||
if (j >= 0x40900000) { /* z >= 1024 */
|
||||
if (((j - 0x40900000) | i) != 0) /* if z > 1024 */
|
||||
return s * big * big; /* overflow */
|
||||
else {
|
||||
if (p_l + ovt > z - p_h)
|
||||
return s * big * big; /* overflow */
|
||||
}
|
||||
} else if ((j & 0x7fffffff) >= 0x4090cc00) { /* z <= -1075 */
|
||||
if (((j - 0xc090cc00) | i) != 0) /* z < -1075 */
|
||||
return s * tiny * tiny; /* underflow */
|
||||
else {
|
||||
if (p_l <= z - p_h)
|
||||
return s * tiny * tiny; /* underflow */
|
||||
}
|
||||
}
|
||||
/*
|
||||
* compute 2**(p_h+p_l)
|
||||
*/
|
||||
i = j & 0x7fffffff;
|
||||
k = (i >> 20) - 0x3ff;
|
||||
n = 0;
|
||||
if (i > 0x3fe00000) { /* if |z| > 0.5, set n = [z+0.5] */
|
||||
n = j + (0x00100000 >> (k + 1));
|
||||
k = ((n & 0x7fffffff) >> 20) - 0x3ff; /* new k for n */
|
||||
t = zero;
|
||||
__HI(t) = (n & ~(0x000fffff >> k));
|
||||
n = ((n & 0x000fffff) | 0x00100000) >> (20 - k);
|
||||
if (j < 0)
|
||||
n = -n;
|
||||
p_h -= t;
|
||||
}
|
||||
t = p_l + p_h;
|
||||
__LO(t) = 0;
|
||||
u = t * lg2_h;
|
||||
v = (p_l - (t - p_h)) * lg2 + t * lg2_l;
|
||||
z = u + v;
|
||||
w = v - (z - u);
|
||||
t = z * z;
|
||||
t1 = z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
|
||||
r = (z * t1) / (t1 - two) - (w + z * w);
|
||||
z = one - (r - z);
|
||||
j = __HI(z);
|
||||
j += (n << 20);
|
||||
if ((j >> 20) <= 0)
|
||||
z = scalbn(z, n); /* subnormal output */
|
||||
else
|
||||
__HI(z) += (n << 20);
|
||||
return s * z;
|
||||
}
|
|
@ -0,0 +1,181 @@
|
|||
/* @(#)e_rem_pio2.c 1.3 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
*/
|
||||
|
||||
/* __ieee754_rem_pio2(x,y)
|
||||
*
|
||||
* return the remainder of x rem pi/2 in y[0]+y[1]
|
||||
* use __kernel_rem_pio2()
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
/*
|
||||
* Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi
|
||||
*/
|
||||
|
||||
#ifdef __STDC__
|
||||
static const _INT32 two_over_pi[] = {
|
||||
#else
|
||||
static _INT32 two_over_pi[] = {
|
||||
#endif
|
||||
0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, 0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7,
|
||||
0x246E3A, 0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, 0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C,
|
||||
0x7026B4, 0x5F7E41, 0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8, 0x97FFDE, 0x05980F, 0xEF2F11,
|
||||
0x8B5A0A, 0x6D1F6D, 0x367ECF, 0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5, 0xF17B3D, 0x0739F7,
|
||||
0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, 0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, 0x91615E,
|
||||
0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, 0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B,
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
static const _INT32 npio2_hw[] = {
|
||||
#else
|
||||
static _INT32 npio2_hw[] = {
|
||||
#endif
|
||||
0x3FF921FB, 0x400921FB, 0x4012D97C, 0x401921FB, 0x401F6A7A, 0x4022D97C, 0x4025FDBB, 0x402921FB, 0x402C463A, 0x402F6A7A, 0x4031475C,
|
||||
0x4032D97C, 0x40346B9C, 0x4035FDBB, 0x40378FDB, 0x403921FB, 0x403AB41B, 0x403C463A, 0x403DD85A, 0x403F6A7A, 0x40407E4C, 0x4041475C,
|
||||
0x4042106C, 0x4042D97C, 0x4043A28C, 0x40446B9C, 0x404534AC, 0x4045FDBB, 0x4046C6CB, 0x40478FDB, 0x404858EB, 0x404921FB,
|
||||
};
|
||||
|
||||
/*
|
||||
* invpio2: 53 bits of 2/pi
|
||||
* pio2_1: first 33 bit of pi/2
|
||||
* pio2_1t: pi/2 - pio2_1
|
||||
* pio2_2: second 33 bit of pi/2
|
||||
* pio2_2t: pi/2 - (pio2_1+pio2_2)
|
||||
* pio2_3: third 33 bit of pi/2
|
||||
* pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
|
||||
*/
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
|
||||
half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
|
||||
two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
|
||||
invpio2 = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */
|
||||
pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */
|
||||
pio2_1t = 6.07710050650619224932e-11, /* 0x3DD0B461, 0x1A626331 */
|
||||
pio2_2 = 6.07710050630396597660e-11, /* 0x3DD0B461, 0x1A600000 */
|
||||
pio2_2t = 2.02226624879595063154e-21, /* 0x3BA3198A, 0x2E037073 */
|
||||
pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */
|
||||
pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */
|
||||
|
||||
#ifdef __STDC__
|
||||
_INT32 __ieee754_rem_pio2(double x, double* y) /*- cc 020130 -*/
|
||||
#else
|
||||
_INT32 __ieee754_rem_pio2(x, y) /*- cc 020130 -*/
|
||||
double x, y[];
|
||||
#endif
|
||||
{
|
||||
double z, w, t, r, fn;
|
||||
double tx[3];
|
||||
_INT32 e0, i, j, nx, n, ix, hx; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x); /* high word of x */
|
||||
ix = hx & 0x7fffffff;
|
||||
if (ix <= 0x3fe921fb) /* |x| ~<= pi/4 , no need for reduction */
|
||||
{
|
||||
y[0] = x;
|
||||
y[1] = 0;
|
||||
return 0;
|
||||
}
|
||||
if (ix < 0x4002d97c) { /* |x| < 3pi/4, special case with n=+-1 */
|
||||
if (hx > 0) {
|
||||
z = x - pio2_1;
|
||||
if (ix != 0x3ff921fb) { /* 33+53 bit pi is good enough */
|
||||
y[0] = z - pio2_1t;
|
||||
y[1] = (z - y[0]) - pio2_1t;
|
||||
} else { /* near pi/2, use 33+33+53 bit pi */
|
||||
z -= pio2_2;
|
||||
y[0] = z - pio2_2t;
|
||||
y[1] = (z - y[0]) - pio2_2t;
|
||||
}
|
||||
return 1;
|
||||
} else { /* negative x */
|
||||
z = x + pio2_1;
|
||||
if (ix != 0x3ff921fb) { /* 33+53 bit pi is good enough */
|
||||
y[0] = z + pio2_1t;
|
||||
y[1] = (z - y[0]) + pio2_1t;
|
||||
} else { /* near pi/2, use 33+33+53 bit pi */
|
||||
z += pio2_2;
|
||||
y[0] = z + pio2_2t;
|
||||
y[1] = (z - y[0]) + pio2_2t;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (ix <= 0x413921fb) { /* |x| ~<= 2^19*(pi/2), medium size */
|
||||
t = fabs(x);
|
||||
n = (_INT32)(t * invpio2 + half); /*- cc 020130 -*/
|
||||
fn = (double)n;
|
||||
r = t - fn * pio2_1;
|
||||
w = fn * pio2_1t; /* 1st round good to 85 bit */
|
||||
if (n < 32 && ix != npio2_hw[n - 1]) {
|
||||
y[0] = r - w; /* quick check no cancellation */
|
||||
} else {
|
||||
j = ix >> 20;
|
||||
y[0] = r - w;
|
||||
i = j - (((__HI(y[0])) >> 20) & 0x7ff);
|
||||
if (i > 16) { /* 2nd iteration needed, good to 118 */
|
||||
t = r;
|
||||
w = fn * pio2_2;
|
||||
r = t - w;
|
||||
w = fn * pio2_2t - ((t - r) - w);
|
||||
y[0] = r - w;
|
||||
i = j - (((__HI(y[0])) >> 20) & 0x7ff);
|
||||
if (i > 49) { /* 3rd iteration need, 151 bits acc */
|
||||
t = r; /* will cover all possible cases */
|
||||
w = fn * pio2_3;
|
||||
r = t - w;
|
||||
w = fn * pio2_3t - ((t - r) - w);
|
||||
y[0] = r - w;
|
||||
}
|
||||
}
|
||||
}
|
||||
y[1] = (r - y[0]) - w;
|
||||
if (hx < 0) {
|
||||
y[0] = -y[0];
|
||||
y[1] = -y[1];
|
||||
return -n;
|
||||
} else
|
||||
return n;
|
||||
}
|
||||
/*
|
||||
* all other (large) arguments
|
||||
*/
|
||||
if (ix >= 0x7ff00000) { /* x is inf or NaN */
|
||||
y[0] = y[1] = x - x;
|
||||
return 0;
|
||||
}
|
||||
/* set z = scalbn(|x|,ilogb(x)-23) */
|
||||
__LO(z) = __LO(x);
|
||||
e0 = (ix >> 20) - 1046; /* e0 = ilogb(z)-23; */
|
||||
__HI(z) = ix - (e0 << 20);
|
||||
for (i = 0; i < 2; i++) {
|
||||
tx[i] = (double)((_INT32)(z)); /*- cc 020130 -*/
|
||||
z = (z - tx[i]) * two24;
|
||||
}
|
||||
tx[2] = z;
|
||||
nx = 3;
|
||||
while (tx[nx - 1] == zero)
|
||||
nx--; /* skip zero term */
|
||||
n = __kernel_rem_pio2(tx, y, e0, nx, 2, two_over_pi);
|
||||
if (hx < 0) {
|
||||
y[0] = -y[0];
|
||||
y[1] = -y[1];
|
||||
return -n;
|
||||
}
|
||||
return n;
|
||||
}
|
|
@ -0,0 +1,149 @@
|
|||
/* @(#)fdlibm.h 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
#ifdef __STDC__
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
#endif
|
||||
|
||||
#define _IEEE_LIBM
|
||||
|
||||
#if __option(little_endian)
|
||||
#define __HIp(x) *(1 + (_INT32*)x) /*- cc 020130 -*/
|
||||
#define __LOp(x) *(_INT32*)x /*- cc 020130 -*/
|
||||
#else
|
||||
#define __HIp(x) *(_INT32*)x /*- cc 020130 -*/
|
||||
#define __LOp(x) *(1 + (_INT32*)x) /*- cc 020130 -*/
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
#define __P(p) p
|
||||
#else
|
||||
#define __P(p) ()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ANSI/POSIX
|
||||
*/
|
||||
|
||||
extern int signgam;
|
||||
|
||||
#define MAXFLOAT ((float)3.40282346638528860e+38)
|
||||
|
||||
enum fdversion { fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix };
|
||||
|
||||
#define _LIB_VERSION_TYPE enum fdversion
|
||||
#define _LIB_VERSION _fdlib_version
|
||||
|
||||
/* if global variable _LIB_VERSION is not desirable, one may
|
||||
* change the following to be a constant by:
|
||||
* #define _LIB_VERSION_TYPE const enum version
|
||||
* In that case, after one initializes the value _LIB_VERSION (see
|
||||
* s_lib_version.c) during compile time, it cannot be modified
|
||||
* in the middle of a program
|
||||
*/
|
||||
extern _LIB_VERSION_TYPE _LIB_VERSION;
|
||||
|
||||
#define _IEEE_ fdlibm_ieee
|
||||
#define _SVID_ fdlibm_svid
|
||||
#define _XOPEN_ fdlibm_xopen
|
||||
#define _POSIX_ fdlibm_posix
|
||||
|
||||
struct exception {
|
||||
int type;
|
||||
char* name;
|
||||
double arg1;
|
||||
double arg2;
|
||||
double retval;
|
||||
};
|
||||
|
||||
#define HUGE MAXFLOAT
|
||||
|
||||
/*
|
||||
* set X_TLOSS = pi*2**52, which is possibly defined in <values.h>
|
||||
* (one may replace the following line by "#include <values.h>")
|
||||
*/
|
||||
|
||||
#define X_TLOSS 1.41484755040568800000e+16
|
||||
|
||||
#define DOMAIN 1
|
||||
#define SING 2
|
||||
#define OVERFLOW 3
|
||||
#define UNDERFLOW 4
|
||||
#define TLOSS 5
|
||||
#define PLOSS 6
|
||||
|
||||
/*
|
||||
* ANSI/POSIX
|
||||
*/
|
||||
|
||||
extern int matherr __P((struct exception*));
|
||||
|
||||
/*
|
||||
* IEEE Test Vector
|
||||
*/
|
||||
extern double significand __P((double));
|
||||
|
||||
/*
|
||||
* Functions callable from C, intended to support IEEE arithmetic.
|
||||
*/
|
||||
|
||||
extern int ilogb __P((double));
|
||||
|
||||
/*
|
||||
* BSD math library entry points
|
||||
*/
|
||||
|
||||
/*
|
||||
* Reentrant version of gamma & lgamma; passes signgam back by reference
|
||||
* as the second argument; user must allocate space for signgam.
|
||||
*/
|
||||
#ifdef _REENTRANT
|
||||
extern double gamma_r __P((double, int*));
|
||||
extern double lgamma_r __P((double, int*));
|
||||
#endif /* _REENTRANT */
|
||||
|
||||
/* ieee style elementary functions */
|
||||
extern double __ieee754_sqrt __P((double));
|
||||
extern double __ieee754_acos __P((double));
|
||||
extern double __ieee754_acosh __P((double));
|
||||
extern double __ieee754_log __P((double));
|
||||
extern double __ieee754_atanh __P((double));
|
||||
extern double __ieee754_asin __P((double));
|
||||
extern double __ieee754_atan2 __P((double, double));
|
||||
extern double __ieee754_exp __P((double));
|
||||
extern double __ieee754_cosh __P((double));
|
||||
extern double __ieee754_fmod __P((double, double));
|
||||
extern double __ieee754_pow __P((double, double));
|
||||
extern double __ieee754_lgamma_r __P((double, int*));
|
||||
extern double __ieee754_gamma_r __P((double, int*));
|
||||
extern double __ieee754_lgamma __P((double));
|
||||
extern double __ieee754_gamma __P((double));
|
||||
extern double __ieee754_log10 __P((double));
|
||||
extern double __ieee754_sinh __P((double));
|
||||
extern double __ieee754_hypot __P((double, double));
|
||||
extern double __ieee754_j0 __P((double));
|
||||
extern double __ieee754_j1 __P((double));
|
||||
extern double __ieee754_y0 __P((double));
|
||||
extern double __ieee754_y1 __P((double));
|
||||
extern double __ieee754_jn __P((int, double));
|
||||
extern double __ieee754_yn __P((int, double));
|
||||
extern double __ieee754_remainder __P((double, double));
|
||||
extern int __ieee754_rem_pio2 __P((double, double*));
|
||||
|
||||
extern double __ieee754_scalb __P((double, int));
|
||||
|
||||
/* fdlibm kernel function */
|
||||
extern double __kernel_standard __P((double, double, int));
|
||||
extern double __kernel_sin __P((double, double, int));
|
||||
extern double __kernel_cos __P((double, double));
|
||||
extern double __kernel_tan __P((double, double, int));
|
||||
extern int __kernel_rem_pio2 __P((double*, double*, int, int, int, const int*));
|
|
@ -0,0 +1,92 @@
|
|||
/* @(#)k_cos.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* __kernel_cos( x, y )
|
||||
* kernel cos function on [-pi/4, pi/4], pi/4 ~ 0.785398164
|
||||
* Input x is assumed to be bounded by ~pi/4 in magnitude.
|
||||
* Input y is the tail of x.
|
||||
*
|
||||
* Algorithm
|
||||
* 1. Since cos(-x) = cos(x), we need only to consider positive x.
|
||||
* 2. if x < 2^-27 (hx<0x3e400000 0), return 1 with inexact if x!=0.
|
||||
* 3. cos(x) is approximated by a polynomial of degree 14 on
|
||||
* [0,pi/4]
|
||||
* 4 14
|
||||
* cos(x) ~ 1 - x*x/2 + C1*x + ... + C6*x
|
||||
* where the remez error is
|
||||
*
|
||||
* | 2 4 6 8 10 12 14 | -58
|
||||
* |cos(x)-(1-.5*x +C1*x +C2*x +C3*x +C4*x +C5*x +C6*x )| <= 2
|
||||
* | |
|
||||
*
|
||||
* 4 6 8 10 12 14
|
||||
* 4. let r = C1*x +C2*x +C3*x +C4*x +C5*x +C6*x , then
|
||||
* cos(x) = 1 - x*x/2 + r
|
||||
* since cos(x+y) ~ cos(x) - sin(x)*y
|
||||
* ~ cos(x) - x*y,
|
||||
* a correction term is necessary in cos(x) and hence
|
||||
* cos(x+y) = 1 - (x*x/2 - (r - x*y))
|
||||
* For better accuracy when x > 0.3, let qx = |x|/4 with
|
||||
* the last 32 bits mask off, and if x > 0.78125, let qx = 0.28125.
|
||||
* Then
|
||||
* cos(x+y) = (1-qx) - ((x*x/2-qx) - (r-x*y)).
|
||||
* Note that 1-qx and (x*x/2-qx) is EXACT here, and the
|
||||
* magnitude of the latter is at least a quarter of x*x/2,
|
||||
* thus, reducing the rounding error in the subtraction.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
C1 = 4.16666666666666019037e-02, /* 0x3FA55555, 0x5555554C */
|
||||
C2 = -1.38888888888741095749e-03, /* 0xBF56C16C, 0x16C15177 */
|
||||
C3 = 2.48015872894767294178e-05, /* 0x3EFA01A0, 0x19CB1590 */
|
||||
C4 = -2.75573143513906633035e-07, /* 0xBE927E4F, 0x809C52AD */
|
||||
C5 = 2.08757232129817482790e-09, /* 0x3E21EE9E, 0xBDB4B1C4 */
|
||||
C6 = -1.13596475577881948265e-11; /* 0xBDA8FAE9, 0xBE8838D4 */
|
||||
|
||||
#ifdef __STDC__
|
||||
double __kernel_cos(double x, double y)
|
||||
#else
|
||||
double __kernel_cos(x, y)
|
||||
double x, y;
|
||||
#endif
|
||||
{
|
||||
double a, hz, z, r, qx;
|
||||
int ix;
|
||||
ix = __HI(x) & 0x7fffffff; /* ix = |x|'s high word*/
|
||||
if (ix < 0x3e400000) { /* if x < 2**27 */
|
||||
if (((int)x) == 0)
|
||||
return one; /* generate inexact */
|
||||
}
|
||||
z = x * x;
|
||||
r = z * (C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * C6)))));
|
||||
if (ix < 0x3FD33333) /* if |x| < 0.3 */
|
||||
return one - (0.5 * z - (z * r - x * y));
|
||||
else {
|
||||
if (ix > 0x3fe90000) { /* x > 0.78125 */
|
||||
qx = 0.28125;
|
||||
} else {
|
||||
__HI(qx) = ix - 0x00200000; /* x/4 */
|
||||
__LO(qx) = 0;
|
||||
}
|
||||
hz = 0.5 * z - qx;
|
||||
a = one - qx;
|
||||
return a - (hz - (z * r - x * y));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,348 @@
|
|||
/* @(#)k_rem_pio2.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
|
||||
* double x[],y[]; int e0,nx,prec; int ipio2[];
|
||||
*
|
||||
* __kernel_rem_pio2 return the last three digits of N with
|
||||
* y = x - N*pi/2
|
||||
* so that |y| < pi/2.
|
||||
*
|
||||
* The method is to compute the integer (mod 8) and fraction parts of
|
||||
* (2/pi)*x without doing the full multiplication. In general we
|
||||
* skip the part of the product that are known to be a huge integer (
|
||||
* more accurately, = 0 mod 8 ). Thus the number of operations are
|
||||
* independent of the exponent of the input.
|
||||
*
|
||||
* (2/pi) is represented by an array of 24-bit integers in ipio2[].
|
||||
*
|
||||
* Input parameters:
|
||||
* x[] The input value (must be positive) is broken into nx
|
||||
* pieces of 24-bit integers in double precision format.
|
||||
* x[i] will be the i-th 24 bit of x. The scaled exponent
|
||||
* of x[0] is given in input parameter e0 (i.e., x[0]*2^e0
|
||||
* match x's up to 24 bits.
|
||||
*
|
||||
* Example of breaking a double positive z into x[0]+x[1]+x[2]:
|
||||
* e0 = ilogb(z)-23
|
||||
* z = scalbn(z,-e0)
|
||||
* for i = 0,1,2
|
||||
* x[i] = floor(z)
|
||||
* z = (z-x[i])*2**24
|
||||
*
|
||||
*
|
||||
* y[] ouput result in an array of double precision numbers.
|
||||
* The dimension of y[] is:
|
||||
* 24-bit precision 1
|
||||
* 53-bit precision 2
|
||||
* 64-bit precision 2
|
||||
* 113-bit precision 3
|
||||
* The actual value is the sum of them. Thus for 113-bit
|
||||
* precison, one may have to do something like:
|
||||
*
|
||||
* long double t,w,r_head, r_tail;
|
||||
* t = (long double)y[2] + (long double)y[1];
|
||||
* w = (long double)y[0];
|
||||
* r_head = t+w;
|
||||
* r_tail = w - (r_head - t);
|
||||
*
|
||||
* e0 The exponent of x[0]
|
||||
*
|
||||
* nx dimension of x[]
|
||||
*
|
||||
* prec an integer indicating the precision:
|
||||
* 0 24 bits (single)
|
||||
* 1 53 bits (double)
|
||||
* 2 64 bits (extended)
|
||||
* 3 113 bits (quad)
|
||||
*
|
||||
* ipio2[]
|
||||
* integer array, contains the (24*i)-th to (24*i+23)-th
|
||||
* bit of 2/pi after binary point. The corresponding
|
||||
* floating value is
|
||||
*
|
||||
* ipio2[i] * 2^(-24(i+1)).
|
||||
*
|
||||
* External function:
|
||||
* double scalbn(), floor();
|
||||
*
|
||||
*
|
||||
* Here is the description of some local variables:
|
||||
*
|
||||
* jk jk+1 is the initial number of terms of ipio2[] needed
|
||||
* in the computation. The recommended value is 2,3,4,
|
||||
* 6 for single, double, extended,and quad.
|
||||
*
|
||||
* jz local integer variable indicating the number of
|
||||
* terms of ipio2[] used.
|
||||
*
|
||||
* jx nx - 1
|
||||
*
|
||||
* jv index for pointing to the suitable ipio2[] for the
|
||||
* computation. In general, we want
|
||||
* ( 2^e0*x[0] * ipio2[jv-1]*2^(-24jv) )/8
|
||||
* is an integer. Thus
|
||||
* e0-3-24*jv >= 0 or (e0-3)/24 >= jv
|
||||
* Hence jv = max(0,(e0-3)/24).
|
||||
*
|
||||
* jp jp+1 is the number of terms in PIo2[] needed, jp = jk.
|
||||
*
|
||||
* q[] double array with integral value, representing the
|
||||
* 24-bits chunk of the product of x and 2/pi.
|
||||
*
|
||||
* q0 the corresponding exponent of q[0]. Note that the
|
||||
* exponent for q[i] would be q0-24*i.
|
||||
*
|
||||
* PIo2[] double precision array, obtained by cutting pi/2
|
||||
* into 24 bits chunks.
|
||||
*
|
||||
* f[] ipio2[] in floating point
|
||||
*
|
||||
* iq[] integer array by breaking up q[] in 24-bits chunk.
|
||||
*
|
||||
* fq[] final product of x*(2/pi) in fq[0],..,fq[jk]
|
||||
*
|
||||
* ih integer. If >0 it indicates q[] is >= 0.5, hence
|
||||
* it also indicates the *sign* of the result.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const _INT32 init_jk[] = {2, 3, 4, 6}; /* initial value for jk */ /*- cc 020130 -*/
|
||||
#else
|
||||
static _INT32 init_jk[] = {2, 3, 4, 6}; /*- cc 020130 -*/
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double PIo2[] = {
|
||||
#else
|
||||
static double PIo2[] = {
|
||||
#endif
|
||||
1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */
|
||||
7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */
|
||||
5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */
|
||||
3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */
|
||||
1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */
|
||||
1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */
|
||||
2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */
|
||||
2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
zero = 0.0,
|
||||
one = 1.0, two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
|
||||
twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */
|
||||
|
||||
#ifdef __STDC__
|
||||
_INT32 __kernel_rem_pio2(double* x, double* y, _INT32 e0, _INT32 nx, _INT32 prec, const _INT32* ipio2) /*- cc 020130 -*/
|
||||
#else
|
||||
_INT32 __kernel_rem_pio2(x, y, e0, nx, prec, ipio2) /*- cc 020130 -*/
|
||||
double x[], y[];
|
||||
_INT32 e0, nx, prec;
|
||||
_INT32 ipio2[]; /*- cc 020130 -*/
|
||||
#endif
|
||||
{
|
||||
_INT32 jz, jx, jv, jp, jk, carry, n, iq[20], i, j, k, m, q0, ih; /*- cc 020130 -*/
|
||||
double z, fw, f[20], fq[20], q[20];
|
||||
|
||||
/* initialize jk*/
|
||||
jk = init_jk[prec];
|
||||
jp = jk;
|
||||
|
||||
/* determine jx,jv,q0, note that 3>q0 */
|
||||
jx = nx - 1;
|
||||
jv = (e0 - 3) / 24;
|
||||
if (jv < 0)
|
||||
jv = 0;
|
||||
q0 = e0 - 24 * (jv + 1);
|
||||
|
||||
/* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */
|
||||
j = jv - jx;
|
||||
m = jx + jk;
|
||||
for (i = 0; i <= m; i++, j++)
|
||||
f[i] = (j < 0) ? zero : (double)ipio2[j];
|
||||
|
||||
/* compute q[0],q[1],...q[jk] */
|
||||
for (i = 0; i <= jk; i++) {
|
||||
for (j = 0, fw = 0.0; j <= jx; j++)
|
||||
fw += x[j] * f[jx + i - j];
|
||||
q[i] = fw;
|
||||
}
|
||||
|
||||
jz = jk;
|
||||
recompute:
|
||||
/* distill q[] into iq[] reversingly */
|
||||
for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--) {
|
||||
fw = (double)((_INT32)(twon24 * z)); /*- cc 020130 -*/
|
||||
iq[i] = (_INT32)(z - two24 * fw); /*- cc 020130 -*/
|
||||
z = q[j - 1] + fw;
|
||||
}
|
||||
|
||||
/* compute n */
|
||||
z = scalbn(z, q0); /* actual value of z */
|
||||
z -= 8.0 * floor(z * 0.125); /* trim off integer >= 8 */
|
||||
n = (_INT32)z; /*- cc 020130 -*/
|
||||
z -= (double)n;
|
||||
ih = 0;
|
||||
if (q0 > 0) { /* need iq[jz-1] to determine n */
|
||||
i = (iq[jz - 1] >> (24 - q0));
|
||||
n += i;
|
||||
iq[jz - 1] -= i << (24 - q0);
|
||||
ih = iq[jz - 1] >> (23 - q0);
|
||||
} else if (q0 == 0)
|
||||
ih = iq[jz - 1] >> 23;
|
||||
else if (z >= 0.5)
|
||||
ih = 2;
|
||||
|
||||
if (ih > 0) { /* q > 0.5 */
|
||||
n += 1;
|
||||
carry = 0;
|
||||
for (i = 0; i < jz; i++) { /* compute 1-q */
|
||||
j = iq[i];
|
||||
if (carry == 0) {
|
||||
if (j != 0) {
|
||||
carry = 1;
|
||||
iq[i] = 0x1000000 - j;
|
||||
}
|
||||
} else
|
||||
iq[i] = 0xffffff - j;
|
||||
}
|
||||
if (q0 > 0) { /* rare case: chance is 1 in 12 */
|
||||
switch (q0) {
|
||||
case 1:
|
||||
iq[jz - 1] &= 0x7fffff;
|
||||
break;
|
||||
case 2:
|
||||
iq[jz - 1] &= 0x3fffff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ih == 2) {
|
||||
z = one - z;
|
||||
if (carry != 0)
|
||||
z -= scalbn(one, q0);
|
||||
}
|
||||
}
|
||||
|
||||
/* check if recomputation is needed */
|
||||
if (z == zero) {
|
||||
j = 0;
|
||||
for (i = jz - 1; i >= jk; i--)
|
||||
j |= iq[i];
|
||||
if (j == 0) { /* need recomputation */
|
||||
for (k = 1; iq[jk - k] == 0; k++)
|
||||
; /* k = no. of terms needed */
|
||||
|
||||
for (i = jz + 1; i <= jz + k; i++) { /* add q[jz+1] to q[jz+k] */
|
||||
f[jx + i] = (double)ipio2[jv + i];
|
||||
for (j = 0, fw = 0.0; j <= jx; j++)
|
||||
fw += x[j] * f[jx + i - j];
|
||||
q[i] = fw;
|
||||
}
|
||||
jz += k;
|
||||
goto recompute;
|
||||
}
|
||||
}
|
||||
|
||||
/* chop off zero terms */
|
||||
if (z == 0.0) {
|
||||
jz -= 1;
|
||||
q0 -= 24;
|
||||
while (iq[jz] == 0) {
|
||||
jz--;
|
||||
q0 -= 24;
|
||||
}
|
||||
} else { /* break z into 24-bit if necessary */
|
||||
z = scalbn(z, -q0);
|
||||
if (z >= two24) {
|
||||
fw = (double)((_INT32)(twon24 * z)); /*- cc 020130 -*/
|
||||
iq[jz] = (_INT32)(z - two24 * fw); /*- cc 020130 -*/
|
||||
jz += 1;
|
||||
q0 += 24;
|
||||
iq[jz] = (_INT32)fw; /*- cc 020130 -*/
|
||||
} else
|
||||
iq[jz] = (_INT32)z; /*- cc 020130 -*/
|
||||
}
|
||||
|
||||
/* convert integer "bit" chunk to floating-point value */
|
||||
fw = scalbn(one, q0);
|
||||
for (i = jz; i >= 0; i--) {
|
||||
q[i] = fw * (double)iq[i];
|
||||
fw *= twon24;
|
||||
}
|
||||
|
||||
/* compute PIo2[0,...,jp]*q[jz,...,0] */
|
||||
for (i = jz; i >= 0; i--) {
|
||||
for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++)
|
||||
fw += PIo2[k] * q[i + k];
|
||||
fq[jz - i] = fw;
|
||||
}
|
||||
|
||||
/* compress fq[] into y[] */
|
||||
switch (prec) {
|
||||
case 0:
|
||||
fw = 0.0;
|
||||
for (i = jz; i >= 0; i--)
|
||||
fw += fq[i];
|
||||
y[0] = (ih == 0) ? fw : -fw;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
fw = 0.0;
|
||||
for (i = jz; i >= 0; i--)
|
||||
fw += fq[i];
|
||||
y[0] = (ih == 0) ? fw : -fw;
|
||||
fw = fq[0] - fw;
|
||||
for (i = 1; i <= jz; i++)
|
||||
fw += fq[i];
|
||||
y[1] = (ih == 0) ? fw : -fw;
|
||||
break;
|
||||
case 3: /* painful */
|
||||
for (i = jz; i > 0; i--) {
|
||||
fw = fq[i - 1] + fq[i];
|
||||
fq[i] += fq[i - 1] - fw;
|
||||
fq[i - 1] = fw;
|
||||
}
|
||||
for (i = jz; i > 1; i--) {
|
||||
fw = fq[i - 1] + fq[i];
|
||||
fq[i] += fq[i - 1] - fw;
|
||||
fq[i - 1] = fw;
|
||||
}
|
||||
for (fw = 0.0, i = jz; i >= 2; i--)
|
||||
fw += fq[i];
|
||||
if (ih == 0) {
|
||||
y[0] = fq[0];
|
||||
y[1] = fq[1];
|
||||
y[2] = fw;
|
||||
} else {
|
||||
y[0] = -fq[0];
|
||||
y[1] = -fq[1];
|
||||
y[2] = -fw;
|
||||
}
|
||||
}
|
||||
return n & 7;
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/* @(#)k_sin.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __kernel_sin( x, y, iy)
|
||||
* kernel sin function on [-pi/4, pi/4], pi/4 ~ 0.7854
|
||||
* Input x is assumed to be bounded by ~pi/4 in magnitude.
|
||||
* Input y is the tail of x.
|
||||
* Input iy indicates whether y is 0. (if iy=0, y assume to be 0).
|
||||
*
|
||||
* Algorithm
|
||||
* 1. Since sin(-x) = -sin(x), we need only to consider positive x.
|
||||
* 2. if x < 2^-27 (hx<0x3e400000 0), return x with inexact if x!=0.
|
||||
* 3. sin(x) is approximated by a polynomial of degree 13 on
|
||||
* [0,pi/4]
|
||||
* 3 13
|
||||
* sin(x) ~ x + S1*x + ... + S6*x
|
||||
* where
|
||||
*
|
||||
* |sin(x) 2 4 6 8 10 12 | -58
|
||||
* |----- - (1+S1*x +S2*x +S3*x +S4*x +S5*x +S6*x )| <= 2
|
||||
* | x |
|
||||
*
|
||||
* 4. sin(x+y) = sin(x) + sin'(x')*y
|
||||
* ~ sin(x) + (1-x*x/2)*y
|
||||
* For better accuracy, let
|
||||
* 3 2 2 2 2
|
||||
* r = x *(S2+x *(S3+x *(S4+x *(S5+x *S6))))
|
||||
* then 3 2
|
||||
* sin(x) = x + (S1*x + (x *(r-y/2)+y))
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
|
||||
S1 = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */
|
||||
S2 = 8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */
|
||||
S3 = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */
|
||||
S4 = 2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */
|
||||
S5 = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */
|
||||
S6 = 1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */
|
||||
|
||||
#ifdef __STDC__
|
||||
double __kernel_sin(double x, double y, int iy)
|
||||
#else
|
||||
double __kernel_sin(x, y, iy)
|
||||
double x, y;
|
||||
int iy; /* iy=0 if y is zero */
|
||||
#endif
|
||||
{
|
||||
double z, r, v;
|
||||
int ix;
|
||||
ix = __HI(x) & 0x7fffffff; /* high word of x */
|
||||
if (ix < 0x3e400000) /* |x| < 2**-27 */
|
||||
{
|
||||
if ((int)x == 0)
|
||||
return x;
|
||||
} /* generate inexact */
|
||||
z = x * x;
|
||||
v = z * x;
|
||||
r = S2 + z * (S3 + z * (S4 + z * (S5 + z * S6)));
|
||||
if (iy == 0)
|
||||
return x + v * (S1 + z * r);
|
||||
else
|
||||
return x - ((z * (half * y - v * r) - y) - v * S1);
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
/* @(#)k_tan.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* __kernel_tan( x, y, k )
|
||||
* kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854
|
||||
* Input x is assumed to be bounded by ~pi/4 in magnitude.
|
||||
* Input y is the tail of x.
|
||||
* Input k indicates whether tan (if k=1) or
|
||||
* -1/tan (if k= -1) is returned.
|
||||
*
|
||||
* Algorithm
|
||||
* 1. Since tan(-x) = -tan(x), we need only to consider positive x.
|
||||
* 2. if x < 2^-28 (hx<0x3e300000 0), return x with inexact if x!=0.
|
||||
* 3. tan(x) is approximated by a odd polynomial of degree 27 on
|
||||
* [0,0.67434]
|
||||
* 3 27
|
||||
* tan(x) ~ x + T1*x + ... + T13*x
|
||||
* where
|
||||
*
|
||||
* |tan(x) 2 4 26 | -59.2
|
||||
* |----- - (1+T1*x +T2*x +.... +T13*x )| <= 2
|
||||
* | x |
|
||||
*
|
||||
* Note: tan(x+y) = tan(x) + tan'(x)*y
|
||||
* ~ tan(x) + (1+x*x)*y
|
||||
* Therefore, for better accuracy in computing tan(x+y), let
|
||||
* 3 2 2 2 2
|
||||
* r = x *(T2+x *(T3+x *(...+x *(T12+x *T13))))
|
||||
* then
|
||||
* 3 2
|
||||
* tan(x+y) = x + (T1*x + (x *(r+y)+y))
|
||||
*
|
||||
* 4. For x in [0.67434,pi/4], let y = pi/4 - x, then
|
||||
* tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y))
|
||||
* = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y)))
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
pio4 = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */
|
||||
pio4lo = 3.06161699786838301793e-17, /* 0x3C81A626, 0x33145C07 */
|
||||
T[] = {
|
||||
3.33333333333334091986e-01, /* 0x3FD55555, 0x55555563 */
|
||||
1.33333333333201242699e-01, /* 0x3FC11111, 0x1110FE7A */
|
||||
5.39682539762260521377e-02, /* 0x3FABA1BA, 0x1BB341FE */
|
||||
2.18694882948595424599e-02, /* 0x3F9664F4, 0x8406D637 */
|
||||
8.86323982359930005737e-03, /* 0x3F8226E3, 0xE96E8493 */
|
||||
3.59207910759131235356e-03, /* 0x3F6D6D22, 0xC9560328 */
|
||||
1.45620945432529025516e-03, /* 0x3F57DBC8, 0xFEE08315 */
|
||||
5.88041240820264096874e-04, /* 0x3F4344D8, 0xF2F26501 */
|
||||
2.46463134818469906812e-04, /* 0x3F3026F7, 0x1A8D1068 */
|
||||
7.81794442939557092300e-05, /* 0x3F147E88, 0xA03792A6 */
|
||||
7.14072491382608190305e-05, /* 0x3F12B80F, 0x32F0A7E9 */
|
||||
-1.85586374855275456654e-05, /* 0xBEF375CB, 0xDB605373 */
|
||||
2.59073051863633712884e-05, /* 0x3EFB2A70, 0x74BF7AD4 */
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
double __kernel_tan(double x, double y, _INT32 iy) /*- cc 020130 -*/
|
||||
#else
|
||||
double __kernel_tan(x, y, iy)
|
||||
double x, y;
|
||||
_INT32 iy; /*- cc 020130 -*/
|
||||
#endif
|
||||
{
|
||||
double z, r, v, w, s;
|
||||
_INT32 ix, hx; /*- cc 020130 -*/
|
||||
hx = __HI(x); /* high word of x */
|
||||
ix = hx & 0x7fffffff; /* high word of |x| */
|
||||
if (ix < 0x3e300000) /* x < 2**-28 */
|
||||
{
|
||||
if ((_INT32)x == 0) { /* generate inexact */ /*- cc 020130 -*/
|
||||
if (((ix | __LO(x)) | (iy + 1)) == 0)
|
||||
return one / fabs(x);
|
||||
else
|
||||
return (iy == 1) ? x : -one / x;
|
||||
}
|
||||
}
|
||||
if (ix >= 0x3FE59428) { /* |x|>=0.6744 */
|
||||
if (hx < 0) {
|
||||
x = -x;
|
||||
y = -y;
|
||||
}
|
||||
z = pio4 - x;
|
||||
w = pio4lo - y;
|
||||
x = z + w;
|
||||
y = 0.0;
|
||||
}
|
||||
z = x * x;
|
||||
w = z * z;
|
||||
/* Break x^5*(T[1]+x^2*T[2]+...) into
|
||||
* x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
|
||||
* x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
|
||||
*/
|
||||
r = T[1] + w * (T[3] + w * (T[5] + w * (T[7] + w * (T[9] + w * T[11]))));
|
||||
v = z * (T[2] + w * (T[4] + w * (T[6] + w * (T[8] + w * (T[10] + w * T[12])))));
|
||||
s = z * x;
|
||||
r = y + z * (s * (r + v) + y);
|
||||
r += T[0] * s;
|
||||
w = x + r;
|
||||
if (ix >= 0x3FE59428) {
|
||||
v = (double)iy;
|
||||
return (double)(1 - ((hx >> 30) & 2)) * (v - 2.0 * (x - (w * w / (w + v) - r)));
|
||||
}
|
||||
if (iy == 1)
|
||||
return w;
|
||||
else { /* if allow error up to 2 ulp,
|
||||
simply return -1.0/(x+r) here */
|
||||
/* compute -1.0/(x+r) accurately */
|
||||
double a, t;
|
||||
z = w;
|
||||
__LO(z) = 0;
|
||||
v = r - (z - x); /* z+v = r+x */
|
||||
t = a = -1.0 / w; /* a = -1.0/w */
|
||||
__LO(t) = 0;
|
||||
s = 1.0 + t * z;
|
||||
return t + a * (s + t * v);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
|
||||
struct lconv __lconv = {
|
||||
".", // decimal_point
|
||||
"", // thousands_sep
|
||||
"", // grouping
|
||||
"", // mon_decimal_point
|
||||
"", // mon_thousands_sep
|
||||
"", // mon_grouping
|
||||
"", // positive_sign
|
||||
"", // negative_sign
|
||||
"", // currency_symbol
|
||||
CHAR_MAX, // frac_digits
|
||||
CHAR_MAX, // p_cs_precedes
|
||||
CHAR_MAX, // n_cs_precedes
|
||||
CHAR_MAX, // p_sep_by_space
|
||||
CHAR_MAX, // n_sep_by_space
|
||||
CHAR_MAX, // p_sign_posn
|
||||
CHAR_MAX, // n_sign_posn
|
||||
"", // int_curr_symbol
|
||||
CHAR_MAX, // int_frac_digits
|
||||
CHAR_MAX, // int_p_cs_precedes
|
||||
CHAR_MAX, // int_n_cs_precedes
|
||||
CHAR_MAX, // int_p_sep_by_space
|
||||
CHAR_MAX, // int_n_sep_by_space
|
||||
CHAR_MAX, // int_p_sign_posn
|
||||
CHAR_MAX, // int_n_sign_posn
|
||||
};
|
||||
|
||||
// Just here to generate the extra string,
|
||||
// the real usage is inside setlocale, which is stripped
|
||||
static char* locale_name = "C";
|
|
@ -0,0 +1,3 @@
|
|||
#include <math.h>
|
||||
|
||||
float cosf(float x) { return (float)cos((double)x); }
|
|
@ -0,0 +1,70 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "mem_funcs.h"
|
||||
|
||||
void* memmove(void* dst, const void* src, size_t n) {
|
||||
const char* p;
|
||||
char* q;
|
||||
int rev = ((unsigned long)src < (unsigned long)dst);
|
||||
|
||||
if (n >= __min_bytes_for_long_copy) {
|
||||
if ((((int)dst ^ (int)src)) & 3)
|
||||
if (!rev)
|
||||
__copy_longs_unaligned(dst, src, n);
|
||||
else
|
||||
__copy_longs_rev_unaligned(dst, src, n);
|
||||
else if (!rev)
|
||||
__copy_longs_aligned(dst, src, n);
|
||||
else
|
||||
__copy_longs_rev_aligned(dst, src, n);
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
if (!rev) {
|
||||
|
||||
for (p = (const char*)src - 1, q = (char*)dst - 1, n++; --n;)
|
||||
*++q = *++p;
|
||||
|
||||
} else {
|
||||
for (p = (const char*)src + n, q = (char*)dst + n, n++; --n;)
|
||||
*--q = *--p;
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
void* memchr(const void* src, int val, size_t n) {
|
||||
const unsigned char* p;
|
||||
|
||||
unsigned long v = (val & 0xff);
|
||||
|
||||
for (p = (unsigned char*)src - 1, n++; --n;)
|
||||
if ((*++p & 0xff) == v)
|
||||
return (void*)p;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void* __memrchr(const void* src, int val, size_t n) {
|
||||
const unsigned char* p;
|
||||
|
||||
unsigned long v = (val & 0xff);
|
||||
|
||||
for (p = (unsigned char*)src + n, n++; --n;)
|
||||
if (*--p == v)
|
||||
return (void*)p;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int memcmp(const void* src1, const void* src2, size_t n) {
|
||||
const unsigned char* p1;
|
||||
const unsigned char* p2;
|
||||
|
||||
for (p1 = (const unsigned char*)src1 - 1, p2 = (const unsigned char*)src2 - 1, n++; --n;)
|
||||
if (*++p1 != *++p2)
|
||||
return ((*p1 < *p2) ? -1 : +1);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,223 @@
|
|||
#include "mem_funcs.h"
|
||||
|
||||
// #pragma ANSI_strict off
|
||||
|
||||
#define cps ((unsigned char*)src)
|
||||
#define cpd ((unsigned char*)dst)
|
||||
#define lps ((unsigned long*)src)
|
||||
#define lpd ((unsigned long*)dst)
|
||||
#define deref_auto_inc(p) *++(p)
|
||||
|
||||
void __copy_longs_aligned(void* dst, const void* src, unsigned long n) {
|
||||
unsigned long i;
|
||||
|
||||
i = (-(unsigned long)dst) & 3;
|
||||
|
||||
cps = ((unsigned char*)src) - 1;
|
||||
cpd = ((unsigned char*)dst) - 1;
|
||||
|
||||
if (i) {
|
||||
n -= i;
|
||||
|
||||
do
|
||||
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
||||
while (--i);
|
||||
}
|
||||
|
||||
lps = ((unsigned long*)(cps + 1)) - 1;
|
||||
lpd = ((unsigned long*)(cpd + 1)) - 1;
|
||||
|
||||
i = n >> 5;
|
||||
|
||||
if (i)
|
||||
do {
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
} while (--i);
|
||||
|
||||
i = (n & 31) >> 2;
|
||||
|
||||
if (i)
|
||||
do
|
||||
deref_auto_inc(lpd) = deref_auto_inc(lps);
|
||||
while (--i);
|
||||
|
||||
cps = ((unsigned char*)(lps + 1)) - 1;
|
||||
cpd = ((unsigned char*)(lpd + 1)) - 1;
|
||||
|
||||
// TODO longlong required to match?
|
||||
n &= 3ULL;
|
||||
|
||||
if (n)
|
||||
do
|
||||
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
||||
while (--n);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void __copy_longs_rev_aligned(void* dst, const void* src, unsigned long n) {
|
||||
unsigned long i;
|
||||
|
||||
cps = ((unsigned char*)src) + n;
|
||||
cpd = ((unsigned char*)dst) + n;
|
||||
|
||||
i = ((unsigned long)cpd) & 3;
|
||||
|
||||
if (i) {
|
||||
n -= i;
|
||||
|
||||
do
|
||||
*--cpd = *--cps;
|
||||
while (--i);
|
||||
}
|
||||
|
||||
i = n >> 5;
|
||||
|
||||
if (i)
|
||||
do {
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
*--lpd = *--lps;
|
||||
} while (--i);
|
||||
|
||||
i = (n & 31) >> 2;
|
||||
|
||||
if (i)
|
||||
do
|
||||
*--lpd = *--lps;
|
||||
while (--i);
|
||||
|
||||
// TODO longlong required to match?
|
||||
n &= 3ULL;
|
||||
|
||||
if (n)
|
||||
do
|
||||
*--cpd = *--cps;
|
||||
while (--n);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void __copy_longs_unaligned(void* dst, const void* src, unsigned long n) {
|
||||
unsigned long i, v1, v2;
|
||||
unsigned int src_offset, left_shift, right_shift;
|
||||
|
||||
i = (-(unsigned long)dst) & 3;
|
||||
|
||||
cps = ((unsigned char*)src) - 1;
|
||||
cpd = ((unsigned char*)dst) - 1;
|
||||
|
||||
if (i) {
|
||||
n -= i;
|
||||
|
||||
do
|
||||
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
||||
while (--i);
|
||||
}
|
||||
|
||||
src_offset = ((unsigned int)(cps + 1)) & 3;
|
||||
|
||||
left_shift = src_offset << 3;
|
||||
right_shift = 32 - left_shift;
|
||||
|
||||
cps -= src_offset;
|
||||
|
||||
lps = ((unsigned long*)(cps + 1)) - 1;
|
||||
lpd = ((unsigned long*)(cpd + 1)) - 1;
|
||||
|
||||
i = n >> 3;
|
||||
|
||||
v1 = deref_auto_inc(lps);
|
||||
|
||||
do {
|
||||
v2 = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = (v1 << left_shift) | (v2 >> right_shift);
|
||||
v1 = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = (v2 << left_shift) | (v1 >> right_shift);
|
||||
} while (--i);
|
||||
|
||||
if (n & 4) {
|
||||
v2 = deref_auto_inc(lps);
|
||||
deref_auto_inc(lpd) = (v1 << left_shift) | (v2 >> right_shift);
|
||||
}
|
||||
|
||||
cps = ((unsigned char*)(lps + 1)) - 1;
|
||||
cpd = ((unsigned char*)(lpd + 1)) - 1;
|
||||
|
||||
// TODO longlong required to match?
|
||||
n &= 3ULL;
|
||||
|
||||
if (n) {
|
||||
cps -= 4 - src_offset;
|
||||
do
|
||||
deref_auto_inc(cpd) = deref_auto_inc(cps);
|
||||
while (--n);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void __copy_longs_rev_unaligned(void* dst, const void* src, unsigned long n) {
|
||||
unsigned long i, v1, v2;
|
||||
unsigned int src_offset, left_shift, right_shift;
|
||||
|
||||
cps = ((unsigned char*)src) + n;
|
||||
cpd = ((unsigned char*)dst) + n;
|
||||
|
||||
i = ((unsigned long)cpd) & 3;
|
||||
|
||||
if (i) {
|
||||
n -= i;
|
||||
|
||||
do
|
||||
*--cpd = *--cps;
|
||||
while (--i);
|
||||
}
|
||||
|
||||
src_offset = ((unsigned int)cps) & 3;
|
||||
|
||||
left_shift = src_offset << 3;
|
||||
right_shift = 32 - left_shift;
|
||||
|
||||
cps += 4 - src_offset;
|
||||
|
||||
i = n >> 3;
|
||||
|
||||
v1 = *--lps;
|
||||
|
||||
do {
|
||||
v2 = *--lps;
|
||||
*--lpd = (v2 << left_shift) | (v1 >> right_shift);
|
||||
v1 = *--lps;
|
||||
*--lpd = (v1 << left_shift) | (v2 >> right_shift);
|
||||
} while (--i);
|
||||
|
||||
if (n & 4) {
|
||||
v2 = *--lps;
|
||||
*--lpd = (v2 << left_shift) | (v1 >> right_shift);
|
||||
}
|
||||
|
||||
// TODO longlong required to match?
|
||||
n &= 3ULL;
|
||||
|
||||
if (n) {
|
||||
cps += src_offset;
|
||||
do
|
||||
*--cpd = *--cps;
|
||||
while (--n);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
extern void (*__stdio_exit)(void);
|
||||
void __close_all(void);
|
||||
|
||||
void __stdio_atexit(void) { __stdio_exit = __close_all; }
|
|
@ -0,0 +1,75 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#define table_ptr(i) (((char*)table_base) + (member_size * ((i)-1)))
|
||||
|
||||
#define swap(dst, src, cnt) \
|
||||
do { \
|
||||
char* p; \
|
||||
char* q; \
|
||||
size_t n = cnt; \
|
||||
\
|
||||
unsigned long tmp; \
|
||||
\
|
||||
for (p = (char*)src - 1, q = (char*)dst - 1, n++; --n;) { \
|
||||
tmp = *++q; \
|
||||
*q = *++p; \
|
||||
*p = tmp; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
void qsort(void* table_base, size_t num_members, size_t member_size, _compare_function compare_members) {
|
||||
size_t l, r, j;
|
||||
char* lp;
|
||||
char* rp;
|
||||
char* ip;
|
||||
char* jp;
|
||||
char* kp;
|
||||
|
||||
if (num_members < 2)
|
||||
return;
|
||||
|
||||
r = num_members;
|
||||
l = (r / 2) + 1;
|
||||
|
||||
lp = table_ptr(l);
|
||||
rp = table_ptr(r);
|
||||
|
||||
for (;;) {
|
||||
if (l > 1) {
|
||||
l--;
|
||||
lp -= member_size;
|
||||
} else {
|
||||
swap(lp, rp, member_size);
|
||||
|
||||
if (--r == 1)
|
||||
return;
|
||||
|
||||
rp -= member_size;
|
||||
}
|
||||
|
||||
j = l;
|
||||
|
||||
jp = table_ptr(j);
|
||||
|
||||
while (j * 2 <= r) {
|
||||
j *= 2;
|
||||
|
||||
ip = jp;
|
||||
jp = table_ptr(j);
|
||||
|
||||
if (j < r) {
|
||||
kp = jp + member_size;
|
||||
|
||||
if (compare_members(jp, kp) < 0) {
|
||||
j++;
|
||||
jp = kp;
|
||||
}
|
||||
}
|
||||
|
||||
if (compare_members(ip, jp) < 0)
|
||||
swap(ip, jp, member_size);
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
static unsigned long int next = 1;
|
||||
|
||||
int rand(void) {
|
||||
next = next * 1103515245 + 12345;
|
||||
return (next >> 16) & 0x7FFF;
|
||||
}
|
||||
|
||||
void srand(unsigned int seed) { next = seed; }
|
|
@ -0,0 +1,142 @@
|
|||
/* @(#)s_atan.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
*/
|
||||
|
||||
/* atan(x)
|
||||
* Method
|
||||
* 1. Reduce x to positive by atan(x) = -atan(-x).
|
||||
* 2. According to the integer k=4t+0.25 chopped, t=x, the argument
|
||||
* is further reduced to one of the following intervals and the
|
||||
* arctangent of t is evaluated by the corresponding formula:
|
||||
*
|
||||
* [0,7/16] atan(x) = t-t^3*(a1+t^2*(a2+...(a10+t^2*a11)...)
|
||||
* [7/16,11/16] atan(x) = atan(1/2) + atan( (t-0.5)/(1+t/2) )
|
||||
* [11/16.19/16] atan(x) = atan( 1 ) + atan( (t-1)/(1+t) )
|
||||
* [19/16,39/16] atan(x) = atan(3/2) + atan( (t-1.5)/(1+1.5t) )
|
||||
* [39/16,INF] atan(x) = atan(INF) + atan( -1/t )
|
||||
*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double atanhi[] = {
|
||||
#else
|
||||
static double atanhi[] = {
|
||||
#endif
|
||||
4.63647609000806093515e-01, /* atan(0.5)hi 0x3FDDAC67, 0x0561BB4F */
|
||||
7.85398163397448278999e-01, /* atan(1.0)hi 0x3FE921FB, 0x54442D18 */
|
||||
9.82793723247329054082e-01, /* atan(1.5)hi 0x3FEF730B, 0xD281F69B */
|
||||
1.57079632679489655800e+00, /* atan(inf)hi 0x3FF921FB, 0x54442D18 */
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double atanlo[] = {
|
||||
#else
|
||||
static double atanlo[] = {
|
||||
#endif
|
||||
2.26987774529616870924e-17, /* atan(0.5)lo 0x3C7A2B7F, 0x222F65E2 */
|
||||
3.06161699786838301793e-17, /* atan(1.0)lo 0x3C81A626, 0x33145C07 */
|
||||
1.39033110312309984516e-17, /* atan(1.5)lo 0x3C700788, 0x7AF0CBBD */
|
||||
6.12323399573676603587e-17, /* atan(inf)lo 0x3C91A626, 0x33145C07 */
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double aT[] = {
|
||||
#else
|
||||
static double aT[] = {
|
||||
#endif
|
||||
3.33333333333329318027e-01, /* 0x3FD55555, 0x5555550D */
|
||||
-1.99999999998764832476e-01, /* 0xBFC99999, 0x9998EBC4 */
|
||||
1.42857142725034663711e-01, /* 0x3FC24924, 0x920083FF */
|
||||
-1.11111104054623557880e-01, /* 0xBFBC71C6, 0xFE231671 */
|
||||
9.09088713343650656196e-02, /* 0x3FB745CD, 0xC54C206E */
|
||||
-7.69187620504482999495e-02, /* 0xBFB3B0F2, 0xAF749A6D */
|
||||
6.66107313738753120669e-02, /* 0x3FB10D66, 0xA0D03D51 */
|
||||
-5.83357013379057348645e-02, /* 0xBFADDE2D, 0x52DEFD9A */
|
||||
4.97687799461593236017e-02, /* 0x3FA97B4B, 0x24760DEB */
|
||||
-3.65315727442169155270e-02, /* 0xBFA2B444, 0x2C6A6C2F */
|
||||
1.62858201153657823623e-02, /* 0x3F90AD3A, 0xE322DA11 */
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
static const double
|
||||
#else
|
||||
static double
|
||||
#endif
|
||||
one = 1.0,
|
||||
big = 1.0e300;
|
||||
|
||||
#ifdef __STDC__
|
||||
double atan(double x)
|
||||
#else
|
||||
double atan(x)
|
||||
double x;
|
||||
#endif
|
||||
{
|
||||
double w, s1, s2, z;
|
||||
_INT32 ix, hx, id; /*- cc 020130 -*/
|
||||
|
||||
hx = __HI(x);
|
||||
ix = hx & 0x7fffffff;
|
||||
if (ix >= 0x44100000) { /* if |x| >= 2^66 */
|
||||
if (ix > 0x7ff00000 || (ix == 0x7ff00000 && (__LO(x) != 0)))
|
||||
return x + x; /* NaN */
|
||||
if (hx > 0)
|
||||
return atanhi[3] + atanlo[3];
|
||||
else
|
||||
return -atanhi[3] - atanlo[3];
|
||||
}
|
||||
if (ix < 0x3fdc0000) { /* |x| < 0.4375 */
|
||||
if (ix < 0x3e200000) { /* |x| < 2^-29 */
|
||||
if (big + x > one)
|
||||
return x; /* raise inexact */
|
||||
}
|
||||
id = -1;
|
||||
} else {
|
||||
x = fabs(x);
|
||||
if (ix < 0x3ff30000) { /* |x| < 1.1875 */
|
||||
if (ix < 0x3fe60000) { /* 7/16 <=|x|<11/16 */
|
||||
id = 0;
|
||||
x = (2.0 * x - one) / (2.0 + x);
|
||||
} else { /* 11/16<=|x|< 19/16 */
|
||||
id = 1;
|
||||
x = (x - one) / (x + one);
|
||||
}
|
||||
} else {
|
||||
if (ix < 0x40038000) { /* |x| < 2.4375 */
|
||||
id = 2;
|
||||
x = (x - 1.5) / (one + 1.5 * x);
|
||||
} else { /* 2.4375 <= |x| < 2^66 */
|
||||
id = 3;
|
||||
x = -1.0 / x;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* end of argument reduction */
|
||||
z = x * x;
|
||||
w = z * z;
|
||||
/* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
|
||||
s1 = z * (aT[0] + w * (aT[2] + w * (aT[4] + w * (aT[6] + w * (aT[8] + w * aT[10])))));
|
||||
s2 = w * (aT[1] + w * (aT[3] + w * (aT[5] + w * (aT[7] + w * aT[9]))));
|
||||
if (id < 0)
|
||||
return x - x * (s1 + s2);
|
||||
else {
|
||||
z = atanhi[id] - ((x * (s1 + s2) - atanlo[id]) - x);
|
||||
return (hx < 0) ? -z : z;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/* @(#)s_copysign.c 1.2 95/01/04 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* copysign(double x, double y)
|
||||
* copysign(x,y) returns a value with the magnitude of x and
|
||||
* with the sign bit of y.
|
||||
*/
|
||||
|
||||
#include "fdlibm.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
double copysign(double x, double y)
|
||||
#else
|
||||
double __copysign(x, y)
|
||||
double x, y;
|
||||
#endif
|
||||
{
|
||||
__HI(x) = (__HI(x) & 0x7fffffff) | (__HI(y) & 0x80000000);
|
||||
return x;
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
/* @(#)s_cos.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
/* cos(x)
|
||||
* Return cosine function of x.
|
||||
*
|
||||
* kernel function:
|
||||
* __kernel_sin ... sine function on [-pi/4,pi/4]
|
||||
* __kernel_cos ... cosine function on [-pi/4,pi/4]
|
||||
* __ieee754_rem_pio2 ... argument reduction routine
|
||||
*
|
||||
* Method.
|
||||
* Let S,C and T denote the sin, cos and tan respectively on
|
||||
* [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
|
||||
* in [-pi/4 , +pi/4], and let n = k mod 4.
|
||||
* We have
|
||||
*
|
||||
* n sin(x) cos(x) tan(x)
|
||||
* ----------------------------------------------------------
|
||||
* 0 S C T
|
||||
* 1 C -S -1/T
|
||||
* 2 -S -C T
|
||||
* 3 -C S -1/T
|
||||
* ----------------------------------------------------------
|
||||
*
|
||||
* Special cases:
|
||||
* Let trig be any of sin, cos, or tan.
|
||||
* trig(+-INF) is NaN, with signals;
|
||||
* trig(NaN) is that NaN;
|
||||
*
|
||||
* Accuracy:
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
#include "fdlibm.h"
|
||||
#ifdef __STDC__
|
||||
double cos(double x)
|
||||
#else
|
||||
double cos(x)
|
||||
double x;
|
||||
#endif
|
||||
{
|
||||
double y[2], z = 0.0;
|
||||
int n, ix;
|
||||
/* High word of x. */
|
||||
ix = __HI(x);
|
||||
/* |x| ~< pi/4 */
|
||||
ix &= 0x7fffffff;
|
||||
if (ix <= 0x3fe921fb)
|
||||
return __kernel_cos(x, z);
|
||||
/* cos(Inf or NaN) is NaN */
|
||||
else if (ix >= 0x7ff00000)
|
||||
return x - x;
|
||||
/* argument reduction needed */
|
||||
else {
|
||||
n = __ieee754_rem_pio2(x, y);
|
||||
switch (n & 3) {
|
||||
case 0:
|
||||
return __kernel_cos(y[0], y[1]);
|
||||
case 1:
|
||||
return -__kernel_sin(y[0], y[1], 1);
|
||||
case 2:
|
||||
return -__kernel_cos(y[0], y[1]);
|
||||
default:
|
||||
return __kernel_sin(y[0], y[1], 1);
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue