From 9fd914a8a5f6cb89bfb0d741503e51af3abb5852 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 20 May 2022 15:36:47 +0300 Subject: [PATCH] Match sub_080AC7C4 --- asm/non_matching/gyorgTail/sub_080AC7C4.inc | 95 --------------------- src/projectile/gyorgTail.c | 35 +++++--- 2 files changed, 23 insertions(+), 107 deletions(-) delete mode 100644 asm/non_matching/gyorgTail/sub_080AC7C4.inc diff --git a/asm/non_matching/gyorgTail/sub_080AC7C4.inc b/asm/non_matching/gyorgTail/sub_080AC7C4.inc deleted file mode 100644 index 5ab1b5da..00000000 --- a/asm/non_matching/gyorgTail/sub_080AC7C4.inc +++ /dev/null @@ -1,95 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - mov r8, r0 - ldr r7, [r0, #0x54] - ldr r5, [r7, #0x54] - cmp r5, #0 - beq _080AC7E4 - ldr r0, [r4, #0x50] - adds r1, r5, #0 - bl CopyPosition - b _080AC7E6 -_080AC7E4: - ldr r5, [r4, #0x50] -_080AC7E6: - adds r0, r7, #0 - adds r0, #0x79 - ldrb r2, [r0] - lsls r2, r2, #8 - ldr r3, _080AC880 @ =gSineTable - mov sb, r3 - ldrb r1, [r7, #0x15] - lsls r0, r1, #1 - add r0, sb - movs r3, #0 - ldrsh r0, [r0, r3] - adds r6, r0, #0 - muls r6, r2, r6 - adds r1, #0x40 - lsls r1, r1, #1 - add r1, sb - movs r3, #0 - ldrsh r0, [r1, r3] - muls r0, r2, r0 - rsbs r3, r0, #0 - adds r0, r5, #0 - adds r1, r7, #0 - adds r2, r6, #0 - bl PositionRelative - mov r0, r8 - adds r0, #0x79 - ldrb r2, [r0] - lsls r2, r2, #8 - mov r0, r8 - ldrb r1, [r0, #0x15] - lsls r0, r1, #1 - add r0, sb - movs r3, #0 - ldrsh r0, [r0, r3] - adds r6, r0, #0 - muls r6, r2, r6 - adds r1, #0x40 - lsls r1, r1, #1 - add r1, sb - movs r3, #0 - ldrsh r0, [r1, r3] - muls r0, r2, r0 - rsbs r3, r0, #0 - adds r0, r7, #0 - mov r1, r8 - adds r2, r6, #0 - bl PositionRelative - adds r0, r4, #0 - adds r0, #0x79 - ldrb r2, [r0] - lsls r2, r2, #8 - ldrb r1, [r4, #0x15] - lsls r0, r1, #1 - add r0, sb - movs r3, #0 - ldrsh r0, [r0, r3] - adds r6, r0, #0 - muls r6, r2, r6 - adds r1, #0x40 - lsls r1, r1, #1 - add r1, sb - movs r3, #0 - ldrsh r0, [r1, r3] - muls r0, r2, r0 - rsbs r3, r0, #0 - mov r0, r8 - adds r1, r4, #0 - adds r2, r6, #0 - bl PositionRelative - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AC880: .4byte gSineTable - .syntax divided diff --git a/src/projectile/gyorgTail.c b/src/projectile/gyorgTail.c index ddd0fcb9..c921b830 100644 --- a/src/projectile/gyorgTail.c +++ b/src/projectile/gyorgTail.c @@ -218,14 +218,17 @@ void sub_080AC760(Entity* param_1) { } } -NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) { - // TODO regalloc +void sub_080AC7C4(Entity* this) { Entity* entity1; Entity* entity2; Entity* entity3; - s32 iVar1; - s32 iVar2; - s32 iVar3; + s32 tmp; + s32 tmp2; + s32 tmp3; + s32 tmp4; + s32 tmp5; + s32 tmp6; + s32 r6; entity1 = this->child; entity2 = entity1->child; @@ -235,14 +238,22 @@ NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity } else { entity3 = this->parent; } - PositionRelative(entity3, entity2, (entity2->field_0x78.HALF.HI << 8) * gSineTable[entity2->direction], - -((entity2->field_0x78.HALF.HI << 8) * gSineTable[entity2->direction + 0x40])); - PositionRelative(entity2, entity1, (entity1->field_0x78.HALF.HI << 8) * gSineTable[entity1->direction], - -((entity1->field_0x78.HALF.HI << 8) * gSineTable[entity1->direction + 0x40])); - PositionRelative(entity1, this, (this->field_0x78.HALF.HI << 8) * gSineTable[this->direction], - -((this->field_0x78.HALF.HI << 8) * gSineTable[this->direction + 0x40])); + tmp = entity2->field_0x78.HALF.HI << 8; + tmp2 = gSineTable[entity2->direction]; + r6 = tmp2 * tmp; + tmp2 = gSineTable[entity2->direction + 0x40] * tmp; + PositionRelative(entity3, entity2, r6, -tmp2); + tmp3 = entity1->field_0x78.HALF.HI << 8; + tmp4 = gSineTable[entity1->direction]; + r6 = tmp4 * tmp3; + tmp4 = gSineTable[entity1->direction + 0x40] * tmp3; + PositionRelative(entity2, entity1, r6, -tmp4); + tmp5 = this->field_0x78.HALF.HI << 8; + tmp6 = gSineTable[this->direction]; + r6 = tmp6 * tmp5; + tmp6 = gSineTable[this->direction + 0x40] * tmp5; + PositionRelative(entity1, this, r6, -tmp6); } -END_NONMATCH void sub_080AC884(Entity* this) { if (this->parent->field_0x70.HALF_U.HI != 0) {