sm64/lib/asm/bzero.s

103 lines
2.2 KiB
ArmAsm
Raw Normal View History

2021-07-12 23:17:54 -04:00
.set noreorder // don't insert nops after branches
2019-08-25 00:46:40 -04:00
2021-07-12 23:17:54 -04:00
#include "macros.inc"
2019-08-25 00:46:40 -04:00
2021-07-12 23:17:54 -04:00
// this file is probably handwritten
2019-08-25 00:46:40 -04:00
2023-08-17 08:56:02 -04:00
//TODO There seem to be patterns in these iQue diffs. Can we figure out what's causing them? Could this have been written in C? See also bcopy.s.
2019-08-25 00:46:40 -04:00
.section .text, "ax"
glabel bzero
2023-08-17 08:56:02 -04:00
#ifdef VERSION_CN
negu $v1, $a0
blt $a1, 0xc, .L80303790
nop
andi $v1, $v1, 3
beqz $v1, .L80303734
subu $a1, $a1, $v1
swl $zero, ($a0)
addu $a0, $a0, $v1
.L80303734:
and $a3, $a1, -32
beqz $a3, .L80303770
subu $a1, $a1, $a3
addu $a3, $a3, $a0
.L80303748:
sw $zero, ($a0)
sw $zero, 4($a0)
sw $zero, 8($a0)
sw $zero, 0xc($a0)
addiu $a0, $a0, 0x20
sw $zero, -0x10($a0)
sw $zero, -0xc($a0)
sw $zero, -8($a0)
bne $a0, $a3, .L80303748
sw $zero, -4($a0)
.L80303770:
and $a3, $a1, -4
beqz $a3, .L80303790
subu $a1, $a1, $a3
addu $a3, $a3, $a0
.L80303784:
addiu $a0, $a0, 4
bne $a0, $a3, .L80303784
sw $zero, -4($a0)
.L80303790:
blez $a1, .L803037A8
nop
addu $a1, $a1, $a0
.L8030379C:
addiu $a0, $a0, 1
bne $a0, $a1, .L8030379C
sb $zero, -1($a0)
.L803037A8:
jr $ra
nop
#else
2019-08-25 00:46:40 -04:00
blt $a1, 0xc, .L803236BC
negu $v1, $a0
andi $v1, $v1, 3
beqz $v1, .L80323660
subu $a1, $a1, $v1
swl $zero, ($a0)
addu $a0, $a0, $v1
.L80323660:
and $a3, $a1, -32
beqz $a3, .L8032369C
subu $a1, $a1, $a3
addu $a3, $a3, $a0
.L80323674:
addiu $a0, $a0, 0x20
sw $zero, -0x20($a0)
sw $zero, -0x1c($a0)
sw $zero, -0x18($a0)
sw $zero, -0x14($a0)
sw $zero, -0x10($a0)
sw $zero, -0xc($a0)
sw $zero, -8($a0)
bne $a0, $a3, .L80323674
sw $zero, -4($a0)
.L8032369C:
and $a3, $a1, -4
beqz $a3, .L803236BC
subu $a1, $a1, $a3
addu $a3, $a3, $a0
.L803236B0:
addiu $a0, $a0, 4
bne $a0, $a3, .L803236B0
sw $zero, -4($a0)
.L803236BC:
blez $a1, .L803236D4
nop
addu $a1, $a1, $a0
.L803236C8:
addiu $a0, $a0, 1
bne $a0, $a1, .L803236C8
sb $zero, -1($a0)
.L803236D4:
jr $ra
2023-08-17 08:56:02 -04:00
#endif
2019-08-25 00:46:40 -04:00