sub_081564D8

This commit is contained in:
Zhengwen Jiang 2020-08-27 20:39:58 -05:00
parent 27181e9cd4
commit 3724476802
2 changed files with 181 additions and 630 deletions

View File

@ -6931,633 +6931,3 @@ _081564C0:
.align 2, 0
_081564D0: .4byte gUnk_030039A4
_081564D4: .4byte gUnk_03002EC0
thumb_func_start sub_081564D8
sub_081564D8: @ 0x081564D8
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x38
mov sl, r0
movs r0, #0
str r0, [sp, #0x20]
movs r1, #0
str r1, [sp, #0x24]
movs r2, #0
str r2, [sp, #0x28]
movs r3, #0
str r3, [sp, #0x2c]
movs r4, #0
str r4, [sp, #0x30]
mov r0, sl
ldr r4, [r0, #4]
movs r0, #1
rsbs r0, r0, #0
cmp r4, r0
bne _08156508
b _08156988
_08156508:
lsrs r0, r4, #0x1c
cmp r0, #0
bne _08156530
ldr r3, _0815652C @ =gUnk_03003674
ldr r0, [r3]
mov r1, sl
ldrh r2, [r1, #0xc]
ldr r0, [r0, #4]
lsls r1, r2, #2
adds r1, r1, r0
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
ldr r1, [r1]
adds r1, r1, r0
mov sb, r1
b _08156546
.align 2, 0
_0815652C: .4byte gUnk_03003674
_08156530:
ldr r3, _081565E4 @ =gUnk_03003674
ldr r0, [r3]
mov r1, sl
ldrh r2, [r1, #0xc]
ldr r1, [r0, #4]
lsls r0, r2, #2
adds r0, r0, r1
lsls r1, r4, #4
ldr r0, [r0]
adds r0, r0, r1
mov sb, r0
_08156546:
mov r4, sb
ldrh r0, [r4, #2]
mov r1, sl
strb r0, [r1, #0x1e]
movs r0, #0x10
ldrsh r4, [r1, r0]
str r4, [sp, #8]
movs r4, #0x12
ldrsh r1, [r1, r4]
str r1, [sp, #0xc]
mov r0, sl
ldr r1, [r0, #8]
movs r0, #0x80
lsls r0, r0, #0xa
ands r0, r1
adds r5, r1, #0
cmp r0, #0
beq _08156580
ldr r0, _081565E8 @ =gUnk_030023F4
movs r4, #0
ldrsh r1, [r0, r4]
ldr r4, [sp, #8]
subs r4, r4, r1
str r4, [sp, #8]
movs r1, #2
ldrsh r0, [r0, r1]
ldr r4, [sp, #0xc]
subs r4, r4, r0
str r4, [sp, #0xc]
_08156580:
mov r0, sb
ldrh r0, [r0, #4]
str r0, [sp, #0x10]
mov r1, sb
ldrh r1, [r1, #6]
str r1, [sp, #0x14]
movs r0, #0x20
ands r0, r5
cmp r0, #0
beq _081565EC
movs r4, #0x80
lsls r4, r4, #1
adds r0, r4, #0
ldr r1, [sp, #0x20]
orrs r1, r0
str r1, [sp, #0x20]
movs r0, #0x1f
ands r0, r5
lsls r0, r0, #9
ldr r4, [sp, #0x24]
orrs r4, r0
str r4, [sp, #0x24]
movs r0, #0x40
ands r0, r5
cmp r0, #0
beq _08156662
ldr r1, [sp, #0x10]
lsrs r0, r1, #1
ldr r4, [sp, #8]
subs r4, r4, r0
str r4, [sp, #8]
ldr r1, [sp, #0x14]
lsrs r0, r1, #1
ldr r4, [sp, #0xc]
subs r4, r4, r0
str r4, [sp, #0xc]
ldr r0, [sp, #0x10]
lsls r0, r0, #1
str r0, [sp, #0x10]
lsls r1, r1, #1
str r1, [sp, #0x14]
movs r1, #0x80
lsls r1, r1, #2
adds r0, r1, #0
ldr r4, [sp, #0x20]
orrs r4, r0
lsls r0, r4, #0x10
lsrs r0, r0, #0x10
str r0, [sp, #0x20]
b _08156662
.align 2, 0
_081565E4: .4byte gUnk_03003674
_081565E8: .4byte gUnk_030023F4
_081565EC:
movs r0, #0x80
lsls r0, r0, #4
ands r0, r5
cmp r0, #0
beq _08156608
mov r1, sb
movs r4, #0xa
ldrsh r0, [r1, r4]
ldr r1, [sp, #0x14]
subs r0, r1, r0
ldr r4, [sp, #0xc]
subs r4, r4, r0
str r4, [sp, #0xc]
b _08156614
_08156608:
mov r1, sb
movs r4, #0xa
ldrsh r0, [r1, r4]
ldr r1, [sp, #0xc]
subs r1, r1, r0
str r1, [sp, #0xc]
_08156614:
movs r0, #0x80
lsls r0, r0, #3
ands r0, r5
cmp r0, #0
beq _08156630
mov r4, sb
movs r1, #8
ldrsh r0, [r4, r1]
ldr r4, [sp, #0x10]
subs r0, r4, r0
ldr r1, [sp, #8]
subs r1, r1, r0
str r1, [sp, #8]
b _0815663C
_08156630:
mov r4, sb
movs r1, #8
ldrsh r0, [r4, r1]
ldr r4, [sp, #8]
subs r4, r4, r0
str r4, [sp, #8]
_0815663C:
lsrs r0, r5, #0xb
movs r6, #1
ands r0, r6
mov r4, sb
ldrh r1, [r4]
lsls r4, r1, #0x10
lsrs r1, r4, #0x1f
cmp r0, r1
beq _08156652
movs r0, #1
str r0, [sp, #0x2c]
_08156652:
lsrs r1, r5, #0xa
lsrs r0, r4, #0x1e
eors r0, r1
ands r0, r6
cmp r0, #0
beq _08156662
movs r1, #1
str r1, [sp, #0x30]
_08156662:
ldr r4, [sp, #0x10]
cmp r4, #0
beq _0815668A
ldr r1, [sp, #8]
adds r0, r1, r4
cmp r0, #0
bge _08156672
b _08156988
_08156672:
cmp r1, #0xf0
ble _08156678
b _08156988
_08156678:
ldr r4, [sp, #0xc]
ldr r1, [sp, #0x14]
adds r0, r4, r1
cmp r0, #0
bge _08156684
b _08156988
_08156684:
cmp r4, #0xa0
ble _0815668A
b _08156988
_0815668A:
mov r4, sl
ldrb r1, [r4, #0x1f]
lsls r1, r1, #0xc
ldr r0, [sp, #0x28]
adds r1, r0, r1
lsls r1, r1, #0x10
movs r0, #0xc0
lsls r0, r0, #1
ands r0, r5
lsls r0, r0, #3
ldr r4, [sp, #0x20]
orrs r4, r0
str r4, [sp, #0x20]
movs r0, #0xc0
lsls r0, r0, #6
ands r0, r5
lsls r0, r0, #0xe
orrs r0, r1
lsrs r0, r0, #0x10
str r0, [sp, #0x28]
ldr r0, [r3]
ldr r1, [r0, #8]
lsls r0, r2, #2
adds r0, r0, r1
ldr r0, [r0]
str r0, [sp, #0x1c]
ldr r0, _0815687C @ =gUnk_030024F0
ldrb r0, [r0]
mov r1, sl
strb r0, [r1, #0x1d]
movs r2, #0
str r2, [sp, #0x18]
mov r3, sb
ldrh r3, [r3, #2]
cmp r2, r3
blo _081566D4
b _08156834
_081566D4:
ldr r4, _08156880 @ =0x040000D4
mov r8, r4
mov r4, sp
_081566DA:
mov r1, sb
ldrh r0, [r1]
ldr r2, _08156884 @ =0x00003FFF
adds r1, r2, #0
ands r1, r0
ldr r3, [sp, #0x18]
adds r1, r1, r3
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #1
ldr r1, [sp, #0x1c]
adds r0, r1, r0
mov r2, r8
str r0, [r2]
mov r3, sp
str r3, [r2, #4]
ldr r0, _08156888 @ =0x80000003
str r0, [r2, #8]
ldr r0, [r2, #8]
ldrh r2, [r4, #2]
ldr r1, _0815688C @ =0x000001FF
adds r0, r1, #0
adds r6, r0, #0
ands r6, r2
cmp r6, #0xff
ble _08156712
ldr r3, _08156890 @ =0xFFFFFE00
adds r6, r6, r3
_08156712:
ldrh r0, [r4]
ldrb r5, [r4]
cmp r5, #0x7f
ble _0815671E
ldr r1, _08156894 @ =0xFFFFFF00
adds r5, r5, r1
_0815671E:
movs r1, #0xfe
lsls r1, r1, #8
adds r3, r1, #0
ands r3, r2
strh r3, [r4, #2]
ands r1, r0
strh r1, [r4]
movs r2, #0xc0
lsls r2, r2, #8
ands r1, r2
lsrs r1, r1, #0xc
adds r0, r3, #0
ands r0, r2
lsrs r0, r0, #0xe
orrs r1, r0
ldr r2, _08156898 @ =gUnk_08D6084C
lsls r1, r1, #1
adds r0, r2, #1
adds r0, r1, r0
ldrb r7, [r0]
adds r1, r1, r2
ldrb r1, [r1]
mov ip, r1
ldr r0, [sp, #0x2c]
ldr r1, [sp, #0x30]
orrs r0, r1
cmp r0, #0
beq _08156788
ldr r2, [sp, #0x2c]
cmp r2, #0
beq _0815676E
movs r1, #0x80
lsls r1, r1, #6
adds r0, r1, #0
adds r1, r3, #0
eors r1, r0
strh r1, [r4, #2]
ldr r2, [sp, #0x14]
subs r0, r2, r7
subs r5, r0, r5
_0815676E:
ldr r3, [sp, #0x30]
cmp r3, #0
beq _08156788
ldrh r0, [r4, #2]
movs r2, #0x80
lsls r2, r2, #5
adds r1, r2, #0
eors r0, r1
strh r0, [r4, #2]
ldr r3, [sp, #0x10]
mov r1, ip
subs r0, r3, r1
subs r6, r0, r6
_08156788:
ldr r2, [sp, #0xc]
adds r1, r2, r5
adds r0, r1, r7
cmp r0, #0
blt _08156820
cmp r1, #0xa0
bgt _08156820
ldr r3, [sp, #8]
adds r2, r3, r6
mov r3, ip
adds r0, r2, r3
cmp r0, #0
blt _08156820
cmp r2, #0xf0
bgt _08156820
movs r0, #0xff
ands r1, r0
ldrh r0, [r4]
adds r1, r1, r0
ldr r3, _0815688C @ =0x000001FF
adds r0, r3, #0
ands r2, r0
ldrh r0, [r4, #2]
adds r0, r0, r2
ldr r2, [sp, #0x20]
orrs r1, r2
strh r1, [r4]
ldr r3, [sp, #0x24]
orrs r0, r3
strh r0, [r4, #2]
ldrh r0, [r4, #4]
ldr r2, [sp, #0x28]
orrs r2, r0
strh r2, [r4, #4]
movs r3, #0x80
lsls r3, r3, #6
adds r0, r3, #0
ands r1, r0
cmp r1, #0
beq _081567E4
ldr r0, _0815689C @ =0x000003FF
adds r1, r0, #0
adds r0, r2, #0
ands r0, r1
adds r0, r2, r0
strh r0, [r4, #4]
_081567E4:
mov r1, sl
ldr r0, [r1]
ldr r2, _081568A0 @ =0xF9FF0000
adds r0, r0, r2
lsrs r0, r0, #5
ldrh r3, [r4, #4]
adds r0, r0, r3
strh r0, [r4, #4]
ldrh r0, [r1, #0x14]
movs r2, #0xf8
lsls r2, r2, #3
adds r1, r2, #0
ands r0, r1
lsrs r0, r0, #6
bl sub_08156D84
adds r1, r0, #0
ldr r0, _081568A4 @ =gUnk_03006CC4
ldr r0, [r0]
cmp r0, r1
bne _08156810
b _08156988
_08156810:
mov r3, sp
mov r0, r8
str r3, [r0]
str r1, [r0, #4]
ldr r0, _08156888 @ =0x80000003
mov r1, r8
str r0, [r1, #8]
ldr r0, [r1, #8]
_08156820:
ldr r0, [sp, #0x18]
adds r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #0x18]
mov r2, sb
ldrh r2, [r2, #2]
cmp r0, r2
bhs _08156834
b _081566DA
_08156834:
mov r3, sl
ldr r0, [r3, #4]
lsrs r0, r0, #0x1c
cmp r0, #1
beq _08156840
b _08156988
_08156840:
ldr r1, [r3, #8]
movs r0, #0x80
lsls r0, r0, #0x13
ands r0, r1
cmp r0, #0
bne _0815684E
b _08156988
_0815684E:
ldr r0, _081568A8 @ =0xFBFFFFFF
ands r1, r0
str r1, [r3, #8]
mov r4, sb
ldr r0, [r4, #0xc]
ldr r1, _081568AC @ =0x00FFFFFF
ands r1, r0
lsrs r0, r0, #0x18
str r0, [sp, #0x34]
ldr r0, _081568B0 @ =gUnk_03003674
ldr r2, [r0]
lsls r1, r1, #2
ldr r0, [r2, #0x18]
adds r0, r0, r1
mov ip, r0
ldr r0, [r0]
cmp r0, #0
blt _081568B4
movs r0, #0x20
mov r8, r0
ldr r2, [r2, #0x10]
b _081568BA
.align 2, 0
_0815687C: .4byte gUnk_030024F0
_08156880: .4byte 0x040000D4
_08156884: .4byte 0x00003FFF
_08156888: .4byte 0x80000003
_0815688C: .4byte 0x000001FF
_08156890: .4byte 0xFFFFFE00
_08156894: .4byte 0xFFFFFF00
_08156898: .4byte gUnk_08D6084C
_0815689C: .4byte 0x000003FF
_081568A0: .4byte 0xF9FF0000
_081568A4: .4byte gUnk_03006CC4
_081568A8: .4byte 0xFBFFFFFF
_081568AC: .4byte 0x00FFFFFF
_081568B0: .4byte gUnk_03003674
_081568B4:
movs r1, #0x40
mov r8, r1
ldr r2, [r2, #0x14]
_081568BA:
mov sb, r2
mov r3, r8
mov r2, ip
adds r2, #4
mov ip, r2
subs r2, #4
ldm r2!, {r0}
muls r0, r3, r0
mov r4, sb
adds r2, r4, r0
mov r0, sl
ldr r6, [r0]
movs r7, #1
ldr r1, [sp, #0x34]
cmp r7, r1
bhs _08156950
ldr r4, _08156904 @ =gUnk_03002EC0
mov sl, r4
ldr r5, _08156908 @ =gUnk_030039A4
_081568E0:
mov r1, ip
adds r1, #4
mov ip, r1
subs r1, #4
ldm r1!, {r0}
mov r4, r8
muls r4, r0, r4
adds r0, r4, #0
mov r1, sb
adds r4, r1, r0
adds r0, r2, r3
cmp r0, r4
bne _0815690C
mov r4, r8
adds r0, r3, r4
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
b _08156944
.align 2, 0
_08156904: .4byte gUnk_03002EC0
_08156908: .4byte gUnk_030039A4
_0815690C:
ldrb r1, [r5]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
add r0, sl
str r2, [r0]
ldrb r1, [r5]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
mov r1, sl
adds r1, #4
adds r0, r0, r1
str r6, [r0]
ldrb r1, [r5]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
add r0, sl
strh r3, [r0, #8]
ldrb r0, [r5]
adds r0, #1
movs r1, #0x3f
ands r0, r1
strb r0, [r5]
adds r6, r6, r3
mov r3, r8
adds r2, r4, #0
_08156944:
adds r0, r7, #1
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
ldr r0, [sp, #0x34]
cmp r7, r0
blo _081568E0
_08156950:
ldr r4, _08156998 @ =gUnk_030039A4
ldrb r1, [r4]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
ldr r1, _0815699C @ =gUnk_03002EC0
adds r0, r0, r1
str r2, [r0]
ldrb r1, [r4]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
ldr r1, _0815699C @ =gUnk_03002EC0
adds r1, #4
adds r0, r0, r1
str r6, [r0]
ldrb r1, [r4]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
ldr r2, _0815699C @ =gUnk_03002EC0
adds r0, r0, r2
strh r3, [r0, #8]
ldrb r0, [r4]
adds r0, #1
movs r1, #0x3f
ands r0, r1
strb r0, [r4]
_08156988:
add sp, #0x38
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08156998: .4byte gUnk_030039A4
_0815699C: .4byte gUnk_03002EC0

View File

@ -8,10 +8,191 @@
struct R10Struct {
u16 unk0, unk2, unk4, unk6;
s16 unk8, unkA;
u32 unkC;
};
extern const u8 gUnk_08D6084C[][2];
void sub_081564D8(struct Sprite *sl) {
volatile OamData sp00;
OamData *p;
s32 sp08[1], sp0C[1];
s32 sp10[1], sp14[1];
u8 sp18, j;
const s16 *sp1C;
u16 sp20 = 0;
u32 sp24 = 0, sp28 = 0, sp2C = 0, sp30 = 0;
u32 sp34;
const struct R10Struct *sb;
s32 r5, r6;
s32 r7, ip;
u32 r0, r1;
if (sl->unk4 != -1) {
if (!(sl->unk4 >> 28))
sb = (const void *)gUnk_03003674[1][sl->unkC] + sl->unk4 * 12;
else
sb = (const void *)gUnk_03003674[1][sl->unkC] + sl->unk4 * 16;
sl->unk1E = sb->unk2;
sp08[0] = sl->unk10;
sp0C[0] = sl->unk12;
if (sl->unk8 & 0x20000) {
sp08[0] -= gUnk_030023F4.unk0;
sp0C[0] -= gUnk_030023F4.unk2;
}
sp10[0] = sb->unk4;
sp14[0] = sb->unk6;
if (sl->unk8 & 0x20) {
sp20 |= 0x100;
sp24 |= (sl->unk8 & 0x1F) << 9;
if (sl->unk8 & 0x40) {
sp08[0] -= sb->unk4 >> 1;
sp0C[0] -= sb->unk6 >> 1;
sp10[0] <<= 1;
sp14[0] <<= 1;
sp20 |= 0x200;
}
} else {
if (sl->unk8 & 0x800)
sp0C[0] -= sp14[0] - sb->unkA;
else
sp0C[0] -= sb->unkA;
if (sl->unk8 & 0x400)
sp08[0] -= sp10[0] - sb->unk8;
else
sp08[0] -= sb->unk8;
if (((sl->unk8 >> 11) & 1) != (sb->unk0 >> 15))
sp2C = 1;
r1 = sl->unk8;
r1 >>= 10;
r0 = sb->unk0 >> 14;
if ((r0 ^ r1) & 1)
sp30 = 1;
}
if (!sp10[0]
|| (sp08[0] + sp10[0] >= 0 && sp08[0] <= 240 && sp0C[0] + sp14[0] >= 0 && sp0C[0] <= 160)) {
u32 r1 = (sp28 + (sl->unk1F << 12)) << 16;
sp20 |= (sl->unk8 & 0x180) * 8;
sp28 = (((sl->unk8 & 0x3000) << 14) | r1) >> 16;
sp1C = gUnk_03003674[2][sl->unkC];
sl->unk1D = gUnk_030024F0;
for (sp18 = 0; sp18 < sb->unk2; ++sp18) {
u32 r0;
DmaCopy16(3, &sp1C[3 * ((sb->unk0 & 0x3FFF) + sp18)], &sp00, 6); // excluding affine params
p = (OamData *)&sp00;
r6 = p->all.attr1 & 0x1FF;
if (r6 >= 0x100)
r6 -= 0x200;
r5 = p->all.attr0 & 0xFF;
if (r5 >= 0x80)
r5 -= 0x100;
p->all.attr1 &= 0xFE00;
p->all.attr0 &= 0xFE00;
r0 = ((p->all.attr0 & 0xC000) >> 12) | ((p->all.attr1 & 0xC000) >> 14);
r7 = gUnk_08D6084C[r0][1];
ip = gUnk_08D6084C[r0][0];
#ifndef NONMATCHING
{
/* The issue here might be caused by wrongly marking sp00 as volatile;
* it's possible that we need to permutate ways of dereference of sp00
* at different locations (sp00.xx vs p->xx).
* p is very likely to be a real variable as the function itself is a
* modified (and manually optimized) version of sub_081569A0.
*/
register u32 _sp2C asm("r0") = sp2C;
register u32 _sp30 asm("r1") = sp30;
_sp2C = sp2C;
_sp30 = sp30;
asm("":::"r2");
if (_sp2C | _sp30) {
#else
if (sp2C | sp30) {
#endif
if (sp2C) {
p->all.attr1 ^= 0x2000;
r5 = sp14[0] - r7 - r5;
}
if (sp30) {
p->all.attr1 ^= 0x1000;
r6 = sp10[0] - ip - r6;
}
}
#ifndef NONMATCHING
}
#endif
if ((sp0C[0] + r5 + r7 >= 0 && sp0C[0] + r5 <= 160)
&& (sp08[0] + r6 + ip >= 0 && sp08[0] + r6 <= 240)) {
OamData *r1_;
p->all.attr0 += ((sp0C[0] + r5) & 0xFF);
p->all.attr1 += ((sp08[0] + r6) & 0x1FF);
p->all.attr0 |= sp20;
p->all.attr1 |= sp24;
p->all.attr2 |= sp28;
if (p->all.attr0 & 0x2000)
p->all.attr2 += p->all.attr2 & 0x3FF;
p->all.attr2 += (sl->unk0 - 0x6010000u) >> 5;
r1_ = sub_08156D84((sl->unk14 & 0x7C0) >> 6);
if (gUnk_03006CC4 == r1_) return;
DmaCopy16(3, &sp00, r1_, 6);
}
}
if ((sl->unk4 >> 28) == 1 && sl->unk8 & 0x4000000) {
const s32 *ip;
u16 r8, r3;
const u8 *r2_, *r2, *r4;
s32 r6;
u32 r1;
sl->unk8 &= 0xFBFFFFFF;
r1 = sb->unkC & 0xFFFFFF;
sp34 = sb->unkC >> 24;
ip = (const void *)(gUnk_03003674[6] + r1);
if (ip[0] >= 0) {
r8 = 0x20;
r2_ = (const void *)gUnk_03003674[4];
} else {
r8 = 0x40;
r2_ = (const void *)gUnk_03003674[5];
}
r3 = r8;
r2 = r2_ + ip++[0] * r8;
r6 = sl->unk0;
for (j = 1; j < sp34; ++j) {
r4 = r2_ + ip++[0] * r8;
if (r2 + r3 == r4)
r3 += r8;
else {
gUnk_03002EC0[gUnk_030039A4].unk0 = (u32)r2;
gUnk_03002EC0[gUnk_030039A4].unk4 = r6;
gUnk_03002EC0[gUnk_030039A4].unk8 = r3;
gUnk_030039A4 = (gUnk_030039A4 + 1) & 0x3F;
r6 += r3;
r3 = r8;
r2 = r4;
}
}
gUnk_03002EC0[gUnk_030039A4].unk0 = (u32)r2;
gUnk_03002EC0[gUnk_030039A4].unk4 = r6;
gUnk_03002EC0[gUnk_030039A4].unk8 = r3;
gUnk_030039A4 = (gUnk_030039A4 + 1) & 0x3F;
}
}
}
}
/* unused function */
void sub_081569A0(struct Sprite *sb, u16 *sp08, u8 sp0C) {
vs32 sp00[1], sp04[1];