papermario/ver/us/asm/os/bcopy.s
JoshDuMan bd56f6060f
Decomp Some Libultra (#588)
* Work on KMC Libultra

* libultra decomp

* fix
2021-12-29 15:14:20 -05:00

230 lines
11 KiB
ArmAsm

.include "macro.inc"
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64 # allow use of 64-bit general purpose registers
.section .text, "ax"
glabel bcopy
/* 3FA50 80064650 10C0001B */ beqz $a2, .L800646C0
/* 3FA54 80064654 00A03821 */ addu $a3, $a1, $zero
/* 3FA58 80064658 10850019 */ beq $a0, $a1, .L800646C0
/* 3FA5C 8006465C 00000000 */ nop
/* 3FA60 80064660 00A4082A */ slt $at, $a1, $a0
/* 3FA64 80064664 14200007 */ bnez $at, .L80064684
/* 3FA68 80064668 00000000 */ nop
/* 3FA6C 8006466C 00861020 */ add $v0, $a0, $a2
/* 3FA70 80064670 00A2082A */ slt $at, $a1, $v0
/* 3FA74 80064674 10200003 */ beqz $at, .L80064684
/* 3FA78 80064678 00000000 */ nop
/* 3FA7C 8006467C 1000005C */ b .L800647F0
/* 3FA80 80064680 00000000 */ nop
.L80064684:
/* 3FA84 80064684 28C10010 */ slti $at, $a2, 0x10
/* 3FA88 80064688 14200005 */ bnez $at, .L800646A0
/* 3FA8C 8006468C 00000000 */ nop
/* 3FA90 80064690 30820003 */ andi $v0, $a0, 3
/* 3FA94 80064694 30A30003 */ andi $v1, $a1, 3
/* 3FA98 80064698 1043000B */ beq $v0, $v1, .L800646C8
/* 3FA9C 8006469C 00000000 */ nop
.L800646A0:
/* 3FAA0 800646A0 10C00007 */ beqz $a2, .L800646C0
/* 3FAA4 800646A4 00000000 */ nop
/* 3FAA8 800646A8 00861821 */ addu $v1, $a0, $a2
.L800646AC:
/* 3FAAC 800646AC 80820000 */ lb $v0, ($a0)
/* 3FAB0 800646B0 24840001 */ addiu $a0, $a0, 1
/* 3FAB4 800646B4 A0A20000 */ sb $v0, ($a1)
/* 3FAB8 800646B8 1483FFFC */ bne $a0, $v1, .L800646AC
/* 3FABC 800646BC 24A50001 */ addiu $a1, $a1, 1
.L800646C0:
/* 3FAC0 800646C0 03E00008 */ jr $ra
/* 3FAC4 800646C4 00E01021 */ addu $v0, $a3, $zero
.L800646C8:
/* 3FAC8 800646C8 1040001A */ beqz $v0, .L80064734
/* 3FACC 800646CC 00000000 */ nop
/* 3FAD0 800646D0 24010001 */ addiu $at, $zero, 1
/* 3FAD4 800646D4 10410010 */ beq $v0, $at, .L80064718
/* 3FAD8 800646D8 00000000 */ nop
/* 3FADC 800646DC 24010002 */ addiu $at, $zero, 2
/* 3FAE0 800646E0 10410007 */ beq $v0, $at, .L80064700
/* 3FAE4 800646E4 00000000 */ nop
/* 3FAE8 800646E8 80820000 */ lb $v0, ($a0)
/* 3FAEC 800646EC 24840001 */ addiu $a0, $a0, 1
/* 3FAF0 800646F0 A0A20000 */ sb $v0, ($a1)
/* 3FAF4 800646F4 24A50001 */ addiu $a1, $a1, 1
/* 3FAF8 800646F8 1000000E */ b .L80064734
/* 3FAFC 800646FC 24C6FFFF */ addiu $a2, $a2, -1
.L80064700:
/* 3FB00 80064700 84820000 */ lh $v0, ($a0)
/* 3FB04 80064704 24840002 */ addiu $a0, $a0, 2
/* 3FB08 80064708 A4A20000 */ sh $v0, ($a1)
/* 3FB0C 8006470C 24A50002 */ addiu $a1, $a1, 2
/* 3FB10 80064710 10000008 */ b .L80064734
/* 3FB14 80064714 24C6FFFE */ addiu $a2, $a2, -2
.L80064718:
/* 3FB18 80064718 80820000 */ lb $v0, ($a0)
/* 3FB1C 8006471C 84830001 */ lh $v1, 1($a0)
/* 3FB20 80064720 24840003 */ addiu $a0, $a0, 3
/* 3FB24 80064724 A0A20000 */ sb $v0, ($a1)
/* 3FB28 80064728 A4A30001 */ sh $v1, 1($a1)
/* 3FB2C 8006472C 24A50003 */ addiu $a1, $a1, 3
/* 3FB30 80064730 24C6FFFD */ addiu $a2, $a2, -3
.L80064734:
/* 3FB34 80064734 28C10020 */ slti $at, $a2, 0x20
/* 3FB38 80064738 14200015 */ bnez $at, .L80064790
/* 3FB3C 8006473C 00000000 */ nop
/* 3FB40 80064740 8C820000 */ lw $v0, ($a0)
/* 3FB44 80064744 8C830004 */ lw $v1, 4($a0)
/* 3FB48 80064748 8C880008 */ lw $t0, 8($a0)
/* 3FB4C 8006474C 8C89000C */ lw $t1, 0xc($a0)
/* 3FB50 80064750 8C8A0010 */ lw $t2, 0x10($a0)
/* 3FB54 80064754 8C8B0014 */ lw $t3, 0x14($a0)
/* 3FB58 80064758 8C8C0018 */ lw $t4, 0x18($a0)
/* 3FB5C 8006475C 8C8D001C */ lw $t5, 0x1c($a0)
/* 3FB60 80064760 24840020 */ addiu $a0, $a0, 0x20
/* 3FB64 80064764 ACA20000 */ sw $v0, ($a1)
/* 3FB68 80064768 ACA30004 */ sw $v1, 4($a1)
/* 3FB6C 8006476C ACA80008 */ sw $t0, 8($a1)
/* 3FB70 80064770 ACA9000C */ sw $t1, 0xc($a1)
/* 3FB74 80064774 ACAA0010 */ sw $t2, 0x10($a1)
/* 3FB78 80064778 ACAB0014 */ sw $t3, 0x14($a1)
/* 3FB7C 8006477C ACAC0018 */ sw $t4, 0x18($a1)
/* 3FB80 80064780 ACAD001C */ sw $t5, 0x1c($a1)
/* 3FB84 80064784 24A50020 */ addiu $a1, $a1, 0x20
/* 3FB88 80064788 1000FFEA */ b .L80064734
/* 3FB8C 8006478C 24C6FFE0 */ addiu $a2, $a2, -0x20
.L80064790:
/* 3FB90 80064790 28C10010 */ slti $at, $a2, 0x10
/* 3FB94 80064794 1420000D */ bnez $at, .L800647CC
/* 3FB98 80064798 00000000 */ nop
/* 3FB9C 8006479C 8C820000 */ lw $v0, ($a0)
/* 3FBA0 800647A0 8C830004 */ lw $v1, 4($a0)
/* 3FBA4 800647A4 8C880008 */ lw $t0, 8($a0)
/* 3FBA8 800647A8 8C89000C */ lw $t1, 0xc($a0)
/* 3FBAC 800647AC 24840010 */ addiu $a0, $a0, 0x10
/* 3FBB0 800647B0 ACA20000 */ sw $v0, ($a1)
/* 3FBB4 800647B4 ACA30004 */ sw $v1, 4($a1)
/* 3FBB8 800647B8 ACA80008 */ sw $t0, 8($a1)
/* 3FBBC 800647BC ACA9000C */ sw $t1, 0xc($a1)
/* 3FBC0 800647C0 24A50010 */ addiu $a1, $a1, 0x10
/* 3FBC4 800647C4 1000FFF2 */ b .L80064790
/* 3FBC8 800647C8 24C6FFF0 */ addiu $a2, $a2, -0x10
.L800647CC:
/* 3FBCC 800647CC 28C10004 */ slti $at, $a2, 4
/* 3FBD0 800647D0 1420FFB3 */ bnez $at, .L800646A0
/* 3FBD4 800647D4 00000000 */ nop
/* 3FBD8 800647D8 8C820000 */ lw $v0, ($a0)
/* 3FBDC 800647DC 24840004 */ addiu $a0, $a0, 4
/* 3FBE0 800647E0 ACA20000 */ sw $v0, ($a1)
/* 3FBE4 800647E4 24A50004 */ addiu $a1, $a1, 4
/* 3FBE8 800647E8 1000FFF8 */ b .L800647CC
/* 3FBEC 800647EC 24C6FFFC */ addiu $a2, $a2, -4
.L800647F0:
/* 3FBF0 800647F0 00862020 */ add $a0, $a0, $a2
/* 3FBF4 800647F4 00A62820 */ add $a1, $a1, $a2
/* 3FBF8 800647F8 28C10010 */ slti $at, $a2, 0x10
/* 3FBFC 800647FC 14200005 */ bnez $at, .L80064814
/* 3FC00 80064800 00000000 */ nop
/* 3FC04 80064804 30820003 */ andi $v0, $a0, 3
/* 3FC08 80064808 30A30003 */ andi $v1, $a1, 3
/* 3FC0C 8006480C 1043000D */ beq $v0, $v1, .L80064844
/* 3FC10 80064810 00000000 */ nop
.L80064814:
/* 3FC14 80064814 10C0FFAA */ beqz $a2, .L800646C0
/* 3FC18 80064818 00000000 */ nop
/* 3FC1C 8006481C 2484FFFF */ addiu $a0, $a0, -1
/* 3FC20 80064820 24A5FFFF */ addiu $a1, $a1, -1
/* 3FC24 80064824 00861823 */ subu $v1, $a0, $a2
.L80064828:
/* 3FC28 80064828 80820000 */ lb $v0, ($a0)
/* 3FC2C 8006482C 2484FFFF */ addiu $a0, $a0, -1
/* 3FC30 80064830 A0A20000 */ sb $v0, ($a1)
/* 3FC34 80064834 1483FFFC */ bne $a0, $v1, .L80064828
/* 3FC38 80064838 24A5FFFF */ addiu $a1, $a1, -1
/* 3FC3C 8006483C 03E00008 */ jr $ra
/* 3FC40 80064840 00E01021 */ addu $v0, $a3, $zero
.L80064844:
/* 3FC44 80064844 1040001A */ beqz $v0, .L800648B0
/* 3FC48 80064848 00000000 */ nop
/* 3FC4C 8006484C 24010003 */ addiu $at, $zero, 3
/* 3FC50 80064850 10410010 */ beq $v0, $at, .L80064894
/* 3FC54 80064854 00000000 */ nop
/* 3FC58 80064858 24010002 */ addiu $at, $zero, 2
/* 3FC5C 8006485C 10410007 */ beq $v0, $at, .L8006487C
/* 3FC60 80064860 00000000 */ nop
/* 3FC64 80064864 8082FFFF */ lb $v0, -1($a0)
/* 3FC68 80064868 2484FFFF */ addiu $a0, $a0, -1
/* 3FC6C 8006486C A0A2FFFF */ sb $v0, -1($a1)
/* 3FC70 80064870 24A5FFFF */ addiu $a1, $a1, -1
/* 3FC74 80064874 1000000E */ b .L800648B0
/* 3FC78 80064878 24C6FFFF */ addiu $a2, $a2, -1
.L8006487C:
/* 3FC7C 8006487C 8482FFFE */ lh $v0, -2($a0)
/* 3FC80 80064880 2484FFFE */ addiu $a0, $a0, -2
/* 3FC84 80064884 A4A2FFFE */ sh $v0, -2($a1)
/* 3FC88 80064888 24A5FFFE */ addiu $a1, $a1, -2
/* 3FC8C 8006488C 10000008 */ b .L800648B0
/* 3FC90 80064890 24C6FFFE */ addiu $a2, $a2, -2
.L80064894:
/* 3FC94 80064894 8082FFFF */ lb $v0, -1($a0)
/* 3FC98 80064898 8483FFFD */ lh $v1, -3($a0)
/* 3FC9C 8006489C 2484FFFD */ addiu $a0, $a0, -3
/* 3FCA0 800648A0 A0A2FFFF */ sb $v0, -1($a1)
/* 3FCA4 800648A4 A4A3FFFD */ sh $v1, -3($a1)
/* 3FCA8 800648A8 24A5FFFD */ addiu $a1, $a1, -3
/* 3FCAC 800648AC 24C6FFFD */ addiu $a2, $a2, -3
.L800648B0:
/* 3FCB0 800648B0 28C10020 */ slti $at, $a2, 0x20
/* 3FCB4 800648B4 14200015 */ bnez $at, .L8006490C
/* 3FCB8 800648B8 00000000 */ nop
/* 3FCBC 800648BC 8C82FFFC */ lw $v0, -4($a0)
/* 3FCC0 800648C0 8C83FFF8 */ lw $v1, -8($a0)
/* 3FCC4 800648C4 8C88FFF4 */ lw $t0, -0xc($a0)
/* 3FCC8 800648C8 8C89FFF0 */ lw $t1, -0x10($a0)
/* 3FCCC 800648CC 8C8AFFEC */ lw $t2, -0x14($a0)
/* 3FCD0 800648D0 8C8BFFE8 */ lw $t3, -0x18($a0)
/* 3FCD4 800648D4 8C8CFFE4 */ lw $t4, -0x1c($a0)
/* 3FCD8 800648D8 8C8DFFE0 */ lw $t5, -0x20($a0)
/* 3FCDC 800648DC 2484FFE0 */ addiu $a0, $a0, -0x20
/* 3FCE0 800648E0 ACA2FFFC */ sw $v0, -4($a1)
/* 3FCE4 800648E4 ACA3FFF8 */ sw $v1, -8($a1)
/* 3FCE8 800648E8 ACA8FFF4 */ sw $t0, -0xc($a1)
/* 3FCEC 800648EC ACA9FFF0 */ sw $t1, -0x10($a1)
/* 3FCF0 800648F0 ACAAFFEC */ sw $t2, -0x14($a1)
/* 3FCF4 800648F4 ACABFFE8 */ sw $t3, -0x18($a1)
/* 3FCF8 800648F8 ACACFFE4 */ sw $t4, -0x1c($a1)
/* 3FCFC 800648FC ACADFFE0 */ sw $t5, -0x20($a1)
/* 3FD00 80064900 24A5FFE0 */ addiu $a1, $a1, -0x20
/* 3FD04 80064904 1000FFEA */ b .L800648B0
/* 3FD08 80064908 24C6FFE0 */ addiu $a2, $a2, -0x20
.L8006490C:
/* 3FD0C 8006490C 28C10010 */ slti $at, $a2, 0x10
/* 3FD10 80064910 1420000D */ bnez $at, .L80064948
/* 3FD14 80064914 00000000 */ nop
/* 3FD18 80064918 8C82FFFC */ lw $v0, -4($a0)
/* 3FD1C 8006491C 8C83FFF8 */ lw $v1, -8($a0)
/* 3FD20 80064920 8C88FFF4 */ lw $t0, -0xc($a0)
/* 3FD24 80064924 8C89FFF0 */ lw $t1, -0x10($a0)
/* 3FD28 80064928 2484FFF0 */ addiu $a0, $a0, -0x10
/* 3FD2C 8006492C ACA2FFFC */ sw $v0, -4($a1)
/* 3FD30 80064930 ACA3FFF8 */ sw $v1, -8($a1)
/* 3FD34 80064934 ACA8FFF4 */ sw $t0, -0xc($a1)
/* 3FD38 80064938 ACA9FFF0 */ sw $t1, -0x10($a1)
/* 3FD3C 8006493C 24A5FFF0 */ addiu $a1, $a1, -0x10
/* 3FD40 80064940 1000FFF2 */ b .L8006490C
/* 3FD44 80064944 24C6FFF0 */ addiu $a2, $a2, -0x10
.L80064948:
/* 3FD48 80064948 28C10004 */ slti $at, $a2, 4
/* 3FD4C 8006494C 1420FFB1 */ bnez $at, .L80064814
/* 3FD50 80064950 00000000 */ nop
/* 3FD54 80064954 8C82FFFC */ lw $v0, -4($a0)
/* 3FD58 80064958 2484FFFC */ addiu $a0, $a0, -4
/* 3FD5C 8006495C ACA2FFFC */ sw $v0, -4($a1)
/* 3FD60 80064960 24A5FFFC */ addiu $a1, $a1, -4
/* 3FD64 80064964 1000FFF8 */ b .L80064948
/* 3FD68 80064968 24C6FFFC */ addiu $a2, $a2, -4
/* 3FD6C 8006496C 00000000 */ nop