diff --git a/lib/asm/non_matchings/unknown_0CA530/sqrtf.s b/lib/asm/non_matchings/unknown_0CA530/sqrtf.s deleted file mode 100644 index 80960e72..00000000 --- a/lib/asm/non_matchings/unknown_0CA530/sqrtf.s +++ /dev/null @@ -1,7 +0,0 @@ -glabel sqrtf -/* 0CA6D0 800C9AD0 03E00008 */ jr $ra -/* 0CA6D4 800C9AD4 46006004 */ sqrt.s $f0, $f12 - -/* 0CA6D8 800C9AD8 00000000 */ nop -/* 0CA6DC 800C9ADC 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0D3020/_Genld.s b/lib/asm/non_matchings/unknown_0D3020/_Genld.s index 0a77c890..146d6546 100644 --- a/lib/asm/non_matchings/unknown_0D3020/_Genld.s +++ b/lib/asm/non_matchings/unknown_0D3020/_Genld.s @@ -11,8 +11,8 @@ glabel _Genld /* 0D75C4 800D69C4 01C0A025 */ move $s4, $t6 /* 0D75C8 800D69C8 1E600004 */ bgtz $s3, .L800D69DC /* 0D75CC 800D69CC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D75D0 800D69D0 3C11800F */ lui $s1, %hi(D_800E98B0) # $s1, 0x800f -/* 0D75D4 800D69D4 263198B0 */ addiu $s1, %lo(D_800E98B0) # addiu $s1, $s1, -0x6750 +/* 0D75D0 800D69D0 3C11800F */ lui $s1, %hi(_Genld_0_string) # $s1, 0x800f +/* 0D75D4 800D69D4 263198B0 */ addiu $s1, %lo(_Genld_0_string) # addiu $s1, $s1, -0x6750 /* 0D75D8 800D69D8 24130001 */ li $s3, 1 .L800D69DC: /* 0D75DC 800D69DC 24020066 */ li $v0, 102 diff --git a/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s b/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s index 5d88caa2..fc92c6fa 100644 --- a/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s +++ b/lib/asm/non_matchings/unknown_0D3020/_Ldtob.s @@ -91,12 +91,12 @@ glabel _Ldtob /* 0D7C4C 800D704C 24010002 */ li $at, 2 /* 0D7C50 800D7050 15C10004 */ bne $t6, $at, .L800D7064 /* 0D7C54 800D7054 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0D7C58 800D7058 3C05800F */ lui $a1, %hi(D_800E98A8) # $a1, 0x800f +/* 0D7C58 800D7058 3C05800F */ lui $a1, %hi(Ldtob_NaN) # $a1, 0x800f /* 0D7C5C 800D705C 10000003 */ b .L800D706C -/* 0D7C60 800D7060 24A598A8 */ addiu $a1, %lo(D_800E98A8) # addiu $a1, $a1, -0x6758 +/* 0D7C60 800D7060 24A598A8 */ addiu $a1, %lo(Ldtob_NaN) # addiu $a1, $a1, -0x6758 .L800D7064: -/* 0D7C64 800D7064 3C05800F */ lui $a1, %hi(D_800E98AC) # $a1, 0x800f -/* 0D7C68 800D7068 24A598AC */ addiu $a1, %lo(D_800E98AC) # addiu $a1, $a1, -0x6754 +/* 0D7C64 800D7064 3C05800F */ lui $a1, %hi(Ldtob_Inf) # $a1, 0x800f +/* 0D7C68 800D7068 24A598AC */ addiu $a1, %lo(Ldtob_Inf) # addiu $a1, $a1, -0x6754 .L800D706C: /* 0D7C6C 800D706C 240F0003 */ li $t7, 3 /* 0D7C70 800D7070 AF2F0014 */ sw $t7, 0x14($t9) @@ -147,8 +147,8 @@ glabel _Ldtob /* 0D7D18 800D7118 0002C823 */ negu $t9, $v0 /* 0D7D1C 800D711C 1840002C */ blez $v0, .L800D71D0 /* 0D7D20 800D7120 A7B9009A */ sh $t9, 0x9a($sp) -/* 0D7D24 800D7124 3C04800F */ lui $a0, %hi(D_800E9860) # $a0, 0x800f -/* 0D7D28 800D7128 24849860 */ addiu $a0, %lo(D_800E9860) # addiu $a0, $a0, -0x67a0 +/* 0D7D24 800D7124 3C04800F */ lui $a0, %hi(pows) # $a0, 0x800f +/* 0D7D28 800D7128 24849860 */ addiu $a0, %lo(pows) # addiu $a0, $a0, -0x67a0 .L800D712C: /* 0D7D2C 800D712C 304E0001 */ andi $t6, $v0, 1 /* 0D7D30 800D7130 11C00006 */ beqz $t6, .L800D714C @@ -179,8 +179,8 @@ glabel _Ldtob /* 0D7D8C 800D718C A7B8009A */ sh $t8, 0x9a($sp) /* 0D7D90 800D7190 19C0000E */ blez $t6, .L800D71CC /* 0D7D94 800D7194 01E01025 */ move $v0, $t7 -/* 0D7D98 800D7198 3C04800F */ lui $a0, %hi(D_800E9860) # $a0, 0x800f -/* 0D7D9C 800D719C 24849860 */ addiu $a0, %lo(D_800E9860) # addiu $a0, $a0, -0x67a0 +/* 0D7D98 800D7198 3C04800F */ lui $a0, %hi(pows) # $a0, 0x800f +/* 0D7D9C 800D719C 24849860 */ addiu $a0, %lo(pows) # addiu $a0, $a0, -0x67a0 .L800D71A0: /* 0D7DA0 800D71A0 304F0001 */ andi $t7, $v0, 1 /* 0D7DA4 800D71A4 11E00006 */ beqz $t7, .L800D71C0 @@ -229,8 +229,8 @@ glabel _Ldtob /* 0D7E34 800D7234 1A800008 */ blez $s4, .L800D7258 /* 0D7E38 800D7238 00000000 */ nop /* 0D7E3C 800D723C 44915000 */ mtc1 $s1, $f10 -/* 0D7E40 800D7240 3C01800F */ lui $at, %hi(D_800E98B8) # $at, 0x800f -/* 0D7E44 800D7244 D42898B8 */ ldc1 $f8, %lo(D_800E98B8)($at) +/* 0D7E40 800D7240 3C01800F */ lui $at, %hi(_Ldtob_1e8) # $at, 0x800f +/* 0D7E44 800D7244 D42898B8 */ ldc1 $f8, %lo(_Ldtob_1e8)($at) /* 0D7E48 800D7248 46805121 */ cvt.d.w $f4, $f10 /* 0D7E4C 800D724C 4624A181 */ sub.d $f6, $f20, $f4 /* 0D7E50 800D7250 46283502 */ mul.d $f20, $f6, $f8 diff --git a/lib/asm/non_matchings/unknown_0D3020/_Litob.s b/lib/asm/non_matchings/unknown_0D3020/_Litob.s index 481c9b96..d0c575f0 100644 --- a/lib/asm/non_matchings/unknown_0D3020/_Litob.s +++ b/lib/asm/non_matchings/unknown_0D3020/_Litob.s @@ -10,12 +10,12 @@ glabel _Litob /* 0D7320 800D6720 AFB0001C */ sw $s0, 0x1c($sp) /* 0D7324 800D6724 14620004 */ bne $v1, $v0, .L800D6738 /* 0D7328 800D6728 AFA50094 */ sw $a1, 0x94($sp) -/* 0D732C 800D672C 3C13800E */ lui $s3, %hi(D_800E4934) # $s3, 0x800e +/* 0D732C 800D672C 3C13800E */ lui $s3, %hi(udigs) # $s3, 0x800e /* 0D7330 800D6730 10000003 */ b .L800D6740 -/* 0D7334 800D6734 26734934 */ addiu $s3, %lo(D_800E4934) # addiu $s3, $s3, 0x4934 +/* 0D7334 800D6734 26734934 */ addiu $s3, %lo(udigs) # addiu $s3, $s3, 0x4934 .L800D6738: -/* 0D7338 800D6738 3C13800E */ lui $s3, %hi(D_800E4920) # $s3, 0x800e -/* 0D733C 800D673C 26734920 */ addiu $s3, %lo(D_800E4920) # addiu $s3, $s3, 0x4920 +/* 0D7338 800D6738 3C13800E */ lui $s3, %hi(ldigs) # $s3, 0x800e +/* 0D733C 800D673C 26734920 */ addiu $s3, %lo(ldigs) # addiu $s3, $s3, 0x4920 .L800D6740: /* 0D7340 800D6740 2401006F */ li $at, 111 /* 0D7344 800D6744 14410003 */ bne $v0, $at, .L800D6754 diff --git a/lib/asm/non_matchings/unknown_0D3020/cosf.s b/lib/asm/non_matchings/unknown_0D3020/cosf.s index 0222e3d0..8c999e23 100644 --- a/lib/asm/non_matchings/unknown_0D3020/cosf.s +++ b/lib/asm/non_matchings/unknown_0D3020/cosf.s @@ -13,14 +13,14 @@ glabel cosf /* 0D56DC 800D4ADC 44819800 */ mtc1 $at, $f19 /* 0D56E0 800D4AE0 4606203C */ c.lt.s $f4, $f6 /* 0D56E4 800D4AE4 C7A00000 */ lwc1 $f0, ($sp) -/* 0D56E8 800D4AE8 3C01800F */ lui $at, %hi(D_800E97E8) # $at, 0x800f +/* 0D56E8 800D4AE8 3C01800F */ lui $at, %hi(rpi_cosf) # $at, 0x800f /* 0D56EC 800D4AEC 45020004 */ bc1fl .L800D4B00 /* 0D56F0 800D4AF0 46000007 */ neg.s $f0, $f0 /* 0D56F4 800D4AF4 10000002 */ b .L800D4B00 /* 0D56F8 800D4AF8 46003006 */ mov.s $f0, $f6 /* 0D56FC 800D4AFC 46000007 */ neg.s $f0, $f0 .L800D4B00: -/* 0D5700 800D4B00 D42897E8 */ ldc1 $f8, %lo(D_800E97E8)($at) +/* 0D5700 800D4B00 D42897E8 */ ldc1 $f8, %lo(rpi_cosf)($at) /* 0D5704 800D4B04 46000321 */ cvt.d.s $f12, $f0 /* 0D5708 800D4B08 44809000 */ mtc1 $zero, $f18 /* 0D570C 800D4B0C 46286282 */ mul.d $f10, $f12, $f8 @@ -43,13 +43,13 @@ glabel cosf /* 0D574C 800D4B4C 00000000 */ nop /* 0D5750 800D4B50 44823000 */ mtc1 $v0, $f6 .L800D4B54: -/* 0D5754 800D4B54 3C01800F */ lui $at, %hi(D_800E97F0) # $at, 0x800f -/* 0D5758 800D4B58 D42A97F0 */ ldc1 $f10, %lo(D_800E97F0)($at) +/* 0D5754 800D4B54 3C01800F */ lui $at, %hi(pihi_cosf) # $at, 0x800f +/* 0D5758 800D4B58 D42A97F0 */ ldc1 $f10, %lo(pihi_cosf)($at) /* 0D575C 800D4B5C 46803221 */ cvt.d.w $f8, $f6 -/* 0D5760 800D4B60 3C01800F */ lui $at, %hi(D_800E97F8) # $at, 0x800f -/* 0D5764 800D4B64 D42697F8 */ ldc1 $f6, %lo(D_800E97F8)($at) -/* 0D5768 800D4B68 3C03800F */ lui $v1, %hi(D_800E97C0) # $v1, 0x800f -/* 0D576C 800D4B6C 246397C0 */ addiu $v1, %lo(D_800E97C0) # addiu $v1, $v1, -0x6840 +/* 0D5760 800D4B60 3C01800F */ lui $at, %hi(pilo_cosf) # $at, 0x800f +/* 0D5764 800D4B64 D42697F8 */ ldc1 $f6, %lo(pilo_cosf)($at) +/* 0D5768 800D4B68 3C03800F */ lui $v1, %hi(P_cosf) # $v1, 0x800f +/* 0D576C 800D4B6C 246397C0 */ addiu $v1, %lo(P_cosf) # addiu $v1, $v1, -0x6840 /* 0D5770 800D4B70 46324001 */ sub.d $f0, $f8, $f18 /* 0D5774 800D4B74 30480001 */ andi $t0, $v0, 1 /* 0D5778 800D4B78 462A0102 */ mul.d $f4, $f0, $f10 @@ -87,15 +87,15 @@ glabel cosf /* 0D57F0 800D4BF0 460A5032 */ c.eq.s $f10, $f10 .L800D4BF4: -/* 0D57F4 800D4BF4 3C01800F */ lui $at, %hi(D_800E9800) # $at, 0x800f +/* 0D57F4 800D4BF4 3C01800F */ lui $at, %hi(zero_cosf) # $at, 0x800f /* 0D57F8 800D4BF8 45010004 */ bc1t .L800D4C0C /* 0D57FC 800D4BFC 00000000 */ nop -/* 0D5800 800D4C00 3C01800F */ lui $at, %hi(D_800E98C0) # $at, 0x800f +/* 0D5800 800D4C00 3C01800F */ lui $at, %hi(__libm_qnan_f) # $at, 0x800f /* 0D5804 800D4C04 03E00008 */ jr $ra -/* 0D5808 800D4C08 C42098C0 */ lwc1 $f0, %lo(D_800E98C0)($at) +/* 0D5808 800D4C08 C42098C0 */ lwc1 $f0, %lo(__libm_qnan_f)($at) .L800D4C0C: -/* 0D580C 800D4C0C C4209800 */ lwc1 $f0, %lo(D_800E9800)($at) +/* 0D580C 800D4C0C C4209800 */ lwc1 $f0, %lo(zero_cosf)($at) /* 0D5810 800D4C10 03E00008 */ jr $ra /* 0D5814 800D4C14 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/func_800D2470.s b/lib/asm/non_matchings/unknown_0D3020/func_800D2470.s deleted file mode 100644 index 278ce499..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/func_800D2470.s +++ /dev/null @@ -1,6 +0,0 @@ -glabel __osGetActiveQueue -/* 0D3070 800D2470 3C02800E */ lui $v0, %hi(__osActiveQueue) # $v0, 0x800e -/* 0D3074 800D2474 03E00008 */ jr $ra -/* 0D3078 800D2478 8C42488C */ lw $v0, %lo(__osActiveQueue)($v0) - -/* 0D307C 800D247C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/sinf.s b/lib/asm/non_matchings/unknown_0D3020/sinf.s index b7750dbe..1e76b1fa 100644 --- a/lib/asm/non_matchings/unknown_0D3020/sinf.s +++ b/lib/asm/non_matchings/unknown_0D3020/sinf.s @@ -11,8 +11,8 @@ glabel sinf /* 0D5844 800D4C44 14200014 */ bnez $at, .L800D4C98 /* 0D5848 800D4C48 460020A1 */ cvt.d.s $f2, $f4 /* 0D584C 800D4C4C 46221302 */ mul.d $f12, $f2, $f2 -/* 0D5850 800D4C50 3C03800F */ lui $v1, %hi(D_800E9810) # $v1, 0x800f -/* 0D5854 800D4C54 24639810 */ addiu $v1, %lo(D_800E9810) # addiu $v1, $v1, -0x67f0 +/* 0D5850 800D4C50 3C03800F */ lui $v1, %hi(P_sinf) # $v1, 0x800f +/* 0D5854 800D4C54 24639810 */ addiu $v1, %lo(P_sinf) # addiu $v1, $v1, -0x67f0 /* 0D5858 800D4C58 D4660020 */ ldc1 $f6, 0x20($v1) /* 0D585C 800D4C5C D46A0018 */ ldc1 $f10, 0x18($v1) /* 0D5860 800D4C60 D4640010 */ ldc1 $f4, 0x10($v1) @@ -39,8 +39,8 @@ glabel sinf /* 0D58A4 800D4CA4 10200044 */ beqz $at, .L800D4DB8 /* 0D58A8 800D4CA8 C7A40000 */ lwc1 $f4, ($sp) /* 0D58AC 800D4CAC C7A60000 */ lwc1 $f6, ($sp) -/* 0D58B0 800D4CB0 3C01800F */ lui $at, %hi(D_800E9838) # $at, 0x800f -/* 0D58B4 800D4CB4 D42A9838 */ ldc1 $f10, %lo(D_800E9838)($at) +/* 0D58B0 800D4CB0 3C01800F */ lui $at, %hi(rpi_sinf) # $at, 0x800f +/* 0D58B4 800D4CB4 D42A9838 */ ldc1 $f10, %lo(rpi_sinf)($at) /* 0D58B8 800D4CB8 460030A1 */ cvt.d.s $f2, $f6 /* 0D58BC 800D4CBC 44804800 */ mtc1 $zero, $f9 /* 0D58C0 800D4CC0 462A1002 */ mul.d $f0, $f2, $f10 @@ -69,13 +69,13 @@ glabel sinf /* 0D5918 800D4D18 00000000 */ nop /* 0D591C 800D4D1C 44828000 */ mtc1 $v0, $f16 .L800D4D20: -/* 0D5920 800D4D20 3C01800F */ lui $at, %hi(D_800E9840) # $at, 0x800f -/* 0D5924 800D4D24 D4329840 */ ldc1 $f18, %lo(D_800E9840)($at) +/* 0D5920 800D4D20 3C01800F */ lui $at, %hi(pihi_sinf) # $at, 0x800f +/* 0D5924 800D4D24 D4329840 */ ldc1 $f18, %lo(pihi_sinf)($at) /* 0D5928 800D4D28 46808021 */ cvt.d.w $f0, $f16 -/* 0D592C 800D4D2C 3C01800F */ lui $at, %hi(D_800E9848) # $at, 0x800f -/* 0D5930 800D4D30 D4269848 */ ldc1 $f6, %lo(D_800E9848)($at) -/* 0D5934 800D4D34 3C03800F */ lui $v1, %hi(D_800E9810) # $v1, 0x800f -/* 0D5938 800D4D38 24639810 */ addiu $v1, %lo(D_800E9810) # addiu $v1, $v1, -0x67f0 +/* 0D592C 800D4D2C 3C01800F */ lui $at, %hi(pilo_sinf) # $at, 0x800f +/* 0D5930 800D4D30 D4269848 */ ldc1 $f6, %lo(pilo_sinf)($at) +/* 0D5934 800D4D34 3C03800F */ lui $v1, %hi(P_sinf) # $v1, 0x800f +/* 0D5938 800D4D38 24639810 */ addiu $v1, %lo(P_sinf) # addiu $v1, $v1, -0x67f0 /* 0D593C 800D4D3C 46320102 */ mul.d $f4, $f0, $f18 /* 0D5940 800D4D40 D4680020 */ ldc1 $f8, 0x20($v1) /* 0D5944 800D4D44 D4720018 */ ldc1 $f18, 0x18($v1) @@ -112,15 +112,15 @@ glabel sinf .L800D4DB8: /* 0D59B8 800D4DB8 46042032 */ c.eq.s $f4, $f4 -/* 0D59BC 800D4DBC 3C01800F */ lui $at, %hi(D_800E9850) # $at, 0x800f +/* 0D59BC 800D4DBC 3C01800F */ lui $at, %hi(zero_sinf) # $at, 0x800f /* 0D59C0 800D4DC0 45010004 */ bc1t .L800D4DD4 /* 0D59C4 800D4DC4 00000000 */ nop -/* 0D59C8 800D4DC8 3C01800F */ lui $at, %hi(D_800E98C0) # $at, 0x800f +/* 0D59C8 800D4DC8 3C01800F */ lui $at, %hi(__libm_qnan_f) # $at, 0x800f /* 0D59CC 800D4DCC 03E00008 */ jr $ra -/* 0D59D0 800D4DD0 C42098C0 */ lwc1 $f0, %lo(D_800E98C0)($at) +/* 0D59D0 800D4DD0 C42098C0 */ lwc1 $f0, %lo(__libm_qnan_f)($at) .L800D4DD4: -/* 0D59D4 800D4DD4 C4209850 */ lwc1 $f0, %lo(D_800E9850)($at) +/* 0D59D4 800D4DD4 C4209850 */ lwc1 $f0, %lo(zero_sinf)($at) /* 0D59D8 800D4DD8 03E00008 */ jr $ra /* 0D59DC 800D4DDC 00000000 */ nop diff --git a/lib/asm/sqrtf.s b/lib/asm/sqrtf.s new file mode 100644 index 00000000..d652ce16 --- /dev/null +++ b/lib/asm/sqrtf.s @@ -0,0 +1,16 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800C9AD0 */ + +.include "macros.inc" + +.set noat # allow manual use of $at +.set noreorder # dont insert nops after branches +.set gp=64 # 64-bit instructions are used + +glabel sqrtf +/* 0CA6D0 800C9AD0 03E00008 */ jr $ra +/* 0CA6D4 800C9AD4 46006004 */ sqrt.s $f0, $f12 + +/* 0CA6D8 800C9AD8 00000000 */ nop +/* 0CA6DC 800C9ADC 00000000 */ nop + diff --git a/lib/src/gu/unknown_0D56B0.c b/lib/src/gu/cosf.c similarity index 77% rename from lib/src/gu/unknown_0D56B0.c rename to lib/src/gu/cosf.c index ed2687e8..2ee1d4d2 100644 --- a/lib/src/gu/unknown_0D56B0.c +++ b/lib/src/gu/cosf.c @@ -5,4 +5,3 @@ #include "macros.h" GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/cosf.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") diff --git a/lib/src/gu/guint.h b/lib/src/gu/guint.h new file mode 100644 index 00000000..c9c1614b --- /dev/null +++ b/lib/src/gu/guint.h @@ -0,0 +1,42 @@ +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ +/* +#include "mbi.h" +#include "gu.h" +*/ +typedef union +{ + struct + { + unsigned int hi; + unsigned int lo; + } word; + + double d; +} du; + +typedef union +{ + unsigned int i; + float f; +} fu; + +#ifndef __GL_GL_H__ + +//typedef float Matrix[4][4]; + +#endif + +#define ROUND(d) (int)(((d) >= 0.0) ? ((d) + 0.5) : ((d) - 0.5)) +#define ABS(d) ((d) > 0) ? (d) : -(d) + +//extern float __libm_qnan_f; diff --git a/lib/src/gu/libm_vals.s b/lib/src/gu/libm_vals.s new file mode 100644 index 00000000..b88ad985 --- /dev/null +++ b/lib/src/gu/libm_vals.s @@ -0,0 +1,5 @@ + .rdata + .align 4 + .globl __libm_qnan_f +__libm_qnan_f: + .word 0x7F810000 diff --git a/lib/src/gu/sinf.c b/lib/src/gu/sinf.c new file mode 100644 index 00000000..b42bce68 --- /dev/null +++ b/lib/src/gu/sinf.c @@ -0,0 +1,7 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D4C20 */ + +#include "types.h" +#include "macros.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") diff --git a/lib/src/gu/sqrtf.c b/lib/src/gu/sqrtf.c deleted file mode 100644 index 93e98c45..00000000 --- a/lib/src/gu/sqrtf.c +++ /dev/null @@ -1,8 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800C9AD0 */ - -#include "types.h" -#include "macros.h" - -//I don't believe it's possible to decomp this one -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA530/sqrtf.s") diff --git a/lib/src/libc/ldiv.c b/lib/src/libc/ldiv.c index e0817018..395591ee 100644 --- a/lib/src/libc/ldiv.c +++ b/lib/src/libc/ldiv.c @@ -2,6 +2,39 @@ /* RAM_POS: 0x800D7470 */ #include "macros.h" +#include +#ifdef NON_MATCHING +//This needs to be compiled with mips3, which isn't yet supported +ldiv_t ldiv(long num, long denom) +{ + ldiv_t ret; + ret.quot = num / denom; + ret.rem = num - denom * ret.quot; + if (ret.quot < 0 && ret.rem > 0) + { + ret.quot++; + ret.rem -= denom; + } + + return ret; +} + +lldiv_t lldiv(long long num, long long denom) +{ + lldiv_t ret; + + ret.quot = num / denom; + ret.rem = num - denom * ret.quot; + if (ret.quot < 0 && ret.rem > 0) + { + ret.quot++; + ret.rem -= denom; + } + + return ret; +} +#else GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/lldiv.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/ldiv.s") +#endif diff --git a/lib/src/libc/llcvt.c b/lib/src/libc/llcvt.c index 2564a703..47138066 100644 --- a/lib/src/libc/llcvt.c +++ b/lib/src/libc/llcvt.c @@ -1,17 +1,8 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C9B30 */ -#if 1 -#include "types.h" -#include "macros.h" - -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__d_to_ll.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__f_to_ll.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__ll_to_f.s") - -#else +#ifdef NON_MATCHING //This needs to be compiled with mips3, which isn't yet supported - long long __d_to_ll(double d) { return d; } @@ -36,4 +27,11 @@ double __ull_to_d(unsigned long long u) { float __ull_to_f(unsigned long long u) { return u; } +#else +#include "types.h" +#include "macros.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__d_to_ll.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__f_to_ll.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA730/__ll_to_f.s") #endif diff --git a/lib/src/os/piacs.c b/lib/src/os/piacs.c index a8d65b15..b28bcef3 100644 --- a/lib/src/os/piacs.c +++ b/lib/src/os/piacs.c @@ -29,83 +29,75 @@ void __osPiRelAccess(void) { /**********************************************************************/ // Please move these later! - +#include "lib/src/gu/guint.h" // Used with cosf -const int D_800E97C0[5][2] = { - { 0x3FF00000, 0x00000000 }, - { 0xBFC55554, 0xBC83656D }, - { 0x3F8110ED, 0x3804C2A0 }, - { 0xBF29F6FF, 0xEEA56814 }, - { 0x3EC5DBDF, 0x0E314BFE } +/* coefficients for polynomial approximation of cos on +/- pi/2 */ + +const du P_cosf[] = +{ +{0x3ff00000, 0x00000000}, +{0xbfc55554, 0xbc83656d}, +{0x3f8110ed, 0x3804c2a0}, +{0xbf29f6ff, 0xeea56814}, +{0x3ec5dbdf, 0x0e314bfe}, }; -const int D_800E97E8[2] = { - 0x3FD45F30, 0x6DC9C883 -}; -const int D_800E97F0[2] = { - 0x400921FB, 0x50000000 -}; -const int D_800E97F8[2] = { - 0x3E6110B4, 0x611A6263 -}; -const int D_800E9800[1] = { - 0x00000000 -}; +const du rpi_cosf = +{0x3fd45f30, 0x6dc9c883}; + +const du pihi_cosf = +{0x400921fb, 0x50000000}; + +const du pilo_cosf = +{0x3e6110b4, 0x611a6263}; + +const fu zero_cosf = {0x00000000}; const int COSF_FILE_PADDING[3] = { 0 }; // Used with sinf +/* coefficients for polynomial approximation of sin on +/- pi/2 */ -const int D_800E9810[5][2] = { - { 0x3FF00000, 0x00000000 }, - { 0xBFC55554, 0xBC83656D }, - { 0x3F8110ED, 0x3804C2A0 }, - { 0xBF29F6FF, 0xEEA56814 }, - { 0x3EC5DBDF, 0x0E314BFE } +const du P_sinf[] = +{ +{0x3ff00000, 0x00000000}, +{0xbfc55554, 0xbc83656d}, +{0x3f8110ed, 0x3804c2a0}, +{0xbf29f6ff, 0xeea56814}, +{0x3ec5dbdf, 0x0e314bfe}, }; -const int D_800E9838[2] = { - 0x3FD45F30, 0x6DC9C883 -}; +const du rpi_sinf = +{0x3fd45f30, 0x6dc9c883}; -const int D_800E9840[2] = { - 0x400921FB, 0x50000000 -}; +const du pihi_sinf = +{0x400921fb, 0x50000000}; -const int D_800E9848[2] = { - 0x3E6110B4, 0x611A6263 -}; +const du pilo_sinf = +{0x3e6110b4, 0x611a6263}; -const int D_800E9850[1] = { - 0x00000000 -}; +const fu zero_sinf = {0x00000000}; const int SINF_FILE_PADDING[3] = { 0 }; // Used with _Litob +char ldigs[] = "0123456789abcdef"; // lowercase hex digits +char udigs[] = "0123456789ABCDEF"; // uppercase hex digits -char D_800E4920[20] = "0123456789abcdef"; // lowercase hex digits -char D_800E4934[20] = "0123456789ABCDEF"; // uppercase hex digits +// Powers for _Ldtob +const double pows[] = {10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L, 10e127L, 10e255L}; -// Powers -const double D_800E9860[] = { - 10e0L, 10e1L, 10e3L, 10e7L, - 10e15L, 10e31L, 10e63L, 10e127L, - 10e255L -}; +const char Ldtob_NaN[] = "NaN"; +const char Ldtob_Inf[] = "Inf"; -const char D_800E98A8[] = "NaN"; -const char D_800E98AC[] = "Inf"; +//_Genld +const char _Genld_0_string[] = "0"; -const int D_800E98B0[2] = { - 0x30000000, 0x00000000 -}; +//_Ldtob +const double _Ldtob_1e8[] = {1.0e8}; -const int D_800E98B8[2] = { - 0x4197D784, 0x00000000 -}; - -const int D_800E98C0[2] = { +//sinf and cosf - supposed to be defined by libm_vals.s +const int __libm_qnan_f[] = { 0x7F810000, 0x00000000 };